{"version":3,"file":"index.cjs","sources":["../src/parameter/constants.ts","../src/utils/object.ts","../src/utils/handler.ts","../src/utils/meta.ts","../src/parameter/module.ts","../src/method/arguments.ts","../src/method/module.ts","../src/mount.ts","../src/module.ts","../src/class/module.ts","../src/mixed/module.ts"],"sourcesContent":["export enum ParameterType {\n    RESPONSE = 'response',\n    REQUEST = 'request',\n    NEXT = 'next',\n    PARAM = 'param',\n    HEADER = 'header',\n\n    COOKIE = 'cookie',\n    QUERY = 'query',\n    BODY = 'body',\n}\n","export function isObject(item: unknown) : item is Record<string, any> {\n    return (\n        !!item &&\n        typeof item === 'object' &&\n        !Array.isArray(item)\n    );\n}\n","import type { CoreHandlerConfig } from 'routup';\nimport { coreHandler } from 'routup';\nimport {\n    isObject,\n} from './object';\nimport type { ClassType, HandlerInterface } from '../type';\n\nexport function isHandlerClassInstance(input: unknown) : input is HandlerInterface {\n    return isObject(input) &&\n        typeof (input as any).run === 'function';\n}\n\nexport function createHandlerForClassType(\n    item: ClassType,\n    options: Partial<CoreHandlerConfig>,\n) {\n    return coreHandler({\n        ...options,\n        fn: (req, res, next) => {\n            try {\n                const middle = new (item as ClassType)();\n\n                if (isHandlerClassInstance(middle)) {\n                    middle.run(req, res, next);\n                } else {\n                    /* istanbul ignore next */\n                    middle(req, res, next);\n                }\n            } catch (e) {\n                /* istanbul ignore next */\n                if (e instanceof Error) {\n                    next(e);\n                }\n            }\n        },\n    });\n}\n","import type { DecoratorMeta } from '../type';\n\nconst symbol = Symbol.for('DecoratorMeta');\n\nexport function useDecoratorMeta(target: Record<string, any>) : DecoratorMeta {\n    if (symbol in target) {\n        return (target as any)[symbol];\n    }\n\n    (target as any)[symbol] = {\n        url: '',\n        middlewares: [],\n        methods: {},\n        parameters: {},\n    } as DecoratorMeta;\n\n    return (target as any)[symbol];\n}\n","import { useDecoratorMeta } from '../utils';\nimport { ParameterType } from './constants';\n\nexport function createParameterDecorator(\n    type: `${ParameterType}`,\n    property?: string,\n) :ParameterDecorator {\n    return (\n        target: any,\n        propertyKey: string | symbol | undefined,\n        parameterIndex: number,\n    ) => {\n        /* istanbul ignore next */\n        if (typeof propertyKey !== 'string') {\n            return;\n        }\n\n        const meta = useDecoratorMeta(target);\n        if (typeof meta.parameters[propertyKey] === 'undefined') {\n            meta.parameters[propertyKey] = [];\n        }\n\n        meta.parameters[propertyKey].push({\n            index: parameterIndex,\n            property,\n            type,\n        });\n    };\n}\n\nexport function DRequest() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.REQUEST);\n}\n\nexport function DResponse() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.RESPONSE);\n}\n\nexport function DNext() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.NEXT);\n}\n\n// useRequestParams\nexport function DPaths() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.PARAM);\n}\n\nexport function DPath(property: string) : ParameterDecorator {\n    return createParameterDecorator(ParameterType.PARAM, property);\n}\n\nexport function DHeaders() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.HEADER);\n}\n\nexport function DHeader(property: string) : ParameterDecorator {\n    return createParameterDecorator(ParameterType.HEADER, property);\n}\n\nexport function DBody(property?: string) : ParameterDecorator {\n    return createParameterDecorator(ParameterType.BODY, property);\n}\n\nexport function DQuery(property?: string) : ParameterDecorator {\n    return createParameterDecorator(ParameterType.QUERY, property);\n}\n\nexport function DCookies() : ParameterDecorator {\n    return createParameterDecorator(ParameterType.COOKIE);\n}\n\nexport function DCookie(property: string) : ParameterDecorator {\n    return createParameterDecorator(ParameterType.COOKIE, property);\n}\n","import { useRequestParam, useRequestParams } from 'routup';\nimport { ParameterType } from '../parameter';\nimport type { DecoratorParameterOptions } from '../parameter';\nimport type { HandlerContext, ParameterExtractMap } from '../type';\n\nexport function buildDecoratorMethodArguments(\n    context: HandlerContext,\n    parameters: DecoratorParameterOptions[],\n    extractMap?: ParameterExtractMap,\n): any[] {\n    /* istanbul ignore next */\n    if (\n        !Array.isArray(parameters) ||\n        parameters.length === 0\n    ) {\n        return [context.request, context.response, context.next];\n    }\n\n    const items: unknown[] = [];\n\n    for (let i = 0; i < parameters.length; i++) {\n        const parameter = parameters[i];\n\n        if (extractMap) {\n            const extractFn = extractMap[parameter.type];\n            if (extractFn) {\n                if (parameter.property) {\n                    items[parameter.index] = extractFn(context, parameter.property);\n                } else {\n                    items[parameter.index] = extractFn(context);\n                }\n\n                continue;\n            }\n        }\n\n        if (parameter.type === ParameterType.REQUEST) {\n            items[parameter.index] = context.request;\n            continue;\n        }\n\n        if (parameter.type === ParameterType.RESPONSE) {\n            items[parameter.index] = context.response;\n            continue;\n        }\n\n        if (parameter.type === ParameterType.NEXT) {\n            items[parameter.index] = context.next;\n            continue;\n        }\n\n        if (parameter.type === ParameterType.PARAM) {\n            if (parameter.property) {\n                items[parameter.index] = useRequestParam(context.request, parameter.property);\n            } else {\n                items[parameter.index] = useRequestParams(context.request);\n            }\n            continue;\n        }\n\n        if (parameter.type === ParameterType.HEADER) {\n            if (parameter.property) {\n                items[parameter.index] = context.request.headers[parameter.property.toLowerCase()];\n            } else {\n                items[parameter.index] = context.request.headers;\n            }\n            continue;\n        }\n\n        throw new SyntaxError(`Parameter ${parameter.type} could not be extracted.`);\n    }\n\n    return items;\n}\n","import type { ClassType } from '../type';\nimport { useDecoratorMeta } from '../utils';\n\nexport function createMethodDecorator(\n    method: string,\n    url: string,\n    handlers?: ClassType[],\n) : MethodDecorator {\n    return (\n        target: any,\n        propertyKey: string | symbol,\n        descriptor: TypedPropertyDescriptor<any>,\n    ) : void => {\n        /* istanbul ignore next */\n        if (typeof propertyKey !== 'string') {\n            return;\n        }\n\n        const meta = useDecoratorMeta(target);\n\n        meta.methods[propertyKey] = {\n            method,\n            url,\n            middlewares: handlers || [],\n        };\n    };\n}\n\nexport function DDelete(url: string, handlers?: ClassType[]) : MethodDecorator {\n    return createMethodDecorator('delete', url, handlers);\n}\n\nexport function DGet(url: string, handlers?: ClassType[]) : MethodDecorator {\n    return createMethodDecorator('get', url, handlers);\n}\n\nexport function DPost(url: string, handlers?: ClassType[]) : MethodDecorator {\n    return createMethodDecorator('post', url, handlers);\n}\n\nexport function DPut(url: string, handlers?: ClassType[]) : MethodDecorator {\n    return createMethodDecorator('put', url, handlers);\n}\n\nexport function DPatch(url: string, handlers?: ClassType[]) : MethodDecorator {\n    return createMethodDecorator('patch', url, handlers);\n}\n","import type { MethodName } from 'routup';\nimport { Router, coreHandler } from 'routup';\nimport { buildDecoratorMethodArguments } from './method';\nimport type { ClassType, ParameterExtractMap } from './type';\nimport { createHandlerForClassType, isObject, useDecoratorMeta } from './utils';\n\nexport function mountController(\n    router: Router,\n    input: (ClassType | Record<string, any>),\n    extractMap?: ParameterExtractMap,\n) {\n    let controller : Record<string, any>;\n\n    if (isObject(input)) {\n        controller = input;\n    } else {\n        controller = new (input as ClassType)();\n    }\n\n    const meta = useDecoratorMeta(controller);\n\n    const childRouter = new Router();\n\n    for (let i = 0; i < meta.middlewares.length; i++) {\n        const handler = createHandlerForClassType(meta.middlewares[i], {});\n\n        childRouter.use(handler);\n    }\n\n    const propertyKeys = Object.keys(meta.methods);\n    for (let i = 0; i < propertyKeys.length; i++) {\n        const method = meta.methods[propertyKeys[i]];\n        if (method.middlewares) {\n            for (let i = 0; i < method.middlewares.length; i++) {\n                childRouter.use(createHandlerForClassType(\n                    method.middlewares[i],\n                    {\n                        method: method.method as MethodName,\n                        path: method.url,\n                    },\n                ));\n            }\n        }\n\n        const handler = coreHandler({\n            method: method.method as MethodName,\n            path: method.url,\n            fn: (\n                req,\n                res,\n                next,\n            ) => controller[propertyKeys[i]].apply(controller, [\n                ...buildDecoratorMethodArguments(\n                    {\n                        request: req,\n                        response: res,\n                        next,\n                    },\n                    meta.parameters[propertyKeys[i]],\n                    extractMap,\n                ),\n            ]),\n        });\n\n        childRouter.use(handler);\n    }\n\n    router.use(meta.url, childRouter);\n}\n\nexport function mountControllers(\n    router: Router,\n    input: (ClassType | Record<string, any>)[],\n    extractMap?: ParameterExtractMap,\n) {\n    for (let i = 0; i < input.length; i++) {\n        mountController(router, input[i], extractMap);\n    }\n}\n","import type { Plugin } from 'routup';\nimport { mountControllers } from './mount';\nimport type { Options } from './type';\n\nexport function decorators(options: Options) : Plugin {\n    return {\n        name: 'decorators',\n        install: (router) => {\n            mountControllers(\n                router,\n                options.controllers,\n                options.parameter,\n            );\n        },\n    };\n}\n","import type { ClassType } from '../type';\nimport { useDecoratorMeta } from '../utils';\n\nexport function createClassDecorator(\n    url: string,\n    middlewares?: ClassType[],\n) : ClassDecorator {\n    return (target: any) : void => {\n        const meta = useDecoratorMeta(target.prototype);\n\n        meta.url = url;\n        meta.middlewares = [];\n\n        if (Array.isArray(middlewares)) {\n            meta.middlewares = [\n                ...meta.middlewares,\n                ...middlewares,\n            ];\n        }\n    };\n}\n\nexport function DController(\n    url: string,\n    middlewares?: ClassType[],\n) : ClassDecorator {\n    return createClassDecorator(url, middlewares);\n}\n","export function DDeprecated() : any {\n    return () => {};\n}\nexport function DDescription<T>(name: string | number, description?: string, example?: T): any {\n    return () => { };\n}\n\nexport function DHidden() {\n    return () => {};\n}\n\nexport function DExample<T>(example: any) {\n    return (...args: any) => {};\n}\n\nexport function DSecurity(roles?: string | string[], name?: string) {\n    return (...args: any) => { };\n}\n\nexport function DTags(...names: string[]) {\n    return (...args: any) => { };\n}\n"],"names":["ParameterType","isObject","item","Array","isArray","isHandlerClassInstance","input","run","createHandlerForClassType","options","coreHandler","fn","req","res","next","middle","e","Error","symbol","Symbol","for","useDecoratorMeta","target","url","middlewares","methods","parameters","createParameterDecorator","type","property","propertyKey","parameterIndex","meta","push","index","DRequest","REQUEST","DResponse","RESPONSE","DNext","NEXT","DPaths","PARAM","DPath","DHeaders","HEADER","DHeader","DBody","BODY","DQuery","QUERY","DCookies","COOKIE","DCookie","buildDecoratorMethodArguments","context","extractMap","length","request","response","items","i","parameter","extractFn","useRequestParam","useRequestParams","headers","toLowerCase","SyntaxError","createMethodDecorator","method","handlers","descriptor","DDelete","DGet","DPost","DPut","DPatch","mountController","router","controller","childRouter","Router","handler","use","propertyKeys","Object","keys","path","apply","mountControllers","decorators","name","install","controllers","createClassDecorator","prototype","DController","DDeprecated","DDescription","description","example","DHidden","DExample","args","DSecurity","roles","DTags","names"],"mappings":"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"}