26 lines
896 B
TypeScript
26 lines
896 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) ?? [];
|
|
}
|