muddle/decorators/RenderRoute.ts
2026-10-23 09:12:49 -04:00

40 lines
932 B
TypeScript

import { defineMetadata, getMetadata } from "../core/metadata.ts";
const KEY = "muddle:render-route";
export interface CollectionRenderRoute {
collection: string;
path: string;
}
export type RenderRouteSource = string | string[] | CollectionRenderRoute;
export function routeFolder(...segments: string[]): string {
return `/${segments
.filter(Boolean)
.map((segment) => segment.replace(/^\/+|\/+$/g, ""))
.join("/")}`;
}
export function collectionRoute(
collection: string,
path: string,
): CollectionRenderRoute {
return { collection, path };
}
export function RenderRoute(routes: RenderRouteSource[]): MethodDecorator {
return (target, propertyKey) =>
defineMetadata(KEY, routes, target, propertyKey);
}
export function getRenderRoutes(
target: object,
propertyKey: string,
): RenderRouteSource[] {
return (
(getMetadata(KEY, target, propertyKey) as
| RenderRouteSource[]
| undefined) ?? []
);
}