From d6e282fe847d693339b6412d1513fafae647de01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 3 Oct 2026 16:27:23 +0200 Subject: [PATCH 01/21] Use leaflet-hotline from npm and update deps within their ranges npm 12 refuses git dependencies by default, so a fresh install failed. The fork only existed to render rails into a chosen pane, which upstream already allows via L.Hotline.renderer({pane}). Updating the runtime dependencies within their semver ranges picks up fixes and clears the high-severity audit findings in shipped code; Vue, vue-router and the newer @types packages are held back as they need Vue 2.7 or a newer TypeScript. leaflet-path-transform's in-range 1.9 is a rewrite, but it keeps the _transformPoints used to rotate Box areas, which still render identically. (AI assisted using Claude Opus 5.5) --- package-lock.json | 434 +++++++++++------------------ package.json | 2 +- src/components/AppMapDetailsObj.ts | 2 +- 3 files changed, 157 insertions(+), 281 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35a5f1e..73a268c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "leaflet-contextmenu": "^1.4.0", "leaflet-defaulticon-compatibility": "^0.1.1", "leaflet-draw": "^1.0.4", - "leaflet-hotline": "github:savage13/Leaflet.hotline", + "leaflet-hotline": "^0.4.0", "leaflet-path-transform": "^1.1.3", "leaflet-rastercoords": "^1.0.3", "leaflet-sidebar-v2": "^3.2.3", @@ -3234,7 +3234,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base": { "version": "0.11.2", @@ -3446,26 +3447,35 @@ "dev": true }, "node_modules/bootstrap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", - "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - }, + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", + "deprecated": "This version of Bootstrap is no longer supported. Please upgrade to the latest version.", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", "peerDependencies": { "jquery": "1.9.1 - 3", "popper.js": "^1.16.1" } }, "node_modules/bootstrap-vue": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz", - "integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==", + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.23.1.tgz", + "integrity": "sha512-SEWkG4LzmMuWjQdSYmAQk1G/oOKm37dtNfjB5kxq0YafnL2W6qUAmeDTcIZVbPiQd2OQlIkWOMPBRGySk/zGsg==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "@nuxt/opencollective": "^0.3.2", - "bootstrap": ">=4.5.3 <5.0.0", + "bootstrap": "^4.6.1", "popper.js": "^1.16.1", "portal-vue": "^2.1.7", "vue-functional-data-merge": "^3.1.0" @@ -3475,6 +3485,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4093,18 +4104,6 @@ "node": ">=0.10.0" } }, - "node_modules/cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dependencies": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "engines": { - "node": ">=0.2.5" - } - }, "node_modules/cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -4439,7 +4438,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4504,6 +4504,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "dependencies": { "date-now": "^0.1.4" } @@ -4792,7 +4793,8 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "node_modules/cosmiconfig": { "version": "5.2.1", @@ -5280,7 +5282,8 @@ "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "node_modules/de-indent": { "version": "1.0.2", @@ -5737,6 +5740,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -5746,6 +5750,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, "funding": [ { "type": "github", @@ -5757,6 +5762,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -5774,24 +5780,8 @@ "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true }, "node_modules/dot-prop": { "version": "5.3.0", @@ -6020,11 +6010,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" - }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -6441,14 +6426,6 @@ "node": ">=6" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -7215,7 +7192,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "1.2.13", @@ -7314,6 +7292,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7824,18 +7803,6 @@ "object-assign": "^4.0.1" } }, - "node_modules/htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dependencies": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -8040,9 +8007,10 @@ } }, "node_modules/immer": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.4.tgz", - "integrity": "sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -8199,6 +8167,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8207,7 +8176,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/inquirer": { "version": "6.5.2", @@ -8775,7 +8745,8 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", @@ -8877,35 +8848,6 @@ "node": ">=4" } }, - "node_modules/jshint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", - "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", - "dependencies": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "bin": { - "jshint": "bin/jshint" - } - }, - "node_modules/jshint/node_modules/strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "bin": { - "strip-json-comments": "cli.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -9036,9 +8978,10 @@ "integrity": "sha1-4r2kga8QJggOq6oymX5TH9RPYFw=" }, "node_modules/leaflet-defaulticon-compatibility": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.1.tgz", - "integrity": "sha512-vDBFdlUAwjSEGep9ih8kfJilf6yN8V9zTbF5NC/1ZwLeGko3RUQepspPnGCRMFV51dY3Lb3hziboicrFz+rxQA==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz", + "integrity": "sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==", + "license": "BSD-2-Clause" }, "node_modules/leaflet-draw": { "version": "1.0.4", @@ -9047,28 +8990,35 @@ }, "node_modules/leaflet-hotline": { "version": "0.4.0", - "resolved": "git+ssh://git@github.com/savage13/Leaflet.hotline.git#a4b62bfadf5858214ea42d4ec94dc93bc9a122ae", + "resolved": "https://registry.npmjs.org/leaflet-hotline/-/leaflet-hotline-0.4.0.tgz", + "integrity": "sha512-+In6c8WxMsRKMmwQ1m2GmbNxbXvA3WsrOilJGK7l4Sj+mUDh1gdyGMYCIoRBtUeX7lMvBc4KKeEVAlwQERKpxg==", "license": "BSD-2-Clause" }, "node_modules/leaflet-path-drag": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.1.0.tgz", - "integrity": "sha512-wd2uNgn3yuMl7HI0YG0z6qhxnRbvCQHE8ncpERfUZ6gTPbM5Xctwzyi+gE8cMnIDlv22GO3slSBupD9GW7jIEQ==" + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.9.5.tgz", + "integrity": "sha512-u2oQzU/IR+XezHwREyB4T3Og5DJXgdyxtmK+GEQyrVLUwLlWaFxa0QMGxlWgE4Ch+rSyUeYOq/x8uLnelC3DnQ==", + "license": "MIT" }, "node_modules/leaflet-path-transform": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/leaflet-path-transform/-/leaflet-path-transform-1.1.3.tgz", - "integrity": "sha512-hmF3igZVyKRcA4RprEUxA08hWN9ORpOK41wuvHWc839IFr9b0kpREzw2u1XmoImJYq67Omb3Q+MKT43tK90S3w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/leaflet-path-transform/-/leaflet-path-transform-1.9.0.tgz", + "integrity": "sha512-QhTwoO4/ycaH5o4b/8OFNpzBXMnTQpWyI6BkkO0IyNrmgHkGMFlW7cQR5E3khrQE1NEFL2/VERD9ettGi/DWnw==", + "license": "MIT", "dependencies": { - "leaflet-path-drag": "^1.1.0" + "leaflet-path-drag": "1.9.5" + }, + "peerDependencies": { + "leaflet": ">=1.8.0 <1.10.0" } }, "node_modules/leaflet-rastercoords": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/leaflet-rastercoords/-/leaflet-rastercoords-1.0.3.tgz", - "integrity": "sha512-b3HoPniMUnih0PzKJzowTDXUBbg2Fm/Ry/ZDbZljG1T3E+2IAKGfO5sjCaVSBp4Ca1yKq3whgd6BUHBPFKbzrg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/leaflet-rastercoords/-/leaflet-rastercoords-1.0.6.tgz", + "integrity": "sha512-uoGlGis7tKXdoeueCNwbfaclL38b/jztSwgWejHO+2EimxMbcQIr2PCG0E/kyJ9Z6WFkdoM2ypaypoHeitpKqg==", + "license": "MIT", "dependencies": { - "leaflet": "^1.3.3" + "leaflet": "^1.9.4" } }, "node_modules/leaflet-sidebar-v2": { @@ -9077,13 +9027,10 @@ "integrity": "sha512-narzdn81Y/8YpgHR3jhs93LhrLq0AGSRo7CXHEICHfMeK6IHSbtFOF9CTSfueaumRK0TgvHkiiYJb9dTKta6ZQ==" }, "node_modules/leaflet.markercluster": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.1.tgz", - "integrity": "sha512-dRGndfMZibkWMBD7g8h+lJW0R0keTx1GGMErre7uhqnKiYBoMxR2VPX6Sy8oGNzg+FA7FKtTuO1hGh5HtV9s2g==", - "dependencies": { - "jshint": "^2.13.1", - "npm-ci": "0.0.2" - }, + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "license": "MIT", "peerDependencies": { "leaflet": "^1.3.1" } @@ -9302,9 +9249,10 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -9723,6 +9671,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10164,12 +10113,6 @@ "node": ">=4" } }, - "node_modules/npm-ci": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/npm-ci/-/npm-ci-0.0.2.tgz", - "integrity": "sha1-n2t2IMKFeAL7baJoEGnkCinjEHI=", - "deprecated": "Test package" - }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -10441,6 +10384,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -10820,6 +10764,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -12108,6 +12053,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -13021,17 +12967,6 @@ "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, - "node_modules/shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -13718,7 +13653,8 @@ "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, "node_modules/string-width": { "version": "2.1.1", @@ -15950,7 +15886,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write": { "version": "1.0.3", @@ -18701,7 +18638,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base": { "version": "0.11.2", @@ -18877,18 +18815,18 @@ "dev": true }, "bootstrap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", - "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", "requires": {} }, "bootstrap-vue": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz", - "integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==", + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.23.1.tgz", + "integrity": "sha512-SEWkG4LzmMuWjQdSYmAQk1G/oOKm37dtNfjB5kxq0YafnL2W6qUAmeDTcIZVbPiQd2OQlIkWOMPBRGySk/zGsg==", "requires": { "@nuxt/opencollective": "^0.3.2", - "bootstrap": ">=4.5.3 <5.0.0", + "bootstrap": "^4.6.1", "popper.js": "^1.16.1", "portal-vue": "^2.1.7", "vue-functional-data-merge": "^3.1.0" @@ -18898,6 +18836,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -19426,15 +19365,6 @@ } } }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -19707,7 +19637,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -19768,6 +19699,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { "date-now": "^0.1.4" } @@ -19994,7 +19926,8 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "cosmiconfig": { "version": "5.2.1", @@ -20392,7 +20325,8 @@ "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "de-indent": { "version": "1.0.2", @@ -20751,6 +20685,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, "requires": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -20759,12 +20694,14 @@ "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true } } }, @@ -20777,24 +20714,8 @@ "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true }, "dot-prop": { "version": "5.3.0", @@ -21004,11 +20925,6 @@ } } }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" - }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -21328,11 +21244,6 @@ "strip-eof": "^1.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -21959,7 +21870,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "1.2.13", @@ -22035,6 +21947,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -22442,18 +22355,6 @@ } } }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -22608,9 +22509,9 @@ "optional": true }, "immer": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.4.tgz", - "integrity": "sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==" }, "import-cwd": { "version": "2.1.0", @@ -22726,6 +22627,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -22734,7 +22636,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "inquirer": { "version": "6.5.2", @@ -23151,7 +23054,8 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -23232,28 +23136,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "jshint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", - "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -23371,9 +23253,9 @@ "integrity": "sha1-4r2kga8QJggOq6oymX5TH9RPYFw=" }, "leaflet-defaulticon-compatibility": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.1.tgz", - "integrity": "sha512-vDBFdlUAwjSEGep9ih8kfJilf6yN8V9zTbF5NC/1ZwLeGko3RUQepspPnGCRMFV51dY3Lb3hziboicrFz+rxQA==" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz", + "integrity": "sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==" }, "leaflet-draw": { "version": "1.0.4", @@ -23381,28 +23263,29 @@ "integrity": "sha512-rsQ6saQO5ST5Aj6XRFylr5zvarWgzWnrg46zQ1MEOEIHsppdC/8hnN8qMoFvACsPvTioAuysya/TVtog15tyAQ==" }, "leaflet-hotline": { - "version": "git+ssh://git@github.com/savage13/Leaflet.hotline.git#a4b62bfadf5858214ea42d4ec94dc93bc9a122ae", - "from": "leaflet-hotline@github:savage13/Leaflet.hotline" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/leaflet-hotline/-/leaflet-hotline-0.4.0.tgz", + "integrity": "sha512-+In6c8WxMsRKMmwQ1m2GmbNxbXvA3WsrOilJGK7l4Sj+mUDh1gdyGMYCIoRBtUeX7lMvBc4KKeEVAlwQERKpxg==" }, "leaflet-path-drag": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.1.0.tgz", - "integrity": "sha512-wd2uNgn3yuMl7HI0YG0z6qhxnRbvCQHE8ncpERfUZ6gTPbM5Xctwzyi+gE8cMnIDlv22GO3slSBupD9GW7jIEQ==" + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/leaflet-path-drag/-/leaflet-path-drag-1.9.5.tgz", + "integrity": "sha512-u2oQzU/IR+XezHwREyB4T3Og5DJXgdyxtmK+GEQyrVLUwLlWaFxa0QMGxlWgE4Ch+rSyUeYOq/x8uLnelC3DnQ==" }, "leaflet-path-transform": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/leaflet-path-transform/-/leaflet-path-transform-1.1.3.tgz", - "integrity": "sha512-hmF3igZVyKRcA4RprEUxA08hWN9ORpOK41wuvHWc839IFr9b0kpREzw2u1XmoImJYq67Omb3Q+MKT43tK90S3w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/leaflet-path-transform/-/leaflet-path-transform-1.9.0.tgz", + "integrity": "sha512-QhTwoO4/ycaH5o4b/8OFNpzBXMnTQpWyI6BkkO0IyNrmgHkGMFlW7cQR5E3khrQE1NEFL2/VERD9ettGi/DWnw==", "requires": { - "leaflet-path-drag": "^1.1.0" + "leaflet-path-drag": "1.9.5" } }, "leaflet-rastercoords": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/leaflet-rastercoords/-/leaflet-rastercoords-1.0.3.tgz", - "integrity": "sha512-b3HoPniMUnih0PzKJzowTDXUBbg2Fm/Ry/ZDbZljG1T3E+2IAKGfO5sjCaVSBp4Ca1yKq3whgd6BUHBPFKbzrg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/leaflet-rastercoords/-/leaflet-rastercoords-1.0.6.tgz", + "integrity": "sha512-uoGlGis7tKXdoeueCNwbfaclL38b/jztSwgWejHO+2EimxMbcQIr2PCG0E/kyJ9Z6WFkdoM2ypaypoHeitpKqg==", "requires": { - "leaflet": "^1.3.3" + "leaflet": "^1.9.4" } }, "leaflet-sidebar-v2": { @@ -23411,13 +23294,10 @@ "integrity": "sha512-narzdn81Y/8YpgHR3jhs93LhrLq0AGSRo7CXHEICHfMeK6IHSbtFOF9CTSfueaumRK0TgvHkiiYJb9dTKta6ZQ==" }, "leaflet.markercluster": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.1.tgz", - "integrity": "sha512-dRGndfMZibkWMBD7g8h+lJW0R0keTx1GGMErre7uhqnKiYBoMxR2VPX6Sy8oGNzg+FA7FKtTuO1hGh5HtV9s2g==", - "requires": { - "jshint": "^2.13.1", - "npm-ci": "0.0.2" - } + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "requires": {} }, "less": { "version": "3.13.1", @@ -23587,9 +23467,9 @@ } }, "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" }, "lodash.debounce": { "version": "4.0.8", @@ -23942,6 +23822,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -24321,11 +24202,6 @@ "sort-keys": "^1.0.0" } }, - "npm-ci": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/npm-ci/-/npm-ci-0.0.2.tgz", - "integrity": "sha1-n2t2IMKFeAL7baJoEGnkCinjEHI=" - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -24526,6 +24402,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -24844,7 +24721,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -25938,6 +25816,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -26691,11 +26570,6 @@ "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -27297,7 +27171,8 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, "string-width": { "version": "2.1.1", @@ -29099,7 +28974,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", diff --git a/package.json b/package.json index 7ae34e3..9173949 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "leaflet-contextmenu": "^1.4.0", "leaflet-defaulticon-compatibility": "^0.1.1", "leaflet-draw": "^1.0.4", - "leaflet-hotline": "github:savage13/Leaflet.hotline", + "leaflet-hotline": "^0.4.0", "leaflet-path-transform": "^1.1.3", "leaflet-rastercoords": "^1.0.3", "leaflet-sidebar-v2": "^3.2.3", diff --git a/src/components/AppMapDetailsObj.ts b/src/components/AppMapDetailsObj.ts index 3c73e50..0083683 100644 --- a/src/components/AppMapDetailsObj.ts +++ b/src/components/AppMapDetailsObj.ts @@ -269,7 +269,7 @@ export default class AppMapDetailsObj extends AppMapDetailsBase [pt[2], pt[0], pt[1]]); // @ts-ignore - return L.hotline(pts, opts).addTo(map.m); + return L.hotline(pts, { ...opts, renderer: L.Hotline.renderer({ pane: opts.pane }) }).addTo(map.m); }); if (this.railMarkers.length) { if (!this.staticData.colorScale) { From 5a3f2d3bb0501c333e34b022c3fe3d7c47835a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 3 Oct 2026 16:27:23 +0200 Subject: [PATCH 02/21] CI: build every push and PR on Node 26, deploy only from master Node 18 and the v3 actions are end-of-life; Node 26 is the newest LTS line, supported until April 2029. Building every push and PR catches broken builds before they reach master, and npm ci builds exactly what the lockfile says. The rsync action moves to 9.0.1, pinned by commit since it receives the deploy key; its inputs are unchanged. (AI assisted using Claude Opus 5.5) --- .github/workflows/deploy.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e20508c..95b53b3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,24 +1,24 @@ name: deploy on: push: - branches: - - master + pull_request: jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: - node-version: 18 + node-version: 26 cache: 'npm' - name: install dependencies - run: npm install --include=dev + run: npm ci - name: build run: npm run build - name: deploy build - uses: burnett01/rsync-deployments@7.0.1 + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + uses: burnett01/rsync-deployments@155b6d6c1219ab2224c20c58d423a3f1b850395f # 9.0.1 with: switches: -avr path: dist/ From a8952c344bcfcff0dcafc5c250d67d13a11c3a14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 3 Oct 2026 16:27:23 +0200 Subject: [PATCH 03/21] Replace Vue-2-only patterns ahead of the Vue 3 migration Vue 3 removes $on/$off, `new Component()`, prop mutation and .native. A typed mitt bus, one helper that mounts the draw popup, local copies of the popup's props and an explicit click emit from ObjectInfo let the same call sites work on both versions, so the switch only has to rewrite the mounting helper. Passing the native event keeps .stop/.prevent working on ObjectInfo clicks. (AI assisted using Claude Opus 5.5) --- package-lock.json | 12 ++++ package.json | 1 + src/components/AppMap.ts | 102 ++++++++++++++-------------- src/components/AppMap.vue | 2 +- src/components/AppMapDetailsObj.ts | 5 +- src/components/AppMapDetailsObj.vue | 10 +-- src/components/AppMapPopup.ts | 47 ++++++++----- src/components/AppMapPopup.vue | 4 +- src/components/AppMapSettings.ts | 5 +- src/components/ObjectInfo.vue | 2 +- src/util/bus.ts | 31 +++++++++ src/util/mount.ts | 18 +++++ src/util/polyline.ts | 2 +- 13 files changed, 159 insertions(+), 82 deletions(-) create mode 100644 src/util/bus.ts create mode 100644 src/util/mount.ts diff --git a/package-lock.json b/package-lock.json index 73a268c..3672341 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "leaflet-sidebar-v2": "^3.2.3", "leaflet.markercluster": "^1.4.1", "lodash": "^4.17.21", + "mitt": "^3.0.1", "terser": "^4.8.1", "vue": "^2.6.11", "vue-class-component": "^7.2.3", @@ -9716,6 +9717,12 @@ "once": "^1.3.1" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -23863,6 +23870,11 @@ } } }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", diff --git a/package.json b/package.json index 9173949..24584d9 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "leaflet-sidebar-v2": "^3.2.3", "leaflet.markercluster": "^1.4.1", "lodash": "^4.17.21", + "mitt": "^3.0.1", "terser": "^4.8.1", "vue": "^2.6.11", "vue-class-component": "^7.2.3", diff --git a/src/components/AppMap.ts b/src/components/AppMap.ts index 349110d..3a6e7ec 100644 --- a/src/components/AppMap.ts +++ b/src/components/AppMap.ts @@ -41,17 +41,13 @@ import { Point } from '@/util/map'; import { Settings } from '@/util/settings'; import * as ui from '@/util/ui'; import { calcLayerLength } from '@/util/polyline'; +import { mountComponent, MountedComponent } from '@/util/mount'; +import { appMapBus, ObjectIdentifier, onAppMapEvents } from '@/util/bus'; import '@/util/leaflet_tile_workaround.js'; -import AppMapPopup from '@/components/AppMapPopup'; +import AppMapPopup, { AppMapPopupProps } from '@/components/AppMapPopup'; import draggable from 'vuedraggable'; -interface ObjectIdentifier { - mapType: string; - mapName: string; - hashId: number; -} - function valueOrDefault(value: T | undefined, defaultValue: T) { return value === undefined ? defaultValue : value; } @@ -175,8 +171,8 @@ function layerSetTooltip(layer: L.Marker | L.Polyline) { } } -function layerSetPopup(layer: L.Marker | L.Polyline, popup: AppMapPopup) { - layer.bindPopup(popup.$el as HTMLElement, { minWidth: 200 }); +function layerSetPopup(layer: L.Marker | L.Polyline, popup: MountedComponent) { + layer.bindPopup(popup.el, { minWidth: 200 }); // @ts-ignore // popup instance is needed later to update the length layer.popup = popup; @@ -184,22 +180,21 @@ function layerSetPopup(layer: L.Marker | L.Polyline, popup: AppMapPopup) { function addPopupAndTooltip(layer: L.Marker | L.Polyline, root: any) { if (layer && layer.feature) { - let popup = new AppMapPopup({ propsData: layer.feature.properties }); - // Initiate the Element as $el - popup.$mount(); - // Respond to `title` and `text` messages - popup.$on('title', (txt: string) => { - if (layer && layer.feature) { - layer.feature.properties.title = txt; - layerSetTooltip(layer); - root.updateDrawLayerOpts({ title: txt, layer }); - } - }); - popup.$on('text', (txt: string) => { - if (layer && layer.feature) { - layer.feature.properties.text = txt; - root.updateDrawLayerOpts({ txt: txt, layer }); - } + const { title, text, pathLength } = layer.feature.properties; + const popup = mountComponent(AppMapPopup, { title, text, pathLength }, { + title: (txt: string) => { + if (layer && layer.feature) { + layer.feature.properties.title = txt; + layerSetTooltip(layer); + root.updateDrawLayerOpts({ title: txt, layer }); + } + }, + text: (txt: string) => { + if (layer && layer.feature) { + layer.feature.properties.text = txt; + root.updateDrawLayerOpts({ txt: txt, layer }); + } + }, }); // Create Popup and Tooltip layerSetPopup(layer, popup); @@ -235,6 +230,8 @@ export default class AppMap extends mixins(MixinUtil) { private drawLineColor = '#3388ff'; private setLineColorThrottler!: () => void; + private offAppMapEvents!: () => void; + private previousGotoMarker: L.Marker | null = null; private greatPlateauBarrierShown = false; @@ -1168,22 +1165,31 @@ export default class AppMap extends mixins(MixinUtil) { } initEvents() { - this.$on('AppMap:switch-pane', (pane: string) => { - this.switchPane(pane); - }); - this.$on('AppMap:toggle-y-values', () => { - this.toggleY(); - }); - this.$on('AppMap:toggle-xz-values', () => { - this.toggleXZ(); - }); - - this.$on('AppMap:open-obj', async (obj: ObjectData) => { - if (this.tempObjMarker) - this.tempObjMarker.data.getMarker().remove(); - this.tempObjMarker = new ui.Unobservable(new MapMarkers.MapMarkerObj(this.map, obj, '#e02500', '#ff2a00')); - this.tempObjMarker.data.getMarker().addTo(this.map.m); - this.openMarkerDetails(getMarkerDetailsComponent(this.tempObjMarker.data), this.tempObjMarker.data); + this.offAppMapEvents = onAppMapEvents({ + 'AppMap:switch-pane': (pane) => { + this.switchPane(pane); + }, + 'AppMap:toggle-y-values': () => { + this.toggleY(); + }, + 'AppMap:toggle-xz-values': () => { + this.toggleXZ(); + }, + 'AppMap:open-obj': async (obj) => { + if (this.tempObjMarker) + this.tempObjMarker.data.getMarker().remove(); + this.tempObjMarker = new ui.Unobservable(new MapMarkers.MapMarkerObj(this.map, obj, '#e02500', '#ff2a00')); + this.tempObjMarker.data.getMarker().addTo(this.map.m); + this.openMarkerDetails(getMarkerDetailsComponent(this.tempObjMarker.data), this.tempObjMarker.data); + }, + 'AppMap:show-gen-group': async (id) => { + const group = new SearchResultGroup('', `Generation group for ${id.mapType}/${id.mapName}:${id.hashId}`); + await group.init(this.map); + const objs = await MapMgr.getInstance().getObjGenGroup(id.mapType, id.mapName, id.hashId); + group.setObjects(this.map, objs); + group.update(SearchResultUpdateMode.UpdateStyle | SearchResultUpdateMode.UpdateVisibility, this.searchExcludedSets); + this.searchGroups.push(group); + }, }); this.map.m.on('click', () => { @@ -1191,16 +1197,9 @@ export default class AppMap extends mixins(MixinUtil) { this.tempObjMarker.data.getMarker().remove(); }); - this.$on('AppMap:show-gen-group', async (id: ObjectIdentifier) => { - const group = new SearchResultGroup('', `Generation group for ${id.mapType}/${id.mapName}:${id.hashId}`); - await group.init(this.map); - const objs = await MapMgr.getInstance().getObjGenGroup(id.mapType, id.mapName, id.hashId); - group.setObjects(this.map, objs); - group.update(SearchResultUpdateMode.UpdateStyle | SearchResultUpdateMode.UpdateVisibility, this.searchExcludedSets); - this.searchGroups.push(group); - }); this.map.m.on('AppMap:show-gen-group', (args) => { - this.$emit('AppMap:show-gen-group', args); + const { mapType, mapName, hashId } = args as L.LeafletEvent & ObjectIdentifier; + appMapBus.emit('AppMap:show-gen-group', { mapType, mapName, hashId }); }); } @@ -1478,12 +1477,13 @@ export default class AppMap extends mixins(MixinUtil) { const [mapType, mapName, hashId] = this.$route.query.id.toString().split(','); MapMgr.getInstance().getObj(mapType, mapName, parseInt(hashId, 0)).then((obj) => { if (obj) - this.$emit('AppMap:open-obj', obj); + appMapBus.emit('AppMap:open-obj', obj); }); } } beforeDestroy() { + this.offAppMapEvents(); this.map.m.remove(); } diff --git a/src/components/AppMap.vue b/src/components/AppMap.vue index d91683e..c409a38 100644 --- a/src/components/AppMap.vue +++ b/src/components/AppMap.vue @@ -214,7 +214,7 @@ Hide Link

