diff --git a/package-lock.json b/package-lock.json
index cea1fbefe..a117ef911 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -36,6 +36,7 @@
"blob-util": "^2.0.2",
"buefy": "^0.9.29",
"bulma": "^1.0.0",
+ "cartocolor": "^5.0.2",
"color-string": "^1.9.1",
"colormap": "^2.3.1",
"comlink": "^4.4.2",
@@ -94,6 +95,10 @@
"sax-wasm": "^2.2.4",
"shallow-equal": "^1.2.1",
"shapefile": "^0.6.6",
+ "spatialite": "^0.1.0",
+ "spl.js": "^0.1.2",
+ "sql.js": "^1.13.0",
+ "sqlite3": "^5.1.7",
"the-new-css-reset": "^1.7.3",
"threads": "^1.7.0",
"three": "^0.127.0",
@@ -203,7 +208,6 @@
"resolved": "https://registry.npmjs.org/@arcgis/components-utils/-/components-utils-4.33.19.tgz",
"integrity": "sha512-2sCqezifODgQoSZY2C67NJWLrgvAtb4fKX4hBmrmgRoJBsOSlpDApsr9ZfEgk8gubIBrUGY+LuZkgd2uTJXSiA==",
"license": "SEE LICENSE IN LICENSE.md",
- "peer": true,
"dependencies": {
"tslib": "^2.8.1"
}
@@ -228,7 +232,6 @@
"resolved": "https://registry.npmjs.org/@arcgis/lumina/-/lumina-4.33.19.tgz",
"integrity": "sha512-voo6TH7WgO6djuJgfwoW5RWkClvw1JLs/TN+mjCDxdpKf+M8pbM88fqoPzFI41BBknSeYoeJGAi+r52fAiGHgw==",
"license": "SEE LICENSE IN LICENSE.md",
- "peer": true,
"dependencies": {
"@arcgis/components-utils": "4.33.19",
"@lit-labs/ssr": "^3.2.2",
@@ -578,7 +581,6 @@
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/template": "^7.27.2",
"@babel/types": "^7.28.4"
@@ -1846,6 +1848,7 @@
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
@@ -2093,6 +2096,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-9.1.14.tgz",
"integrity": "sha512-EEciz1/SL1bdf/lm+DRy9Arno81vLWc9frcz2w/ZFdIKxVfcJmAFtyKeo2BJdjR9aspNxpOW+RJdl3/tK/ICYw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@luma.gl/constants": "~9.1.9",
"@luma.gl/shadertools": "~9.1.9",
@@ -2190,6 +2194,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-9.1.14.tgz",
"integrity": "sha512-tXakSSvi5g+EvxSsnnjoRO8z3XxHxISTRzzIqcs3AZuWHnDptK28y9iD0Da21ILop1IYLaWE1QTUe6IAdp/Wag==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@loaders.gl/core": "^4.2.0",
"@loaders.gl/images": "^4.2.0",
@@ -2215,6 +2220,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-9.1.14.tgz",
"integrity": "sha512-uPm9Ye/XD8YAYNxT1G6HxyIOBxa2+MBdGLyqobQj3pCnkO/YtgY/fi/BjM+eVOBXX+keBrXEclEvB0Add5eS8Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@luma.gl/constants": "~9.1.9",
"@luma.gl/shadertools": "~9.1.9",
@@ -2231,6 +2237,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-9.1.14.tgz",
"integrity": "sha512-vk/vssJl9mxvPH04EyUFVa+gHedJYo55KrNjUiQWPBgtMyVefF/5M2X09UPXSnL44cMat7ZgX5wR9HMMxAwo+Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@loaders.gl/3d-tiles": "^4.2.0",
"@loaders.gl/gis": "^4.2.0",
@@ -2292,6 +2299,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-9.1.14.tgz",
"integrity": "sha512-cCClyZxznzXLPJnH2er7ZJAnXYuEHH/0hcDoc5Lp3SNByx3ASNrZcizIBOCxO7132LHFN4cSeyz0JVP8p56TDg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@loaders.gl/images": "^4.2.0",
"@loaders.gl/schema": "^4.2.0",
@@ -2337,6 +2345,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-9.1.14.tgz",
"integrity": "sha512-NVUw0yG4stJfrklWCGP9j8bNlf9YQc4PccMeNNIHNrU/Je6/Va6dJZg0RGtVkeaTY1Lk3A7wRzq8/M5Urfvuiw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@loaders.gl/gltf": "^4.2.0",
"@luma.gl/gltf": "~9.1.9",
@@ -2365,6 +2374,7 @@
"resolved": "https://registry.npmjs.org/@deck.gl/widgets/-/widgets-9.1.14.tgz",
"integrity": "sha512-hEyvvrqxEr7ujqTyTbdm5VTwY4oMYKNsLyXKjxWerHCIyfT971UYyV4cbILqvYf+L8spE146NFqwx0jj1bBqWw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"preact": "^10.17.0"
},
@@ -2874,7 +2884,6 @@
"resolved": "https://registry.npmjs.org/@esri/arcgis-html-sanitizer/-/arcgis-html-sanitizer-4.1.0.tgz",
"integrity": "sha512-einEveDJ/k1180NOp78PB/4Hje9eBy3dyOGLLtLn6bSkizpUfCwuYBIXOA7Y3F/k/BsTQXgKqUVwQ0eiscWMdA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"xss": "1.0.13"
},
@@ -2887,7 +2896,6 @@
"resolved": "https://registry.npmjs.org/@esri/calcite-components/-/calcite-components-3.2.1.tgz",
"integrity": "sha512-NRBW/bhT4sQM5RAZF7W8/VymaOLgIzaR6yTZFI270Ig4NiQ4DRexjdeo/SwDMBlswFtBw5iya+/h+fAur2+Hlg==",
"license": "SEE LICENSE.md",
- "peer": true,
"dependencies": {
"@arcgis/components-utils": "^4.33.0-next.121",
"@arcgis/lumina": "^4.33.0-next.121",
@@ -2911,7 +2919,6 @@
"resolved": "https://registry.npmjs.org/@esri/calcite-ui-icons/-/calcite-ui-icons-4.2.0.tgz",
"integrity": "sha512-GS41gUt1tgnqG+U1a6yDRiKOHmuLST2uyOI7+cJ83JtLJ7CGduH9K6RERabTE2vRYbudaebI8jZgKNSNOHdGzw==",
"license": "SEE LICENSE.md",
- "peer": true,
"bin": {
"spriter": "bin/spriter.js"
}
@@ -2967,7 +2974,8 @@
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@flowmap.gl/data": {
"version": "8.0.2",
@@ -3014,6 +3022,7 @@
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz",
"integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.7.2"
},
@@ -3067,6 +3076,13 @@
"vue": "~2"
}
},
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/@h5web/app": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@h5web/app/-/app-14.0.1.tgz",
@@ -3145,6 +3161,7 @@
"resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.17.12.tgz",
"integrity": "sha512-rjV/ZtCr69y+aWEOsAhBQzsxYyvZHUanYfo9eMXNp/dxTj3ZrRvK44DkIdSLV1xcPidq8p2YeU2oWP2czY+ZVA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.17.8",
"@types/debounce": "^1.2.1",
@@ -3207,17 +3224,6 @@
}
}
},
- "node_modules/@h5web/app/node_modules/@types/react": {
- "version": "19.1.12",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
- "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "csstype": "^3.0.2"
- }
- },
"node_modules/@h5web/app/node_modules/scheduler": {
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
@@ -3231,7 +3237,8 @@
"version": "0.172.0",
"resolved": "https://registry.npmjs.org/three/-/three-0.172.0.tgz",
"integrity": "sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@h5web/app/node_modules/zustand": {
"version": "5.0.3",
@@ -3321,8 +3328,7 @@
"version": "1.10.27",
"resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.27.tgz",
"integrity": "sha512-BUdv0cvs4H5ODuwft2Xp4eL8Vmi3LcihK42z0Ft/FbVJZoRioBsxH+LlsBdK4tAie7PqlKGy+1oyOncu1nQ6eA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@jest/expect-utils": {
"version": "29.7.0",
@@ -3385,7 +3391,6 @@
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -3407,7 +3412,6 @@
"integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
@@ -3449,7 +3453,6 @@
"resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.3.1.tgz",
"integrity": "sha512-JlF1PempxvzrGEpRFrF+Ki0MHzR3HA51SK8Zv0cFpW9p0bPW4k0FeCwrElCu371UEpXF7RcaE2wgYaE1az0XKg==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit-labs/ssr-client": "^1.1.7",
"@lit-labs/ssr-dom-shim": "^1.3.0",
@@ -3472,7 +3475,6 @@
"resolved": "https://registry.npmjs.org/@lit-labs/ssr-client/-/ssr-client-1.1.7.tgz",
"integrity": "sha512-VvqhY/iif3FHrlhkzEPsuX/7h/NqnfxLwVf0p8ghNIlKegRyRqgeaJevZ57s/u/LiFyKgqksRP5n+LmNvpxN+A==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit/reactive-element": "^2.0.4",
"lit": "^3.1.2",
@@ -3483,22 +3485,19 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz",
"integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==",
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/@lit-labs/ssr/node_modules/@types/node": {
"version": "16.18.126",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz",
"integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@lit/context": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/@lit/context/-/context-1.1.6.tgz",
"integrity": "sha512-M26qDE6UkQbZA2mQ3RjJ3Gzd8TxP+/0obMgE5HfkfLhEEyYE3Bui4A5XHiGPjy0MUGAyxB3QgVuw2ciS0kHn6A==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit/reactive-element": "^1.6.2 || ^2.1.0"
}
@@ -3508,7 +3507,6 @@
"resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.1.tgz",
"integrity": "sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit-labs/ssr-dom-shim": "^1.4.0"
}
@@ -3579,6 +3577,7 @@
"resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.3.4.tgz",
"integrity": "sha512-cG0C5fMZ1jyW6WCsf4LoHGvaIAJCEVA/ioqKoYRwoSfXkOf+17KupK1OUQyUCw5XoRn+oWA1FulJQOYlXnb9Gw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@loaders.gl/loader-utils": "4.3.4",
"@loaders.gl/schema": "4.3.4",
@@ -3855,6 +3854,7 @@
"resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.1.9.tgz",
"integrity": "sha512-1i9N7+I/UbFjx3axSMlc3/NufA+C2iBv/7mw51gRE/ypQPgvFmY/QqXBVZRe+nthF+OhlUMhO19TBndzYFTWhA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@math.gl/types": "^4.1.0",
"@probe.gl/env": "^4.0.8",
@@ -3868,6 +3868,7 @@
"resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.1.9.tgz",
"integrity": "sha512-n1GLK1sUMFkWxdb+aZYn6ZBFltFEMi7X+6ZPxn2pBsNT6oeF4AyvH5AyqhOpvHvUnCLDt3Zsf1UIfx3MI//YSw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@math.gl/core": "^4.1.0",
"@math.gl/types": "^4.1.0",
@@ -3900,6 +3901,7 @@
"resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-9.1.9.tgz",
"integrity": "sha512-Uqp2xfgIEunRMLXTeCJ4uEMlWcUGcYMZGJ8GAOrAeDzn4bMKVRKmZDC71vkuTctnaodM3UdrI9W6s1sJlrXsxw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@math.gl/core": "^4.1.0",
"@math.gl/types": "^4.1.0",
@@ -3914,6 +3916,7 @@
"resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-9.1.9.tgz",
"integrity": "sha512-jecHjhNSWkXH0v62rM6G5fIIkOmsrND27099iKgdutFvHIvd4QS4UzGWEEa9AEPlP0rTLqXkA6y6YL7f42ZkVg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@luma.gl/constants": "9.1.9",
"@math.gl/types": "^4.1.0",
@@ -4424,6 +4427,45 @@
"node": ">= 8"
}
},
+ "node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/@npmcli/fs/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@octokit/auth-token": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
@@ -4438,6 +4480,7 @@
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz",
"integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
@@ -4583,15 +4626,13 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz",
"integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@parse5/tools": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@parse5/tools/-/tools-0.3.0.tgz",
"integrity": "sha512-zxRyTHkqb7WQMV8kTNBKWb1BeOFUKXBXTBWuxg9H9hfvQB3IwP6Iw2U75Ia5eyRxPNltmY7E8YAlz6zWwUnjKg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"parse5": "^7.0.0"
}
@@ -4766,7 +4807,6 @@
"resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.5.2.tgz",
"integrity": "sha512-fWwImY/UH4bb2534DVSaX+Azs2yKg8slkMBHOyGeU2kKx7Xmxp6Lee0jP8p6B3d7c1gFUPB2Z976dTUtX81pQA==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@webcomponents/shadycss": "^1.9.1"
}
@@ -9747,7 +9787,6 @@
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@@ -9759,7 +9798,6 @@
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
@@ -10042,6 +10080,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.66.tgz",
"integrity": "sha512-KPilYP4+25N2ki7vrB4adSR2ucAj95xJcGfKC09bsxcHT+QtB//K7i1FenPnbkLA0Xt9pRi1/RXC1wxFvL9Wtw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "^0.16",
@@ -10091,8 +10130,7 @@
"version": "1.15.8",
"resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz",
"integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@types/source-list-map": {
"version": "0.1.6",
@@ -10318,6 +10356,7 @@
"integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
"dev": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "4.33.0",
"@typescript-eslint/types": "4.33.0",
@@ -10436,7 +10475,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.7.12.tgz",
"integrity": "sha512-y/wWMADMmcXmY9sJ/TF+xh+HP+nE4Jc61SpW/D98c5zrLnf4cFlqTJEl8YwLDv80HtG78ieyzMHhvw9Wv96sdQ==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10449,7 +10487,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.7.12.tgz",
"integrity": "sha512-9zERd1yc2FUhP3/NLdSITVg1QiRE9hiLbyIBRBEmkkuiU/zTRAAlDndFLeZKGDkIEtbLoz2Dcg5DoNNFnLA6qg==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10467,7 +10504,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.7.12.tgz",
"integrity": "sha512-GuHHRxaQKW7p5RIZxAqGEhYCSqF4CLpxXB/IPY4IW+4G/SzoIe8EqyneNnUSoKMoAFkBp0+A6tlJoWR9uvLTnQ==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10481,7 +10517,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.7.12.tgz",
"integrity": "sha512-DNnFkhlShRLsZ6LJZq9VhtG+pexObp9sNkk22Lx3g9PyrpuEllTJwGw/jEUE9jyI8dsgkCHRVZ+krxE026NFsg==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10495,7 +10530,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.7.12.tgz",
"integrity": "sha512-ks1NfM6o4XJcECETaXBrNCGtCL6nWj1yfLOAHycQ6h+P8dd1UO63ZuLEVl+Ii+kymS2xHmUgJx9EoNrPIqxdlw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10515,7 +10549,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.7.12.tgz",
"integrity": "sha512-8oLr69l22cAw2K+FNd3sCdhw+yWhU5Z1tlp8ZGUTTgyClvpe9pDIdZfBX4pQXnSx6QPNc3CrOaVZkx7n5WQqJg==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10530,7 +10563,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.7.12.tgz",
"integrity": "sha512-1oc21Owe9nI/t41TsdVan4b9pa8AjZZl/3t9o6X9XL/E4dHpFcj3lezlHEg92TBNzHm+6DcVPo/kZP29iahWEg==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@polymer/polymer": "^3.0.0",
"@vaadin/component-base": "~24.7.12",
@@ -10545,7 +10577,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.7.12.tgz",
"integrity": "sha512-AjPoLJBUuOJfmnpJpWYDoTDpH3+cXX+YJso7Acm0Ec1PeFAc9PvwGZBLlQK64juvTzejMLVFWYaU4bhn2rXVLA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"lit": "^3.0.0"
}
@@ -10555,7 +10586,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.7.12.tgz",
"integrity": "sha512-Zymu/9pAg9+FtWLBVpI1Hiev3SCc2mVLCqq7x17pSVD1Kp3Pcd/HIU3v1MivihUx1z7t9Kt0cNk84T9NDADjDw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"@polymer/polymer": "^3.0.0",
@@ -10573,15 +10603,13 @@
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@vaadin/vaadin-development-mode-detector/-/vaadin-development-mode-detector-2.0.7.tgz",
"integrity": "sha512-9FhVhr0ynSR3X2ao+vaIEttcNU5XfzCbxtmYOV8uIRnUCtNgbvMOIcyGBvntsX9I5kvIP2dV3cFAOG9SILJzEA==",
- "license": "Apache-2.0",
- "peer": true
+ "license": "Apache-2.0"
},
"node_modules/@vaadin/vaadin-lumo-styles": {
"version": "24.7.12",
"resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.7.12.tgz",
"integrity": "sha512-KMpOEb5uB/JVBGF94pQb5mIbtb6/6tZ2QzfZ1II4/JpKsp7pgpySy5tZFoZrb8M8miOj01sAkSaH99N0DST8dA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@polymer/polymer": "^3.0.0",
"@vaadin/component-base": "~24.7.12",
@@ -10594,7 +10622,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.7.12.tgz",
"integrity": "sha512-WXXA2I+tOt1yxHYn57Boc2fdyLD7kIj5jX8GQMVkBW9nHN9oRfKO8beurmE2Am6Tz/HEMBtybx9ysY1k39TwBQ==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@polymer/polymer": "^3.0.0",
"@vaadin/component-base": "~24.7.12",
@@ -10606,7 +10633,6 @@
"resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.7.12.tgz",
"integrity": "sha512-BkpnhYj3olUzNlgIhu518//tHJsoCBWabUmfdQCN8MTdT2AjkHDZNjoRy+dL1sbJyhl9EFCACXP+f8q1Qxawsw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@open-wc/dedupe-mixin": "^1.3.0",
"lit": "^3.0.0"
@@ -10618,7 +10644,6 @@
"integrity": "sha512-8r4TNknD7OJQADe3VygeofFR7UNAXZ2/jjBFP5dgI8+2uMfnuGYgbuHivasKr9WSQ64sPej6m8rDoM1uSllXjQ==",
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@vaadin/vaadin-development-mode-detector": "^2.0.0"
},
@@ -10665,6 +10690,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -10938,6 +10964,7 @@
"integrity": "sha512-h5mU9DZ/6u3LCB9xomJtorNG6awBNnk9VuCioGsp6UtFiM8amvS5FcsaC3dabdL9zO0z+Gq9vIEMb/5u9K6jGQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@volar/language-core": "2.4.23",
"vscode-languageserver-protocol": "^3.17.5",
@@ -11023,7 +11050,6 @@
"integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
@@ -11034,24 +11060,21 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
@@ -11059,7 +11082,6 @@
"integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -11071,8 +11093,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
@@ -11080,7 +11101,6 @@
"integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -11094,7 +11114,6 @@
"integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
@@ -11105,7 +11124,6 @@
"integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
@@ -11115,8 +11133,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
@@ -11124,7 +11141,6 @@
"integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -11142,7 +11158,6 @@
"integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
@@ -11157,7 +11172,6 @@
"integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -11171,7 +11185,6 @@
"integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -11187,7 +11200,6 @@
"integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
@@ -11197,24 +11209,21 @@
"version": "1.11.2",
"resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.2.tgz",
"integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==",
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true,
- "license": "Apache-2.0",
- "peer": true
+ "license": "Apache-2.0"
},
"node_modules/@yarnpkg/lockfile": {
"version": "1.1.0",
@@ -11228,7 +11237,6 @@
"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.73.tgz",
"integrity": "sha512-I2UP8/rdQE5hTtVVL08B7P8XuwXiKuuMUPjNuFOVL/9b+8IsExR9S5jz2H58u0rJjU4M1BikLgqEMG8gZJZVBw==",
"license": "BSD-3-Clause",
- "peer": true,
"engines": {
"bun": ">=0.7.0",
"deno": ">=1.0.0",
@@ -11243,6 +11251,13 @@
"dev": true,
"license": "BSD-3-Clause"
},
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -11266,6 +11281,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -11315,7 +11331,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"debug": "4"
@@ -11324,6 +11340,33 @@
"node": ">= 6.0.0"
}
},
+ "node_modules/agentkeepalive": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz",
+ "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -11347,7 +11390,6 @@
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ajv": "^8.0.0"
},
@@ -11366,7 +11408,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -11383,8 +11424,7 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ansi-colors": {
"version": "4.1.3",
@@ -11463,6 +11503,43 @@
"node": ">= 8"
}
},
+ "node_modules/aproba": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz",
+ "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -11894,7 +11971,6 @@
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"license": "MIT",
- "optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
}
@@ -11931,7 +12007,7 @@
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -11987,6 +12063,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001737",
"electron-to-chromium": "^1.5.211",
@@ -12067,6 +12144,66 @@
"integrity": "sha512-Ffb6YGXDiZYX3cqvSbHWqQ8+LkX6tVoTcZuVB3lm93sbAVXlO0D6QlOTMnV6g18gILpAXqkG2z9hf9z4hCjz2g==",
"license": "MIT"
},
+ "node_modules/cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cacache/node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "license": "ISC",
+ "optional": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
@@ -12262,8 +12399,7 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "license": "ISC",
- "optional": true
+ "license": "ISC"
},
"node_modules/chrome-trace-event": {
"version": "1.0.4",
@@ -12271,7 +12407,6 @@
"integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0"
}
@@ -12304,6 +12439,16 @@
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
"license": "MIT"
},
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -12344,7 +12489,6 @@
"resolved": "https://registry.npmjs.org/color/-/color-5.0.0.tgz",
"integrity": "sha512-16BlyiuyLq3MLxpRWyOTiWsO3ii/eLQLJUQXBSNcxMBBSnyt1ee9YUdaozQp03ifwm5woztEZGDbk9RGVuCsdw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"color-convert": "^3.0.1",
"color-string": "^2.0.0"
@@ -12463,12 +12607,21 @@
"simple-swizzle": "^0.2.2"
}
},
- "node_modules/color/node_modules/color-convert": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz",
- "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==",
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.0.tgz",
+ "integrity": "sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"color-name": "^2.0.0"
},
@@ -12481,7 +12634,6 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz",
"integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12.20"
}
@@ -12491,7 +12643,6 @@
"resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.0.tgz",
"integrity": "sha512-gNVoDzpaSwvftp6Y8nqk97FtZoXP9Yj7KGYB8yIXuv0JcfqbYihTrd1OU5iZW9btfXde4YAOCRySBHT7O910MA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"color-name": "^2.0.0"
},
@@ -12575,7 +12726,6 @@
"resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.6.tgz",
"integrity": "sha512-Q7dLompI6lUwd7LWyIcP66r4WcS9u7AL2h8HaeipiRfCRPLMWqRx8fYsjb4OHi6UQFifO7XtNC2IlEJ1ozIFxw==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@floating-ui/utils": "^0.2.5"
}
@@ -12584,7 +12734,7 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/concat-stream": {
@@ -12632,6 +12782,13 @@
"node": ">=0.8"
}
},
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/constantinople": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
@@ -13029,8 +13186,7 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/core-assert": {
"version": "0.2.1",
@@ -13167,8 +13323,7 @@
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
"integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/cssom": {
"version": "0.5.0",
@@ -13501,6 +13656,7 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
+ "peer": true,
"engines": {
"node": ">=12"
}
@@ -13587,7 +13743,6 @@
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
"integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 12"
}
@@ -13705,8 +13860,7 @@
"version": "1.11.18",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz",
"integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/dbf": {
"version": "0.1.4",
@@ -13828,7 +13982,6 @@
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"license": "MIT",
- "optional": true,
"dependencies": {
"mimic-response": "^3.1.0"
},
@@ -13864,7 +14017,6 @@
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"license": "MIT",
- "optional": true,
"engines": {
"node": ">=4.0.0"
}
@@ -13959,6 +14111,13 @@
"node": ">=0.4.0"
}
},
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/density-clustering": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/density-clustering/-/density-clustering-1.3.0.tgz",
@@ -13992,7 +14151,6 @@
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
"license": "Apache-2.0",
- "optional": true,
"engines": {
"node": ">=8"
}
@@ -14274,6 +14432,29 @@
"node": ">= 4"
}
},
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/end-of-stream": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
@@ -14288,7 +14469,6 @@
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
"integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
"license": "MIT",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -14320,6 +14500,16 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/epsg-index": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/epsg-index/-/epsg-index-1.3.0.tgz",
@@ -14329,6 +14519,13 @@
"node": ">=8"
}
},
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -14466,8 +14663,7 @@
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
@@ -14677,6 +14873,7 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3",
@@ -14851,6 +15048,7 @@
"integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"eslint-utils": "^2.1.0",
"natural-compare": "^1.4.0",
@@ -15195,7 +15393,6 @@
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
"license": "(MIT OR WTFPL)",
- "optional": true,
"engines": {
"node": ">=6"
}
@@ -15279,8 +15476,7 @@
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"dev": true,
- "license": "Apache-2.0",
- "peer": true
+ "license": "Apache-2.0"
},
"node_modules/fast-glob": {
"version": "3.3.3",
@@ -15388,7 +15584,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"node-domexception": "^1.0.0",
"web-streams-polyfill": "^3.0.3"
@@ -15472,8 +15667,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/filesize": {
"version": "10.1.6",
@@ -15559,7 +15753,6 @@
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
"integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tabbable": "^6.2.0"
}
@@ -15648,7 +15841,6 @@
"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fetch-blob": "^3.1.2"
},
@@ -15689,8 +15881,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/fs-extra": {
"version": "10.1.0",
@@ -15707,11 +15898,23 @@
"node": ">=12"
}
},
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC"
},
"node_modules/fsevents": {
@@ -15774,13 +15977,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -16086,8 +16309,7 @@
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/gl-mat4": {
"version": "1.2.0",
@@ -16146,7 +16368,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -16181,8 +16403,7 @@
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true,
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/global-prefix": {
"version": "4.0.0",
@@ -16732,6 +16953,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -16790,6 +17018,13 @@
"node": ">=12"
}
},
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "license": "BSD-2-Clause",
+ "optional": true
+ },
"node_modules/http-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -16809,7 +17044,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"agent-base": "6",
@@ -16819,6 +17054,16 @@
"node": ">= 6"
}
},
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -16916,7 +17161,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
@@ -16926,18 +17171,25 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
@@ -16954,7 +17206,6 @@
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "devOptional": true,
"license": "ISC"
},
"node_modules/inquirer": {
@@ -16987,7 +17238,6 @@
"resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.10.27.tgz",
"integrity": "sha512-y/8RcCftGAF24gSp76X2JS3XpHiUvDQyhF8i7ujemBz77hwiHDuJzftHx7thY8cxGogwGiPJ+o97kWB6eAXnsA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@interactjs/types": "1.10.27"
}
@@ -17022,6 +17272,16 @@
"integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==",
"license": "MIT"
},
+ "node_modules/ip-address": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
+ "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/is-arguments": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
@@ -17348,6 +17608,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -17642,7 +17909,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC"
},
"node_modules/iterator.prototype": {
@@ -17782,7 +18049,6 @@
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
@@ -17798,7 +18064,6 @@
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -18015,7 +18280,6 @@
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"json5": "lib/cli.js"
},
@@ -18253,7 +18517,6 @@
"resolved": "https://registry.npmjs.org/lit/-/lit-3.3.1.tgz",
"integrity": "sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit/reactive-element": "^2.1.0",
"lit-element": "^4.2.0",
@@ -18265,7 +18528,6 @@
"resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.1.tgz",
"integrity": "sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@lit-labs/ssr-dom-shim": "^1.4.0",
"@lit/reactive-element": "^2.1.0",
@@ -18277,7 +18539,6 @@
"resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.1.tgz",
"integrity": "sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==",
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"@types/trusted-types": "^2.0.2"
}
@@ -18324,7 +18585,6 @@
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.11.5"
}
@@ -18383,8 +18643,7 @@
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
@@ -18462,7 +18721,6 @@
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
"integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -18480,6 +18738,79 @@
"integrity": "sha512-VKlnoJRFrB8SdJhlVKvW5vI1gGwcZ+mvChEXcSX6r2xDNc/Q2FD9esfBmGCuPZdrJ1feO+YcVFd2PTk0c137Gw==",
"license": "BSD-2-Clause"
},
+ "node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/map-limit": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz",
@@ -18522,7 +18853,6 @@
"resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz",
"integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==",
"license": "SEE LICENSE IN LICENSE.txt",
- "peer": true,
"dependencies": {
"@mapbox/geojson-rewind": "^0.5.2",
"@mapbox/geojson-types": "^1.0.2",
@@ -18555,50 +18885,43 @@
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz",
"integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==",
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/mapbox-gl/node_modules/@mapbox/unitbezier": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
"integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==",
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/mapbox-gl/node_modules/geojson-vt": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
"integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==",
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/mapbox-gl/node_modules/kdbush": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz",
"integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==",
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/mapbox-gl/node_modules/potpack": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
"integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==",
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/mapbox-gl/node_modules/quickselect": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==",
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/mapbox-gl/node_modules/supercluster": {
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz",
"integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==",
"license": "ISC",
- "peer": true,
"dependencies": {
"kdbush": "^3.0.0"
}
@@ -18607,8 +18930,7 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
"integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==",
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/maplibre-gl": {
"version": "5.7.1",
@@ -18709,7 +19031,6 @@
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
"integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
"license": "MIT",
- "peer": true,
"bin": {
"marked": "bin/marked.js"
},
@@ -19000,8 +19321,7 @@
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
@@ -19068,7 +19388,6 @@
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"license": "MIT",
- "optional": true,
"engines": {
"node": ">=10"
},
@@ -19090,7 +19409,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -19123,18 +19442,136 @@
"node": ">= 6"
}
},
- "node_modules/mjolnir.js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.0.0.tgz",
- "integrity": "sha512-siX3YCG7N2HnmN1xMH3cK4JkUZJhbkhRFJL+G5N1vH0mh1t5088rJknIoqDFWDIU6NPGvRRgLnYW3ZHjSMEBLA==",
- "license": "MIT"
+ "node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
"license": "MIT",
- "optional": true
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "license": "ISC"
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "license": "ISC"
+ },
+ "node_modules/mjolnir.js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.0.0.tgz",
+ "integrity": "sha512-siX3YCG7N2HnmN1xMH3cK4JkUZJhbkhRFJL+G5N1vH0mh1t5088rJknIoqDFWDIU6NPGvRRgLnYW3ZHjSMEBLA==",
+ "license": "MIT"
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "license": "MIT"
},
"node_modules/modify-values": {
"version": "1.0.1",
@@ -19247,8 +19684,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/native-promise-only": {
"version": "0.8.1",
@@ -19308,6 +19744,16 @@
"ms": "^2.1.1"
}
},
+ "node_modules/negotiator": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -19335,7 +19781,6 @@
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz",
"integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==",
"license": "MIT",
- "optional": true,
"dependencies": {
"semver": "^7.3.5"
},
@@ -19348,7 +19793,6 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
- "optional": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -19356,6 +19800,12 @@
"node": ">=10"
}
},
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "license": "MIT"
+ },
"node_modules/node-domexception": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -19372,7 +19822,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.5.0"
}
@@ -19382,7 +19831,6 @@
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"data-uri-to-buffer": "^4.0.0",
"fetch-blob": "^3.1.4",
@@ -19396,6 +19844,44 @@
"url": "https://opencollective.com/node-fetch"
}
},
+ "node_modules/node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/node-releases": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.20.tgz",
@@ -19403,6 +19889,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/normalize-package-data": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
@@ -19448,6 +19950,23 @@
"integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==",
"license": "MIT"
},
+ "node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
"node_modules/nprogress": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
@@ -19736,6 +20255,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -19811,7 +20346,6 @@
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
"integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"entities": "^6.0.0"
},
@@ -19824,7 +20358,6 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -19932,7 +20465,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -20445,7 +20978,6 @@
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
"integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
"license": "MIT",
- "optional": true,
"dependencies": {
"detect-libc": "^2.0.0",
"expand-template": "^2.0.3",
@@ -20483,6 +21015,7 @@
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"bin": {
"prettier": "bin-prettier.js"
},
@@ -20499,7 +21032,6 @@
"integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-diff": "^1.1.2"
},
@@ -20594,6 +21126,27 @@
"asap": "~2.0.3"
}
},
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -20777,7 +21330,6 @@
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
"integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
"license": "MIT",
- "optional": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -20895,7 +21447,6 @@
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
@@ -20920,7 +21471,6 @@
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "optional": true,
"dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
@@ -20936,7 +21486,6 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"license": "MIT",
- "optional": true,
"engines": {
"node": ">=0.10.0"
}
@@ -20946,6 +21495,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -20958,6 +21508,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@@ -20991,7 +21542,8 @@
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/react-keyed-flatten-children": {
"version": "5.0.0",
@@ -21760,6 +22312,16 @@
"node": ">=8"
}
},
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/reusify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
@@ -21782,7 +22344,7 @@
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
@@ -21806,6 +22368,7 @@
"integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -21989,6 +22552,7 @@
"integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -22044,7 +22608,6 @@
"integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
@@ -22083,7 +22646,6 @@
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
@@ -22096,8 +22658,7 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/section-matter": {
"version": "1.0.0",
@@ -22135,11 +22696,17 @@
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"randombytes": "^2.1.0"
}
},
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+ "license": "ISC",
+ "optional": true
+ },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -22359,8 +22926,7 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/simple-get": {
"version": "4.0.1",
@@ -22381,7 +22947,6 @@
}
],
"license": "MIT",
- "optional": true,
"dependencies": {
"decompress-response": "^6.0.0",
"once": "^1.3.1",
@@ -22443,18 +23008,58 @@
"integrity": "sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==",
"license": "BSD-3-Clause"
},
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
"node_modules/snappyjs": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/snappyjs/-/snappyjs-0.6.1.tgz",
"integrity": "sha512-YIK6I2lsH072UE0aOFxxY1dPDCS43I5ktqHpeAsuLNYWkE5pGxRGWfDM4/vSUfNzXjC1Ivzt3qx31PCLmc9yqg==",
"license": "MIT"
},
+ "node_modules/socks": {
+ "version": "2.8.7",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
+ "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ip-address": "^10.0.1",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/sortablejs": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.6.tgz",
"integrity": "sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/source-map": {
"version": "0.6.1",
@@ -22480,12 +23085,22 @@
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
+ "node_modules/spatialite": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/spatialite/-/spatialite-0.1.0.tgz",
+ "integrity": "sha512-msiD3jS4q2Hdal3LygSAHnPWeudZVkd/0aQY0Psj26D3dKsUp9/ArduS4JbXBj5Qo7LtlJrZfvFQKHhIhxZ65w==",
+ "dependencies": {
+ "sqlite3": "*"
+ },
+ "engines": {
+ "node": ">= 0.6.13"
+ }
+ },
"node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -22522,6 +23137,15 @@
"dev": true,
"license": "CC0-1.0"
},
+ "node_modules/spl.js": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/spl.js/-/spl.js-0.1.2.tgz",
+ "integrity": "sha512-/QDSARmyfEAJSkCH89e3J3xlUoW97r5O/eL4n6GD+lbrOY/qoB6keF/UeZ3Y2Ck0aPmwhp8u7apczlUVi1yOig==",
+ "license": "GPLv3",
+ "dependencies": {
+ "pako": "^2.1.0"
+ }
+ },
"node_modules/splaytree": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.2.tgz",
@@ -22577,6 +23201,49 @@
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"license": "BSD-3-Clause"
},
+ "node_modules/sql.js": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.13.0.tgz",
+ "integrity": "sha512-RJbVP1HRDlUUXahJ7VMTcu9Rm1Nzw+EBpoPr94vnbD4LwR715F3CcxE2G2k45PewcaZ57pjetYa+LoSJLAASgA==",
+ "license": "MIT"
+ },
+ "node_modules/sqlite3": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz",
+ "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "bindings": "^1.5.0",
+ "node-addon-api": "^7.0.0",
+ "prebuild-install": "^7.1.1",
+ "tar": "^6.1.11"
+ },
+ "optionalDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependenciesMeta": {
+ "node-gyp": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/stack-trace": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
@@ -23181,7 +23848,6 @@
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz",
"integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
},
@@ -23190,12 +23856,28 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/tar": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/tar-fs": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz",
"integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
"license": "MIT",
- "optional": true,
"dependencies": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
@@ -23208,7 +23890,6 @@
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"license": "MIT",
- "optional": true,
"dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
@@ -23225,7 +23906,6 @@
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"license": "MIT",
- "optional": true,
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
@@ -23251,7 +23931,6 @@
}
],
"license": "MIT",
- "optional": true,
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
@@ -23262,7 +23941,6 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
- "optional": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -23272,13 +23950,36 @@
"node": ">= 6"
}
},
+ "node_modules/tar/node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "license": "ISC"
+ },
"node_modules/terser": {
"version": "5.44.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz",
"integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.15.0",
@@ -23298,7 +23999,6 @@
"integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
@@ -23334,7 +24034,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -23347,8 +24046,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/text-encoding": {
"version": "0.6.4",
@@ -23473,7 +24171,6 @@
"resolved": "https://registry.npmjs.org/timezone-groups/-/timezone-groups-0.10.4.tgz",
"integrity": "sha512-AnkJYrbb7uPkDCEqGeVJiawZNiwVlSkkeX4jZg1gTEguClhyX+/Ezn07KB6DT29tG3UN418ldmS/W6KqGOTDjg==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18.12.0"
}
@@ -23541,6 +24238,7 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -23748,7 +24446,6 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"license": "Apache-2.0",
- "optional": true,
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -23786,7 +24483,6 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
"license": "(MIT OR CC0-1.0)",
- "peer": true,
"engines": {
"node": ">=16"
},
@@ -23902,6 +24598,7 @@
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -24005,6 +24702,26 @@
"integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==",
"license": "MIT"
},
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
"node_modules/universal-user-agent": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
@@ -24224,6 +24941,7 @@
"resolved": "https://registry.npmjs.org/vega/-/vega-5.33.0.tgz",
"integrity": "sha512-jNAGa7TxLojOpMMMrKMXXBos4K6AaLJbCgGDOw1YEkLRjUkh12pcf65J2lMSdEHjcEK47XXjKiOUVZ8L+MniBA==",
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"vega-crossfilter": "~4.1.3",
"vega-dataflow": "~5.7.7",
@@ -24486,6 +25204,7 @@
"resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.23.0.tgz",
"integrity": "sha512-l4J6+AWE3DIjvovEoHl2LdtCUkfm4zs8Xxx7INwZEAv+XVb6kR6vIN1gt3t2gN2gs/y4DYTs/RPoTeYAuEg6mA==",
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"json-stringify-pretty-compact": "~4.0.0",
"tslib": "~2.8.1",
@@ -24949,6 +25668,7 @@
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -25042,6 +25762,7 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -25167,6 +25888,7 @@
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
"deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@vue/compiler-sfc": "2.7.16",
"csstype": "^3.1.0"
@@ -25334,7 +26056,6 @@
"integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -25354,7 +26075,6 @@
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
"integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 8"
}
@@ -25384,7 +26104,6 @@
"integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -25434,7 +26153,6 @@
"integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.13.0"
}
@@ -25466,7 +26184,6 @@
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.13.0"
},
@@ -25540,7 +26257,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -25641,6 +26358,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
"node_modules/with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
@@ -25778,7 +26505,6 @@
"resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz",
"integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==",
"license": "MIT",
- "peer": true,
"dependencies": {
"commander": "^2.20.3",
"cssfilter": "0.0.10"
@@ -25794,8 +26520,7 @@
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/xtend": {
"version": "4.0.2",
diff --git a/src/dash-panels/_allPanels.ts b/src/dash-panels/_allPanels.ts
index 74391de72..1e1eb3a0c 100644
--- a/src/dash-panels/_allPanels.ts
+++ b/src/dash-panels/_allPanels.ts
@@ -29,6 +29,7 @@ export const panelLookup: { [key: string]: AsyncComponent } = {
// full-screen map visualizations:
aequilibrae: defineAsyncComponent(() => import('./aequilibrae.vue')),
+ polaris: defineAsyncComponent(() => import('./polaris.vue')),
carriers: defineAsyncComponent(() => import('./carriers.vue')),
flowmap: defineAsyncComponent(() => import('./flowmap.vue')),
links: defineAsyncComponent(() => import('./links.vue')),
diff --git a/src/dash-panels/polaris.vue b/src/dash-panels/polaris.vue
new file mode 100644
index 000000000..d5fe1a9ee
--- /dev/null
+++ b/src/dash-panels/polaris.vue
@@ -0,0 +1,49 @@
+
+polaris-reader.polaris-panel(
+ :root="fileSystemConfig.slug"
+ :subfolder="subfolder"
+ :config="config"
+ :thumbnail="false"
+ @isLoaded="isLoaded"
+ @error="$emit('error', $event)"
+)
+
+
+
+
+
+
diff --git a/src/plugins/pluginRegistry.ts b/src/plugins/pluginRegistry.ts
index 2279eb6f9..9c94eeae0 100644
--- a/src/plugins/pluginRegistry.ts
+++ b/src/plugins/pluginRegistry.ts
@@ -147,6 +147,11 @@ const plugins = [
kebabName: "aeq-reader",
filePatterns: ['**/aeqviz-*.y?(a)ml'],
component: defineAsyncComponent(() => import('./aequilibrae/AequilibraEReader.vue')),
+ },
+ {
+ kebabName: "polaris-reader",
+ filePatterns: ['**/polaris.y?(a)ml'],
+ component: defineAsyncComponent(() => import('./polaris/PolarisReader.vue')),
}
]
diff --git a/src/plugins/polaris/PolarisFileSystem.ts b/src/plugins/polaris/PolarisFileSystem.ts
new file mode 100644
index 000000000..b5c890c73
--- /dev/null
+++ b/src/plugins/polaris/PolarisFileSystem.ts
@@ -0,0 +1,81 @@
+/**
+ * POLARIS File System Handler
+ *
+ * Extends HTTPFileSystem to handle POLARIS project structures
+ * and SQLite database files. Provides methods to detect
+ * POLARIS projects and locate database files.
+ */
+
+import HTTPFileSystem from '../../js/HTTPFileSystem'
+import { FileSystemConfig, DirectoryEntry } from '@/Globals'
+
+/**
+ * Interface representing the structure of a POLARIS project
+ * with its typical database components
+ */
+export interface PolarisProject {
+ /** Supply database buffer */
+ supplyDb?: ArrayBuffer
+ /** Demand database buffer */
+ demandDb?: ArrayBuffer
+ /** Result database buffer */
+ resultDb?: ArrayBuffer
+}
+
+/**
+ * File system handler specifically designed for POLARIS projects
+ * Provides detection and database listing capabilities
+ */
+export default class PolarisFileSystem extends HTTPFileSystem {
+ constructor(project: FileSystemConfig, store?: any) {
+ super(project, store)
+ }
+
+ /**
+ * Detects if a folder contains a POLARIS project
+ * by looking for polaris.yaml configuration file
+ *
+ * @param subfolder - The subfolder path to check
+ * @returns Promise - True if POLARIS project is detected
+ */
+ public async isPolarisProject(subfolder: string): Promise {
+ try {
+ const { files } = await this.getDirectory(subfolder)
+
+ // Look for polaris.yaml configuration file
+ const hasPolarisConfig = files.some(
+ f => f.toLowerCase() === 'polaris.yaml' || f.toLowerCase() === 'polaris.yml'
+ )
+
+ return hasPolarisConfig
+ } catch (error) {
+ return false
+ }
+ }
+
+ /**
+ * Lists all SQLite database files in a POLARIS project folder
+ *
+ * @param subfolder - The subfolder path to search
+ * @returns Promise - Array of SQLite database filenames
+ */
+ public async listPolarisDatabases(subfolder: string): Promise {
+ const { files } = await this.getDirectory(subfolder)
+ return files.filter(f => f.endsWith('.sqlite') || f.endsWith('.db'))
+ }
+
+ /**
+ * Loads a POLARIS database file as an ArrayBuffer
+ *
+ * @param filepath - Path to the database file
+ * @returns Promise - Database as ArrayBuffer, or null if failed
+ */
+ public async loadPolarisDatabase(filepath: string): Promise {
+ try {
+ const blob = await this.getFileBlob(filepath)
+ return blob ? await blob.arrayBuffer() : null
+ } catch (error) {
+ return null
+ }
+ }
+}
diff --git a/src/plugins/polaris/PolarisReader.vue b/src/plugins/polaris/PolarisReader.vue
new file mode 100644
index 000000000..cd2a8dfd3
--- /dev/null
+++ b/src/plugins/polaris/PolarisReader.vue
@@ -0,0 +1,315 @@
+
+.c-polaris-viewer.flex-col(:class="{'is-thumbnail': thumbnail}")
+ .loading(v-if="!isLoaded") {{ loadingText }}
+ .map-viewer(v-show="isLoaded")
+ DeckMapComponent(ref="deckMap" v-if="geoJsonFeatures.length && bgLayers && layerId" :features="geoJsonFeatures" :bgLayers="bgLayers" :cbTooltip="handleTooltip" :cbClickEvent="handleFeatureClick" :dark="globalState.isDarkMode" :featureFilter="featureFilter" :fillColors="fillColors" :fillHeights="fillHeights" :highlightedLinkIndex="-1" :initialView="null" :isRGBA="isRGBA" :isAtlantis="false" :lineColors="lineColors" :lineWidths="lineWidths" :mapIsIndependent="false" :opacity="1" :pointRadii="pointRadii" :redraw="redrawCounter" :screenshot="0" :viewId="layerId" :lineWidthUnits="'meters'" :pointRadiusUnits="'meters'")
+ .legend-overlay(v-if="legendItems.length" :style="{background: legendBgColor}")
+ LegendColors(:items="legendItems" title="Legend")
+
+
+
+
+
diff --git a/src/plugins/polaris/db.ts b/src/plugins/polaris/db.ts
new file mode 100644
index 000000000..5e96c383a
--- /dev/null
+++ b/src/plugins/polaris/db.ts
@@ -0,0 +1,255 @@
+/**
+ * Database utilities for POLARIS plugin
+ *
+ * This module provides helper functions for interacting with SQLite databases
+ * containing spatial data. It uses ATTACH to enable cross-database queries
+ * between supply, demand, and result databases.
+ *
+ * @fileoverview Database Utility Functions for POLARIS
+ * @author SimWrapper Development Team
+ */
+
+import type { LayerConfig } from './types'
+
+/**
+ * Retrieves all table names from a SQLite database
+ *
+ * @param db - SQLite database connection object
+ * @returns Promise Array of table names
+ */
+export async function getTableNames(db: any): Promise {
+ const result = await db.exec("SELECT name FROM sqlite_master WHERE type='table';").get.objs
+ return result.map((row: any) => row.name)
+}
+
+/**
+ * Gets the schema (column information) for a specific table
+ *
+ * @param db - SQLite database connection object
+ * @param tableName - Name of the table to inspect
+ * @returns Promise with array of column metadata (name, type, nullable)
+ */
+export async function getTableSchema(
+ db: any,
+ tableName: string
+): Promise<{ name: string; type: string; nullable: boolean }[]> {
+ const result = await db.exec(`PRAGMA table_info("${tableName}");`).get.objs
+ return result.map((row: any) => ({
+ name: row.name,
+ type: row.type,
+ nullable: row.notnull === 0,
+ }))
+}
+
+/**
+ * Counts the number of rows in a table
+ *
+ * @param db - SQLite database connection object
+ * @param tableName - Name of the table to count
+ * @returns Promise Number of rows in the table
+ */
+export async function getRowCount(db: any, tableName: string): Promise {
+ const result = await db.exec(`SELECT COUNT(*) as count FROM "${tableName}";`).get.objs
+ return result.length > 0 ? result[0].count : 0
+}
+
+/**
+ * Query a table and return all rows as objects
+ *
+ * @param db - SQLite database connection object
+ * @param tableName - Name of the table to query
+ * @param columns - Optional array of column names to select (default: all columns)
+ * @param whereClause - Optional WHERE clause to filter results (without the WHERE keyword)
+ * @returns Promise[]> Array of row objects
+ */
+export async function queryTable(
+ db: any,
+ tableName: string,
+ columns?: string[],
+ whereClause?: string
+): Promise[]> {
+ const columnList = columns ? columns.map(c => `"${c}"`).join(', ') : '*'
+ const whereCondition = whereClause ? ` WHERE ${whereClause}` : ''
+ const query = `SELECT ${columnList} FROM "${tableName}"${whereCondition};`
+ const result = await db.exec(query).get.objs
+ return result
+}
+
+/**
+ * Simplify coordinates by reducing precision (removes ~30-50% memory for coordinates)
+ * Uses iterative approach to avoid stack overflow with large/nested geometries
+ * @param coords - Coordinate array to simplify
+ * @param precision - Number of decimal places to keep (default 6 = ~0.1m precision)
+ */
+function simplifyCoordinates(coords: any, precision: number = 6): any {
+ if (!coords || !Array.isArray(coords)) return coords
+
+ const factor = Math.pow(10, precision)
+
+ const simplifyValue = (val: any): any => {
+ if (typeof val === 'number') {
+ return Math.round(val * factor) / factor
+ }
+ if (!Array.isArray(val)) {
+ return val
+ }
+ // Check if this is a coordinate (array of numbers)
+ if (val.length > 0 && typeof val[0] === 'number') {
+ return val.map((n: number) => Math.round(n * factor) / factor)
+ }
+ // Otherwise it's a nested array - process each element
+ return val.map((item: any) => simplifyValue(item))
+ }
+
+ return simplifyValue(coords)
+}
+
+/**
+ * Identify columns that are actually used for styling in the layer config
+ */
+function getUsedColumns(layerConfig: any): Set {
+ const used = new Set()
+ if (!layerConfig?.style) return used
+
+ const style = layerConfig.style
+ const styleProps = ['fillColor', 'lineColor', 'lineWidth', 'pointRadius', 'fillHeight', 'filter']
+ for (const prop of styleProps) {
+ const cfg = style[prop]
+ if (cfg && typeof cfg === 'object' && 'column' in cfg) {
+ used.add(cfg.column)
+ }
+ }
+ return used
+}
+
+/**
+ * Fetch GeoJSON features from a table
+ * Memory-optimized: only stores essential properties and simplifies coordinates
+ * @param db - The database connection
+ * @param table - Table metadata with name and columns
+ * @param layerName - Name of the layer for feature properties
+ * @param layerConfig - Layer configuration
+ * @param options - Optional settings for memory optimization
+ */
+export async function fetchGeoJSONFeatures(
+ db: any,
+ table: { name: string; columns: any[] },
+ layerName: string,
+ layerConfig: any,
+ options?: {
+ limit?: number
+ coordinatePrecision?: number
+ minimalProperties?: boolean
+ }
+) {
+ const limit = options?.limit ?? 100000
+ const coordPrecision = options?.coordinatePrecision ?? 5
+ const minimalProps = options?.minimalProperties ?? true
+
+ const usedColumns = getUsedColumns(layerConfig)
+
+ // Build column list - either all columns or just the ones we need
+ let columnNames: string
+ if (minimalProps && usedColumns.size > 0) {
+ const essentialCols = new Set(['id', 'name', 'link', 'node', 'zone', 'type'])
+ const colsToSelect = table.columns
+ .filter((c: any) => {
+ const name = c.name.toLowerCase()
+ return name !== 'geometry' &&
+ (usedColumns.has(c.name) || essentialCols.has(name))
+ })
+ .map((c: any) => `"${c.name}"`)
+
+ columnNames = colsToSelect.length > 0
+ ? colsToSelect.join(', ')
+ : table.columns
+ .filter((c: any) => c.name.toLowerCase() !== 'geometry')
+ .map((c: any) => `"${c.name}"`)
+ .join(', ')
+ } else {
+ columnNames = table.columns
+ .filter((c: any) => c.name.toLowerCase() !== 'geometry')
+ .map((c: any) => `"${c.name}"`)
+ .join(', ')
+ }
+
+ let filterClause = 'geometry IS NOT NULL'
+ if (
+ layerConfig &&
+ typeof layerConfig.sqlFilter === 'string' &&
+ layerConfig.sqlFilter.trim().length > 0
+ ) {
+ filterClause += ` AND (${layerConfig.sqlFilter})`
+ }
+
+ const query = `
+ SELECT ${columnNames},
+ AsGeoJSON(geometry) as geojson_geom,
+ GeometryType(geometry) as geom_type
+ FROM "${table.name}"
+ WHERE ${filterClause}
+ LIMIT ${limit};
+ `
+
+ const queryResult = await db.exec(query)
+ let rows = await queryResult.get.objs
+
+ const features: any[] = []
+
+ const selectedColumns = minimalProps && usedColumns.size > 0
+ ? table.columns.filter((c: any) => {
+ const name = c.name.toLowerCase()
+ const essentialCols = new Set(['id', 'name', 'link', 'node', 'zone', 'type'])
+ return name !== 'geometry' &&
+ (usedColumns.has(c.name) || essentialCols.has(name))
+ })
+ : table.columns.filter((c: any) => c.name.toLowerCase() !== 'geometry')
+
+ const BATCH_SIZE = 5000
+
+ for (let batchStart = 0; batchStart < rows.length; batchStart += BATCH_SIZE) {
+ const batchEnd = Math.min(batchStart + BATCH_SIZE, rows.length)
+
+ for (let r = batchStart; r < batchEnd; r++) {
+ const row = rows[r]
+ if (!row.geojson_geom) {
+ rows[r] = null
+ continue
+ }
+
+ const properties: any = { _layer: layerName }
+ for (const col of selectedColumns) {
+ const key = col.name
+ if (key !== 'geojson_geom' && key !== 'geom_type' && row[key] !== null && row[key] !== undefined) {
+ properties[key] = row[key]
+ }
+ }
+
+ let geometry: any
+ try {
+ geometry = typeof row.geojson_geom === 'string'
+ ? JSON.parse(row.geojson_geom)
+ : row.geojson_geom
+
+ if (geometry.coordinates && coordPrecision < 15) {
+ geometry.coordinates = simplifyCoordinates(geometry.coordinates, coordPrecision)
+ }
+ } catch (e) {
+ rows[r] = null
+ continue
+ }
+
+ features.push({ type: 'Feature', geometry, properties })
+ rows[r] = null
+ }
+
+ if (batchEnd < rows.length) {
+ await new Promise(resolve => setTimeout(resolve, 0))
+ }
+ }
+
+ rows.length = 0
+ rows = null as any
+
+ return features
+}
diff --git a/src/plugins/polaris/i18n.ts b/src/plugins/polaris/i18n.ts
new file mode 100644
index 000000000..422f9dea3
--- /dev/null
+++ b/src/plugins/polaris/i18n.ts
@@ -0,0 +1,20 @@
+/**
+ * Internationalization configuration for POLARIS plugin
+ * Currently using default SimWrapper i18n system
+ */
+export const i18n = {
+ messages: {
+ en: {
+ loading: 'Loading POLARIS data...',
+ error: 'Error loading data',
+ noGeometry: 'No spatial data found',
+ waitingInQueue: 'Waiting for other maps to load...'
+ },
+ de: {
+ loading: 'POLARIS-Daten werden geladen...',
+ error: 'Fehler beim Laden der Daten',
+ noGeometry: 'Keine rΓ€umlichen Daten gefunden',
+ waitingInQueue: 'Warten auf das Laden anderer Karten...'
+ },
+ },
+}
diff --git a/src/plugins/polaris/reader.scss b/src/plugins/polaris/reader.scss
new file mode 100644
index 000000000..e14bbceda
--- /dev/null
+++ b/src/plugins/polaris/reader.scss
@@ -0,0 +1,89 @@
+/**
+ * Styles for the POLARIS data viewer component
+ * Provides consistent theming and responsive layout
+ */
+
+/* Main container styles */
+.c-polaris-viewer {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background-color: var(--bgCardFrame);
+ display: flex;
+ flex-direction: column;
+}
+
+/* Map container */
+.map-viewer {
+ position: relative;
+ flex: 1;
+ width: 100%;
+ height: 100%;
+}
+
+/* Loading state indicator */
+.loading {
+ padding: 2rem;
+ text-align: center;
+ font-size: 1.2rem;
+ color: var(--textFancy);
+
+ /* Add subtle animation for loading state */
+ &::after {
+ content: '...';
+ display: inline-block;
+ animation: loading-dots 1.5s steps(4, end) infinite;
+ }
+}
+
+@keyframes loading-dots {
+ 0%, 20% { content: ''; }
+ 40% { content: '.'; }
+ 60% { content: '..'; }
+ 80%, 100% { content: '...'; }
+}
+
+/* Database content display styles */
+.database-content {
+ padding: 0.5rem 0;
+
+ h3 {
+ margin-bottom: 1rem;
+ color: var(--textFancy);
+ font-size: 1.25rem;
+ font-weight: 600;
+ }
+
+ h4 {
+ margin-top: 1.5rem;
+ margin-bottom: 0.5rem;
+ color: var(--link);
+ font-weight: bold;
+ font-size: 1.1rem;
+ }
+
+ p {
+ margin: 0.25rem 0;
+ color: var(--text);
+ line-height: 1.4;
+ }
+
+ .columns {
+ margin-left: 1rem;
+ font-size: 0.9rem;
+ color: var(--textFancy);
+
+ div {
+ margin: 0.1rem 0;
+ padding: 0.1rem 0;
+
+ &:hover {
+ background-color: var(--bgHover);
+ padding-left: 0.25rem;
+ border-left: 2px solid var(--link);
+ }
+ }
+ }
+}
diff --git a/src/plugins/polaris/styling.ts b/src/plugins/polaris/styling.ts
new file mode 100644
index 000000000..6931b8b2c
--- /dev/null
+++ b/src/plugins/polaris/styling.ts
@@ -0,0 +1,386 @@
+/**
+ * Styling utilities for AequilibraE plugin
+ *
+ * This module provides functions for building visual styles from data.
+ * It handles color encoding, size mapping, filtering, and the creation
+ * of typed arrays optimized for WebGL rendering.
+ *
+ * @fileoverview Data-Driven Styling System for AequilibraE
+ * @author SimWrapper Development Team
+ */
+
+import * as cartoColors from 'cartocolor'
+import { RGBA, RGB, ColorStyle, NumericStyle, LayerStyle, BuildArgs, BuildResult } from './types'
+
+/**
+ * Converts a hex color string to RGB array
+ *
+ * @param hex - Hex color string (with or without #)
+ * @returns RGB array [R, G, B] with values 0-255
+ */
+const hexToRgb = (hex: string): RGB => {
+ const match = hex.replace('#', '').match(/.{1,2}/g) || ['80', '80', '80']
+ return [parseInt(match[0], 16), parseInt(match[1], 16), parseInt(match[2], 16)]
+}
+
+/**
+ * Converts a hex color string to RGBA array
+ *
+ * @param hex - Hex color string (with or without #)
+ * @param alpha - Alpha value (0-1), default 1 (opaque)
+ * @returns RGBA array [R, G, B, A] with values 0-255
+ */
+const hexToRgba = (hex: string, alpha: number = 1): RGBA => {
+ const match = hex.replace('#', '').match(/.{1,2}/g) || ['80', '80', '80']
+ return [
+ parseInt(match[0], 16),
+ parseInt(match[1], 16),
+ parseInt(match[2], 16),
+ Math.round(alpha * 255),
+ ]
+}
+
+/**
+ * Gets color palette from CartoColor library
+ *
+ * @param name - Name of the color palette (e.g., 'YlGn', 'Viridis')
+ * @param numColors - Number of colors needed
+ * @returns Array of hex color strings
+ */
+const getPaletteColors = (name: string, numColors: number): string[] => {
+ const palette = (cartoColors as any)[name || 'YlGn']
+ if (!palette) return Array(numColors).fill('#808080')
+ const sizes = Object.keys(palette)
+ .map(Number)
+ .filter(n => n > 0)
+ .sort((a, b) => a - b)
+ const size = sizes.find(s => s >= numColors) || sizes[sizes.length - 1]
+ return palette[size] || Array(numColors).fill('#808080')
+}
+
+/**
+ * Safely converts a value to number, returning null for invalid values
+ *
+ * @param value - Value to convert to number
+ * @returns Number or null if conversion fails
+ */
+const toNumber = (value: any): number | null => {
+ const num = Number(value)
+ return isNaN(num) ? null : num
+}
+
+/**
+ * Safe minimum function that avoids stack overflow on large arrays
+ *
+ * @param arr - Array of numbers
+ * @returns Minimum value, or 0 if array is empty
+ */
+const safeMin = (arr: number[]): number => {
+ if (arr.length === 0) return 0
+ let min = arr[0]
+ for (let i = 1; i < arr.length; i++) {
+ if (arr[i] < min) min = arr[i]
+ }
+ return min
+}
+
+/**
+ * Safe maximum function that avoids stack overflow on large arrays
+ *
+ * @param arr - Array of numbers
+ * @returns Maximum value, or 1 if array is empty
+ */
+const safeMax = (arr: number[]): number => {
+ if (arr.length === 0) return 1
+ let max = arr[0]
+ for (let i = 1; i < arr.length; i++) {
+ if (arr[i] > max) max = arr[i]
+ }
+ return max
+}
+
+const buildColorEncoder = (
+ values: any[],
+ style: ColorStyle,
+ dataRange: [number, number] | null = null
+) => {
+ if (dataRange) {
+ // clamp the values to within the data range
+ values = values.map(v => {
+ const num = toNumber(v)
+ if (num === null) return null
+ return Math.max(dataRange[0], Math.min(dataRange[1], num))
+ })
+ }
+
+ const nums = values.map(toNumber).filter((v): v is number => v !== null)
+ const [min, max] =
+ 'range' in style && style.range
+ ? style.range
+ : [safeMin(nums), safeMax(nums)]
+
+ const paletteName = 'palette' in style ? style.palette : 'YlGn'
+ const numColors = 'numColors' in style ? style.numColors : 7
+ const colors = getPaletteColors(paletteName, numColors).map(h => hexToRgba(h, 1))
+
+ const scale = max === min ? 0 : (numColors - 1) / (max - min)
+
+ return (value: any) => {
+ const num = toNumber(value) ?? min
+ const idx = Math.round((num - min) * scale)
+ return colors[Math.max(0, Math.min(numColors - 1, idx))]
+ }
+}
+
+const buildCategoryEncoder = (colors: Record, defaultColor: string = '#808080') => {
+ const colorMap = new Map()
+ for (const [key, hex] of Object.entries(colors)) {
+ colorMap.set(String(key), hexToRgb(hex))
+ }
+ const defaultRgba = hexToRgb(defaultColor)
+
+ return (value: any) => {
+ return colorMap.get(String(value)) || defaultRgba
+ }
+}
+
+const applyQuantitativeMapping = (
+ values: (number | null)[],
+ dataRange: [number, number],
+ outputRange: [number, number],
+ target: Float32Array,
+ stride: number,
+ offset: number
+) => {
+ const nums = values.filter((v): v is number => v !== null)
+ const [dataMin, dataMax] = dataRange
+ const [outMin, outMax] = outputRange
+ const scale = dataMax === dataMin ? 0 : 1 / (dataMax - dataMin)
+
+ for (let i = 0; i < values.length; i++) {
+ const num = values[i]
+ const normalized = num === null ? 0 : (num - dataMin) * scale
+ target[i * stride + offset] = Math.max(
+ outMin,
+ Math.min(outMax, normalized * (outMax - outMin) + outMin)
+ )
+ }
+}
+
+/**
+ * Builds typed arrays for efficient WebGL rendering from feature data and styling rules
+ *
+ * This is the main function that converts GeoJSON features and layer styling
+ * configurations into the typed arrays needed for high-performance map rendering.
+ * It handles color encoding, size mapping, filtering, and optimization for GPU rendering.
+ *
+ * @param args - Build arguments containing features, layer configs, and defaults
+ * @returns BuildResult with typed arrays ready for WebGL rendering
+ */
+export function buildStyleArrays(args: BuildArgs): BuildResult {
+ const { features, layers, defaults = {} } = args
+
+ const N = features.length
+ const fillColors = new Uint8ClampedArray(N * 4)
+ const lineColors = new Uint8ClampedArray(N * 3) // RGB only
+ const lineWidths = new Float32Array(N)
+ const pointRadii = new Float32Array(N)
+ const fillHeights = new Float32Array(N)
+ const featureFilter = new Float32Array(N)
+
+ // Pre-index features by layer name in properties._layer to allow per-layer style
+ // Fallback to globalstyle if properties._layer isnβt present.
+ type LayerBucket = { idxs: number[]; props: any[]; style?: LayerStyle }
+ const buckets = new Map()
+ for (let i = 0; i < N; i++) {
+ const props = features[i]?.properties || {}
+ const layerName = props._layer || 'GLOBAL'
+ const bucket = buckets.get(layerName) || {
+ idxs: [],
+ props: [],
+ style: layers[layerName]?.style,
+ }
+ bucket.idxs.push(i)
+ bucket.props.push(props)
+ bucket.style = layers[layerName]?.style || bucket.style
+ buckets.set(layerName, bucket)
+ }
+
+ // Global defaults used if no layer style present
+ const defaultFill = hexToRgba(defaults.fillColor || '#59a14f', 1)
+ const defaultLine = hexToRgb(defaults.lineColor || '#4e79a7')
+ const defaultWidth = defaults.lineWidth ?? 2
+ const defaultRadius = defaults.pointRadius ?? 4
+ const defaultHeight = defaults.fillHeight ?? 0
+
+ // Initialize everything to defaults first
+ for (let i = 0; i < N; i++) {
+ fillColors.set(defaultFill, i * 4)
+ lineColors.set(defaultLine, i * 3) // RGB offset
+ lineWidths[i] = defaultWidth
+ pointRadii[i] = defaultRadius
+ fillHeights[i] = defaultHeight
+ featureFilter[i] = 1 // visible by default
+ }
+
+ // Apply per-layer styles
+ for (const [layerName, bucket] of buckets.entries()) {
+ const style = bucket.style
+ const idxs = bucket.idxs
+ const propsArr = bucket.props
+
+ if (!style) continue
+
+ // filter
+ if (style.filter && 'column' in style.filter) {
+ const col = (style.filter as any).column
+ const include: any[] | undefined = (style.filter as any).include
+ const exclude: any[] | undefined = (style.filter as any).exclude
+ for (let j = 0; j < idxs.length; j++) {
+ const i = idxs[j]
+ const v = propsArr[j]?.[col]
+ let visible = true
+ if (include && include.length) visible = include.includes(v)
+ if (exclude && exclude.length) visible = visible && !exclude.includes(v)
+ featureFilter[i] = visible ? 1 : 0
+ }
+ }
+
+ if (style.fillColor) {
+ if (typeof style.fillColor === 'string') {
+ // Static hex color
+ const color = hexToRgba(style.fillColor, 1)
+ for (let j = 0; j < idxs.length; j++) {
+ fillColors.set(color, idxs[j] * 4)
+ }
+ } else if ('colors' in style.fillColor) {
+ const encoder = buildCategoryEncoder(style.fillColor.colors, '#808080')
+ for (let j = 0; j < idxs.length; j++) {
+ fillColors.set(encoder(propsArr[j]?.[style.fillColor.column]), idxs[j] * 4)
+ }
+ } else if ('column' in style.fillColor) {
+ // Column-based encoding
+ const encoder = buildColorEncoder(
+ propsArr.map(p => p?.[style.fillColor!.column]),
+ style.fillColor,
+ style.fillColor.dataRange
+ )
+ for (let j = 0; j < idxs.length; j++) {
+ fillColors.set(encoder(propsArr[j]?.[style.fillColor.column]), idxs[j] * 4)
+ }
+ }
+ }
+
+ if (style.lineColor) {
+ if (typeof style.lineColor === 'string') {
+ // Static hex color
+ const rgb = hexToRgb(style.lineColor)
+ for (let j = 0; j < idxs.length; j++) {
+ lineColors[idxs[j] * 3] = rgb[0]
+ lineColors[idxs[j] * 3 + 1] = rgb[1]
+ lineColors[idxs[j] * 3 + 2] = rgb[2]
+ }
+ } else if ('colors' in style.lineColor) {
+ const encoder = buildCategoryEncoder(style.lineColor.colors, '#808080')
+ for (let j = 0; j < idxs.length; j++) {
+ lineColors.set(encoder(propsArr[j]?.[style.lineColor.column]), idxs[j] * 3)
+ }
+ } else if ('column' in style.lineColor) {
+ // Column-based encoding
+ const encoder = buildColorEncoder(
+ propsArr.map(p => p?.[style.lineColor!.column]),
+ style.lineColor,
+ style.lineColor.dataRange
+ )
+ for (let j = 0; j < idxs.length; j++) {
+ const [r, g, b] = encoder(propsArr[j]?.[style.lineColor.column])
+ lineColors[idxs[j] * 3] = r
+ lineColors[idxs[j] * 3 + 1] = g
+ lineColors[idxs[j] * 3 + 2] = b
+ }
+ }
+ }
+
+ // lineWidth - handle static, array, category, and column-based
+ if (style.lineWidth) {
+ if (Array.isArray(style.lineWidth)) {
+ // Assign each width in the array to the corresponding feature
+ for (let j = 0; j < idxs.length; j++) {
+ lineWidths[idxs[j]] = style.lineWidth[j] ?? defaultWidth
+ }
+ } else if (typeof style.lineWidth === 'number') {
+ for (let j = 0; j < idxs.length; j++) {
+ lineWidths[idxs[j]] = style.lineWidth
+ }
+ } else if (
+ typeof style.lineWidth === 'object' &&
+ 'widths' in style.lineWidth &&
+ 'column' in style.lineWidth
+ ) {
+ // Category-based mapping: { column, widths }
+ const widthMap = style.lineWidth.widths || {}
+ for (let j = 0; j < idxs.length; j++) {
+ const v = propsArr[j]?.[style.lineWidth.column]
+ lineWidths[idxs[j]] = widthMap[v] ?? defaultWidth
+ }
+ } else if ('column' in style.lineWidth) {
+ const values = propsArr.map(p => toNumber(p?.[style.lineWidth!.column]))
+ applyQuantitativeMapping(
+ values,
+ style.lineWidth.dataRange ?? [1, 6],
+ style.lineWidth.widthRange ?? [1, 6],
+ lineWidths,
+ 1,
+ 0
+ )
+ }
+ }
+
+ // pointRadius - handle both static and column-based
+ if (style.pointRadius) {
+ if (typeof style.pointRadius === 'number') {
+ for (let j = 0; j < idxs.length; j++) {
+ pointRadii[idxs[j]] = style.pointRadius
+ }
+ } else if ('column' in style.pointRadius) {
+ const values = propsArr.map(p => toNumber(p?.[style.pointRadius!.column]))
+ applyQuantitativeMapping(
+ values,
+ style.pointRadius.dataRange ?? [2, 12],
+ style.pointRadius.widthRange ?? [2, 12],
+ pointRadii,
+ 1,
+ 0
+ )
+ }
+ }
+
+ // fillHeight - handle both static and column-based
+ if (style.fillHeight) {
+ if (typeof style.fillHeight === 'number') {
+ for (let j = 0; j < idxs.length; j++) {
+ fillHeights[idxs[j]] = style.fillHeight
+ }
+ } else if ('column' in style.fillHeight) {
+ const values = propsArr.map(p => toNumber(p?.[style.fillHeight!.column]))
+ applyQuantitativeMapping(
+ values,
+ style.fillHeight.dataRange ?? [0, 100],
+ style.fillHeight.widthRange ?? [0, 100],
+ fillHeights,
+ 1,
+ 0
+ )
+ }
+ }
+ }
+
+ return {
+ fillColors,
+ lineColors,
+ lineWidths,
+ pointRadii,
+ fillHeights,
+ featureFilter,
+ }
+}
diff --git a/src/plugins/polaris/types.ts b/src/plugins/polaris/types.ts
new file mode 100644
index 000000000..0b9bd6d2f
--- /dev/null
+++ b/src/plugins/polaris/types.ts
@@ -0,0 +1,282 @@
+/**
+ * Type definitions for the POLARIS plugin
+ *
+ * This file contains all TypeScript interfaces and types used throughout
+ * the POLARIS visualization plugin. It defines data structures for:
+ * - Spatial data configuration from polaris.yaml simwrapper section
+ * - Styling and rendering options
+ * - Database operations using ATTACH for multiple databases
+ *
+ * @fileoverview POLARIS Plugin Type Definitions
+ * @author SimWrapper Development Team
+ */
+
+/** Supported geometry types for spatial data visualization */
+export type GeometryType = 'polygon' | 'line' | 'point'
+
+/**
+ * Configuration for a spatial data layer, defining how it should be
+ * rendered and what data it should display
+ */
+export interface LayerConfig {
+ /** Database table name containing the spatial data */
+ table: string
+ /** Type of geometry (affects rendering style) */
+ type: GeometryType
+ /** SQL filter clause (without WHERE keyword) */
+ sqlFilter?: string
+ /** Fill color for polygons (hex string) */
+ fillColor?: string
+ /** Stroke/outline color (hex string) */
+ strokeColor?: string
+ /** Line/stroke width in pixels */
+ strokeWidth?: number
+ /** Point radius in pixels */
+ radius?: number
+ /** Layer opacity (0-1) */
+ opacity?: number
+ /** Z-index for layer stacking */
+ zIndex?: number
+ /** Layer styling configuration */
+ style?: LayerStyle
+}
+
+/**
+ * SimWrapper section within polaris.yaml
+ * Defines visualization settings for POLARIS model output
+ *
+ * @example
+ * ```yaml
+ * simwrapper:
+ * center: [-87.63, 41.88]
+ * zoom: 10
+ * layers:
+ * supply:
+ * Link:
+ * style:
+ * lineColor: { column: type, type: categorical }
+ * Zone:
+ * style:
+ * lineColor: { column: zone, type: integer }
+ * ```
+ */
+export interface PolarisSimwrapperConfig {
+ /** Map center coordinates [lon, lat] */
+ center?: [number, number]
+ /** Initial map zoom level (default: 10) */
+ zoom?: number
+ /** Map bearing/rotation in degrees */
+ bearing?: number
+ /** Map pitch/tilt in degrees */
+ pitch?: number
+ /** Layer group configurations keyed by database type (e.g., 'supply', 'demand', 'result') */
+ layers?: {
+ [groupName: string]: {
+ [tableName: string]: LayerConfig
+ }
+ }
+ /** Default styling values applied to all layers */
+ defaults?: {
+ fillColor?: string
+ lineColor?: string
+ lineWidth?: number
+ pointRadius?: number
+ fillHeight?: number
+ }
+ /** Manual legend configuration */
+ legend?: Array<{
+ label?: string
+ color?: string
+ size?: number
+ shape?: string
+ subtitle?: string
+ }>
+ /** Memory optimization: Max features per layer (default: 100000) */
+ geometryLimit?: number
+ /** Memory optimization: Coordinate decimal precision (default: 5 = ~1m) */
+ coordinatePrecision?: number
+ /** Memory optimization: Only store properties used for styling (default: true) */
+ minimalProperties?: boolean
+}
+
+/**
+ * POLARIS scenario configuration from scenario_abm.json
+ */
+export interface PolarisScenarioConfig {
+ /** Scenario description */
+ description?: string
+ /** Supply database filename */
+ supply_database?: string
+ /** Demand database filename */
+ demand_database?: string
+ /** Result database filename */
+ result_database?: string
+ /** Analysis iteration to use (default: last) */
+ analysis_iteration?: number
+}
+
+/**
+ * Complete visualization configuration for a POLARIS dataset.
+ * This interface defines all settings needed to render spatial data
+ * with proper styling, legends, and performance optimizations.
+ */
+export interface VizDetails {
+ /** Display title for the visualization */
+ title: string
+ /** Descriptive text about the dataset */
+ description: string
+ /** Path to the supply database file */
+ supplyDatabase?: string
+ /** Path to the demand database file */
+ demandDatabase?: string
+ /** Path to the result database file */
+ resultDatabase?: string
+ /** Layer configurations keyed by layer name */
+ layers: { [key: string]: LayerConfig }
+ /** Map center coordinates [lon, lat] or comma-separated string */
+ center?: [number, number] | string
+ /** Initial map zoom level */
+ zoom?: number
+ /** Map bearing/rotation in degrees */
+ bearing?: number
+ /** Map pitch/tilt in degrees */
+ pitch?: number
+ /** Memory optimization: Max features per layer (default: 100000) */
+ geometryLimit?: number
+ /** Memory optimization: Coordinate decimal precision (default: 5 = ~1m) */
+ coordinatePrecision?: number
+ /** Memory optimization: Only store properties used for styling (default: true) */
+ minimalProperties?: boolean
+ /** Default styling values applied to all layers */
+ defaults?: {
+ fillColor?: string
+ lineColor?: string
+ lineWidth?: number
+ pointRadius?: number
+ fillHeight?: number
+ }
+ /** Manual legend configuration */
+ legend?: Array<{
+ label?: string
+ color?: string
+ size?: number
+ shape?: string
+ subtitle?: string
+ }>
+ /** Analysis iteration to use */
+ analysisIteration?: number
+}
+
+// =============================================================================
+// Color and Styling Type Definitions
+// =============================================================================
+
+/** RGBA color representation with alpha channel [R, G, B, A] where each value is 0-255 */
+export type RGBA = [number, number, number, number]
+
+/** RGB color representation [R, G, B] where each value is 0-255 */
+export type RGB = [number, number, number]
+
+/**
+ * Configuration for data-driven color styling
+ * Supports both quantitative (continuous) and categorical (discrete) color mappings
+ */
+export type ColorStyle = {
+ /** Column name in the data to use for color encoding */
+ column: string
+ /** Type of color mapping to apply */
+ type: 'quantitative' | 'categorical'
+ /** Color scheme name (e.g., 'Viridis', 'Blues') */
+ colorScheme?: string
+ /** Custom color range [startColor, endColor] for quantitative mapping */
+ colorRange?: [string, string]
+ /** Minimum value for color scale (auto-detected if not specified) */
+ min?: number
+ /** Maximum value for color scale (auto-detected if not specified) */
+ max?: number
+}
+
+/**
+ * Configuration for data-driven numeric styling (widths, radii, heights)
+ */
+export type NumericStyle = {
+ /** Column name in the data to use for numeric encoding */
+ column: string
+ /** Data value range [min, max] (auto-detected if not specified) */
+ dataRange?: [number, number]
+ /** Output range for visual property [min, max] */
+ widthRange?: [number, number]
+}
+
+/**
+ * Complete styling configuration for a layer
+ * Defines how features should be visually rendered based on their data
+ */
+export type LayerStyle = {
+ /** Fill color configuration for polygons */
+ fillColor?: ColorStyle
+ /** Line color configuration for lines and polygon outlines */
+ lineColor?: ColorStyle
+ /** Line width configuration */
+ lineWidth?: NumericStyle
+ /** Point radius configuration */
+ pointRadius?: NumericStyle
+ /** Fill height configuration for 3D visualization */
+ fillHeight?: NumericStyle
+ /** Feature filtering configuration */
+ filter?: {
+ column: string
+ include?: any[]
+ exclude?: any[]
+ }
+}
+
+/**
+ * Lightweight layer configuration for styling operations
+ * Used internally by the styling system
+ */
+export type LayerConfigLite = {
+ /** Optional table name */
+ table?: string
+ /** Optional geometry column name */
+ geometry?: string
+ /** Layer styling configuration */
+ style?: LayerStyle
+}
+
+/**
+ * Arguments passed to the style building function
+ */
+export type BuildArgs = {
+ /** GeoJSON features to be styled */
+ features: Array<{ properties: any; geometry: any }>
+ /** Layer configurations keyed by layer name */
+ layers: Record
+ /** Default styling values */
+ defaults?: {
+ fillColor?: string
+ lineColor?: string
+ lineWidth?: number
+ pointRadius?: number
+ fillHeight?: number
+ }
+}
+
+/**
+ * Result from the style building function
+ * Contains typed arrays ready for GPU rendering
+ */
+export type BuildResult = {
+ /** RGBA fill colors for each feature */
+ fillColors: Uint8ClampedArray
+ /** RGB line colors for each feature */
+ lineColors: Uint8ClampedArray
+ /** Line widths for each feature */
+ lineWidths: Float32Array
+ /** Point radii for each feature */
+ pointRadii: Float32Array
+ /** Fill heights for 3D rendering */
+ fillHeights: Float32Array
+ /** Visibility filter (1=visible, 0=hidden) */
+ featureFilter: Float32Array
+}
diff --git a/src/plugins/polaris/usePolaris.ts b/src/plugins/polaris/usePolaris.ts
new file mode 100644
index 000000000..773398721
--- /dev/null
+++ b/src/plugins/polaris/usePolaris.ts
@@ -0,0 +1,378 @@
+/**
+ * Core utilities and hooks for POLARIS plugin
+ *
+ * This module provides the main data loading and processing functions
+ * for POLARIS visualizations. It includes memory management,
+ * database caching, loading queue management, and GeoJSON feature building.
+ *
+ * Key features:
+ * - Shared SPL engine to reduce memory usage
+ * - Database caching across multiple maps
+ * - Loading queue to prevent memory exhaustion
+ * - Support for ATTACH to query across supply/demand/result databases
+ *
+ * @fileoverview Core POLARIS Data Processing Functions
+ * @author SimWrapper Development Team
+ */
+
+import SPL from 'spl.js'
+import YAML from 'yaml'
+import type { VizDetails, LayerConfig, PolarisSimwrapperConfig, PolarisScenarioConfig } from './types'
+import { getTableNames, getTableSchema, getRowCount, fetchGeoJSONFeatures } from './db'
+
+// ============================================================================
+// GLOBAL LOADING QUEUE - Ensures only one map loads at a time
+// ============================================================================
+let loadingQueue: Promise = Promise.resolve()
+let queueLength = 0
+let totalMapsLoading = 0
+
+/**
+ * Acquire a slot in the loading queue. Only one map can load at a time.
+ */
+export function acquireLoadingSlot(): Promise<() => void> {
+ queueLength++
+ totalMapsLoading++
+ console.log(`π Queued for loading (position: ${queueLength}, total: ${totalMapsLoading})`)
+
+ let releaseSlot: () => void
+
+ const myTurn = loadingQueue.then(() => {
+ console.log(`π Acquired loading slot`)
+ })
+
+ loadingQueue = new Promise(resolve => {
+ releaseSlot = () => {
+ queueLength--
+ console.log(`β
Released loading slot (remaining in queue: ${queueLength})`)
+ resolve()
+ }
+ })
+
+ return myTurn.then(() => releaseSlot!)
+}
+
+/**
+ * Call when a map has fully finished loading
+ */
+export function mapLoadingComplete(): void {
+ totalMapsLoading = Math.max(0, totalMapsLoading - 1)
+}
+
+/**
+ * Get the current total number of maps being loaded.
+ */
+export function getTotalMapsLoading(): number {
+ return totalMapsLoading
+}
+
+// ============================================================================
+// SHARED SPL ENGINE - Critical for memory when loading multiple maps
+// ============================================================================
+let sharedSpl: any = null
+let splInitPromise: Promise | null = null
+let splRefCount = 0
+
+/**
+ * Get or create the shared SPL engine.
+ */
+export async function initSql(): Promise {
+ splRefCount++
+
+ if (sharedSpl) {
+ return sharedSpl
+ }
+
+ if (splInitPromise) {
+ return splInitPromise
+ }
+
+ splInitPromise = SPL().then((spl: any) => {
+ sharedSpl = spl
+ splInitPromise = null
+ console.log('β
Shared SPL engine initialized')
+ return spl
+ })
+
+ return splInitPromise
+}
+
+/**
+ * Release a reference to the shared SPL engine.
+ */
+export function releaseSql(): void {
+ splRefCount = Math.max(0, splRefCount - 1)
+}
+
+// ============================================================================
+// DATABASE CACHE - Share database instances across maps using the same file
+// ============================================================================
+interface CachedDb {
+ db: any
+ refCount: number
+ path: string
+}
+
+const dbCache = new Map()
+const dbLoadPromises = new Map>()
+
+/**
+ * Open a database, using cache if available.
+ */
+export async function openDb(spl: any, arrayBuffer: ArrayBuffer, path?: string): Promise {
+ if (!path) {
+ return spl.db(arrayBuffer)
+ }
+
+ const cached = dbCache.get(path)
+ if (cached) {
+ cached.refCount++
+ console.log(`π¦ Reusing cached database: ${path} (refs: ${cached.refCount})`)
+ return cached.db
+ }
+
+ const loadingPromise = dbLoadPromises.get(path)
+ if (loadingPromise) {
+ const db = await loadingPromise
+ const nowCached = dbCache.get(path)
+ if (nowCached) {
+ nowCached.refCount++
+ console.log(`π¦ Joined loading database: ${path} (refs: ${nowCached.refCount})`)
+ }
+ return db
+ }
+
+ const loadPromise = (async () => {
+ const db = await spl.db(arrayBuffer)
+ dbCache.set(path, { db, refCount: 1, path })
+ dbLoadPromises.delete(path)
+ console.log(`π Loaded and cached database: ${path}`)
+ return db
+ })()
+
+ dbLoadPromises.set(path, loadPromise)
+ return loadPromise
+}
+
+/**
+ * Release a reference to a cached database.
+ */
+export function releaseDb(path: string): void {
+ const cached = dbCache.get(path)
+ if (!cached) return
+
+ cached.refCount--
+ console.log(`π Database refCount decreased: ${path} (refs: ${cached.refCount})`)
+ if (cached.refCount <= 0) {
+ try {
+ if (typeof cached.db.close === 'function') {
+ cached.db.close()
+ }
+ } catch (e) {
+ console.warn(`Failed to close database ${path}:`, e)
+ }
+ dbCache.delete(path)
+ console.log(`ποΈ Released cached database: ${path}`)
+ }
+}
+
+/**
+ * Attach a secondary database to the main database connection.
+ * This allows cross-database queries using the schema name.
+ *
+ * @param db - Main database connection
+ * @param spl - SPL engine
+ * @param arrayBuffer - Secondary database as ArrayBuffer
+ * @param schemaName - Name to use for the attached database (e.g., 'demand', 'result')
+ */
+export async function attachDatabase(
+ db: any,
+ spl: any,
+ arrayBuffer: ArrayBuffer,
+ schemaName: string
+): Promise {
+ // Create a temporary database file in memory for the attached DB
+ const tempDb = await spl.db(arrayBuffer)
+
+ // SPL.js doesn't support ATTACH directly, so we need to work around this
+ // by loading each database separately and querying them independently
+ console.log(`π Prepared database for attachment as '${schemaName}'`)
+}
+
+/**
+ * Parse polaris.yaml configuration file
+ */
+export async function parsePolarisYaml(
+ yamlText: string,
+ subfolder: string | null
+): Promise<{ simwrapper: PolarisSimwrapperConfig; scenario?: PolarisScenarioConfig }> {
+ const config = YAML.parse(yamlText)
+
+ return {
+ simwrapper: config.simwrapper || {},
+ scenario: config.scenario || config
+ }
+}
+
+/**
+ * Parse scenario_abm.json configuration file to get database paths
+ */
+export function parseScenarioConfig(jsonText: string): PolarisScenarioConfig {
+ const config = JSON.parse(jsonText)
+ return {
+ description: config.description,
+ supply_database: config.supply_database,
+ demand_database: config.demand_database,
+ result_database: config.result_database,
+ analysis_iteration: config.analysis_iteration
+ }
+}
+
+/**
+ * Build VizDetails from POLARIS configuration
+ */
+export function buildVizDetails(
+ simwrapperConfig: PolarisSimwrapperConfig,
+ scenarioConfig: PolarisScenarioConfig | undefined,
+ subfolder: string | null,
+ databases: { supply?: string; demand?: string; result?: string }
+): VizDetails {
+ // Flatten layer configurations from grouped format to flat format
+ const flatLayers: { [key: string]: LayerConfig } = {}
+
+ if (simwrapperConfig.layers) {
+ for (const [groupName, groupLayers] of Object.entries(simwrapperConfig.layers)) {
+ for (const [tableName, layerConfig] of Object.entries(groupLayers)) {
+ const layerName = `${groupName}_${tableName}`
+ flatLayers[layerName] = {
+ ...layerConfig,
+ table: layerConfig.table || tableName
+ }
+ }
+ }
+ }
+
+ // Default center: Chicago area (POLARIS is often used for Chicago models)
+ const defaultCenter: [number, number] = [-87.63, 41.88]
+ const defaultZoom = 10
+
+ return {
+ title: scenarioConfig?.description || 'POLARIS Model',
+ description: '',
+ supplyDatabase: databases.supply,
+ demandDatabase: databases.demand,
+ resultDatabase: databases.result,
+ layers: flatLayers,
+ center: simwrapperConfig.center || defaultCenter,
+ zoom: simwrapperConfig.zoom ?? defaultZoom,
+ bearing: simwrapperConfig.bearing,
+ pitch: simwrapperConfig.pitch,
+ geometryLimit: simwrapperConfig.geometryLimit,
+ coordinatePrecision: simwrapperConfig.coordinatePrecision,
+ minimalProperties: simwrapperConfig.minimalProperties,
+ defaults: simwrapperConfig.defaults,
+ legend: simwrapperConfig.legend,
+ analysisIteration: scenarioConfig?.analysis_iteration
+ }
+}
+
+export async function buildTables(
+ db: any,
+ layerConfigs: { [k: string]: LayerConfig },
+ allNames?: string[]
+) {
+ const names = allNames ?? (await getTableNames(db))
+ const select = Object.keys(layerConfigs).length
+ ? [...new Set(Object.values(layerConfigs).map(c => c.table))]
+ : ['Link', 'Node', 'Zone'] // Default POLARIS tables
+
+ const tables: Array<{ name: string; type: string; rowCount: number; columns: any[] }> = []
+ let hasGeometry = false
+
+ for (const name of names) {
+ if (!select.includes(name)) continue
+ const schema = await getTableSchema(db, name)
+ const rowCount = await getRowCount(db, name)
+ const hasGeomCol = schema.some((c: any) => c.name.toLowerCase() === 'geometry')
+ if (hasGeomCol) hasGeometry = true
+ tables.push({ name, type: 'table', rowCount, columns: schema })
+ }
+ return { tables, hasGeometry }
+}
+
+/**
+ * Options for memory optimization when building geo features
+ */
+export interface GeoFeatureOptions {
+ /** Maximum number of features per layer (default: 100000) */
+ limit?: number
+ /** Decimal precision for coordinates (default: 5) */
+ coordinatePrecision?: number
+ /** Only store properties used for styling (default: true) */
+ minimalProperties?: boolean
+}
+
+/**
+ * Build GeoJSON features from database tables.
+ */
+export async function buildGeoFeatures(
+ db: any,
+ tables: any[],
+ layerConfigs: { [k: string]: LayerConfig },
+ options?: GeoFeatureOptions
+) {
+ const plain = JSON.parse(JSON.stringify(layerConfigs))
+ const layersToProcess = Object.keys(plain).length
+ ? Object.entries(plain)
+ : tables
+ .filter(t => t.columns.some((c: any) => c.name.toLowerCase() === 'geometry'))
+ .map(t => [t.name, { table: t.name, type: 'line' as const }])
+
+ const features: any[] = []
+
+ for (const [layerName, cfg] of layersToProcess as any) {
+ const layerConfig = cfg as LayerConfig
+ const tableName = layerConfig.table || layerName
+ const table = tables.find(t => t.name === tableName)
+ if (!table) continue
+ if (!table.columns.some((c: any) => c.name.toLowerCase() === 'geometry')) continue
+
+ const layerFeatures = await fetchGeoJSONFeatures(
+ db,
+ table,
+ layerName,
+ cfg,
+ options
+ )
+
+ for (let i = 0; i < layerFeatures.length; i++) {
+ features.push(layerFeatures[i])
+ }
+
+ await new Promise(resolve => setTimeout(resolve, 50))
+ }
+
+ return features
+}
+
+/**
+ * Auto-detect POLARIS database files in a folder
+ */
+export async function autoDetectDatabases(
+ files: string[]
+): Promise<{ supply?: string; demand?: string; result?: string }> {
+ const result: { supply?: string; demand?: string; result?: string } = {}
+
+ for (const file of files) {
+ const lower = file.toLowerCase()
+ if (lower.includes('supply') && (lower.endsWith('.sqlite') || lower.endsWith('.db'))) {
+ result.supply = file
+ } else if (lower.includes('demand') && (lower.endsWith('.sqlite') || lower.endsWith('.db'))) {
+ result.demand = file
+ } else if (lower.includes('result') && (lower.endsWith('.sqlite') || lower.endsWith('.db'))) {
+ result.result = file
+ }
+ }
+
+ return result
+}