import { given } from "@nivinjoseph/n-defensive"; import { Controller, type ControllerClass } from "./controller.js"; export const viewSymbol = Symbol.for("@nivinjoseph/n-web/view"); // public export function view(file: string): ControllerViewDecorator { given(file, "file").ensureHasValue().ensureIsString(); const decorator: ControllerViewDecorator = function (target, context) { given(context, "context") // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition .ensure(t => t.kind === "class", "view decorator should only be used on a class"); const className = context.name || ""; given(target, "target") .ensureHasValue() .ensure(t => t.prototype instanceof Controller, `class '${className}' decorated with view must extend Controller class`); context.metadata[viewSymbol] = file; }; return decorator; } export type ControllerViewDecorator = ( target: ControllerClass, context: ClassDecoratorContext> ) => void;