- + diff --git a/src/components/AppMapDetailsObj.ts b/src/components/AppMapDetailsObj.ts index 0083683..0c09e80 100644 --- a/src/components/AppMapDetailsObj.ts +++ b/src/components/AppMapDetailsObj.ts @@ -10,6 +10,7 @@ import ObjectInfo from '@/components/ObjectInfo'; import ShopData from '@/components/ShopData'; import { MapMgr, ObjectData, ObjectMinData, PlacementLink } from '@/services/MapMgr'; import { MsgMgr } from '@/services/MsgMgr'; +import { appMapBus } from '@/util/bus'; import * as ui from '@/util/ui'; import { Settings } from '@/util/settings'; @@ -344,13 +345,13 @@ export default class AppMapDetailsObj extends AppMapDetailsBase

Inputs

- +

Triggers

- +
@@ -92,7 +92,7 @@

Linked by

- +
@@ -100,7 +100,7 @@

Links to

- +
@@ -108,7 +108,7 @@

Generation group

- +
diff --git a/src/components/AppMapPopup.ts b/src/components/AppMapPopup.ts index 2b69b32..c637ac6 100644 --- a/src/components/AppMapPopup.ts +++ b/src/components/AppMapPopup.ts @@ -1,21 +1,34 @@ - import Vue from 'vue'; import Component from 'vue-class-component'; +import { Prop, Watch } from 'vue-property-decorator'; + +export interface AppMapPopupProps { + title?: string; + text?: string; + pathLength?: number; +} + +@Component +export default class AppMapPopup extends Vue { + @Prop(String) + private title!: string; + + @Prop(String) + private text!: string; + + @Prop(Number) + private pathLength!: number; + + private currentTitle = this.title; + private currentText = this.text; -@Component({ - props: { - title: String, - text: String, - pathLength: Number, - }, - watch: { - title: function(new_val: string, old_val: string) { - this.$emit('title', new_val); - }, - text: function(new_val: string, old_val: string) { - this.$emit('text', new_val); - } - }, -}) + @Watch('currentTitle') + onTitleChanged(val: string) { + this.$emit('title', val); + } -export default class AppMapPopup extends Vue { } + @Watch('currentText') + onTextChanged(val: string) { + this.$emit('text', val); + } +} diff --git a/src/components/AppMapPopup.vue b/src/components/AppMapPopup.vue index 3619774..572e6de 100644 --- a/src/components/AppMapPopup.vue +++ b/src/components/AppMapPopup.vue @@ -1,7 +1,7 @@