Migrate to esbuild & ts
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
soraefir 2025-02-23 15:20:34 +01:00
parent 96c12c8da4
commit 90f6ae7695
Signed by: sora
GPG Key ID: A362EA0491E2EEA0
10 changed files with 590 additions and 220 deletions

4
.gitignore vendored
View File

@ -3,3 +3,7 @@ yarn-error.log
node_modules/ node_modules/
auth/ auth/
db/ db/
.yarn/
public/*.js
public/*.map
.yarnrc.yml

View File

@ -5,8 +5,9 @@
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"build": "esbuild src/app.ts --bundle --outfile=public/main.js --bundle --minify --sourcemap --tsconfig=tsconfig.json",
"start": "node server.js", "start": "node server.js",
"demon": "nodemon server.js" "demon": "nodemon -e ts,pug --watch src --exec \"yarn build && yarn start\""
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -19,10 +20,13 @@
"@fastify/static": "^8.0.0", "@fastify/static": "^8.0.0",
"@fastify/view": "^10.0.0", "@fastify/view": "^10.0.0",
"@prettier/plugin-pug": "^3.0.0", "@prettier/plugin-pug": "^3.0.0",
"axios": "^1.4.0", "@types/node": "^22.13.5",
"axios": "^1.7.9",
"esbuild": "^0.25.0",
"fastify": "^5.0.0", "fastify": "^5.0.0",
"nodemon": "^3.0.1", "nodemon": "^3.0.1",
"prettier": "^3.0.0", "pretier": "^0.0.1",
"prettier": "^3.5.2",
"pug": "^3.0.2" "pug": "^3.0.2"
} }
} }

BIN
public/js/.DS_Store vendored

Binary file not shown.

122
src/api.ts Normal file
View File

@ -0,0 +1,122 @@
import axios from "axios";
export const load = (id: string) =>
axios.get("/api/" + id).then((response) => {
if (response.data == "") throw "Invalid Journey Data Received";
let res = response.data;
for (let e of res.main) {
if (e.dateRange) {
e.dateRange[0] = new Date(e.dateRange[0]);
e.dateRange[1] = new Date(e.dateRange[1]);
}
e.step_title = e.step_title || [];
}
return res;
});
export const save = (id: string, v: string) =>
axios
.post("/api/" + id, v)
.then((response) => {
console.log("Saved...");
})
.catch((error) => {
console.warn("Error! Could not reach the API.");
});
export const query_nominatim = (
q: string,
f: (v: string) => Boolean = () => true,
) =>
axios
.get("/api/place/" + q)
.then((res) => res.data)
.then((res) => res.filter(f));
export const query_flight = (q: string) =>
axios.get("/api/flight/" + q).then((res) => res.data);
type NominatimResult = {
type: string;
category: string;
display_name: string; // DEBUG ONLY
};
export const is_restauration_type = (e: NominatimResult) =>
["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"].indexOf(
e.type,
) != -1;
export const is_attraction_type = (e: NominatimResult): boolean =>
[
"tourism",
"leisure",
"place",
"amenity",
"highway",
"historic",
"natural",
"waterway",
].indexOf(e.category) != -1 ||
[
"place_of_worship",
"national_park",
"nature_reserve",
"protected_area",
].indexOf(e.type) != -1;
export const icon_type = (item: NominatimResult): string => {
let t = item.type;
let c = item.category;
const arr = ["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"];
if (arr.indexOf(t) != -1) {
return "utensils";
} else if (t == "hotel" || t == "hostel" || t == "guest_house") {
return "bed";
} else if (t == "museum" || c == "historic" || t == "place_of_worship") {
return "landmark";
} else if (t == "peak" || t == "viewpoint") {
return "mountain";
} else if (t == "parking") {
return "parking";
} else if (
t == "water" ||
t == "river" ||
t == "lake" ||
t == "torrent" ||
t == "aquarium"
) {
return "water";
} else if (t == "community_centre" || t == "locality") {
return "building";
} else if (t == "attraction") {
return "landmark";
} else if (t == "information" || t == "university") {
return "landmark";
} else if (t == "bridge") {
return "archway";
} else if (
t == "woodland" ||
t == "shieling" ||
t == "national_park" ||
t == "zoo" ||
t == "park" ||
t == "garden" ||
0
) {
return "tree";
} else if (t == "water_park" || t == "theme_park") {
return "dice-five";
} else if (
t == "?" ||
t == "neighbourhood" ||
t == "quarter" ||
c == "highway"
) {
return "";
} else {
console.log(item.display_name, item.category, item.type);
return "question";
}
};

13
src/app.ts Normal file
View File

@ -0,0 +1,13 @@
import "./types/ext";
import "./api";
import "./old.js";
console.log("TEST");
if (false) {
console.log("B");
}
function test() {
console.log("CC");
}

View File

@ -1,142 +1,4 @@
const gen_id = (length) => { import * as api from "./api";
var result = "";
const characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
const len = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * len));
}
return result;
};
Date.prototype.toJSONLocal = (function () {
function addZ(n) {
return (n < 10 ? "0" : "") + n;
}
return function () {
return (
this.getFullYear() +
"-" +
addZ(this.getMonth() + 1) +
"-" +
addZ(this.getDate())
);
};
})();
function toEncoded(string) {
const codeUnits = Uint16Array.from(
{ length: string.length },
(element, index) => string.charCodeAt(index),
);
const charCodes = new Uint8Array(codeUnits.buffer);
let result = "";
charCodes.forEach((char) => {
result += String.fromCharCode(char);
});
return window.btoa(result);
}
function toDecoded(string) {
let binary = window.atob(string);
const bytes = Uint8Array.from({ length: binary.length }, (element, index) =>
binary.charCodeAt(index),
);
const charCodes = new Uint16Array(bytes.buffer);
let result = "";
charCodes.forEach((char) => {
result += String.fromCharCode(char);
});
return result;
}
const query_nominatim = (q, f) =>
axios
.get("/api/place/" + q)
.then((res) => res.data)
.then((res) => res.filter(f));
const query_flight = (q) =>
axios.get("/api/flight/" + q).then((res) => res.data);
const is_restauration_type = (e) =>
["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"].indexOf(
e.type,
) != -1;
const is_attraction_type = (e) =>
[
"tourism",
"leisure",
"place",
"amenity",
"highway",
"historic",
"natural",
"waterway",
].indexOf(e.category) != -1 ||
[
"place_of_worship",
"national_park",
"nature_reserve",
"protected_area",
].indexOf(e.type != -1);
const icon_type = (item) => {
let t = item.type;
let c = item.category;
const arr = ["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"];
if (arr.indexOf(t) != -1) {
return "utensils";
} else if (t == "hotel" || t == "hostel" || t == "guest_house") {
return "bed";
} else if (t == "museum" || c == "historic" || t == "place_of_worship") {
return "landmark";
} else if (t == "peak" || t == "viewpoint") {
return "mountain";
} else if (t == "parking") {
return "parking";
} else if (
t == "water" ||
t == "river" ||
t == "lake" ||
t == "torrent" ||
t == "aquarium"
) {
return "water";
} else if (t == "community_centre" || t == "locality") {
return "building";
} else if (t == "attraction") {
return "landmark";
} else if (t == "information" || t == "university") {
return "landmark";
} else if (t == "bridge") {
return "archway";
} else if (
t == "woodland" ||
t == "shieling" ||
t == "national_park" ||
t == "zoo" ||
t == "park" ||
t == "garden" ||
0
) {
return "tree";
} else if ((t == "water_park", t == "theme_park")) {
return "dice-five";
} else if (
t == "?" ||
t == "neighbourhood" ||
t == "quarter" ||
c == "highway"
) {
return "";
} else {
console.log(item.display_name, item.category, item.type);
return "question";
}
};
Vue.component("l-map", window.Vue2Leaflet.LMap); Vue.component("l-map", window.Vue2Leaflet.LMap);
Vue.component("l-tile-layer", window.Vue2Leaflet.LTileLayer); Vue.component("l-tile-layer", window.Vue2Leaflet.LTileLayer);
@ -153,7 +15,7 @@ const app = new Vue({
data: { data: {
journey_edit: journey_edit:
["view", "short"].indexOf(window.location.pathname.split("/")[1]) == -1, ["view", "short"].indexOf(window.location.pathname.split("/")[1]) == -1,
journey_id: window.location.pathname.split("/").pop() || gen_id(16), journey_id: window.location.pathname.split("/").pop() || String.gen_id(16),
journey_step_data: { day: 1, section: 0 }, journey_step_data: { day: 1, section: 0 },
journey_data: { journey_data: {
@ -374,25 +236,21 @@ const app = new Vue({
}, },
generate_icon: function (item, fcolor) { generate_icon: function (item, fcolor) {
return L.AwesomeMarkers.icon({ return L.AwesomeMarkers.icon({
icon: icon_type(item) || "star", icon: api.icon_type(item) || "star",
prefix: "fa", prefix: "fa",
markerColor: fcolor || item.color || "blue", markerColor: fcolor || item.color || "blue",
}).createIcon().outerHTML; }).createIcon().outerHTML;
}, },
save_data: function () { save_data: function () {
this.impexp = toEncoded(JSON.stringify(this.journey_data)); this.impexp = JSON.stringify(this.journey_data).toEncoded();
axios api.save(this.journey_id, this.journey_data);
.post("/api/" + this.journey_id, this.journey_data)
.then((response) => {
console.log("Saved...");
})
.catch((error) => {
console.warn("Error! Could not reach the API.");
});
}, },
import_data: function () { import_data: function () {
this.journey_data = Object.assign({}, JSON.parse(toDecoded(this.impexp))); this.journey_data = Object.assign(
{},
JSON.parse(this.impexp.toDecoded()),
);
this.journey_data.main.forEach((e) => { this.journey_data.main.forEach((e) => {
if (e.dateRange) { if (e.dateRange) {
e.dateRange[0] = new Date(e.dateRange[0]); e.dateRange[0] = new Date(e.dateRange[0]);
@ -401,7 +259,7 @@ const app = new Vue({
}); });
}, },
export_data: function () { export_data: function () {
this.impexp = toEncoded(JSON.stringify(this.journey_data)); this.impexp = JSON.stringify(this.journey_data).toEncoded();
}, },
filter_selected: function (list, step) { filter_selected: function (list, step) {
return list.filter((e) => return list.filter((e) =>
@ -438,18 +296,7 @@ const app = new Vue({
} }
}); });
axios.get("/api/" + this.journey_id).then((response) => { api.load(this.journey_id).then((r) => (app.journey_data = r));
if (response.data == "") throw "Invalid Journey Data Received";
app.journey_data = response.data;
for (let e of app.journey_data.main) {
if (e.dateRange) {
e.dateRange[0] = new Date(e.dateRange[0]);
e.dateRange[1] = new Date(e.dateRange[1]);
}
e.step_title = e.step_title || [];
}
});
this.debounceSave = _.debounce(this.save_data, 500); this.debounceSave = _.debounce(this.save_data, 500);
this.debounceSearch = { this.debounceSearch = {
@ -465,13 +312,15 @@ const app = new Vue({
}, 500), }, 500),
restaurants: _.debounce((q) => { restaurants: _.debounce((q) => {
this.querying.food = true; this.querying.food = true;
this.search_nominatim(q, (r) => is_restauration_type(r)).then((r) => { this.search_nominatim(q, (r) => api.is_restauration_type(r)).then(
(r) => {
this.querying.food = false; this.querying.food = false;
}); },
);
}, 500), }, 500),
places: _.debounce((q) => { places: _.debounce((q) => {
this.querying.place = true; this.querying.place = true;
this.search_nominatim(q, (r) => is_attraction_type(r)).then((r) => { this.search_nominatim(q, (r) => api.is_attraction_type(r)).then((r) => {
this.querying.place = false; this.querying.place = false;
}); });
}, 500), }, 500),

79
src/types/ext.ts Normal file
View File

@ -0,0 +1,79 @@
// DATE EXTENTION
declare global {
interface Date {
toJSONLocal: () => string;
}
}
Date.prototype.toJSONLocal = function () {
function addZ(n: number): string {
return n <= 9 ? `0${n}` : `${n}`;
}
return [
this.getFullYear(),
addZ(this.getMonth() + 1),
addZ(this.getDate()),
].join("-");
};
// ARRAY EXTENTION
declare global {
interface Array<T> {
foldl<B>(f: (x: T, acc: B) => B, acc: B): B;
foldr<B>(f: (x: T, acc: B) => B, acc: B): B;
}
}
Array.prototype.foldr = function <T, B>(f: (x: T, acc: B) => B, acc: B): B {
return this.reverse().foldl(f, acc);
};
Array.prototype.foldl = function <T, B>(f: (x: T, acc: B) => B, acc: B): B {
for (let i = 0; i < this.length; i++) acc = f(this[i], acc);
return acc;
};
// STRING EXTENTION
declare global {
interface String {
btoa: () => String;
toEncoded: () => String;
toDecoded: () => String;
}
}
String.prototype.btoa = function () {
return window.btoa(this);
};
String.prototype.toEncoded = function () {
return window.btoa(
Array.from(this as string, (c) => c.charCodeAt(0)).foldl(
(e, v) => v + String.fromCharCode(e),
"",
),
);
};
String.prototype.toDecoded = function () {
return Array.from(window.atob(this), (c) => c.charCodeAt(0)).foldl(
(e, v) => v + String.fromCharCode(e),
"",
);
};
declare global {
interface StringConstructor {
gen_id: (l: Number) => String;
}
}
String.gen_id = function (length) {
const characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return Array.from(Array(length))
.map((_v) =>
characters.charAt(Math.floor(Math.random() * characters.length)),
)
.join("");
};
export {};

View File

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

12
tsconfig.json Normal file
View File

@ -0,0 +1,12 @@
{
"compilerOptions": {
"target": "esnext",
"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
"moduleResolution": "node",
}
}

319
yarn.lock
View File

@ -40,6 +40,181 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@esbuild/aix-ppc64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/aix-ppc64@npm:0.25.0"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/android-arm64@npm:0.25.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/android-arm@npm:0.25.0"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/android-x64@npm:0.25.0"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/darwin-arm64@npm:0.25.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/darwin-x64@npm:0.25.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/freebsd-arm64@npm:0.25.0"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/freebsd-x64@npm:0.25.0"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-arm64@npm:0.25.0"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-arm@npm:0.25.0"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-ia32@npm:0.25.0"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-loong64@npm:0.25.0"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-mips64el@npm:0.25.0"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-ppc64@npm:0.25.0"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-riscv64@npm:0.25.0"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-s390x@npm:0.25.0"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/linux-x64@npm:0.25.0"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/netbsd-arm64@npm:0.25.0"
conditions: os=netbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/netbsd-x64@npm:0.25.0"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/openbsd-arm64@npm:0.25.0"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/openbsd-x64@npm:0.25.0"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/sunos-x64@npm:0.25.0"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/win32-arm64@npm:0.25.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/win32-ia32@npm:0.25.0"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.25.0":
version: 0.25.0
resolution: "@esbuild/win32-x64@npm:0.25.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@fastify/accept-negotiator@npm:^2.0.0": "@fastify/accept-negotiator@npm:^2.0.0":
version: 2.0.1 version: 2.0.1
resolution: "@fastify/accept-negotiator@npm:2.0.1" resolution: "@fastify/accept-negotiator@npm:2.0.1"
@ -219,6 +394,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:^22.13.5":
version: 22.13.5
resolution: "@types/node@npm:22.13.5"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/a2e7ed7bb0690e439004779baedeb05159c5cc41ef6d81c7a6ebea5303fde4033669e1c0e41ff7453b45fd2fea8dbd55fddfcd052950c7fcae3167c970bca725
languageName: node
linkType: hard
"abbrev@npm:^3.0.0": "abbrev@npm:^3.0.0":
version: 3.0.0 version: 3.0.0
resolution: "abbrev@npm:3.0.0" resolution: "abbrev@npm:3.0.0"
@ -367,7 +551,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"axios@npm:^1.4.0": "axios@npm:^1.7.9":
version: 1.7.9 version: 1.7.9
resolution: "axios@npm:1.7.9" resolution: "axios@npm:1.7.9"
dependencies: dependencies:
@ -466,7 +650,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"call-bind-apply-helpers@npm:^1.0.1": "call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2":
version: 1.0.2 version: 1.0.2
resolution: "call-bind-apply-helpers@npm:1.0.2" resolution: "call-bind-apply-helpers@npm:1.0.2"
dependencies: dependencies:
@ -728,7 +912,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"es-object-atoms@npm:^1.0.0": "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
version: 1.1.1 version: 1.1.1
resolution: "es-object-atoms@npm:1.1.1" resolution: "es-object-atoms@npm:1.1.1"
dependencies: dependencies:
@ -749,6 +933,92 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"esbuild@npm:^0.25.0":
version: 0.25.0
resolution: "esbuild@npm:0.25.0"
dependencies:
"@esbuild/aix-ppc64": "npm:0.25.0"
"@esbuild/android-arm": "npm:0.25.0"
"@esbuild/android-arm64": "npm:0.25.0"
"@esbuild/android-x64": "npm:0.25.0"
"@esbuild/darwin-arm64": "npm:0.25.0"
"@esbuild/darwin-x64": "npm:0.25.0"
"@esbuild/freebsd-arm64": "npm:0.25.0"
"@esbuild/freebsd-x64": "npm:0.25.0"
"@esbuild/linux-arm": "npm:0.25.0"
"@esbuild/linux-arm64": "npm:0.25.0"
"@esbuild/linux-ia32": "npm:0.25.0"
"@esbuild/linux-loong64": "npm:0.25.0"
"@esbuild/linux-mips64el": "npm:0.25.0"
"@esbuild/linux-ppc64": "npm:0.25.0"
"@esbuild/linux-riscv64": "npm:0.25.0"
"@esbuild/linux-s390x": "npm:0.25.0"
"@esbuild/linux-x64": "npm:0.25.0"
"@esbuild/netbsd-arm64": "npm:0.25.0"
"@esbuild/netbsd-x64": "npm:0.25.0"
"@esbuild/openbsd-arm64": "npm:0.25.0"
"@esbuild/openbsd-x64": "npm:0.25.0"
"@esbuild/sunos-x64": "npm:0.25.0"
"@esbuild/win32-arm64": "npm:0.25.0"
"@esbuild/win32-ia32": "npm:0.25.0"
"@esbuild/win32-x64": "npm:0.25.0"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
"@esbuild/android-arm":
optional: true
"@esbuild/android-arm64":
optional: true
"@esbuild/android-x64":
optional: true
"@esbuild/darwin-arm64":
optional: true
"@esbuild/darwin-x64":
optional: true
"@esbuild/freebsd-arm64":
optional: true
"@esbuild/freebsd-x64":
optional: true
"@esbuild/linux-arm":
optional: true
"@esbuild/linux-arm64":
optional: true
"@esbuild/linux-ia32":
optional: true
"@esbuild/linux-loong64":
optional: true
"@esbuild/linux-mips64el":
optional: true
"@esbuild/linux-ppc64":
optional: true
"@esbuild/linux-riscv64":
optional: true
"@esbuild/linux-s390x":
optional: true
"@esbuild/linux-x64":
optional: true
"@esbuild/netbsd-arm64":
optional: true
"@esbuild/netbsd-x64":
optional: true
"@esbuild/openbsd-arm64":
optional: true
"@esbuild/openbsd-x64":
optional: true
"@esbuild/sunos-x64":
optional: true
"@esbuild/win32-arm64":
optional: true
"@esbuild/win32-ia32":
optional: true
"@esbuild/win32-x64":
optional: true
bin:
esbuild: bin/esbuild
checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d
languageName: node
linkType: hard
"escape-html@npm:~1.0.3": "escape-html@npm:~1.0.3":
version: 1.0.3 version: 1.0.3
resolution: "escape-html@npm:1.0.3" resolution: "escape-html@npm:1.0.3"
@ -941,24 +1211,24 @@ __metadata:
linkType: hard linkType: hard
"get-intrinsic@npm:^1.2.6": "get-intrinsic@npm:^1.2.6":
version: 1.2.7 version: 1.3.0
resolution: "get-intrinsic@npm:1.2.7" resolution: "get-intrinsic@npm:1.3.0"
dependencies: dependencies:
call-bind-apply-helpers: "npm:^1.0.1" call-bind-apply-helpers: "npm:^1.0.2"
es-define-property: "npm:^1.0.1" es-define-property: "npm:^1.0.1"
es-errors: "npm:^1.3.0" es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0" es-object-atoms: "npm:^1.1.1"
function-bind: "npm:^1.1.2" function-bind: "npm:^1.1.2"
get-proto: "npm:^1.0.0" get-proto: "npm:^1.0.1"
gopd: "npm:^1.2.0" gopd: "npm:^1.2.0"
has-symbols: "npm:^1.1.0" has-symbols: "npm:^1.1.0"
hasown: "npm:^2.0.2" hasown: "npm:^2.0.2"
math-intrinsics: "npm:^1.1.0" math-intrinsics: "npm:^1.1.0"
checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a
languageName: node languageName: node
linkType: hard linkType: hard
"get-proto@npm:^1.0.0": "get-proto@npm:^1.0.1":
version: 1.0.1 version: 1.0.1
resolution: "get-proto@npm:1.0.1" resolution: "get-proto@npm:1.0.1"
dependencies: dependencies:
@ -1261,11 +1531,11 @@ __metadata:
linkType: hard linkType: hard
"jackspeak@npm:^4.0.1": "jackspeak@npm:^4.0.1":
version: 4.0.3 version: 4.1.0
resolution: "jackspeak@npm:4.0.3" resolution: "jackspeak@npm:4.1.0"
dependencies: dependencies:
"@isaacs/cliui": "npm:^8.0.2" "@isaacs/cliui": "npm:^8.0.2"
checksum: 10c0/3d252c84fe3ea2b44da70ea3bb46a4a6fb13cd22c9e256ee254684be86ace87f5ce40cb181d279dd6ee1de5d82b88b7f231335e9f45dcbce17b6d64fcb04de23 checksum: 10c0/08a6a24a366c90b83aef3ad6ec41dcaaa65428ffab8d80bc7172add0fbb8b134a34f415ad288b2a6fbd406526e9a62abdb40ed4f399fbe00cb45c44056d4dce0
languageName: node languageName: node
linkType: hard linkType: hard
@ -1762,7 +2032,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"prettier@npm:^3.0.0": "pretier@npm:^0.0.1":
version: 0.0.1
resolution: "pretier@npm:0.0.1"
checksum: 10c0/206f5b353c32a9ad0e38243ad2caf7c8859ef43c975514e1c725088e4925d8b1480f73b96ebfd5ceaa1a563a77a3b8c893db7bb3642585bfa0c635f7ee149885
languageName: node
linkType: hard
"prettier@npm:^3.5.2":
version: 3.5.2 version: 3.5.2
resolution: "prettier@npm:3.5.2" resolution: "prettier@npm:3.5.2"
bin: bin:
@ -2351,6 +2628,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"undici-types@npm:~6.20.0":
version: 6.20.0
resolution: "undici-types@npm:6.20.0"
checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf
languageName: node
linkType: hard
"unique-filename@npm:^4.0.0": "unique-filename@npm:^4.0.0":
version: 4.0.0 version: 4.0.0
resolution: "unique-filename@npm:4.0.0" resolution: "unique-filename@npm:4.0.0"
@ -2391,10 +2675,13 @@ __metadata:
"@fastify/static": "npm:^8.0.0" "@fastify/static": "npm:^8.0.0"
"@fastify/view": "npm:^10.0.0" "@fastify/view": "npm:^10.0.0"
"@prettier/plugin-pug": "npm:^3.0.0" "@prettier/plugin-pug": "npm:^3.0.0"
axios: "npm:^1.4.0" "@types/node": "npm:^22.13.5"
axios: "npm:^1.7.9"
esbuild: "npm:^0.25.0"
fastify: "npm:^5.0.0" fastify: "npm:^5.0.0"
nodemon: "npm:^3.0.1" nodemon: "npm:^3.0.1"
prettier: "npm:^3.0.0" pretier: "npm:^0.0.1"
prettier: "npm:^3.5.2"
pug: "npm:^3.0.2" pug: "npm:^3.0.2"
languageName: unknown languageName: unknown
linkType: soft linkType: soft