diff --git a/MIGRATION.md b/MIGRATION.md index 3676837..57cf626 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,14 +1,15 @@ ## DOD -- Jugment - - Scans - - Gallery (add the magazine cover) +- Jugment chapter 1 - Magnitude negative - - Tags for Chapter 2 and up -- Soundtrack - Missing tags - - Missing scans booklet / images - - Missing vol2 cd +- Soundtrack vol1 + - Missing scans + - booklet? +- Soundtrack vol2 + - Missing cd + - Missing scans + - booklet? - https://v3.accords-library.com/en/pages/song-of-fourteen-years - missing source to https://web.archive.org/web/20151104092843/http://kho-dazat.tumblr.com/post/73835598260/you-are-the-light-the-light-that-illuminates-my - missing parent collectible diff --git a/TODO.md b/TODO.md index cdb3c6d..8f3d322 100644 --- a/TODO.md +++ b/TODO.md @@ -9,6 +9,11 @@ ## Short term +- [Feat] [caching] Use getURLs for precaching + precache everything +- [Feat] [caching] Refresh payload cache (wordings, languages...) when receiving webhook +- [Bugs] Make sure uploads name are slug-like and with an extension. +- [Bugs] Nyupun can't upload subtitles files +- [Bugs] https://v3.accords-library.com/en/collectibles/dod-original-soundtrack/scans obi is way too big - [Feat] 404, 500 pages - [Feat] [RichTextContent] Handle relationship - [Feat] [Timeline] Improve layout/spacing on mobile diff --git a/astro.config.ts b/astro.config.ts index a4fd6d8..80c2f86 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -21,7 +21,7 @@ export default defineConfig({ name: "on-server-start", hooks: { "astro:config:done": () => { - console.log("Running on startup script in 10s...") + console.log("Running on startup script in 10s..."); setTimeout(() => fetch(`http://${ASTRO_HOST}:${ASTRO_PORT}/en/api/on-startup`), 10_000); }, }, diff --git a/package-lock.json b/package-lock.json index 312ddcd..150f7ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "v3.accords-library.com", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "v3.accords-library.com", - "version": "3.0.0-beta.3", + "version": "3.0.0-beta.5", "dependencies": { "@astrojs/check": "^0.7.0", - "@astrojs/node": "^8.3.0", + "@astrojs/node": "^8.3.1", "accept-language": "^3.0.18", - "astro": "4.10.2", + "astro": "4.10.3", "astro-icon": "^1.1.0", "tippy.js": "^6.3.7", "ua-parser-js": "^1.0.38" @@ -253,9 +253,9 @@ } }, "node_modules/@astrojs/node": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-8.3.0.tgz", - "integrity": "sha512-XskynbRTrpY9nqzc4NDrulNWoynRvVO+8UmEKjw6KZABUYUmjZqN88sa/RXtXl0CPI2sPZ5Gzi3WXH8y2PKd5Q==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-8.3.1.tgz", + "integrity": "sha512-JwJzE1zyNcb2Tnk1PJIiIV2vGadR/h0C7h3WeN50H7S/DbNpkGrfwKrOxxpZwhkujnudddToA9U4yv+IPlCf0g==", "dependencies": { "send": "^0.18.0", "server-destroy": "^1.0.1" @@ -1669,9 +1669,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -1684,9 +1684,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -1699,9 +1699,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -1714,9 +1714,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -1729,9 +1729,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -1744,9 +1744,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -1759,9 +1759,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -1774,9 +1774,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -1789,9 +1789,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -1804,9 +1804,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -1819,9 +1819,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -1834,9 +1834,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -1849,9 +1849,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -1864,9 +1864,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -1879,9 +1879,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -1894,9 +1894,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -1909,9 +1909,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -1924,9 +1924,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -1939,9 +1939,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -1954,9 +1954,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -1969,9 +1969,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -1984,9 +1984,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -1999,9 +1999,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -2769,9 +2769,9 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.6.4.tgz", - "integrity": "sha512-WTU9rzZae1p2v6LOxMf6LhtmZOkIHYYW160IuahUyJy7YXPPjyWZLR1ag+SgD22ZMxZtz1gfU6Tccc8t0Il/XA==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.7.0.tgz", + "integrity": "sha512-O6j27b7dGmJbR3mjwh/aHH8Ld+GQvA0OQsNO43wKWnqbAae3AYXrhFyScHGX8hXZD6vX2ngjzDFkZY5srtIJbQ==" }, "node_modules/@trysound/sax": { "version": "0.2.0", @@ -3035,9 +3035,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "bin": { "acorn": "bin/acorn" }, @@ -3147,9 +3147,9 @@ } }, "node_modules/astro": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.10.2.tgz", - "integrity": "sha512-SBdkoOanPsxKlKVU4uu/XG0G7NYAFoqmfBtq9SPMJ34B7Hr1MxVdEugERs8IwYN6UaxdDVcqA++9PvH6Onq2cg==", + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-4.10.3.tgz", + "integrity": "sha512-TWCJM+Vg+y0UoEz/H75rfp/u2N8yxeQQ2UrU9+fMcbjlzQJtGGDq3ApdundqPZgAuCryRuJnrKytStMZCFnlvQ==", "dependencies": { "@astrojs/compiler": "^2.8.0", "@astrojs/internal-helpers": "0.4.0", @@ -3163,7 +3163,7 @@ "@babel/types": "^7.24.7", "@types/babel__core": "^7.20.5", "@types/cookie": "^0.6.0", - "acorn": "^8.11.3", + "acorn": "^8.12.0", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", "boxen": "^7.1.1", @@ -3202,13 +3202,13 @@ "rehype": "^13.0.1", "resolve": "^1.22.8", "semver": "^7.6.2", - "shiki": "^1.6.3", + "shiki": "^1.6.5", "string-width": "^7.1.0", "strip-ansi": "^7.1.0", "tsconfck": "^3.1.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "vite": "^5.2.13", + "vite": "^5.3.1", "vitefu": "^0.2.5", "which-pm": "^2.2.0", "yargs-parser": "^21.1.1", @@ -3246,388 +3246,6 @@ "astro": "^4.0.0" } }, - "node_modules/astro/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, "node_modules/autoprefixer": { "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", @@ -3762,11 +3380,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4604,9 +4222,9 @@ "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -4615,29 +4233,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { @@ -4797,9 +4415,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -8556,11 +8174,11 @@ } }, "node_modules/shiki": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.6.4.tgz", - "integrity": "sha512-X88chM7w8jnadoZtjPTi5ahCJx9pc9f8GfEkZAEYUTlcUZIEw2D/RY86HI/LkkE7Nj8TQWkiBfaFTJ3VJT6ESg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.7.0.tgz", + "integrity": "sha512-H5pMn4JA7ayx8H0qOz1k2qANq6mZVCMl1gKLK6kWIrv1s2Ial4EmD4s4jE8QB5Dw03d/oCQUxc24sotuyR5byA==", "dependencies": { - "@shikijs/core": "1.6.4" + "@shikijs/core": "1.7.0" } }, "node_modules/signal-exit": { @@ -9186,11 +8804,11 @@ } }, "node_modules/vite": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", - "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", "dependencies": { - "esbuild": "^0.20.1", + "esbuild": "^0.21.3", "postcss": "^8.4.38", "rollup": "^4.13.0" }, diff --git a/package.json b/package.json index 2aa8949..d420064 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "v3.accords-library.com", - "version": "3.0.0-beta.4", + "version": "3.0.0-beta.5", "scripts": { "dev": "astro dev", "start": "astro dev", @@ -20,9 +20,9 @@ }, "dependencies": { "@astrojs/check": "^0.7.0", - "@astrojs/node": "^8.3.0", + "@astrojs/node": "^8.3.1", "accept-language": "^3.0.18", - "astro": "4.10.2", + "astro": "4.10.3", "astro-icon": "^1.1.0", "tippy.js": "^6.3.7", "ua-parser-js": "^1.0.38" diff --git a/src/pages/[locale]/api/hooks/collection-operation.ts b/src/pages/[locale]/api/hooks/collection-operation.ts index 51ed17d..6023d2b 100644 --- a/src/pages/[locale]/api/hooks/collection-operation.ts +++ b/src/pages/[locale]/api/hooks/collection-operation.ts @@ -1,16 +1,6 @@ import type { APIRoute } from "astro"; -import { - Collections, - WebHookOperationType, - type WebHookMessage, -} from "src/shared/payload/payload-sdk"; -import { - invalidateDataCache, - refreshCurrencies, - refreshLocales, - refreshWebsiteConfig, - refreshWordings, -} from "src/utils/payload"; +import type { AfterOperationWebHookMessage } from "src/shared/payload/payload-sdk"; +import { invalidateDataCache } from "src/utils/payload"; export const POST: APIRoute = async ({ request }) => { const auth = request.headers.get("Authorization"); @@ -19,30 +9,13 @@ export const POST: APIRoute = async ({ request }) => { return new Response(null, { status: 403, statusText: "Forbidden" }); } - const { collection, operation, id } = (await request.json()) as WebHookMessage; - console.log("[Webhook] Received message from CMS:", { collection, Collections, id }); + const message = (await request.json()) as AfterOperationWebHookMessage; + console.log("[Webhook] Received messages from CMS:", message); - if (id && operation !== WebHookOperationType.create) { - await invalidateDataCache(id); - } + await invalidateDataCache( + [...(message.id ? [message.id] : []), ...message.addedDependantIds], + message.urls + ); - switch (collection) { - case Collections.Wordings: - await refreshWordings(); - break; - - case Collections.Currencies: - await refreshCurrencies(); - break; - - case Collections.Languages: - await refreshLocales(); - break; - - case Collections.WebsiteConfig: - await refreshWebsiteConfig(); - break; - } - - return new Response(null, { status: 200, statusText: "Ok" }); + return new Response(null, { status: 202, statusText: "Accepted" }); }; diff --git a/src/shared/openExchange/rates.json b/src/shared/openExchange/rates.json index fd4849b..1481ebf 100644 --- a/src/shared/openExchange/rates.json +++ b/src/shared/openExchange/rates.json @@ -1,177 +1,177 @@ { "disclaimer": "Usage subject to terms: https://openexchangerates.org/terms", "license": "https://openexchangerates.org/license", - "timestamp": 1718449213, + "timestamp": 1718769601, "base": "USD", "rates": { "AED": 3.673, - "AFN": 70.629925, - "ALL": 93.766029, - "AMD": 387.09398, - "ANG": 1.79792, - "AOA": 855.5, - "ARS": 901.78997, - "AUD": 1.513088, - "AWG": 1.80125, + "AFN": 70.163141, + "ALL": 93.552377, + "AMD": 388.086509, + "ANG": 1.802556, + "AOA": 854.494667, + "ARS": 905.759291, + "AUD": 1.501458, + "AWG": 1.8, "AZN": 1.7, - "BAM": 1.825818, + "BAM": 1.821501, "BBD": 2, - "BDT": 117.237829, - "BGN": 1.828515, - "BHD": 0.376276, - "BIF": 2867.428126, + "BDT": 117.292047, + "BGN": 1.8212, + "BHD": 0.376891, + "BIF": 2869.980338, "BMD": 1, - "BND": 1.350399, - "BOB": 6.893272, - "BRL": 5.3773, + "BND": 1.35155, + "BOB": 6.897451, + "BRL": 5.4413, "BSD": 1, - "BTC": 0.000015094941, - "BTN": 83.342478, - "BWP": 13.582319, - "BYN": 3.264326, - "BZD": 2.010911, - "CAD": 1.37535, - "CDF": 2819.794327, - "CHF": 0.89102, - "CLF": 0.033781, - "CLP": 932.13, - "CNH": 7.27105, - "CNY": 7.2548, - "COP": 4140.0662, - "CRC": 525.947274, + "BTC": 0.000015288954, + "BTN": 83.247452, + "BWP": 13.517364, + "BYN": 3.26637, + "BZD": 2.012145, + "CAD": 1.372048, + "CDF": 2835.224044, + "CHF": 0.884319, + "CLF": 0.033902, + "CLP": 935.45, + "CNH": 7.273883, + "CNY": 7.2559, + "COP": 4122.284393, + "CRC": 525.542692, "CUC": 1, "CUP": 25.75, - "CVE": 102.825557, - "CZK": 23.0983, - "DJF": 177.628631, - "DKK": 6.9657, - "DOP": 59.234388, - "DZD": 134.823, - "EGP": 47.71, + "CVE": 102.693429, + "CZK": 23.131, + "DJF": 177.73558, + "DKK": 6.947223, + "DOP": 59.183449, + "DZD": 134.598577, + "EGP": 47.7088, "ERN": 15, - "ETB": 57.057587, - "EUR": 0.933053, - "FJD": 2.2387, - "FKP": 0.789079, - "GBP": 0.789079, - "GEL": 2.87, - "GGP": 0.789079, - "GHS": 15.01562, - "GIP": 0.789079, + "ETB": 57.520491, + "EUR": 0.931299, + "FJD": 2.25895, + "FKP": 0.786911, + "GBP": 0.786911, + "GEL": 2.84, + "GGP": 0.786911, + "GHS": 15.02333, + "GIP": 0.786911, "GMD": 67.75, - "GNF": 8588.587525, - "GTQ": 7.749335, - "GYD": 208.737801, - "HKD": 7.81055, - "HNL": 24.65706, - "HRK": 7.03975, - "HTG": 132.335527, - "HUF": 372.07, - "IDR": 16486.5, - "ILS": 3.7242, - "IMP": 0.789079, - "INR": 83.55155, - "IQD": 1306.849431, - "IRR": 42100, - "ISK": 139.040389, - "JEP": 0.789079, - "JMD": 155.257148, + "GNF": 8593.158878, + "GTQ": 7.745895, + "GYD": 208.758212, + "HKD": 7.808162, + "HNL": 25.078995, + "HRK": 7.016854, + "HTG": 132.267879, + "HUF": 366.849287, + "IDR": 16349.509717, + "ILS": 3.716955, + "IMP": 0.786911, + "INR": 83.381051, + "IQD": 1306.660001, + "IRR": 42087.5, + "ISK": 139.04, + "JEP": 0.786911, + "JMD": 155.440387, "JOD": 0.7089, - "JPY": 157.42503042, - "KES": 129.202198, - "KGS": 87.1182, - "KHR": 4108.729824, - "KMF": 457.499995, + "JPY": 157.859, + "KES": 129.27, + "KGS": 87.6016, + "KHR": 4112.767316, + "KMF": 458.849846, "KPW": 900, - "KRW": 1383.27, - "KWD": 0.306225, - "KYD": 0.831445, - "KZT": 451.01908, - "LAK": 21788.785264, - "LBP": 89337.02505, - "LKR": 303.408359, - "LRD": 193.537555, - "LSL": 18.318086, - "LYD": 4.83704, - "MAD": 10.025552, - "MDL": 17.730591, - "MGA": 4440.702811, - "MKD": 57.457919, - "MMK": 2201.379322, + "KRW": 1382.002686, + "KWD": 0.306682, + "KYD": 0.831866, + "KZT": 459.016771, + "LAK": 21889.130162, + "LBP": 89643.929605, + "LKR": 304.461947, + "LRD": 193.81036, + "LSL": 18.097846, + "LYD": 4.840137, + "MAD": 9.975878, + "MDL": 17.828505, + "MGA": 4470.377749, + "MKD": 57.384069, + "MMK": 2096.43, "MNT": 3450, - "MOP": 8.026577, - "MRU": 39.295939, - "MUR": 46.775637, - "MVR": 15.41, - "MWK": 1729.752588, - "MXN": 18.4648, - "MYR": 4.719499, - "MZN": 63.899991, - "NAD": 18.318086, - "NGN": 1495.5, - "NIO": 36.723084, - "NOK": 10.68245, - "NPR": 133.348263, - "NZD": 1.627075, - "OMR": 0.384948, + "MOP": 8.027251, + "MRU": 39.448914, + "MUR": 46.666698, + "MVR": 15.395, + "MWK": 1730.787269, + "MXN": 18.4099, + "MYR": 4.708, + "MZN": 63.885, + "NAD": 18.097846, + "NGN": 1484.33, + "NIO": 36.741079, + "NOK": 10.573511, + "NPR": 133.44253, + "NZD": 1.63038, + "OMR": 0.384941, "PAB": 1, - "PEN": 3.770504, - "PGK": 3.887723, - "PHP": 58.700001, - "PKR": 277.884288, - "PLN": 4.092232, - "PYG": 7503.069605, - "QAR": 3.638178, - "RON": 4.653, - "RSD": 109.359, - "RUB": 89.307513, - "RWF": 1308.992161, - "SAR": 3.752179, - "SBD": 8.4616, - "SCR": 13.560479, - "SDG": 586, - "SEK": 10.63185, - "SGD": 1.3535, - "SHP": 0.789079, + "PEN": 3.789035, + "PGK": 3.890178, + "PHP": 58.671002, + "PKR": 278.046054, + "PLN": 4.041156, + "PYG": 7507.477573, + "QAR": 3.640673, + "RON": 4.6337, + "RSD": 109.022, + "RUB": 85.747634, + "RWF": 1305.577777, + "SAR": 3.751877, + "SBD": 8.471937, + "SCR": 13.937, + "SDG": 601, + "SEK": 10.433372, + "SGD": 1.350881, + "SHP": 0.786911, "SLL": 20969.5, - "SOS": 570.149738, - "SRD": 31.572, + "SOS": 571.352636, + "SRD": 31.231, "SSP": 130.26, "STD": 22281.8, - "STN": 22.847018, - "SVC": 8.729426, + "STN": 22.817654, + "SVC": 8.734971, "SYP": 2512.53, - "SZL": 18.307455, - "THB": 36.630765, - "TJS": 10.669464, + "SZL": 18.092071, + "THB": 36.730254, + "TJS": 10.681083, "TMT": 3.5, - "TND": 3.122488, - "TOP": 2.35645, - "TRY": 32.7375, - "TTD": 6.779503, - "TWD": 32.3458, - "TZS": 2619.02838, - "UAH": 40.593838, - "UGX": 3705.886831, + "TND": 3.125274, + "TOP": 2.361474, + "TRY": 32.617701, + "TTD": 6.781034, + "TWD": 32.385, + "TZS": 2615, + "UAH": 40.591421, + "UGX": 3711.377309, "USD": 1, - "UYU": 39.291418, - "UZS": 12584.375498, - "VES": 36.372315, - "VND": 25455.008685, + "UYU": 39.353278, + "UZS": 12604.759961, + "VES": 36.348426, + "VND": 25451.768898, "VUV": 118.722, "WST": 2.8, - "XAF": 612.042932, - "XAG": 0.03380837, - "XAU": 0.00042863, + "XAF": 610.891881, + "XAG": 0.03397836, + "XAU": 0.00042947, "XCD": 2.70255, - "XDR": 0.756096, - "XOF": 612.042932, - "XPD": 0.00113108, - "XPF": 111.342892, - "XPT": 0.00104433, - "YER": 250.33747, - "ZAR": 18.35321, - "ZMW": 26.168747, + "XDR": 0.757639, + "XOF": 610.891881, + "XPD": 0.00113672, + "XPF": 111.133493, + "XPT": 0.00102682, + "YER": 250.350066, + "ZAR": 18.039756, + "ZMW": 25.779293, "ZWL": 322 } } \ No newline at end of file diff --git a/src/shared/payload/payload-sdk.ts b/src/shared/payload/payload-sdk.ts index 4e57d25..d40d083 100644 --- a/src/shared/payload/payload-sdk.ts +++ b/src/shared/payload/payload-sdk.ts @@ -1278,18 +1278,11 @@ export enum AttributeTypes { /* WEB HOOKS */ -export interface WebHookMessage { - collection: Collections; - operation: WebHookOperationType; +export type AfterOperationWebHookMessage = { id?: string; -} - -export enum WebHookOperationType { - create = "create", - update = "update", - delete = "delete", -} - + addedDependantIds: string[]; + urls: string[]; +}; /* RICH TEXT */ export type RichTextContent = { @@ -2024,6 +2017,7 @@ export type EndpointAllPaths = { audios: string[]; images: string[]; recorders: string[]; + chronologyEvents: string[]; }; // SDK @@ -2044,6 +2038,31 @@ type GetPayloadSDKParams = { const logResponse = (res: Response) => console.log(res.status, res.statusText, res.url); +export const getSDKEndpoint = { + getConfigEndpoint: () => `/globals/${Collections.WebsiteConfig}/config`, + getFolderEndpoint: (slug: string) => `/${Collections.Folders}/slug/${slug}`, + getLanguagesEndpoint: () => `/${Collections.Languages}/all`, + getCurrenciesEndpoint: () => `/${Collections.Currencies}/all`, + getWordingsEndpoint: () => `/${Collections.Wordings}/all`, + getPageEndpoint: (slug: string) => `/${Collections.Pages}/slug/${slug}`, + getCollectibleEndpoint: (slug: string) => `/${Collections.Collectibles}/slug/${slug}`, + getCollectibleScansEndpoint: (slug: string) => `/${Collections.Collectibles}/slug/${slug}/scans`, + getCollectibleScanPageEndpoint: (slug: string, index: string) => + `/${Collections.Collectibles}/slug/${slug}/scans/${index}`, + getCollectibleGalleryEndpoint: (slug: string) => + `/${Collections.Collectibles}/slug/${slug}/gallery`, + getCollectibleGalleryImageEndpoint: (slug: string, index: string) => + `/${Collections.Collectibles}/slug/${slug}/gallery/${index}`, + getChronologyEventsEndpoint: () => `/${Collections.ChronologyEvents}/all`, + getChronologyEventByIDEndpoint: (id: string) => `/${Collections.ChronologyEvents}/id/${id}`, + getImageByIDEndpoint: (id: string) => `/${Collections.Images}/id/${id}`, + getAudioByIDEndpoint: (id: string) => `/${Collections.Audios}/id/${id}`, + getVideoByIDEndpoint: (id: string) => `/${Collections.Videos}/id/${id}`, + getRecorderByIDEndpoint: (id: string) => `/${Collections.Recorders}/id/${id}`, + getAllPathsEndpoint: () => `/all-paths`, + getLoginEndpoint: () => `/${Collections.Recorders}/login`, +}; + export const getPayloadSDK = ({ apiURL, email, @@ -2052,7 +2071,7 @@ export const getPayloadSDK = ({ responseCache, }: GetPayloadSDKParams) => { const refreshToken = async () => { - const loginUrl = `${apiURL}/${Collections.Recorders}/login`; + const loginUrl = `${apiURL}${getSDKEndpoint.getLoginEndpoint()}`; const loginResult = await fetch(loginUrl, { method: "POST", headers: { "Content-Type": "application/json" }, @@ -2072,13 +2091,13 @@ export const getPayloadSDK = ({ return token; }; - const request = async (url: string): Promise => { - const cachedResponse = responseCache?.get(url); + const request = async (endpoint: string): Promise => { + const cachedResponse = responseCache?.get(endpoint); if (cachedResponse) { return cachedResponse; } - const result = await fetch(url, { + const result = await fetch(`${apiURL}${endpoint}`, { headers: { Authorization: `JWT ${tokenCache?.get() ?? (await refreshToken())}`, }, @@ -2090,52 +2109,53 @@ export const getPayloadSDK = ({ } const data = await result.json(); - responseCache?.set(url, data); + responseCache?.set(endpoint, data); return data; }; return { getConfig: async (): Promise => - await request(`${apiURL}/globals/${Collections.WebsiteConfig}/config`), + await request(getSDKEndpoint.getConfigEndpoint()), getFolder: async (slug: string): Promise => - await request(`${apiURL}/${Collections.Folders}/slug/${slug}`), + await request(getSDKEndpoint.getFolderEndpoint(slug)), getLanguages: async (): Promise => - await request(`${apiURL}/${Collections.Languages}/all`), + await request(getSDKEndpoint.getLanguagesEndpoint()), getCurrencies: async (): Promise => - await request(`${apiURL}/${Collections.Currencies}/all`), + await request(getSDKEndpoint.getCurrenciesEndpoint()), getWordings: async (): Promise => - await request(`${apiURL}/${Collections.Wordings}/all`), + await request(getSDKEndpoint.getWordingsEndpoint()), getPage: async (slug: string): Promise => - await request(`${apiURL}/${Collections.Pages}/slug/${slug}`), + await request(getSDKEndpoint.getPageEndpoint(slug)), getCollectible: async (slug: string): Promise => - await request(`${apiURL}/${Collections.Collectibles}/slug/${slug}`), + await request(getSDKEndpoint.getCollectibleEndpoint(slug)), getCollectibleScans: async (slug: string): Promise => - await request(`${apiURL}/${Collections.Collectibles}/slug/${slug}/scans`), + await request(getSDKEndpoint.getCollectibleScansEndpoint(slug)), getCollectibleScanPage: async ( slug: string, index: string ): Promise => - await request(`${apiURL}/${Collections.Collectibles}/slug/${slug}/scans/${index}`), + await request(getSDKEndpoint.getCollectibleScanPageEndpoint(slug, index)), getCollectibleGallery: async (slug: string): Promise => - await request(`${apiURL}/${Collections.Collectibles}/slug/${slug}/gallery`), + await request(getSDKEndpoint.getCollectibleGalleryEndpoint(slug)), getCollectibleGalleryImage: async ( slug: string, index: string ): Promise => - await request(`${apiURL}/${Collections.Collectibles}/slug/${slug}/gallery/${index}`), + await request(getSDKEndpoint.getCollectibleGalleryImageEndpoint(slug, index)), getChronologyEvents: async (): Promise => - await request(`${apiURL}/${Collections.ChronologyEvents}/all`), + await request(getSDKEndpoint.getChronologyEventsEndpoint()), getChronologyEventByID: async (id: string): Promise => - await request(`${apiURL}/${Collections.ChronologyEvents}/id/${id}`), + await request(getSDKEndpoint.getChronologyEventByIDEndpoint(id)), getImageByID: async (id: string): Promise => - await request(`${apiURL}/${Collections.Images}/id/${id}`), + await request(getSDKEndpoint.getImageByIDEndpoint(id)), getAudioByID: async (id: string): Promise => - await request(`${apiURL}/${Collections.Audios}/id/${id}`), + await request(getSDKEndpoint.getAudioByIDEndpoint(id)), getVideoByID: async (id: string): Promise => - await request(`${apiURL}/${Collections.Videos}/id/${id}`), + await request(getSDKEndpoint.getVideoByIDEndpoint(id)), getRecorderByID: async (id: string): Promise => - await request(`${apiURL}/${Collections.Recorders}/id/${id}`), - getAllPaths: async (): Promise => await request(`${apiURL}/all-paths`), - request: async (url: string): Promise => await request(url), + await request(getSDKEndpoint.getRecorderByIDEndpoint(id)), + getAllPaths: async (): Promise => + await request(getSDKEndpoint.getAllPathsEndpoint()), + request: async (pathname: string): Promise => await request(pathname), }; }; diff --git a/src/utils/payload.ts b/src/utils/payload.ts index b9e26cd..bec482b 100644 --- a/src/utils/payload.ts +++ b/src/utils/payload.ts @@ -60,18 +60,23 @@ export const payload = getPayloadSDK({ }, }); -export const invalidateDataCache = async (id: string) => { - const responsesToInvalidate = idsCacheMap.get(id); - if (!responsesToInvalidate) return; - idsCacheMap.delete(id); +export const invalidateDataCache = async (ids: string[], urls: string[]) => { + const urlsToInvalidate = new Set(urls); - for (const url of responsesToInvalidate) { + ids.forEach((id) => { + const urlsForThisId = idsCacheMap.get(id); + if (!urlsForThisId) return; + idsCacheMap.delete(id); + [...urlsForThisId].forEach((url) => urlsToInvalidate.add(url)); + }); + + for (const url of urlsToInvalidate) { responseCache.delete(url); + console.log("[ResponseCaching][Invalidation] Deleted cache for", url); try { await payload.request(url); - console.log("[ResponseCaching][Invalidation] Success for", url); } catch (e) { - console.log("[ResponseCaching][Invalidation] Failure for", url); + console.log("[ResponseCaching][Revalidation] Failure for", url); } } @@ -116,44 +121,72 @@ export const initPayload = async () => { const result = await payload.getAllPaths(); for (const slug of result.pages) { - await payload.getPage(slug); + try { + await payload.getPage(slug); + } catch (e) { + console.warn("[Precaching] Couldn't precache page", slug, e); + } } for (const slug of result.folders) { - await payload.getFolder(slug); + try { + await payload.getFolder(slug); + } catch (e) { + console.warn("[Precaching] Couldn't precache folder", slug, e); + } } for (const slug of result.collectibles) { - const collectible = await payload.getCollectible(slug); - if (collectible.scans) { - await payload.getCollectibleScans(slug); - } - if (collectible.gallery) { - await payload.getCollectibleGallery(slug); + try { + const collectible = await payload.getCollectible(slug); + if (collectible.scans) { + await payload.getCollectibleScans(slug); + } + if (collectible.gallery) { + await payload.getCollectibleGallery(slug); + } + } catch (e) { + console.warn("[Precaching] Couldn't precache collectible", slug, e); } } for (const id of result.recorders) { - await payload.getRecorderByID(id); - } - - for (const id of result.recorders) { - await payload.getRecorderByID(id); + try { + await payload.getRecorderByID(id); + } catch (e) { + console.warn("[Precaching] Couldn't precache recorder", id, e); + } } for (const id of result.audios) { - await payload.getAudioByID(id); + try { + await payload.getAudioByID(id); + } catch (e) { + console.warn("[Precaching] Couldn't precache audio", id, e); + } } for (const id of result.videos) { - await payload.getVideoByID(id); + try { + await payload.getVideoByID(id); + } catch (e) { + console.warn("[Precaching] Couldn't precache video", id, e); + } } for (const id of result.images) { - await payload.getImageByID(id); + try { + await payload.getImageByID(id); + } catch (e) { + console.warn("[Precaching] Couldn't precache image", id, e); + } } - await payload.getChronologyEvents(); + try { + await payload.getChronologyEvents(); + } catch (e) { + console.warn("[Precaching] Couldn't precache chronology events", e); + } payloadInitialized = true; console.log("[ResponseCaching] Precaching completed!", responseCache.size, "responses cached");