UNPKG

@httpc/kit

Version:

httpc toolbox for building function-based API with minimal code and end-to-end type safety

41 lines (40 loc) 1.52 kB
import { Authenticated } from "../auth"; function assertReflectMetadata() { if (typeof Reflect.defineMetadata === "undefined") { throw new Error("Missing 'reflect-metadata' dependency"); } } function metadataSet(key, value) { return (target, property) => { assertReflectMetadata(); return property ? Reflect.defineMetadata(key, value, target, property) : Reflect.defineMetadata(key, value, target); }; } function metadataPush(key, item) { return (target, property) => { assertReflectMetadata(); const metadata = (property ? Reflect.getMetadata(key, target, property) : Reflect.getMetadata(key, target)) || []; metadata.push(item); return property ? Reflect.defineMetadata(key, metadata, target, property) : Reflect.defineMetadata(key, metadata, target); }; } export function decoratorMiddleware(factory) { return (...args) => metadataPush("CALL_MIDDLEWARE", factory(...args)); } export function decoratorMetadata(key, value) { return (...args) => { if (typeof key === "function") { ({ key, value } = key(...args)); } return metadataSet(key, value); }; } export const call = decoratorMetadata((access = "write") => ({ key: "CALL_ACCESS", value: access })); export const noCall = decoratorMetadata("CALL_ACCESS", false); export const authenticated = decoratorMiddleware(Authenticated);