From 7eae134085442dc32c5ab6dfca36dfedcd78daf1 Mon Sep 17 00:00:00 2001 From: upsiflu Date: Wed, 29 Jan 2025 14:11:36 +0100 Subject: [PATCH] refactor(dx): auto-generate types for frontend objects and responses #2388 --- front/package.json | 10 +- front/src/components/album/Card.vue | 4 +- front/src/components/library/Albums.vue | 16 +- front/src/generated/types.ts | 4 + front/src/types.ts | 225 +++++------------------- front/yarn.lock | 121 ++++++++++++- 6 files changed, 182 insertions(+), 198 deletions(-) create mode 100644 front/src/generated/types.ts diff --git a/front/package.json b/front/package.json index 057e8c630..195165ab7 100644 --- a/front/package.json +++ b/front/package.json @@ -6,10 +6,10 @@ "description": "Funkwhale front-end", "author": "Funkwhale Collective ", "scripts": { - "dev": "vite", + "dev": "yarn run update-schema && vite", "dev:docs": "VP_DOCS=true vitepress dev ui-docs", - "build": "vite build --mode development", - "build:deployment": "vite build", + "build": "yarn run update-schema && vite build --mode development", + "build:deployment": "yarn run update-schema && vite build", "build:docs": "VP_DOCS=true vitepress build ui-docs", "serve:docs": "VP_DOCS=true vitepress serve ui-docs", "serve": "vite preview", @@ -17,7 +17,8 @@ "test:unit": "vitest run --coverage", "test:generate-mock-server": "msw-auto-mock ../docs/schema.yml -o test/msw-server.ts --node", "lint": "eslint --cache --cache-strategy content --ext .ts,.js,.vue,.json,.html src test cypress public/embed.html", - "lint:tsc": "vue-tsc --noEmit --incremental && tsc --noEmit --incremental -p cypress" + "lint:tsc": "vue-tsc --noEmit --incremental && tsc --noEmit --incremental -p cypress", + "update-schema": "yarn run openapi-typescript https://docs.funkwhale.audio/develop/swagger/schema.yml -o src/generated/types.ts" }, "dependencies": { "@sentry/tracing": "7.47.0", @@ -106,6 +107,7 @@ "jsonc-eslint-parser": "2.4.0", "msw": "2.2.1", "msw-auto-mock": "0.18.0", + "openapi-typescript": "7.6.0", "patch-package": "8.0.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.68.0", diff --git a/front/src/components/album/Card.vue b/front/src/components/album/Card.vue index a2e458a11..085aa4f0f 100644 --- a/front/src/components/album/Card.vue +++ b/front/src/components/album/Card.vue @@ -12,7 +12,9 @@ import Link from '~/components/ui/Link.vue' import TagsList from '~/components/tags/List.vue' import Spacer from '~/components/ui/Spacer.vue' -import type { Album } from '~/types' +import { type components } from '~/generated/types.ts' + +type Album = components['schemas']['Album'] const play = defineEmit<[album: Album]>() diff --git a/front/src/components/library/Albums.vue b/front/src/components/library/Albums.vue index a54c7a639..455c54a30 100644 --- a/front/src/components/library/Albums.vue +++ b/front/src/components/library/Albums.vue @@ -1,6 +1,7 @@