generated from nhcarrigan/template
b6d66d34cb
I can log in and create a book! Woo!
32 lines
1010 B
TypeScript
32 lines
1010 B
TypeScript
/**
|
|
* @copyright 2026 NHCarrigan
|
|
* @license Naomi's Public License
|
|
* @author Naomi Carrigan
|
|
*/
|
|
|
|
import { FastifyInstance } from "fastify";
|
|
import fastifyStatic from "@fastify/static";
|
|
import path from "path";
|
|
|
|
export default async function staticPlugin(app: FastifyInstance) {
|
|
const isProduction = process.env.NODE_ENV === "production";
|
|
|
|
if (isProduction) {
|
|
// Serve the built Angular app from dist directory
|
|
await app.register(fastifyStatic, {
|
|
root: path.join(__dirname, "../../../../../../dist/apps/frontend"),
|
|
prefix: "/", // Serve at root
|
|
wildcard: false, // Disable wildcard routes to avoid conflicts
|
|
});
|
|
|
|
// Catch-all route for Angular SPA routing (must be registered after API routes)
|
|
app.setNotFoundHandler((request, reply) => {
|
|
// Only catch routes that don't start with /api
|
|
if (!request.url.startsWith("/api")) {
|
|
reply.sendFile("index.html");
|
|
} else {
|
|
reply.code(404).send({ error: "Not Found" });
|
|
}
|
|
});
|
|
}
|
|
} |