Files
mygit/apps/admin/vite-deep-links.ts
T
DuckQ1u 93d1b7c3d3
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
first commit
2026-04-22 19:51:20 +07:00

38 lines
1.2 KiB
TypeScript

import type { Plugin, ViteDevServer, PreviewServer } from "vite";
/**
* Vite plugin that redirects admin deep-link URLs to hash-based URLs.
*
* Mirrors ghost/core/core/server/web/admin/middleware/redirect-admin-urls.js
* so that direct navigation to paths like /ghost/posts/123 redirects to /ghost/#/posts/123
*
* By registering as a post-middleware, static assets and API requests are handled first,
* and only unhandled requests trigger the redirect.
*/
export function deepLinksPlugin(): Plugin {
function addRedirectMiddleware(server: ViteDevServer | PreviewServer) {
const base = (server.config.base ?? "/ghost").replace(/\/$/, "");
const pathRegex = new RegExp(`^${base}/(.+)`);
return () => {
server.middlewares.use((req, res, next) => {
const match = req.originalUrl?.match(pathRegex);
if (match) {
res.writeHead(302, { Location: `${base}/#/${match[1]}` });
res.end();
return;
}
next();
});
};
}
return {
name: "deep-links",
configureServer: addRedirectMiddleware,
configurePreviewServer: addRedirectMiddleware,
};
}