From e6561f90e5b86cef78954b160bd7911e001cd23a Mon Sep 17 00:00:00 2001 From: Samuel Monroe Date: Wed, 18 Mar 2026 14:57:14 +0100 Subject: [PATCH] Add Backend-for-Frontend (BFF) OpenAPI schema to published package and automate its distribution in build process --- vue/README.md | 2 ++ vue/package.json | 1 + vue/vite.config.ts | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/vue/README.md b/vue/README.md index 5e8a3442..665e4358 100644 --- a/vue/README.md +++ b/vue/README.md @@ -106,6 +106,8 @@ Types live under the `@nside/wefa/types` export: import type { WefaButtonProps } from '@nside/wefa/types'; ``` +The published package also includes the Backend-for-Frontend OpenAPI document at `@nside/wefa/bff-openapi`. + ### Theme preset To apply the NSIDE Prime theme preset in your app: diff --git a/vue/package.json b/vue/package.json index c443a3d8..f015dbc8 100644 --- a/vue/package.json +++ b/vue/package.json @@ -42,6 +42,7 @@ "import": "./dist/network.js", "require": "./dist/network.cjs" }, + "./bff-openapi": "./dist/bff/openapi.yaml", "./types": "./dist/lib.d.ts", "./style": "./src/assets/main.css" }, diff --git a/vue/vite.config.ts b/vue/vite.config.ts index b4220eb7..ecfe5afb 100644 --- a/vue/vite.config.ts +++ b/vue/vite.config.ts @@ -1,4 +1,5 @@ import { fileURLToPath, URL } from 'node:url' +import { copyFileSync, existsSync, mkdirSync } from 'node:fs' import { defineConfig } from 'vite' import { resolve } from "path" import vue from '@vitejs/plugin-vue' @@ -6,9 +7,24 @@ import tailwindcss from '@tailwindcss/vite' import dts from 'vite-plugin-dts' import tidewave from 'tidewave/vite-plugin' +const bffOpenApiSource = resolve(__dirname, '../bff/bff_app/openapi/openapi.yaml') +const bffOpenApiDistDir = resolve(__dirname, 'dist/bff') +const bffOpenApiDistFile = resolve(bffOpenApiDistDir, 'openapi.yaml') + // https://vite.dev/config/ export default defineConfig({ plugins: [ + { + name: 'copy-bff-openapi', + writeBundle() { + if (!existsSync(bffOpenApiSource)) { + throw new Error(`Missing BFF OpenAPI file at ${bffOpenApiSource}`) + } + + mkdirSync(bffOpenApiDistDir, { recursive: true }) + copyFileSync(bffOpenApiSource, bffOpenApiDistFile) + }, + }, tidewave(), vue({script: {defineModel: true}}), // vueDevTools(),