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