dev #160

Merged
sora merged 97 commits from dev into master 2025-03-02 01:09:30 +01:00
13 changed files with 1126 additions and 241 deletions
Showing only changes of commit f1c702bc14 - Show all commits

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ db/
public/*.js
public/*.map
.yarnrc.yml
build/

View File

@ -25,9 +25,14 @@
"esbuild": "^0.25.0",
"fastify": "^5.2.1",
"jsdom": "^26.0.0",
"leaflet": "^1.9.4",
"nodemon": "^3.0.1",
"prettier": "^3.5.2",
"pug": "^3.0.2",
"undici": "^7.3.0"
"undici": "^7.3.0",
"vue": "2",
"vue-multiselect": "2",
"vue-textarea-autosize": "^1.1.1",
"vue2-leaflet": "^2.7.1"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
import "./types/ext";
import "./types/format";
import "./api";
import "./old.js";
import "./vue";

View File

@ -44,54 +44,31 @@ const app = new Vue({
start_journey: function () { window.location.href = "/" + this.journey.id },
compute_bb: function () {
const map = this.$refs.map[0].mapObject;
var bounds = map.getBounds();
var minLng = bounds.getSouthWest().lng;
var minLat = bounds.getSouthWest().lat;
var maxLng = bounds.getNorthEast().lng;
var maxLat = bounds.getNorthEast().lat;
return [[minLng, minLat], [maxLng, maxLat]]
const bounds = this.$refs.map[0].mapObject.getBounds();
return [[bounds.getSouthWest().lng, bounds.getSouthWest().lat],
[bounds.getNorthEast().lng, bounds.getNorthEast().lat]]
},
generate_marker: function (item, fcolor) {
return L.AwesomeMarkers.icon({
iconAnchor: [12, 36],
icon: api.icon_type(item) || "star",
prefix: "fa",
markerColor: fcolor || item.color || "blue",
}).createIcon().outerHTML;
},
generate_rotation: function (index, list) {
if (index < 0 || index >= list.length) return 0;
let c0, c1;
if (index == 0) {
c0 = list[index]
c1 = list[index + 1]
} else if (index == list.length - 1) {
c0 = list[index - 1]
c1 = list[index]
} else {
c0 = list[index - 1];
c1 = list[index + 1];
}
const dx = c1[0] - c0[0];
const dy = c1[1] - c0[1];
const brng = Math.atan2(dy, dx);
return `rotate:${brng - Math.PI / 2}rad`;// * (180 / Math.PI); // Convert from radians to degrees
const c0 = list[(index == 0) ? index : (index - 1)]
const c1 = list[(index == list.length - 1) ? index : (index + 1)]
const brng = Math.atan2(c1[1] - c0[1], c1[0] - c0[0]);
return `rotate:${brng - Math.PI / 2}rad`;
},
generate_marker: function (item, fcolor) {
return `
<div style="position: absolute;top: -30px;left: -6px;">
<i class=" fa fa-${api.icon_type(item) || "star"} fa-lg icon-white" style="position: absolute;text-align:center; width:24px;height:24px; line-height:1.5em"></i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 36" width="24" height="36">
<circle cx="12" cy="12" r="12" fill="${fcolor || item.color || "blue"}"/>
<polygon points="4,12 20,12 12,36" fill="${fcolor || item.color || "blue"}" /></svg>`
},
generate_icon: function (item, fcolor, styling = "") {
return `<i class="fa fa-${api.icon_type(item) || "star"} fa-2x" style="${styling}; color:${fcolor}; margin-left:-12px; margin-top:-32px; text-align:center; align-content:center; width:32px; height:32px;"></i>`;
},
save_data: function () {
api.throttle(() => {
this.impexp = JSON.stringify(this.journey.data).toEncoded();
api.save(this.journey.id, this.journey.data);
}, 1000);
},
import_data: function () {
this.journey.data = Object.assign(
{},
@ -144,24 +121,24 @@ const app = new Vue({
});
this.query.res = r;
this.query.act = false;
return r
});
}
},
search_travel: function (f) {
return (q) => {
this.query.act = true;
this.query.type = f;
return api.query_flight(q).then((r) => {
r.forEach(el => el.path = getGeoLine(
new L.LatLng(el.from_geo.lat, el.from_geo.lon),
new L.LatLng(el.to_geo.lat, el.to_geo.lon), { dist: 5_000_000 }).map(v => [v.lat, v.lng]));
this.query.res = r;
this.query.act = false;
return r;
});
}
},
// break;
// case "flight": {
// return api.query_flight(q).then((r) => {
// // r.path = r.map(el => getGeoLine(
// // new L.LatLng(el.from_geo.lat, el.from_geo.lon),
// // new L.LatLng(el.to_geo.lat, el.to_geo.lon), { dist: 10_000_000 }).map(v => [v.lat, v.lng]));
// this.query.res = r;
// this.query.actt = false;
// });
// } break;
// default:
// console.log(`Query not yet setup: ${k}`)
// }
// }
// },
keyboardEvent(e) {
if (e.which === 13) {
@ -173,7 +150,11 @@ const app = new Vue({
this.search_hotel = api.throttle(this.search_nominatim("hotel"), 1000)
this.search_restaurant = api.throttle(this.search_nominatim("restaurant"), 1000)
this.search_place = api.throttle(this.search_nominatim("place"), 1000)
// this.search_flight = api.throttle(this.search_travel(), 2000)
this.save_data = api.throttle(() => {
this.impexp = JSON.stringify(this.journey.data).toEncoded();
api.save(this.journey.id, this.journey.data);
}, 1000);
this.search_flight = api.throttle(this.search_travel("flight"), 2000)
window.addEventListener("keydown", (e) => {
switch (e.key) {
@ -190,12 +171,9 @@ const app = new Vue({
api.load(this.journey.id).then((r) => (app.journey.data = migrator(r)));
// api.query_flight("qf1").then(r => {
// this.polyline.latlngs = r.map(el => getGeoLine(
// new L.LatLng(el.from_geo.lat, el.from_geo.lon),
// new L.LatLng(el.to_geo.lat, el.to_geo.lon), { dist: 5_000_000 }).map(v => [v.lat, v.lng]));
// console.log(this.polyline.latlngs)
// });
this.search_travel("flight")("qf1").then(r => {
this.polyline.latlngs = r.map(e => e.path)
});
},
watch: {

View File

@ -159,7 +159,6 @@ function recursiveMidPoint(src: L.LatLng, dst: L.LatLng, opt: { step?: number, d
geom.splice(1, 0, mp);
}
} else if (opt.dist != undefined) {
// console.log(src, dst, pointDistance(src, dst))
if (pointDistance(src, dst) > opt.dist) {
geom.splice(0, 1, ...recursiveMidPoint(src, mp, { dist: opt.dist }));
geom.splice(geom.length - 2, 2, ...recursiveMidPoint(mp, dst, { dist: opt.dist }));
@ -167,11 +166,9 @@ function recursiveMidPoint(src: L.LatLng, dst: L.LatLng, opt: { step?: number, d
geom.splice(1, 0, mp);
}
}
console.log(geom)
return geom;
}
export function getGeoLine(src: L.LatLng, dst: L.LatLng, opt: { step: number, dist: number }) {
return recursiveMidPoint(src, dst, opt)
}

View File

@ -9,7 +9,7 @@ class journey_wrapper {
sel_leg: number = 0;
sel_day: number = 0;
constructor(id: string) {
constructor(id: String) {
this.id = id;
}

192
src/client/vue.ts Normal file
View File

@ -0,0 +1,192 @@
import * as api from "./api";
import journey_wrapper from "./types/wrapper";
import { migrator } from "./types/migration";
import { getGeoLine } from "./types/geom";
import Vue from "vue";
import { LMap, LTileLayer, LMarker, LIcon, LPopup, LTooltip, LPolyline, LControlScale } from "vue2-leaflet";
import Multiselect from 'vue-multiselect'
import TextareaAutosize from 'vue-textarea-autosize'
Vue.component("l-map", LMap);
Vue.component("l-tile-layer", LTileLayer);
Vue.component("l-marker", LMarker);
Vue.component("l-icon", LIcon);
Vue.component("l-popup", LPopup);
Vue.component("l-tooltip", LTooltip);
Vue.component("l-polyline", LPolyline);
Vue.component("l-control-scale", LControlScale);
Vue.component("multiselect", Multiselect);
Vue.use(TextareaAutosize);
const app = new Vue({
el: "#app",
data: {
journey_edit:
["view", "short"].indexOf(window.location.pathname.split("/")[1]) == -1,
journey: new journey_wrapper(window.location.pathname.split("/").pop() || String.gen_id(16)),
query: {
type: "",
act: false,
res: [],
},
impexp: "",
lang: {
format: "ddd D MMM",
formatLocale: {
firstDayOfWeek: 1,
},
monthBeforeYear: true,
},
polyline: {
latlngs: [],
color: 'green'
}
},
methods: {
start_journey: function () { window.location.href = "/" + this.journey.id },
compute_bb: function () {
const bounds = this.$refs.map[0].mapObject.getBounds();
return [[bounds.getSouthWest().lng, bounds.getSouthWest().lat],
[bounds.getNorthEast().lng, bounds.getNorthEast().lat]]
},
generate_rotation: function (index, list) {
if (index < 0 || index >= list.length) return 0;
const c0 = list[(index == 0) ? index : (index - 1)]
const c1 = list[(index == list.length - 1) ? index : (index + 1)]
const brng = Math.atan2(c1[1] - c0[1], c1[0] - c0[0]);
return `rotate:${brng - Math.PI / 2}rad`;
},
generate_marker: function (item, fcolor) {
return `
<div style="position: absolute;top: -30px;left: -6px;">
<i class=" fa fa-${api.icon_type(item) || "star"} fa-lg icon-white" style="position: absolute;text-align:center; width:24px;height:24px; line-height:1.5em"></i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 36" width="24" height="36">
<circle cx="12" cy="12" r="12" fill="${fcolor || item.color || "blue"}"/>
<polygon points="4,12 20,12 12,36" fill="${fcolor || item.color || "blue"}" /></svg>`
},
generate_icon: function (item, fcolor, styling = "") {
return `<i class="fa fa-${api.icon_type(item) || "star"} fa-2x" style="${styling}; color:${fcolor}; margin-left:-12px; margin-top:-32px; text-align:center; align-content:center; width:32px; height:32px;"></i>`;
},
import_data: function () {
this.journey.data = Object.assign(
{},
JSON.parse(this.impexp.toDecoded()),
);
this.journey.data.main.forEach((e) => {
if (e.date_range) {
e.date_range[0] = new Date(e.date_range[0]);
e.date_range[1] = new Date(e.date_range[1]);
}
});
},
export_data: function () {
this.impexp = JSON.stringify(this.journey.data).toEncoded();
},
filter_selected: function (list, step) {
return list.filter((e) =>
step ? e.step == this.journey.sel_day : e.step >= 0,
);
},
filter_unselected: function (list) {
return list.filter((e) => e.step == undefined || e.step < 0);
},
remove_item: function (list, idx) {
list[idx].step = -1;
list.splice(idx, 1);
},
log: function (e) {
console.log(e);
},
get_filter: function (f) {
switch (f) {
case "hotel": return api.is_hotel_type;
case "restaurant": return api.is_restauration_type;
case "place": return api.is_attraction_type;
case "other":
default: return () => true;
}
},
search_nominatim: function (f) {
return (q) => {
this.query.act = true;
this.query.type = f;
return api.query_nominatim(q, this.compute_bb(), this.get_filter(f)).catch((_err) => []).then((r) => {
r.forEach((rr) => {
rr.latlon = [parseFloat(rr.lat), parseFloat(rr.lon)];
rr.sname = rr.display_name.split(",")[0];
});
this.query.res = r;
this.query.act = false;
return r
});
}
},
search_travel: function (f) {
return (q) => {
this.query.act = true;
this.query.type = f;
return api.query_flight(q).then((r) => {
r.forEach(el => el.path = getGeoLine(
new L.LatLng(el.from_geo.lat, el.from_geo.lon),
new L.LatLng(el.to_geo.lat, el.to_geo.lon), { dist: 5_000_000 }).map(v => [v.lat, v.lng]));
this.query.res = r;
this.query.act = false;
return r;
});
}
},
keyboardEvent(e) {
if (e.which === 13) {
}
},
},
created: function () {
this.search_hotel = api.throttle(this.search_nominatim("hotel"), 1000)
this.search_restaurant = api.throttle(this.search_nominatim("restaurant"), 1000)
this.search_place = api.throttle(this.search_nominatim("place"), 1000)
this.save_data = api.throttle(() => {
this.impexp = JSON.stringify(this.journey.data).toEncoded();
api.save(this.journey.id, this.journey.data);
}, 1000);
this.search_flight = api.throttle(this.search_travel("flight"), 2000)
window.addEventListener("keydown", (e) => {
switch (e.key) {
case "ArrowLeft":
this.journey.day_prev();
break;
case "ArrowRight":
this.journey.day_next();
break;
default:
console.log(e.key);
}
});
api.load(this.journey.id).then((r) => (app.journey.data = migrator(r)));
this.search_travel("flight")("qf1").then(r => {
this.polyline.latlngs = r.map(e => e.path)
});
},
watch: {
journey: {
handler: function (ndata, odata) {
this.save_data();
},
deep: true,
},
},
});

View File

@ -1,10 +1,9 @@
import { FastifyInstance } from 'fastify/types/instance';
import { ProxyAgent, setGlobalDispatcher } from 'undici';
//import { ProxyAgent, setGlobalDispatcher } from 'undici';
import { flight_get_data } from './api_flight'
import { nominatim_get_data } from './api_nominatim';
setGlobalDispatcher(new ProxyAgent(process.env.HTTPS_PROXY as string));
//setGlobalDispatcher(new ProxyAgent(process.env.HTTPS_PROXY as string));
export default function (server, opts, done) {

View File

@ -1,13 +1,11 @@
script(src="https://unpkg.com/leaflet")
script(src="https://unpkg.com/leaflet.awesome-markers")
script(src="https://unpkg.com/leaflet.geodesic")
script(src="https://unpkg.com/sortablejs")
script(src="https://unpkg.com/vue@2")
script(src="https://unpkg.com/vue2-datepicker")
script(src="https://unpkg.com/vue-textarea-autosize")
script(src="https://unpkg.com/vue-multiselect@2")
script(src="https://unpkg.com/vue2-leaflet")
//- script(src="https://unpkg.com/vue@2")
//- script(src="https://unpkg.com/vue2-datepicker")
//- script(src="https://unpkg.com/vue-textarea-autosize")
//- script(src="https://unpkg.com/vue-multiselect@2")
//- script(src="https://unpkg.com/vue2-leaflet")
script(src="https://unpkg.com/vuedraggable")
script(src="/public/main.js", type="text/javascript", charset="utf-8")
footer.bg-dark

View File

@ -13,8 +13,7 @@ l-map(
v-if="journey.data.main[idx].hotel",
:lat-lng="journey.data.main[idx].hotel.latlon"
)
l-icon
div(v-html="generate_marker(journey.data.main[idx].hotel, 'darkblue')")
l-icon(v-html="generate_marker(journey.data.main[idx].hotel, 'darkblue')")
l-popup
h1.row.text-medium.text-center {{ journey.data.main[idx].hotel.sname }}
span.row.text-small.text-gray {{ journey.data.main[idx].hotel.display_name }}
@ -28,20 +27,20 @@ l-map(
)
span.row.text-small.text-white(v-else) {{ journey.data.main[idx].hotel.notes }}
l-marker(
v-for="place in journey.data.main[idx].places.activities",
v-for="(place, index) in journey.data.main[idx].places.activities",
:key="'activities'+index",
:lat-lng="place.latlon"
)
l-icon
div(
l-icon(
v-if="place.step == journey.sel_day",
v-html="generate_marker(place)"
)
div(
l-icon(
v-else-if="place.step == -1 || place.step == undefined",
v-html="generate_marker(place, 'gray')"
)
div(v-else-if="journey_edit", v-html="generate_marker(place, 'lightgray')")
div(v-else)
l-icon(v-else-if="journey_edit", v-html="generate_marker(place, 'lightgray')")
l-icon(v-else)
l-popup
h1.row.text-medium.text-center {{ place.sname }}
span.row.text-small.text-gray {{ place.display_name }}
@ -65,20 +64,20 @@ l-map(
) +
span.row.text-small.text-dark(v-else) {{ place.notes }}
l-marker(
v-for="place in journey.data.main[idx].places.restaurants",
v-for="(place, index) in journey.data.main[idx].places.restaurants",
:key="'restaurants'+index"
:lat-lng="place.latlon"
)
l-icon
div(v-html="generate_marker(place, 'cadetblue')")
l-icon(v-html="generate_marker(place, 'cadetblue')")
l-popup
h1.row.text-medium.text-center {{ place.sname }}
span.row.text-small.text-gray {{ place.display_name }}
span(v-if="journey_edit")
.row.input
textarea-autosize.col-12.col-sm-12.text-small(
placeholder="Notes",
v-model="place.notes",
:min-height="30",
placeholder="Notes"
v-model="place.notes"
:min-height="30"
:max-height="350"
)
span.row.text-small.text-dark(v-else) {{ place.notes }}
@ -86,8 +85,8 @@ l-map(
div(v-for= "latlngs in polyline.latlngs")
l-polyline(:lat-lngs="polyline.latlngs" :color="polyline.color")
l-marker(
v-for="(place, index) in latlngs",
v-for="(place, index) in latlngs"
:key="'plane'+index"
:lat-lng="place"
)
l-icon
div(v-html="generate_icon('plane', polyline.color, generate_rotation(index,latlngs))")
l-icon(v-html="generate_icon('plane', polyline.color, generate_rotation(index,latlngs))")

View File

@ -1,9 +1,14 @@
{
"compilerOptions": {
"target": "esnext",
"typeRoots": ["./node_modules/@types", "./types/ext"],
"lib": ["esnext", "DOM"],
"typeRoots": [
"./node_modules/@types",
"./types/ext"
],
"lib": [
"esnext",
"DOM"
],
"noEmit": true, // Disable emitting output (use esbuild to handle this)
"skipLibCheck": true, // Skip type checking of all declaration files (*.d.ts)
"strict": false, // Disable strict type checks if needed

510
yarn.lock
View File

@ -5,6 +5,19 @@ __metadata:
version: 8
cacheKey: 10c0
"@asamuzakjp/css-color@npm:^2.8.2":
version: 2.8.3
resolution: "@asamuzakjp/css-color@npm:2.8.3"
dependencies:
"@csstools/css-calc": "npm:^2.1.1"
"@csstools/css-color-parser": "npm:^3.0.7"
"@csstools/css-parser-algorithms": "npm:^3.0.4"
"@csstools/css-tokenizer": "npm:^3.0.3"
lru-cache: "npm:^10.4.3"
checksum: 10c0/e108c92ee5de6d8510c9aaca8375c0aeab730dc9b6d4bd287aea2a0379cfbaa09f0814dcacb3e2ddc5c79d7deedf3f82ec8d1ce0effd4a8fac8415b1fe553798
languageName: node
linkType: hard
"@babel/helper-string-parser@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-string-parser@npm:7.25.9"
@ -19,7 +32,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6":
"@babel/parser@npm:^7.23.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6":
version: 7.26.9
resolution: "@babel/parser@npm:7.26.9"
dependencies:
@ -40,6 +53,52 @@ __metadata:
languageName: node
linkType: hard
"@csstools/color-helpers@npm:^5.0.2":
version: 5.0.2
resolution: "@csstools/color-helpers@npm:5.0.2"
checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b
languageName: node
linkType: hard
"@csstools/css-calc@npm:^2.1.1, @csstools/css-calc@npm:^2.1.2":
version: 2.1.2
resolution: "@csstools/css-calc@npm:2.1.2"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.4
"@csstools/css-tokenizer": ^3.0.3
checksum: 10c0/34ced30553968ef5d5f9e00e3b90b48c47480cf130e282e99d57ec9b09f803aab8bc06325683e72a1518b5e7180a3da8b533f1b462062757c21989a53b482e1a
languageName: node
linkType: hard
"@csstools/css-color-parser@npm:^3.0.7":
version: 3.0.8
resolution: "@csstools/css-color-parser@npm:3.0.8"
dependencies:
"@csstools/color-helpers": "npm:^5.0.2"
"@csstools/css-calc": "npm:^2.1.2"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.4
"@csstools/css-tokenizer": ^3.0.3
checksum: 10c0/90722c5a62ca94e9d578ddf59be604a76400b932bd3d4bd23cb1ae9b7ace8fcf83c06995d2b31f96f4afef24a7cefba79beb11ed7ee4999d7ecfec3869368359
languageName: node
linkType: hard
"@csstools/css-parser-algorithms@npm:^3.0.4":
version: 3.0.4
resolution: "@csstools/css-parser-algorithms@npm:3.0.4"
peerDependencies:
"@csstools/css-tokenizer": ^3.0.3
checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd
languageName: node
linkType: hard
"@csstools/css-tokenizer@npm:^3.0.3":
version: 3.0.3
resolution: "@csstools/css-tokenizer@npm:3.0.3"
checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5
languageName: node
linkType: hard
"@esbuild/aix-ppc64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/aix-ppc64@npm:0.25.0"
@ -403,6 +462,21 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-sfc@npm:2.7.16":
version: 2.7.16
resolution: "@vue/compiler-sfc@npm:2.7.16"
dependencies:
"@babel/parser": "npm:^7.23.5"
postcss: "npm:^8.4.14"
prettier: "npm:^1.18.2 || ^2.0.0"
source-map: "npm:^0.6.1"
dependenciesMeta:
prettier:
optional: true
checksum: 10c0/eaeeef054c939e6cd7591199e2b998ae33d0afd65dc1b5675b54361f0c657c08ae82945791a1a8ca76762e1c1f8e69a00595daf280b854cbc3370ed5c5a34bcd
languageName: node
linkType: hard
"abbrev@npm:^3.0.0":
version: 3.0.0
resolution: "abbrev@npm:3.0.0"
@ -527,6 +601,13 @@ __metadata:
languageName: node
linkType: hard
"asynckit@npm:^0.4.0":
version: 0.4.0
resolution: "asynckit@npm:0.4.0"
checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d
languageName: node
linkType: hard
"atomic-sleep@npm:^1.0.0":
version: 1.0.0
resolution: "atomic-sleep@npm:1.0.0"
@ -710,6 +791,15 @@ __metadata:
languageName: node
linkType: hard
"combined-stream@npm:^1.0.8":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
dependencies:
delayed-stream: "npm:~1.0.0"
checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5
languageName: node
linkType: hard
"concat-map@npm:0.0.1":
version: 0.0.1
resolution: "concat-map@npm:0.0.1"
@ -743,6 +833,13 @@ __metadata:
languageName: node
linkType: hard
"core-js@npm:^2.6.5":
version: 2.6.12
resolution: "core-js@npm:2.6.12"
checksum: 10c0/00128efe427789120a06b819adc94cc72b96955acb331cb71d09287baf9bd37bebd191d91f1ee4939c893a050307ead4faea08876f09115112612b6a05684b63
languageName: node
linkType: hard
"cross-spawn@npm:^7.0.0":
version: 7.0.6
resolution: "cross-spawn@npm:7.0.6"
@ -754,6 +851,33 @@ __metadata:
languageName: node
linkType: hard
"cssstyle@npm:^4.2.1":
version: 4.2.1
resolution: "cssstyle@npm:4.2.1"
dependencies:
"@asamuzakjp/css-color": "npm:^2.8.2"
rrweb-cssom: "npm:^0.8.0"
checksum: 10c0/02ba8c47c0caaab57acadacb3eb6c0f5f009000f55d61f6563670e07d389b26edefeed497e6c1847fcd2e6bbe0b6974c2d4291f97fa0c6ec6add13a7fa926d84
languageName: node
linkType: hard
"csstype@npm:^3.1.0":
version: 3.1.3
resolution: "csstype@npm:3.1.3"
checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248
languageName: node
linkType: hard
"data-urls@npm:^5.0.0":
version: 5.0.0
resolution: "data-urls@npm:5.0.0"
dependencies:
whatwg-mimetype: "npm:^4.0.0"
whatwg-url: "npm:^14.0.0"
checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad
languageName: node
linkType: hard
"debug@npm:4, debug@npm:^4, debug@npm:^4.3.4":
version: 4.4.0
resolution: "debug@npm:4.4.0"
@ -766,6 +890,13 @@ __metadata:
languageName: node
linkType: hard
"decimal.js@npm:^10.4.3":
version: 10.5.0
resolution: "decimal.js@npm:10.5.0"
checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3
languageName: node
linkType: hard
"deferred-leveldown@npm:^7.0.0":
version: 7.0.0
resolution: "deferred-leveldown@npm:7.0.0"
@ -776,6 +907,13 @@ __metadata:
languageName: node
linkType: hard
"delayed-stream@npm:~1.0.0":
version: 1.0.0
resolution: "delayed-stream@npm:1.0.0"
checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
languageName: node
linkType: hard
"depd@npm:2.0.0":
version: 2.0.0
resolution: "depd@npm:2.0.0"
@ -850,6 +988,13 @@ __metadata:
languageName: node
linkType: hard
"entities@npm:^4.5.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250
languageName: node
linkType: hard
"env-paths@npm:^2.2.0":
version: 2.2.1
resolution: "env-paths@npm:2.2.1"
@ -887,6 +1032,18 @@ __metadata:
languageName: node
linkType: hard
"es-set-tostringtag@npm:^2.1.0":
version: 2.1.0
resolution: "es-set-tostringtag@npm:2.1.0"
dependencies:
es-errors: "npm:^1.3.0"
get-intrinsic: "npm:^1.2.6"
has-tostringtag: "npm:^1.0.2"
hasown: "npm:^2.0.2"
checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af
languageName: node
linkType: hard
"esbuild@npm:^0.25.0":
version: 0.25.0
resolution: "esbuild@npm:0.25.0"
@ -1045,7 +1202,7 @@ __metadata:
languageName: node
linkType: hard
"fastify@npm:^5.0.0":
"fastify@npm:^5.2.1":
version: 5.2.1
resolution: "fastify@npm:5.2.1"
dependencies:
@ -1107,6 +1264,18 @@ __metadata:
languageName: node
linkType: hard
"form-data@npm:^4.0.1":
version: 4.0.2
resolution: "form-data@npm:4.0.2"
dependencies:
asynckit: "npm:^0.4.0"
combined-stream: "npm:^1.0.8"
es-set-tostringtag: "npm:^2.1.0"
mime-types: "npm:^2.1.12"
checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c
languageName: node
linkType: hard
"fs-minipass@npm:^3.0.0":
version: 3.0.3
resolution: "fs-minipass@npm:3.0.3"
@ -1257,6 +1426,15 @@ __metadata:
languageName: node
linkType: hard
"html-encoding-sniffer@npm:^4.0.0":
version: 4.0.0
resolution: "html-encoding-sniffer@npm:4.0.0"
dependencies:
whatwg-encoding: "npm:^3.1.1"
checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140
languageName: node
linkType: hard
"http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
@ -1277,7 +1455,7 @@ __metadata:
languageName: node
linkType: hard
"http-proxy-agent@npm:^7.0.0":
"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2":
version: 7.0.2
resolution: "http-proxy-agent@npm:7.0.2"
dependencies:
@ -1287,7 +1465,7 @@ __metadata:
languageName: node
linkType: hard
"https-proxy-agent@npm:^7.0.1":
"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6":
version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6"
dependencies:
@ -1297,7 +1475,7 @@ __metadata:
languageName: node
linkType: hard
"iconv-lite@npm:^0.6.2":
"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
dependencies:
@ -1416,6 +1594,13 @@ __metadata:
languageName: node
linkType: hard
"is-potential-custom-element-name@npm:^1.0.1":
version: 1.0.1
resolution: "is-potential-custom-element-name@npm:1.0.1"
checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9
languageName: node
linkType: hard
"is-promise@npm:^2.0.0":
version: 2.2.2
resolution: "is-promise@npm:2.2.2"
@ -1485,6 +1670,40 @@ __metadata:
languageName: node
linkType: hard
"jsdom@npm:^26.0.0":
version: 26.0.0
resolution: "jsdom@npm:26.0.0"
dependencies:
cssstyle: "npm:^4.2.1"
data-urls: "npm:^5.0.0"
decimal.js: "npm:^10.4.3"
form-data: "npm:^4.0.1"
html-encoding-sniffer: "npm:^4.0.0"
http-proxy-agent: "npm:^7.0.2"
https-proxy-agent: "npm:^7.0.6"
is-potential-custom-element-name: "npm:^1.0.1"
nwsapi: "npm:^2.2.16"
parse5: "npm:^7.2.1"
rrweb-cssom: "npm:^0.8.0"
saxes: "npm:^6.0.0"
symbol-tree: "npm:^3.2.4"
tough-cookie: "npm:^5.0.0"
w3c-xmlserializer: "npm:^5.0.0"
webidl-conversions: "npm:^7.0.0"
whatwg-encoding: "npm:^3.1.1"
whatwg-mimetype: "npm:^4.0.0"
whatwg-url: "npm:^14.1.0"
ws: "npm:^8.18.0"
xml-name-validator: "npm:^5.0.0"
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
checksum: 10c0/e48725ba4027edcfc9bca5799eaec72c6561ecffe3675a8ff87fe9c3541ca4ff9f82b4eff5b3d9c527302da0d859b2f60e9364347a5d42b77f5c76c436c569dc
languageName: node
linkType: hard
"json-schema-ref-resolver@npm:^2.0.0":
version: 2.0.1
resolution: "json-schema-ref-resolver@npm:2.0.1"
@ -1511,6 +1730,13 @@ __metadata:
languageName: node
linkType: hard
"leaflet@npm:^1.9.4":
version: 1.9.4
resolution: "leaflet@npm:1.9.4"
checksum: 10c0/f639441dbb7eb9ae3fcd29ffd7d3508f6c6106892441634b0232fafb9ffb1588b05a8244ec7085de2c98b5ed703894df246898477836cfd0ce5b96d4717b5ca1
languageName: node
linkType: hard
"level-codec@npm:^10.0.0":
version: 10.0.0
resolution: "level-codec@npm:10.0.0"
@ -1590,7 +1816,7 @@ __metadata:
languageName: node
linkType: hard
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3":
version: 10.4.3
resolution: "lru-cache@npm:10.4.3"
checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb
@ -1630,6 +1856,22 @@ __metadata:
languageName: node
linkType: hard
"mime-db@npm:1.52.0":
version: 1.52.0
resolution: "mime-db@npm:1.52.0"
checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa
languageName: node
linkType: hard
"mime-types@npm:^2.1.12":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
mime-db: "npm:1.52.0"
checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2
languageName: node
linkType: hard
"mime@npm:^3":
version: 3.0.0
resolution: "mime@npm:3.0.0"
@ -1759,6 +2001,15 @@ __metadata:
languageName: node
linkType: hard
"nanoid@npm:^3.3.8":
version: 3.3.8
resolution: "nanoid@npm:3.3.8"
bin:
nanoid: bin/nanoid.cjs
checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120
languageName: node
linkType: hard
"napi-macros@npm:~2.0.0":
version: 2.0.0
resolution: "napi-macros@npm:2.0.0"
@ -1842,6 +2093,13 @@ __metadata:
languageName: node
linkType: hard
"nwsapi@npm:^2.2.16":
version: 2.2.16
resolution: "nwsapi@npm:2.2.16"
checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a
languageName: node
linkType: hard
"object-assign@npm:^4.1.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
@ -1870,6 +2128,15 @@ __metadata:
languageName: node
linkType: hard
"parse5@npm:^7.2.1":
version: 7.2.1
resolution: "parse5@npm:7.2.1"
dependencies:
entities: "npm:^4.5.0"
checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80
languageName: node
linkType: hard
"path-key@npm:^3.1.0":
version: 3.1.1
resolution: "path-key@npm:3.1.1"
@ -1904,6 +2171,13 @@ __metadata:
languageName: node
linkType: hard
"picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
languageName: node
linkType: hard
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
@ -1948,6 +2222,26 @@ __metadata:
languageName: node
linkType: hard
"postcss@npm:^8.4.14":
version: 8.5.3
resolution: "postcss@npm:8.5.3"
dependencies:
nanoid: "npm:^3.3.8"
picocolors: "npm:^1.1.1"
source-map-js: "npm:^1.2.1"
checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3
languageName: node
linkType: hard
"prettier@npm:^1.18.2 || ^2.0.0":
version: 2.8.8
resolution: "prettier@npm:2.8.8"
bin:
prettier: bin-prettier.js
checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a
languageName: node
linkType: hard
"prettier@npm:^3.5.2":
version: 3.5.2
resolution: "prettier@npm:3.5.2"
@ -2124,6 +2418,13 @@ __metadata:
languageName: node
linkType: hard
"punycode@npm:^2.3.1":
version: 2.3.1
resolution: "punycode@npm:2.3.1"
checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
languageName: node
linkType: hard
"queue-microtask@npm:^1.2.3":
version: 1.2.3
resolution: "queue-microtask@npm:1.2.3"
@ -2237,6 +2538,13 @@ __metadata:
languageName: node
linkType: hard
"rrweb-cssom@npm:^0.8.0":
version: 0.8.0
resolution: "rrweb-cssom@npm:0.8.0"
checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b
languageName: node
linkType: hard
"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
@ -2267,6 +2575,15 @@ __metadata:
languageName: node
linkType: hard
"saxes@npm:^6.0.0":
version: 6.0.0
resolution: "saxes@npm:6.0.0"
dependencies:
xmlchars: "npm:^2.2.0"
checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74
languageName: node
linkType: hard
"secure-json-parse@npm:^3.0.1":
version: 3.0.2
resolution: "secure-json-parse@npm:3.0.2"
@ -2366,6 +2683,20 @@ __metadata:
languageName: node
linkType: hard
"source-map-js@npm:^1.2.1":
version: 1.2.1
resolution: "source-map-js@npm:1.2.1"
checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf
languageName: node
linkType: hard
"source-map@npm:^0.6.1":
version: 0.6.1
resolution: "source-map@npm:0.6.1"
checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011
languageName: node
linkType: hard
"split2@npm:^4.0.0":
version: 4.2.0
resolution: "split2@npm:4.2.0"
@ -2461,6 +2792,13 @@ __metadata:
languageName: node
linkType: hard
"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"
checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509
languageName: node
linkType: hard
"tar@npm:^7.4.3":
version: 7.4.3
resolution: "tar@npm:7.4.3"
@ -2484,6 +2822,24 @@ __metadata:
languageName: node
linkType: hard
"tldts-core@npm:^6.1.78":
version: 6.1.78
resolution: "tldts-core@npm:6.1.78"
checksum: 10c0/aea5e664da879cd862ccf5df9286531ddf4c34a9ca832480188bf6cd165cd45654f5b0a0f0f5315e16203ebfb87d52f8630b9419e729b3cfe5eff073c398693e
languageName: node
linkType: hard
"tldts@npm:^6.1.32":
version: 6.1.78
resolution: "tldts@npm:6.1.78"
dependencies:
tldts-core: "npm:^6.1.78"
bin:
tldts: bin/cli.js
checksum: 10c0/966f3f5a63405db6abb49b479784baa677510993f21ffbd67571f3d819451d70a603f1246b13f1c309a7573c4d9fbe0241aca6ff6e8399cbe7d2dd70b7ee4052
languageName: node
linkType: hard
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
@ -2523,6 +2879,24 @@ __metadata:
languageName: node
linkType: hard
"tough-cookie@npm:^5.0.0":
version: 5.1.1
resolution: "tough-cookie@npm:5.1.1"
dependencies:
tldts: "npm:^6.1.32"
checksum: 10c0/84fe18b7c28ce273c916d95028c00ffff58c285d58e90fbd44eb9380dd1bc21892c675cd1bbd4bfbc95108fe833c406b285844757d41636248bfe264655a6ef8
languageName: node
linkType: hard
"tr46@npm:^5.0.0":
version: 5.0.0
resolution: "tr46@npm:5.0.0"
dependencies:
punycode: "npm:^2.3.1"
checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee
languageName: node
linkType: hard
"undefsafe@npm:^2.0.5":
version: 2.0.5
resolution: "undefsafe@npm:2.0.5"
@ -2537,6 +2911,13 @@ __metadata:
languageName: node
linkType: hard
"undici@npm:^7.3.0":
version: 7.3.0
resolution: "undici@npm:7.3.0"
checksum: 10c0/62c5e335725cadb02e19950932c7823fc330cbfd80106e6836daa6db1379aa727510b77de0a4e6f912087b288ded93f7daf4b8c154ad36fd5c9c4b96b26888b8
languageName: node
linkType: hard
"unique-filename@npm:^4.0.0":
version: 4.0.0
resolution: "unique-filename@npm:4.0.0"
@ -2579,13 +2960,99 @@ __metadata:
"@prettier/plugin-pug": "npm:^3.0.0"
"@types/node": "npm:^22.13.5"
esbuild: "npm:^0.25.0"
fastify: "npm:^5.0.0"
fastify: "npm:^5.2.1"
jsdom: "npm:^26.0.0"
leaflet: "npm:^1.9.4"
nodemon: "npm:^3.0.1"
prettier: "npm:^3.5.2"
pug: "npm:^3.0.2"
undici: "npm:^7.3.0"
vue: "npm:2"
vue-multiselect: "npm:2"
vue-textarea-autosize: "npm:^1.1.1"
vue2-leaflet: "npm:^2.7.1"
languageName: unknown
linkType: soft
"vue-multiselect@npm:2":
version: 2.1.9
resolution: "vue-multiselect@npm:2.1.9"
checksum: 10c0/baecfbb97b4b225bd2e2054f2eed640917b47f448a76a43f084d344764c813a58e825ea2131f6803c125e6e8d4e0b4edb5712da49dd1b8a082f29ac845cc7c2b
languageName: node
linkType: hard
"vue-textarea-autosize@npm:^1.1.1":
version: 1.1.1
resolution: "vue-textarea-autosize@npm:1.1.1"
dependencies:
core-js: "npm:^2.6.5"
checksum: 10c0/22614d412b7e592b68c9b127cfc4257985058571d185ef1885acd3666b77381c87a2006b5084d5687b5e3729ad5b8c53ff962eaf43bbefa1dc5ae0e58cada9db
languageName: node
linkType: hard
"vue2-leaflet@npm:^2.7.1":
version: 2.7.1
resolution: "vue2-leaflet@npm:2.7.1"
peerDependencies:
"@types/leaflet": ^1.5.7
leaflet: ^1.3.4
vue: ^2.5.17
checksum: 10c0/34ae5cc4b78deaf3ee7f73a210b2e45f9d80b92860d5ac5d831d74fd8a94d06983845f01e6203b4e61bad7f6385715f0ea3cd23b2e39fb6c8ce912fe4d096af6
languageName: node
linkType: hard
"vue@npm:2":
version: 2.7.16
resolution: "vue@npm:2.7.16"
dependencies:
"@vue/compiler-sfc": "npm:2.7.16"
csstype: "npm:^3.1.0"
checksum: 10c0/15bf536c131a863d03c42386a4bbc82316262129421ef70e88d1758bcf951446ef51edeff42e3b27d026015330fe73d90155fca270eb5eadd30b0290735f2c3e
languageName: node
linkType: hard
"w3c-xmlserializer@npm:^5.0.0":
version: 5.0.0
resolution: "w3c-xmlserializer@npm:5.0.0"
dependencies:
xml-name-validator: "npm:^5.0.0"
checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b
languageName: node
linkType: hard
"webidl-conversions@npm:^7.0.0":
version: 7.0.0
resolution: "webidl-conversions@npm:7.0.0"
checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4
languageName: node
linkType: hard
"whatwg-encoding@npm:^3.1.1":
version: 3.1.1
resolution: "whatwg-encoding@npm:3.1.1"
dependencies:
iconv-lite: "npm:0.6.3"
checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e
languageName: node
linkType: hard
"whatwg-mimetype@npm:^4.0.0":
version: 4.0.0
resolution: "whatwg-mimetype@npm:4.0.0"
checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df
languageName: node
linkType: hard
"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.0":
version: 14.1.1
resolution: "whatwg-url@npm:14.1.1"
dependencies:
tr46: "npm:^5.0.0"
webidl-conversions: "npm:^7.0.0"
checksum: 10c0/de1e9cc2f04cb000f232c839d4999384ba41b680ef8a89e7c61c9bc40354ba8593c775d068faaf0819f5866e4d6ca3e7b9b386e2123aa475bfd33da02316f476
languageName: node
linkType: hard
"which@npm:^2.0.1":
version: 2.0.2
resolution: "which@npm:2.0.2"
@ -2642,6 +3109,35 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:^8.18.0":
version: 8.18.1
resolution: "ws@npm:8.18.1"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 10c0/e498965d6938c63058c4310ffb6967f07d4fa06789d3364829028af380d299fe05762961742971c764973dce3d1f6a2633fe8b2d9410c9b52e534b4b882a99fa
languageName: node
linkType: hard
"xml-name-validator@npm:^5.0.0":
version: 5.0.0
resolution: "xml-name-validator@npm:5.0.0"
checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5
languageName: node
linkType: hard
"xmlchars@npm:^2.2.0":
version: 2.2.0
resolution: "xmlchars@npm:2.2.0"
checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593
languageName: node
linkType: hard
"yallist@npm:^4.0.0":
version: 4.0.0
resolution: "yallist@npm:4.0.0"