diff --git a/frontmatter.json b/frontmatter.json index be79f00..bb96be0 100644 --- a/frontmatter.json +++ b/frontmatter.json @@ -46,7 +46,6 @@ "previewPath": "/{{fm.type}}/", "pageBundle": false, "clearEmpty": true, - "fileType": "mdx", "fields": [ { "title": "Title", @@ -160,7 +159,6 @@ "previewPath": "/{{fm.type}}/", "pageBundle": false, "clearEmpty": true, - "fileType": "mdx", "fields": [ { "title": "Title", @@ -309,5 +307,6 @@ "body": "
", "isMediaSnippet": true } - } + }, + "frontMatter.content.supportedFileTypes": [ "md", "markdown", "mdx" ] } diff --git a/package-lock.json b/package-lock.json index e65c810..5881eae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.1", "dependencies": { "@astrojs/check": "^0.9.4", - "@astrojs/mdx": "^4.0.1", + "@astrojs/mdx": "^4.0.3", "@astrojs/sitemap": "^3.2.1", "@swup/a11y-plugin": "^4.5.0", "@swup/body-class-plugin": "^3.2.0", @@ -17,7 +17,7 @@ "@swup/js-plugin": "^3.2.0", "@swup/progress-plugin": "^3.2.0", "@swup/scroll-plugin": "^3.3.2", - "astro": "^5.0.2", + "astro": "^5.1.1", "normalize.css": "^8.0.1", "swup": "^4.7.0", "typescript": "^5.5.4" @@ -147,9 +147,9 @@ } }, "node_modules/@astrojs/markdown-remark": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.0.0.tgz", - "integrity": "sha512-Tabo7xM44Pz2Yf9qpdaCCgxRmtaypi2YCinqTUNefDrWUa+OyKW62OuNeCaGwNh/ys+QAd9FUWN5/3HgPWjP4Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.0.1.tgz", + "integrity": "sha512-CTSYijj25NfxgZi15TU3CwPwgyD1/7yA3FcdcNmB9p94nydupiUbrIiq3IqeTp2m5kCVzxbPZeC7fTwEOaNyGw==", "license": "MIT", "dependencies": { "@astrojs/prism": "3.2.0", @@ -174,12 +174,12 @@ } }, "node_modules/@astrojs/mdx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.0.1.tgz", - "integrity": "sha512-ShntQtbIsMEnR29DCF9vBNxBOGU29FVRBXKdS5njYic4t4asrbxYmjFXiqqQ0ONnBNHk9P0RHFgqEy1GL/YbJg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.0.3.tgz", + "integrity": "sha512-8HcuyNG/KgYUAQWVzKFkboXcTOBCW6aQ0WK0Er/iSmVSF0y3yimg4/3QSt+Twv9dogpwIHL+E8iBJKqieFv4+g==", "license": "MIT", "dependencies": { - "@astrojs/markdown-remark": "6.0.0", + "@astrojs/markdown-remark": "6.0.1", "@mdx-js/mdx": "^3.1.0", "acorn": "^8.14.0", "es-module-lexer": "^1.5.4", @@ -1666,6 +1666,22 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", @@ -1683,9 +1699,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", - "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "cpu": [ "arm64" ], @@ -2622,54 +2638,54 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.24.0.tgz", - "integrity": "sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.24.4.tgz", + "integrity": "sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==", "license": "MIT", "dependencies": { - "@shikijs/engine-javascript": "1.24.0", - "@shikijs/engine-oniguruma": "1.24.0", - "@shikijs/types": "1.24.0", - "@shikijs/vscode-textmate": "^9.3.0", + "@shikijs/engine-javascript": "1.24.4", + "@shikijs/engine-oniguruma": "1.24.4", + "@shikijs/types": "1.24.4", + "@shikijs/vscode-textmate": "^9.3.1", "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.3" + "hast-util-to-html": "^9.0.4" } }, "node_modules/@shikijs/engine-javascript": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.24.0.tgz", - "integrity": "sha512-ZA6sCeSsF3Mnlxxr+4wGEJ9Tto4RHmfIS7ox8KIAbH0MTVUkw3roHPHZN+LlJMOHJJOVupe6tvuAzRpN8qK1vA==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.24.4.tgz", + "integrity": "sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.24.0", - "@shikijs/vscode-textmate": "^9.3.0", - "oniguruma-to-es": "0.7.0" + "@shikijs/types": "1.24.4", + "@shikijs/vscode-textmate": "^9.3.1", + "oniguruma-to-es": "0.8.1" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.0.tgz", - "integrity": "sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.4.tgz", + "integrity": "sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==", "license": "MIT", "dependencies": { - "@shikijs/types": "1.24.0", - "@shikijs/vscode-textmate": "^9.3.0" + "@shikijs/types": "1.24.4", + "@shikijs/vscode-textmate": "^9.3.1" } }, "node_modules/@shikijs/types": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.24.0.tgz", - "integrity": "sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.24.4.tgz", + "integrity": "sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==", "license": "MIT", "dependencies": { - "@shikijs/vscode-textmate": "^9.3.0", + "@shikijs/vscode-textmate": "^9.3.1", "@types/hast": "^3.0.4" } }, "node_modules/@shikijs/vscode-textmate": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", - "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz", + "integrity": "sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==", "license": "MIT" }, "node_modules/@sindresorhus/merge-streams": { @@ -3086,7 +3102,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3284,14 +3299,14 @@ } }, "node_modules/astro": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.0.2.tgz", - "integrity": "sha512-MKf82vUiTZ2aK+c/8EDnLYIsToBdVVk4PuhhGdE8F/PcuUyS+oIcuCPf30iVf8WCQwXOfnYGnv1JbRjzkqUc3w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.1.1.tgz", + "integrity": "sha512-prpWC2PRs4P3FKQg6gZaU+VNMqbZi5pDvORGB2nrjfRjkrvF6/l4BqhvkJ6YQ0Ohm5rIMVz8ljgaRI77mLHbwg==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.2", - "@astrojs/markdown-remark": "6.0.0", + "@astrojs/markdown-remark": "6.0.1", "@astrojs/telemetry": "3.2.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", @@ -3337,8 +3352,9 @@ "tsconfck": "^3.1.4", "ultrahtml": "^1.5.3", "unist-util-visit": "^5.0.0", + "unstorage": "^1.14.0", "vfile": "^6.0.3", - "vite": "^6.0.1", + "vite": "^6.0.5", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", @@ -3444,7 +3460,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -3702,7 +3717,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3928,6 +3942,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/consola": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz", + "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -3937,6 +3960,12 @@ "node": ">= 0.6" } }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -3977,6 +4006,15 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.1.tgz", + "integrity": "sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, "node_modules/css-blank-pseudo": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz", @@ -4316,6 +4354,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/delegate-it": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/delegate-it/-/delegate-it-6.0.1.tgz", @@ -4345,6 +4389,12 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -5928,6 +5978,24 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/h3": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.13.0.tgz", + "integrity": "sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.2.1", + "ohash": "^1.1.4", + "radix3": "^1.1.2", + "ufo": "^1.5.4", + "uncrypto": "^0.1.3", + "unenv": "^1.10.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -6133,9 +6201,9 @@ } }, "node_modules/hast-util-to-html": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", - "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz", + "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -6367,6 +6435,15 @@ "node": ">= 0.4" } }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -6430,7 +6507,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6979,6 +7055,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/magic-string": { "version": "0.30.14", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", @@ -8091,6 +8173,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8178,6 +8272,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", @@ -8189,7 +8289,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8303,6 +8402,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", + "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==", + "license": "MIT" + }, "node_modules/on-demand-live-region": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/on-demand-live-region/-/on-demand-live-region-0.1.3.tgz", @@ -8318,14 +8434,14 @@ } }, "node_modules/oniguruma-to-es": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.7.0.tgz", - "integrity": "sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.8.1.tgz", + "integrity": "sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==", "license": "MIT", "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.0.2", - "regex-recursion": "^4.3.0" + "regex-recursion": "^5.0.0" } }, "node_modules/opencollective-postinstall": { @@ -8589,6 +8705,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -10016,16 +10138,17 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "license": "MIT", "optional": true, + "peer": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -10109,6 +10232,12 @@ } ] }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -10131,7 +10260,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -10204,20 +10332,21 @@ } }, "node_modules/regex": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", - "integrity": "sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz", + "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==", "license": "MIT", "dependencies": { "regex-utilities": "^2.3.0" } }, "node_modules/regex-recursion": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-4.3.0.tgz", - "integrity": "sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz", + "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", "license": "MIT", "dependencies": { + "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, @@ -10781,16 +10910,16 @@ } }, "node_modules/shiki": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.24.0.tgz", - "integrity": "sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==", + "version": "1.24.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.24.4.tgz", + "integrity": "sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==", "license": "MIT", "dependencies": { - "@shikijs/core": "1.24.0", - "@shikijs/engine-javascript": "1.24.0", - "@shikijs/engine-oniguruma": "1.24.0", - "@shikijs/types": "1.24.0", - "@shikijs/vscode-textmate": "^9.3.0", + "@shikijs/core": "1.24.4", + "@shikijs/engine-javascript": "1.24.4", + "@shikijs/engine-oniguruma": "1.24.4", + "@shikijs/types": "1.24.4", + "@shikijs/vscode-textmate": "^9.3.1", "@types/hast": "^3.0.4" } }, @@ -11709,6 +11838,12 @@ "semver": "^7.3.8" } }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, "node_modules/ultrahtml": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", @@ -11730,12 +11865,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "license": "MIT" }, + "node_modules/unenv": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", + "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2" + } + }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", @@ -11912,6 +12066,98 @@ "node": ">= 10.0.0" } }, + "node_modules/unstorage": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.14.4.tgz", + "integrity": "sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.13.0", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.5.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3", + "@deno/kv": ">=0.8.4", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.1" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -12001,12 +12247,12 @@ } }, "node_modules/vite": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", - "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.6.tgz", + "integrity": "sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==", "license": "MIT", "dependencies": { - "esbuild": "^0.24.0", + "esbuild": "^0.24.2", "postcss": "^8.4.49", "rollup": "^4.23.0" }, @@ -12072,9 +12318,9 @@ } }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", - "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "cpu": [ "ppc64" ], @@ -12088,9 +12334,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", - "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "cpu": [ "arm" ], @@ -12104,9 +12350,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", - "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "cpu": [ "arm64" ], @@ -12120,9 +12366,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", - "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "cpu": [ "x64" ], @@ -12136,9 +12382,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", - "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "cpu": [ "arm64" ], @@ -12152,9 +12398,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", - "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "cpu": [ "x64" ], @@ -12168,9 +12414,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", - "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "cpu": [ "arm64" ], @@ -12184,9 +12430,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", - "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "cpu": [ "x64" ], @@ -12200,9 +12446,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", - "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "cpu": [ "arm" ], @@ -12216,9 +12462,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", - "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "cpu": [ "arm64" ], @@ -12232,9 +12478,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", - "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "cpu": [ "ia32" ], @@ -12248,9 +12494,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", - "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "cpu": [ "loong64" ], @@ -12264,9 +12510,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", - "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "cpu": [ "mips64el" ], @@ -12280,9 +12526,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", - "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "cpu": [ "ppc64" ], @@ -12296,9 +12542,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", - "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "cpu": [ "riscv64" ], @@ -12312,9 +12558,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", - "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "cpu": [ "s390x" ], @@ -12328,9 +12574,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", - "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "cpu": [ "x64" ], @@ -12344,9 +12590,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", - "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ "x64" ], @@ -12360,9 +12606,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", - "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "cpu": [ "x64" ], @@ -12376,9 +12622,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", - "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "cpu": [ "x64" ], @@ -12392,9 +12638,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", - "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "cpu": [ "arm64" ], @@ -12408,9 +12654,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", - "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "cpu": [ "ia32" ], @@ -12424,9 +12670,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", - "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "cpu": [ "x64" ], @@ -12440,9 +12686,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", - "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -12452,30 +12698,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.0", - "@esbuild/android-arm": "0.24.0", - "@esbuild/android-arm64": "0.24.0", - "@esbuild/android-x64": "0.24.0", - "@esbuild/darwin-arm64": "0.24.0", - "@esbuild/darwin-x64": "0.24.0", - "@esbuild/freebsd-arm64": "0.24.0", - "@esbuild/freebsd-x64": "0.24.0", - "@esbuild/linux-arm": "0.24.0", - "@esbuild/linux-arm64": "0.24.0", - "@esbuild/linux-ia32": "0.24.0", - "@esbuild/linux-loong64": "0.24.0", - "@esbuild/linux-mips64el": "0.24.0", - "@esbuild/linux-ppc64": "0.24.0", - "@esbuild/linux-riscv64": "0.24.0", - "@esbuild/linux-s390x": "0.24.0", - "@esbuild/linux-x64": "0.24.0", - "@esbuild/netbsd-x64": "0.24.0", - "@esbuild/openbsd-arm64": "0.24.0", - "@esbuild/openbsd-x64": "0.24.0", - "@esbuild/sunos-x64": "0.24.0", - "@esbuild/win32-arm64": "0.24.0", - "@esbuild/win32-ia32": "0.24.0", - "@esbuild/win32-x64": "0.24.0" + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" } }, "node_modules/vitefu": { @@ -12937,6 +13184,22 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/yaml-language-server/node_modules/prettier": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/yaml-language-server/node_modules/request-light": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", diff --git a/package.json b/package.json index f4ca22a..b8ae4dd 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@astrojs/check": "^0.9.4", - "@astrojs/mdx": "^4.0.1", + "@astrojs/mdx": "^4.0.3", "@astrojs/sitemap": "^3.2.1", "@swup/a11y-plugin": "^4.5.0", "@swup/body-class-plugin": "^3.2.0", @@ -19,7 +19,7 @@ "@swup/js-plugin": "^3.2.0", "@swup/progress-plugin": "^3.2.0", "@swup/scroll-plugin": "^3.3.2", - "astro": "^5.0.2", + "astro": "^5.1.1", "normalize.css": "^8.0.1", "swup": "^4.7.0", "typescript": "^5.5.4" diff --git a/src/assets/css/components/logos.css b/src/assets/css/components/logos.css index ab687c1..6b4ebc8 100644 --- a/src/assets/css/components/logos.css +++ b/src/assets/css/components/logos.css @@ -4,12 +4,14 @@ gap: 2em 3em; justify-content: center; list-style: none; - margin: 2em 0; - max-width: none; + margin-block: var(--space-2xl); + max-width: calc(1200 / 16 * 1rem); padding: 0; & li { display: flex; + flex: 1 1 12rem; + justify-content: center; } & .svg { @@ -18,6 +20,7 @@ & svg { fill: var(--color-body); max-height: 2em; + max-width: 100%; width: auto; } } diff --git a/src/assets/images/client-logos/amc-networks.svg b/src/assets/images/client-logos/amc-networks.svg new file mode 100644 index 0000000..792d93b --- /dev/null +++ b/src/assets/images/client-logos/amc-networks.svg @@ -0,0 +1 @@ + diff --git a/src/components/Card.astro b/src/components/Card.astro index 71bab94..1a5efa1 100644 --- a/src/components/Card.astro +++ b/src/components/Card.astro @@ -1,4 +1,11 @@ --- +import type { DataEntryMap } from 'astro:content'; +import type { CollectionEntry } from 'astro:content'; + +interface Props { + post: CollectionEntry; +} + import Tags from '@/components/Tags.astro'; import FormattedDate from '@/components/FormattedDate.astro'; import Link from '@/components/Link.astro'; @@ -6,7 +13,8 @@ import Link from '@/components/Link.astro'; const { post } = Astro.props; const { data } = post; const { title, date, categories } = data; -const href = `${post.collection}/${post.slug}`; + +const href = `${post.collection}/${post.id}`; ---

