diff --git a/website/app/app.vue b/website/app/app.vue index 02d99b3..f8411e1 100644 --- a/website/app/app.vue +++ b/website/app/app.vue @@ -6,7 +6,7 @@ Website - Swagger + Swagger - + diff --git a/website/app/components/AddLibraryModal.vue b/website/app/components/AddLibraryModal.vue index 0f40b8c..13cf3e2 100644 --- a/website/app/components/AddLibraryModal.vue +++ b/website/app/components/AddLibraryModal.vue @@ -15,23 +15,20 @@ diff --git a/website/app/components/ChaptersList.vue b/website/app/components/ChaptersList.vue index 36f3140..d689e63 100644 --- a/website/app/components/ChaptersList.vue +++ b/website/app/components/ChaptersList.vue @@ -31,12 +31,11 @@ diff --git a/website/app/components/FileLibraries.vue b/website/app/components/FileLibraries.vue index 0722ec3..3225532 100644 --- a/website/app/components/FileLibraries.vue +++ b/website/app/components/FileLibraries.vue @@ -1,8 +1,8 @@ diff --git a/website/app/components/MangaDetailPage.vue b/website/app/components/MangaDetailPage.vue index b33ef3f..605fc66 100644 --- a/website/app/components/MangaDetailPage.vue +++ b/website/app/components/MangaDetailPage.vue @@ -40,8 +40,8 @@ diff --git a/website/app/composables/FetchKeys.ts b/website/app/composables/FetchKeys.ts new file mode 100644 index 0000000..631e27a --- /dev/null +++ b/website/app/composables/FetchKeys.ts @@ -0,0 +1,14 @@ +export const FetchKeys = { + FileLibraries: "FileLibraries", + Chapters: { + All: "Chapters", + }, + Manga: { + All: "Manga", + Id: (id: string) => `Manga/${id}`, + }, + MangaConnector: { + Id: (id: string) => `MangaConnector/${id}`, + All: "MangaConnector", + } +} \ No newline at end of file diff --git a/website/app/pages/download/[mangaId].vue b/website/app/pages/download/[mangaId].vue index 450680d..5b6e9e8 100644 --- a/website/app/pages/download/[mangaId].vue +++ b/website/app/pages/download/[mangaId].vue @@ -6,6 +6,7 @@ import MangaDetailPage from '~/components/MangaDetailPage.vue'; const route = useRoute(); +const mangaId = route.params.MangaId as string; -const { data: manga } = useApi('/v2/Manga/{MangaId}', { path: { MangaId: route.params.mangaId as string } }); +const { data: manga } = await useApiData('/v2/Manga/{MangaId}', { path: { MangaId: mangaId }, key: FetchKeys.Manga.Id(mangaId) }); diff --git a/website/app/pages/index.vue b/website/app/pages/index.vue index 624f2d0..e51e9db 100644 --- a/website/app/pages/index.vue +++ b/website/app/pages/index.vue @@ -13,7 +13,7 @@ diff --git a/website/app/pages/manga/[mangaId]/index.vue b/website/app/pages/manga/[mangaId]/index.vue index 53c7735..cab8ac9 100644 --- a/website/app/pages/manga/[mangaId]/index.vue +++ b/website/app/pages/manga/[mangaId]/index.vue @@ -11,6 +11,7 @@ import MangaDetailPage from '~/components/MangaDetailPage.vue'; const route = useRoute(); +const mangaId = route.params.MangaId as string; -const { data: manga } = useApi('/v2/Manga/{MangaId}', { path: { MangaId: route.params.mangaId as string } }); +const { data: manga } = await useApiData('/v2/Manga/{MangaId}', { path: { MangaId: mangaId }, key: FetchKeys.Manga.Id(mangaId) }); diff --git a/website/app/pages/manga/[mangaId]/merge/[targetId].vue b/website/app/pages/manga/[mangaId]/merge/[targetId].vue index e8397f7..1c966b6 100644 --- a/website/app/pages/manga/[mangaId]/merge/[targetId].vue +++ b/website/app/pages/manga/[mangaId]/merge/[targetId].vue @@ -24,6 +24,6 @@ const route = useRoute(); const targetId = route.params.targetId as string; const mangaId = route.params.mangaId as string; -const { data: target } = useApi('/v2/Manga/{MangaId}', { path: { MangaId: targetId } }); -const { data: manga } = useApi('/v2/Manga/{MangaId}', { path: { MangaId: mangaId } }); +const { data: target } = await useApiData('/v2/Manga/{MangaId}', { path: { MangaId: targetId }, key: FetchKeys.Manga.Id(targetId) }); +const { data: manga } = await useApiData('/v2/Manga/{MangaId}', { path: { MangaId: mangaId }, key: FetchKeys.Manga.Id(mangaId) }); diff --git a/website/app/pages/manga/[mangaId]/merge/index.vue b/website/app/pages/manga/[mangaId]/merge/index.vue index 1c23a75..45a8f6b 100644 --- a/website/app/pages/manga/[mangaId]/merge/index.vue +++ b/website/app/pages/manga/[mangaId]/merge/index.vue @@ -10,6 +10,6 @@ diff --git a/website/app/pages/search.vue b/website/app/pages/search.vue index 6e67ca2..43be56c 100644 --- a/website/app/pages/search.vue +++ b/website/app/pages/search.vue @@ -46,12 +46,12 @@ diff --git a/website/nuxt.config.ts b/website/nuxt.config.ts index 0a75ab5..af6e894 100644 --- a/website/nuxt.config.ts +++ b/website/nuxt.config.ts @@ -5,13 +5,15 @@ export default defineNuxtConfig({ devtools: { enabled: true }, vite: { plugins: [tailwindcss()] }, css: ['~/assets/css/main.css'], - modules: ['@nuxt/content', '@nuxt/eslint', '@nuxt/image', '@nuxt/ui', 'nuxt-open-fetch'], - devServer: { host: '127.0.0.1' }, - openFetch: { - openAPITS: { exportType: false, enum: true, alphabetize: true }, - clients: { - api: { schema: 'http://127.0.0.1:6531/swagger/v2/swagger.json', baseURL: 'http://127.0.0.1:6531/' }, - }, - }, - ssr: true, -}); + modules: ['@nuxt/content', '@nuxt/eslint', '@nuxt/image', '@nuxt/ui', 'nuxt-api-party'], + devServer: { host: '127.0.0.1' },runtimeConfig: { + apiParty: { + endpoints: { + api: { + url: 'http://127.0.0.1:6531', + schema: 'https://raw.githubusercontent.com/C9Glax/tranga/refs/heads/testing/API/openapi/API_v2.json', + } + } + } + } +}); \ No newline at end of file diff --git a/website/package-lock.json b/website/package-lock.json index c508cb9..3955262 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -14,13 +14,15 @@ "@tailwindcss/vite": "^4.1.13", "better-sqlite3": "^12.4.1", "nuxt": "^4.1.2", + "nuxt-api-party": "^3.3.0", "tailwindcss": "^4.1.13", "vue": "^3.5.21", "vue-router": "^4.5.1" }, "devDependencies": { + "@iconify-json/lucide": "^1.2.68", "eslint": "^9.36.0", - "nuxt-open-fetch": "^0.13.5", + "openapi-typescript": "^7.9.1", "prettier": "3.6.2", "typescript": "^5.9.2" } @@ -175,6 +177,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -440,6 +443,7 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/types": "^7.28.4" }, @@ -1515,6 +1519,16 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify-json/lucide": { + "version": "1.2.68", + "resolved": "https://registry.npmjs.org/@iconify-json/lucide/-/lucide-1.2.68.tgz", + "integrity": "sha512-lR5xNJdn2CT0iR7lM25G4SewBO4G2hbr3fTWOc3AE9BspflEcneh02E3l9TBaCU/JOHozTJevWLrxBGypD7Tng==", + "dev": true, + "license": "ISC", + "dependencies": { + "@iconify/types": "*" + } + }, "node_modules/@iconify/collections": { "version": "1.0.597", "resolved": "https://registry.npmjs.org/@iconify/collections/-/collections-1.0.597.tgz", @@ -3832,7 +3846,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.3.tgz", "integrity": "sha512-4P3iZse91TkBiY+Dx5DUgxQ9GXkVJf++cmI0MOyLDxV9b5MUBI4II6ES8zA5JCbO72nKAJxWrw4PUPW+YP3ZDQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3849,21 +3863,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@redocly/config": { "version": "0.22.2", "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@redocly/openapi-core": { "version": "1.34.5", "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.5.tgz", "integrity": "sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@redocly/ajv": "^8.11.2", @@ -3885,7 +3899,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -4511,6 +4525,7 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.4.0.tgz", "integrity": "sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.9.0", "@typescript-eslint/types": "^8.44.0", @@ -4925,7 +4940,8 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/lodash": { "version": "4.17.20", @@ -5006,6 +5022,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/types": "8.44.1", @@ -5679,6 +5696,7 @@ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/parser": "^7.28.4", "@vue/compiler-core": "3.5.22", @@ -5849,6 +5867,7 @@ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz", "integrity": "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==", "license": "MIT", + "peer": true, "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "13.9.0", @@ -5980,6 +5999,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6058,7 +6078,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -6312,7 +6332,8 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/bare-fs": { "version": "4.4.4", @@ -6426,6 +6447,7 @@ "integrity": "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==", "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" @@ -6588,6 +6610,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", @@ -7125,7 +7148,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/colortranslator": { @@ -7903,7 +7926,8 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/embla-carousel-auto-height": { "version": "8.6.0", @@ -8139,6 +8163,7 @@ "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8206,6 +8231,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -9187,6 +9213,7 @@ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=10" } @@ -9977,7 +10004,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -10464,7 +10491,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12603,6 +12630,33 @@ } } }, + "node_modules/nuxt-api-party": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/nuxt-api-party/-/nuxt-api-party-3.3.0.tgz", + "integrity": "sha512-amN5tKiL4ZeV2V99PTp220+YjyIeaqw8yYh9YI/I9L7WbCcDrk7NVFCPp+QhNBXAZoneMp5Tqv6wr8J+FpAfBQ==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.1.2", + "chokidar": "^4.0.3", + "defu": "^6.1.4", + "h3": "^1.15.4", + "jiti": "^2.5.1", + "ofetch": "^1.4.1", + "ohash": "^2.0.11", + "openapi-typescript-helpers": "0.0.13", + "pathe": "^2.0.3", + "scule": "^1.3.0", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "openapi-typescript": "^5 || ^6 || ^7" + }, + "peerDependenciesMeta": { + "openapi-typescript": { + "optional": true + } + } + }, "node_modules/nuxt-component-meta": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/nuxt-component-meta/-/nuxt-component-meta-0.14.0.tgz", @@ -12623,21 +12677,6 @@ "nuxt-component-meta": "bin/nuxt-component-meta.mjs" } }, - "node_modules/nuxt-open-fetch": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/nuxt-open-fetch/-/nuxt-open-fetch-0.13.5.tgz", - "integrity": "sha512-84fw/zZr97J0JgN7uWMMSW/VnHxYV4XUI4bDTQrT4ivvCDT+lPCsuyYJeu2s52YlmpbVDXWpXGBhf9FQZmQzTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nuxt/kit": "^4.0.0", - "defu": "^6.1.4", - "ohash": "^2.0.11", - "openapi-typescript": "^7.8.0", - "openapi-typescript-helpers": "^0.0.15", - "scule": "^1.3.0" - } - }, "node_modules/nypm": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", @@ -12787,8 +12826,9 @@ "version": "7.9.1", "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.9.1.tgz", "integrity": "sha512-9gJtoY04mk6iPMbToPjPxEAtfXZ0dTsMZtsgUI8YZta0btPPig9DJFP4jlerQD/7QOwYgb0tl+zLUpDf7vb7VA==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@redocly/openapi-core": "^1.34.5", "ansi-colors": "^4.1.3", @@ -12805,10 +12845,9 @@ } }, "node_modules/openapi-typescript-helpers": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", - "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", - "dev": true, + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.13.tgz", + "integrity": "sha512-z44WK2e7ygW3aUtAtiurfEACohf/Qt9g6BsejmIYgEoY4REHeRzgFJmO3ium0libsuzPc145I+8lE9aiiZrQvQ==", "license": "MIT" }, "node_modules/optionator": { @@ -12816,6 +12855,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -12862,6 +12902,7 @@ "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.87.0.tgz", "integrity": "sha512-uc47XrtHwkBoES4HFgwgfH9sqwAtJXgAIBq4fFBMZ4hWmgVZoExyn+L4g4VuaecVKXkz1bvlaHcfwHAJPQb5Gw==", "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/types": "^0.87.0" }, @@ -13028,7 +13069,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", @@ -13236,6 +13277,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -14416,7 +14458,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15401,6 +15443,7 @@ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -15429,7 +15472,8 @@ "version": "4.1.13", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.2.3", @@ -15500,6 +15544,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -15693,6 +15738,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16179,6 +16225,7 @@ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -16408,7 +16455,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/util-deprecate": { @@ -16572,6 +16619,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -16888,6 +16936,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -16945,6 +16994,7 @@ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -16968,6 +17018,7 @@ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", "license": "MIT", + "peer": true, "dependencies": { "@vue/devtools-api": "^6.6.4" }, @@ -17248,7 +17299,7 @@ "version": "0.0.43", "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/yargs": { @@ -17373,6 +17424,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/website/package.json b/website/package.json index 93db236..339b78e 100644 --- a/website/package.json +++ b/website/package.json @@ -20,13 +20,15 @@ "@tailwindcss/vite": "^4.1.13", "better-sqlite3": "^12.4.1", "nuxt": "^4.1.2", + "nuxt-api-party": "^3.3.0", "tailwindcss": "^4.1.13", "vue": "^3.5.21", "vue-router": "^4.5.1" }, "devDependencies": { + "@iconify-json/lucide": "^1.2.68", "eslint": "^9.36.0", - "nuxt-open-fetch": "^0.13.5", + "openapi-typescript": "^7.9.1", "prettier": "3.6.2", "typescript": "^5.9.2" } diff --git a/website/tsconfig.json b/website/tsconfig.json index 561965c..c558547 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -8,5 +8,5 @@ { "path": "./.nuxt/tsconfig.node.json" } ], "compileOnSave": true, - "compilerOptions": { "noUncheckedIndexedAccess": true, "module": "NodeNext", "moduleResolution": "NodeNext" } + "compilerOptions": { "noUncheckedIndexedAccess": true, "module": "ESNext", "moduleResolution": "Bundler" } }