38 lines
1.2 KiB
TypeScript
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,
|
|
};
|
|
}
|