@analogjs/platform
Version:
The fullstack meta-framework for Angular
101 lines • 9.13 kB
JavaScript
import { normalizePath } from 'vite';
import fg from 'fast-glob';
import { resolve } from 'node:path';
/**
* This plugin invalidates the files for routes when new files
* are added/deleted.
*
* Workaround for: https://github.com/vitejs/vite/issues/10616
*
* @returns
*/
export function routerPlugin(options) {
const workspaceRoot = normalizePath(options?.workspaceRoot ?? process.cwd());
let config;
let root;
return [
{
name: 'analogjs-router-invalidate-routes',
configureServer(server) {
function invalidateRoutes(path) {
if (path.includes(`routes`) ||
path.includes(`pages`) ||
path.includes('content')) {
server.moduleGraph.fileToModulesMap.forEach((mods) => {
mods.forEach((mod) => {
if (mod.id?.includes('analogjs') && mod.id?.includes('fesm')) {
server.moduleGraph.invalidateModule(mod);
mod.importers.forEach((imp) => {
server.moduleGraph.invalidateModule(imp);
});
}
});
});
server.ws.send({
type: 'full-reload',
});
}
}
server.watcher.on('add', invalidateRoutes);
server.watcher.on('unlink', invalidateRoutes);
},
},
{
name: 'analog-glob-routes',
config(_config) {
config = _config;
root = normalizePath(resolve(workspaceRoot, config.root || '.') || '.');
},
transform(code) {
if (code.includes('ANALOG_ROUTE_FILES') ||
code.includes('ANALOG_CONTENT_ROUTE_FILES')) {
const routeFiles = fg.sync([
`${root}/app/routes/**/*.ts`,
`${root}/src/app/routes/**/*.ts`,
`${root}/src/app/pages/**/*.page.ts`,
`${root}/src/app/pages/**/*.page.analog`,
`${root}/src/app/pages/**/*.page.ag`,
...(options?.additionalPagesDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.page.{ts,analog,ag}`),
], { dot: true });
const contentRouteFiles = fg.sync([
`${root}/src/app/routes/**/*.md`,
`${root}/src/app/pages/**/*.md`,
`${root}/src/content/**/*.md`,
...(options?.additionalContentDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.{md,agx}`),
], { dot: true });
let result = code.replace('ANALOG_ROUTE_FILES = {};', `
ANALOG_ROUTE_FILES = {${routeFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}')`)}};
`);
result = result.replace('ANALOG_CONTENT_ROUTE_FILES = {};', `
ANALOG_CONTENT_ROUTE_FILES = {${contentRouteFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}?analog-content-file=true').then(m => m.default)`)}};
`);
return {
code: result,
map: { mappings: '' },
};
}
return;
},
},
{
name: 'analog-glob-endpoints',
transform(code) {
if (code.includes('ANALOG_PAGE_ENDPOINTS')) {
const endpointFiles = fg.sync([
`${root}/src/app/pages/**/*.server.ts`,
...(options?.additionalPagesDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.server.ts`),
], { dot: true });
const result = code.replace('ANALOG_PAGE_ENDPOINTS = {};', `
ANALOG_PAGE_ENDPOINTS = {${endpointFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}')`)}};
`);
return {
code: result,
map: { mappings: '' },
};
}
return;
},
},
];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUlwQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFpQjtJQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO29CQUNwQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO3dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDeEIsQ0FBQzt3QkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ25CLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQ0FDN0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxn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