@@ -17,5 +25,5 @@ const href = `${post.collection}/${post.slug}`;
- {categories.length &&
} + {categories?.length &&
}

diff --git a/src/components/EntryList.astro b/src/components/EntryList.astro deleted file mode 100644 index e68eb71..0000000 --- a/src/components/EntryList.astro +++ /dev/null @@ -1,26 +0,0 @@ ---- -import type { PaginationEntry } from '../types'; - -interface Props { - data: PaginationEntry[]; -} - -const { data } = Astro.props; ---- -
- -
\ No newline at end of file diff --git a/src/components/NavigationSocial.astro b/src/components/NavigationSocial.astro index 5ffa21a..d3af58f 100644 --- a/src/components/NavigationSocial.astro +++ b/src/components/NavigationSocial.astro @@ -16,6 +16,11 @@ const networks = [ slug: "codepen", name: "Codepen", url: "https://codepen.io/JMChristensen/" + }, + { + slug: "bluesky", + name: "Bluesky", + url: "https://bsky.app/profile/jonmchristensen.bsky.social" } ] --- diff --git a/src/components/RecentPosts.astro b/src/components/RecentPosts.astro index 84a6f41..6e227b2 100644 --- a/src/components/RecentPosts.astro +++ b/src/components/RecentPosts.astro @@ -2,12 +2,10 @@ import { getCollection } from 'astro:content'; import Card from '@/components/Card.astro'; import { filterDrafts, sortEntriesByDate } from '@/utils'; -import type { Entry } from '@/types'; -let entries = await getCollection('my-thoughts') as Entry[]; - -entries = sortEntriesByDate(entries); -entries = filterDrafts(entries); +const collectionEntries = await getCollection('my-thoughts') +const sortedEntries = sortEntriesByDate(collectionEntries) +const entries = filterDrafts(sortedEntries) ---
    diff --git a/src/components/SiteSVG.astro b/src/components/SiteSVG.astro index ba53b53..052a7f1 100644 --- a/src/components/SiteSVG.astro +++ b/src/components/SiteSVG.astro @@ -35,5 +35,8 @@ + + + diff --git a/src/content/config.ts b/src/content.config.ts similarity index 78% rename from src/content/config.ts rename to src/content.config.ts index 1e76de6..2204acf 100644 --- a/src/content/config.ts +++ b/src/content.config.ts @@ -1,4 +1,5 @@ // 1. Import utilities from `astro:content` +import { glob } from 'astro/loaders'; import { z, defineCollection } from 'astro:content'; const defaults = { @@ -12,17 +13,21 @@ const defaults = { // 2. Define your collection(s) const postsCollection = defineCollection({ + loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/my-thoughts" }), schema: z.object({ ...defaults, + featured_image: z.string().optional(), }) }); const snippetsCollection = defineCollection({ + loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/snippets" }), schema: z.object({ ...defaults, lastmod: z.date(), }) }); const projectsCollection = defineCollection({ + loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/projects" }), schema: z.object({ ...defaults, company: z.string(), diff --git a/src/layouts/Project.astro b/src/layouts/Project.astro index 078ea10..dafa8ef 100644 --- a/src/layouts/Project.astro +++ b/src/layouts/Project.astro @@ -1,16 +1,19 @@ --- +import type { CollectionEntry, DataEntryMap } from 'astro:content'; + interface Props { - entry: Entry; + entry: CollectionEntry; } import BaseLayout from '@/layouts/Base.astro'; -import type { Entry, Project } from '@/types'; +import type { Project } from '@/types'; import { getCustomComponents } from '@/utils'; import FrontMatterImage from '@/components/FrontMatterImage.astro'; +import { render } from 'astro:content'; const { entry } = Astro.props; -const { data } = entry; +const { data } = entry as CollectionEntry<"projects">; const { title, description = '', @@ -21,11 +24,10 @@ const { libraries, technologies, platforms, -} = data as Project; -const { Content, components } = await entry.render(); +} = data; +const { Content } = await render(entry); const extendedComponents = { - ...components, ...getCustomComponents(), } diff --git a/src/layouts/Single.astro b/src/layouts/Single.astro index 3b287cd..82b678a 100644 --- a/src/layouts/Single.astro +++ b/src/layouts/Single.astro @@ -1,25 +1,28 @@ --- +import type { CollectionEntry, DataEntryMap } from 'astro:content'; + interface Props { - entry: Entry; + entry: CollectionEntry; } import BaseLayout from '@/layouts/Base.astro'; -import type { Entry, Post } from '@/types'; import { getCustomComponents } from '@/utils'; import Tags from '@/components/Tags.astro'; import FormattedDate from '@/components/FormattedDate.astro'; +import { render } from 'astro:content'; const { entry } = Astro.props; -const { data } = entry; +const { data } = entry as CollectionEntry<"my-thoughts">; const { title, description = '', date, categories, featured_image = '' -} = data as Post; -const { Content, components } = await entry.render(); +} = data; +const entryRender = await render(entry); +const { Content } = entryRender; const layoutProps = { title, @@ -29,10 +32,8 @@ const layoutProps = { } const extendedComponents = { - ...components, ...getCustomComponents(), } - ---
    diff --git a/src/layouts/Snippet.astro b/src/layouts/Snippet.astro index 6e05736..471f462 100644 --- a/src/layouts/Snippet.astro +++ b/src/layouts/Snippet.astro @@ -1,22 +1,23 @@ --- -import type { Entry, Snippet } from '../types'; +import type { CollectionEntry, DataEntryMap } from 'astro:content'; interface Props { - entry: Entry; + entry: CollectionEntry; } -import BaseLayout from '../layouts/Base.astro'; -import FormattedDate from '../components/FormattedDate.astro'; +import BaseLayout from '@/layouts/Base.astro'; +import FormattedDate from '@/components/FormattedDate.astro'; +import { render } from 'astro:content'; const { entry } = Astro.props; -const { data } = entry; +const { data } = entry as CollectionEntry<"snippets">; const { title, description = '', date, lastmod, -} = data as Snippet; -const { Content } = await entry.render(); +} = data; +const { Content } = await render(entry); const layoutProps = { title, diff --git a/src/pages/about-me.mdx b/src/pages/about-me.mdx index 5d37532..2cb2bad 100644 --- a/src/pages/about-me.mdx +++ b/src/pages/about-me.mdx @@ -13,7 +13,7 @@ export const clients = [ { slug: 'images/client-logos/university-st-thomas', name: 'University St. Thomas'}, { slug: 'images/client-logos/music-instrument-museum', name: 'Music Instrument Museum'}, { slug: 'images/client-logos/california-grants-portal', name: 'California Grants Portal'}, - { slug: 'images/client-logos/sheehy', name: 'Sheehy Construction'}, + { slug: 'images/client-logos/amc-networks', name: 'AMC Networks'}, { slug: 'images/client-logos/encompass-health', name: 'Encompass Health'}, { slug: 'images/client-logos/t-mobile', name: 'T-Mobile'}, { slug: 'images/client-logos/hilton', name: 'Hilton'}, @@ -22,14 +22,12 @@ export const clients = [ export const tools = [ { slug: 'images/tool-logos/git', name: 'Git'}, { slug: 'images/tool-logos/github', name: 'Github'}, - { slug: 'images/tool-logos/js', name: 'JavaScript'}, { slug: 'images/tool-logos/npm', name: 'Node Package Manager (NPM)'}, { slug: 'images/tool-logos/postcss', name: 'PostCSS'}, { slug: 'images/tool-logos/tailwindcss', name: 'Tailwind CSS'}, { slug: 'images/tool-logos/wordpress', name: 'WordPress'}, { slug: 'images/tool-logos/react', name: 'React'}, { slug: 'images/tool-logos/webpack', name: 'webpack'}, - { slug: 'images/tool-logos/vscode', name: 'VS Code'}, { slug: 'images/tool-logos/preact', name: 'Preact'}, { slug: 'images/tool-logos/nextjs', name: 'Next JS'}, { slug: 'images/tool-logos/astro', name: 'Astro'}, diff --git a/src/pages/my-thoughts/[...page].astro b/src/pages/my-thoughts/[...page].astro index ce572a5..af47abf 100644 --- a/src/pages/my-thoughts/[...page].astro +++ b/src/pages/my-thoughts/[...page].astro @@ -4,14 +4,14 @@ import Archive from '@/layouts/Archive.astro'; import Pagination from "@/components/Pagination.astro"; import Section from "@/components/Section.astro"; import Card from "@/components/Card.astro"; -import type { PaginationPage, PaginationEntry } from "@/types"; import { filterDrafts, sortEntriesByDate } from "@/utils"; +import type { PaginationPage } from "@/types"; export async function getStaticPaths({ paginate }: { paginate: Function }) { - let entries = await getCollection('my-thoughts') as PaginationEntry[]; + const collectionEntries = await getCollection('my-thoughts') - entries = sortEntriesByDate(entries) as PaginationEntry[]; - entries = filterDrafts(entries) as PaginationEntry[]; + const sortedEntries = sortEntriesByDate(collectionEntries) + const entries = filterDrafts(sortedEntries) return paginate(entries); } diff --git a/src/pages/my-thoughts/[slug]/index.astro b/src/pages/my-thoughts/[id]/index.astro similarity index 55% rename from src/pages/my-thoughts/[slug]/index.astro rename to src/pages/my-thoughts/[id]/index.astro index b2e93ce..0b91876 100644 --- a/src/pages/my-thoughts/[slug]/index.astro +++ b/src/pages/my-thoughts/[id]/index.astro @@ -2,15 +2,14 @@ import { getCollection } from "astro:content"; import Single from "@/layouts/Single.astro"; import { filterDrafts } from "@/utils"; -import type { PaginationEntry } from "@/types"; export async function getStaticPaths() { - let entries = await getCollection("my-thoughts") as PaginationEntry[]; + const collectionEntries = await getCollection("my-thoughts"); - entries = filterDrafts(entries) as PaginationEntry[]; + const entries = filterDrafts(collectionEntries); return entries.map((entry) => ({ - params: { slug: entry.slug }, props: { entry }, + params: { id: entry.id }, props: { entry }, })); } diff --git a/src/pages/projects/[...page].astro b/src/pages/projects/[...page].astro index 6411a10..ade081f 100644 --- a/src/pages/projects/[...page].astro +++ b/src/pages/projects/[...page].astro @@ -2,21 +2,23 @@ import { getCollection } from "astro:content"; import Archive from '@/layouts/Archive.astro'; import { filterDrafts, sortEntriesByDate } from "@/utils"; -import type { PaginationPage, PaginationEntry, Project } from "@/types"; +import type { PaginationPage } from "@/types"; import Section from "@/components/Section.astro"; import Link from "@/components/Link.astro"; import FrontMatterImage from "@/components/FrontMatterImage.astro"; +import type { CollectionEntry } from "astro:content"; export async function getStaticPaths({ paginate }: { paginate: Function }) { - let entries = await getCollection('projects') as PaginationEntry[]; + const collectionEntries = await getCollection('projects'); - entries = sortEntriesByDate(entries) as PaginationEntry[]; - entries = filterDrafts(entries) as PaginationEntry[]; + const sortedEntries = sortEntriesByDate(collectionEntries); + const entries = filterDrafts(sortedEntries); return paginate(entries); } const { page } : { page: PaginationPage } = Astro.props; +const posts = page.data as CollectionEntry<"projects">[]; const title = 'Projects'; const description = "Some of the things I've worked on. Check 'em out."; --- @@ -31,10 +33,10 @@ const description = "Some of the things I've worked on. Check 'em out.";
      - {page.data.map((post) => { + {posts.map((post) => { const { data } = post; - const { title, featured_image } = data as Project; - const href = `${post.collection}/${post.slug}`; + const { title, featured_image } = data; + const href = `${post.collection}/${post.id}`; return (
    • diff --git a/src/pages/projects/[slug]/index.astro b/src/pages/projects/[id]/index.astro similarity index 56% rename from src/pages/projects/[slug]/index.astro rename to src/pages/projects/[id]/index.astro index e5db4a4..54ad0c7 100644 --- a/src/pages/projects/[slug]/index.astro +++ b/src/pages/projects/[id]/index.astro @@ -1,16 +1,15 @@ --- import { getCollection } from "astro:content"; import Project from '@/layouts/Project.astro'; -import type { PaginationEntry } from "@/types"; import { filterDrafts } from "@/utils"; export async function getStaticPaths() { - let entries = await getCollection("projects") as PaginationEntry[]; + const collectionEntries = await getCollection("projects"); - entries = filterDrafts(entries) as PaginationEntry[]; + const entries = filterDrafts(collectionEntries); return entries.map((entry) => ({ - params: { slug: entry.slug }, props: { entry }, + params: { id: entry.id }, props: { entry }, })); } diff --git a/src/pages/snippets/[...page].astro b/src/pages/snippets/[...page].astro index 75b78e0..87d26f4 100644 --- a/src/pages/snippets/[...page].astro +++ b/src/pages/snippets/[...page].astro @@ -2,21 +2,23 @@ import { getCollection } from "astro:content"; import Archive from '@/layouts/Archive.astro'; import { sortEntriesByTitle, filterDrafts } from "@/utils"; -import type { PaginationPage, PaginationEntry, Snippet } from "@/types"; +import type { PaginationPage } from "@/types"; import Section from "@/components/Section.astro"; import FormattedDate from "@/components/FormattedDate.astro"; import Link from "@/components/Link.astro"; +import type { CollectionEntry } from "astro:content"; export async function getStaticPaths({ paginate }: { paginate: Function }) { - let entries = await getCollection('snippets') as PaginationEntry[]; + const collectionEntries = await getCollection('snippets'); - entries = sortEntriesByTitle(entries) as PaginationEntry[]; - entries = filterDrafts(entries) as PaginationEntry[]; + const sortedEntries = sortEntriesByTitle(collectionEntries); + const entries = filterDrafts(sortedEntries); return paginate(entries); } const { page } : { page: PaginationPage } = Astro.props; +const posts = page.data as CollectionEntry<"snippets">[]; const title = 'Snippets'; const description = "A collection of snippets I have for web development."; --- @@ -41,10 +43,10 @@ const description = "A collection of snippets I have for web development."; - {page.data.map(snippet => { + {posts.map((snippet) => { const { data } = snippet; - const { title, description, lastmod, categories } = data as Snippet; - const href = `${snippet.collection}/${snippet.slug}`; + const { title, description, lastmod, categories } = data; + const href = `${snippet.collection}/${snippet.id}`; return ( diff --git a/src/pages/snippets/[id]/index.astro b/src/pages/snippets/[id]/index.astro new file mode 100644 index 0000000..5a700a5 --- /dev/null +++ b/src/pages/snippets/[id]/index.astro @@ -0,0 +1,19 @@ +--- +import { getCollection } from "astro:content"; +import Snippet from '@/layouts/Snippet.astro'; +import { filterDrafts } from "@/utils"; + +export async function getStaticPaths() { + const collectionEntries = await getCollection("snippets"); + + const entries = filterDrafts(collectionEntries); + + return entries.map((entry) => ({ + params: { id: entry.id }, props: { entry }, + })); +} + +const { entry } = Astro.props; +--- + + diff --git a/src/pages/snippets/[slug]/index.astro b/src/pages/snippets/[slug]/index.astro deleted file mode 100644 index 1a89576..0000000 --- a/src/pages/snippets/[slug]/index.astro +++ /dev/null @@ -1,20 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import Snippet from '../../../layouts/Snippet.astro'; -import type { PaginationEntry } from "@/types"; -import { filterDrafts } from "@/utils"; - -export async function getStaticPaths() { - let entries = await getCollection('snippets') as PaginationEntry[]; - - entries = filterDrafts(entries) as PaginationEntry[]; - - return entries.map((entry) => ({ - params: { slug: entry.slug }, props: { entry }, - })); -} - -const { entry } = Astro.props; ---- - - diff --git a/src/types.ts b/src/types.ts index b776c8e..8142fa5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,5 @@ +import type { CollectionEntry, DataEntryMap } from "astro:content"; + export type Entry = { data: EntryData; render: Function; @@ -12,15 +14,15 @@ export type EntryData = { categories?: string[]; } -export type Post = EntryData & { +export type Post = CollectionEntry<'my-thoughts'> & { featured_image?: any; } -export type Snippet = EntryData & { +export type Snippet = CollectionEntry<"snippets"> & { lastmod: Date; } -export type Project = EntryData & { +export type Project = CollectionEntry<"projects"> & { company: string; subtitle: string; featured_image: string; @@ -30,15 +32,8 @@ export type Project = EntryData & { platforms: string[]; } -export type PaginationEntry = Entry & { - id: string; - slug: string; - body: string; - collection: string; -} - export type PaginationPage = { - data: PaginationEntry[]; + data: CollectionEntry[]; start: number; end: number; size: number; diff --git a/src/utils/index.ts b/src/utils/index.ts index e180e9e..3b650e8 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,38 +1,37 @@ -import type { Entry } from "@/types"; - import Codepen from '@/components/Codepen.astro'; import Devices from '@/components/Devices.astro'; import Figure from '@/components/Figure.astro'; import Gallery from "@/components/Gallery.astro"; import Stat from '@/components/Stat.astro'; import YouTube from '@/components/YouTube.astro'; +import type { CollectionEntry, DataEntryMap } from "astro:content"; -export function sortEntriesByDate(entries: Entry[]) { +export function sortEntriesByDate(entries: CollectionEntry[]) { return entries.sort((a, b) => { return new Date(b.data.date).getTime() - new Date(a.data.date).getTime(); }); } -export function sortEntriesByTitle(entries: Entry[]) { +export function sortEntriesByTitle(entries: CollectionEntry[]) { return entries.sort((a, b) => { return a.data.title.localeCompare(b.data.title); }); } -export function filterDrafts(entries: Entry[]) { +export function filterDrafts(entries: CollectionEntry[]) { return entries.filter(entry => { return import.meta.env.PROD ? entry.data.draft !== true : true; }); } -export function filterByCategory(entries: Entry[], category: string) { +export function filterByCategory(entries: CollectionEntry[], category: string) { return entries.filter(entry => { if ( !entry.data.categories ) return false; return entry.data.categories.includes(category) }); } -export function filterByTag(entries: Entry[], tag: string) { +export function filterByTag(entries: CollectionEntry[], tag: string) { return entries.filter(entry => { if ( !entry.data.tags ) return false; return entry.data.tags.includes(tag)