UNPKG

@decorators/server

Version:

node decorators - decorators for express library

94 lines 9.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Decorate = exports.createParamDecorator = exports.methodDecoratorFactory = exports.paramDecoratorFactory = void 0; const utils_1 = require("../utils"); const constants_1 = require("./constants"); function paramDecoratorFactory(metadata) { return function (target, methodName, index) { var _a; const params = (_a = Reflect.getMetadata(constants_1.PARAMS_METADATA, target[methodName])) !== null && _a !== void 0 ? _a : []; const argType = Reflect.getMetadata(constants_1.PARAM_TYPE_METADATA, target, methodName)[index]; const argName = (0, utils_1.extractParamNames)(target[methodName])[index]; params[index] = { argName, argType, index, methodName, ...metadata, }; params .filter((param) => param.paramType === metadata.paramType) .forEach((param, index) => { param.callIndex = index; }); Reflect.defineMetadata(constants_1.PARAMS_METADATA, params, target[methodName]); }; } exports.paramDecoratorFactory = paramDecoratorFactory; function methodDecoratorFactory(metadata) { return (target, methodName, descriptor) => { var _a; const methods = (_a = Reflect.getMetadata(constants_1.METHOD_METADATA, target.constructor)) !== null && _a !== void 0 ? _a : []; const returnType = Reflect.getMetadata(constants_1.RETURN_TYPE_METADATA, target, methodName); methods.push({ methodName, returnType: returnType === Promise ? null : returnType, ...metadata }); Reflect.defineMetadata(constants_1.METHOD_METADATA, methods, target.constructor); return descriptor; }; } exports.methodDecoratorFactory = methodDecoratorFactory; /** * Creates a custom parameter decorator * * Example: * * ... * export function AccessParam() { * return createParamDecorator((context: HttpContext) => { * const req = context.getRequest<Request>(); * * return req.query.access; * }); * } * * ... * authorize(@AccessParam() access: string) * ... */ function createParamDecorator(factory) { return paramDecoratorFactory({ factory: (context) => () => factory(context) }); } exports.createParamDecorator = createParamDecorator; /** * Creates a custom method or class decorator * * Example: * * ... * export function Access(access: string) { * return Decorate('access', access); * } * ... * * @Access('granted') * create() * ... * * Also can be used without a wrapper: * * ... * @Decorate('access', granted) * create() * ... */ function Decorate(key, value) { return (target, propertyKey, descriptor) => { var _a; const metaTarget = (_a = descriptor === null || descriptor === void 0 ? void 0 : descriptor.value) !== null && _a !== void 0 ? _a : target; Reflect.defineMetadata(key, value, metaTarget, descriptor ? undefined : propertyKey); if (descriptor) { return descriptor; } }; } exports.Decorate = Decorate; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2hlbHBlcnMvZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxvQ0FBNkM7QUFDN0MsMkNBQTBHO0FBRzFHLFNBQWdCLHFCQUFxQixDQUFDLFFBQTBEO0lBQzlGLE9BQU8sVUFBVSxNQUF5QixFQUFFLFVBQWtCLEVBQUUsS0FBYTs7UUFDM0UsTUFBTSxNQUFNLEdBQUcsTUFBQSxPQUFPLENBQUMsV0FBVyxDQUFDLDJCQUFlLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG1DQUFJLEVBQUUsQ0FBQztRQUM5RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLCtCQUFtQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixNQUFNLE9BQU8sR0FBRyxJQUFBLHlCQUFpQixFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdELE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNkLE9BQU87WUFDUCxPQUFPO1lBQ1AsS0FBSztZQUNMLFVBQVU7WUFDVixHQUFHLFFBQVE7U0FDWixDQUFDO1FBRUYsTUFBTTthQUNILE1BQU0sQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLFNBQVMsQ0FBQzthQUN4RSxPQUFPLENBQUMsQ0FBQyxLQUFvQixFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQy9DLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxDQUFDLGNBQWMsQ0FBQywyQkFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBdEJELHNEQXNCQztBQUVELFNBQWdCLHNCQUFzQixDQUFDLFFBQTJEO0lBQ2hHLE9BQU8sQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxVQUF3QyxFQUFFLEVBQUU7O1FBQ3RGLE1BQU0sT0FBTyxHQUFHLE1BQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQywyQkFBZSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUNBQUksRUFBRSxDQUFDO1FBQy9FLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0NBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWpGLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUVsRyxPQUFPLENBQUMsY0FBYyxDQUFDLDJCQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyRSxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDO0FBWEQsd0RBV0M7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxPQUFpRDtJQUNwRixPQUFPLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRixDQUFDO0FBRkQsb0RBRUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQVcsRUFBRSxLQUFjO0lBQ2xELE9BQU8sQ0FBQyxNQUFjLEVBQUUsV0FBaUIsRUFBRSxVQUFnQixFQUFFLEVBQUU7O1FBQzdELE1BQU0sVUFBVSxHQUFHLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLEtBQUssbUNBQUksTUFBTSxDQUFDO1FBRS9DLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJGLElBQUksVUFBVSxFQUFFO1lBQ2QsT0FBTyxVQUFVLENBQUM7U0FDbkI7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBVkQsNEJBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXRob2RNZXRhZGF0YSwgUGFyYW1NZXRhZGF0YSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGV4dHJhY3RQYXJhbU5hbWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTUVUSE9EX01FVEFEQVRBLCBQQVJBTV9UWVBFX01FVEFEQVRBLCBQQVJBTVNfTUVUQURBVEEsIFJFVFVSTl9UWVBFX01FVEFEQVRBIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbURlY29yYXRvckZhY3RvcnkobWV0YWRhdGE6IFBhcnRpYWw8UGFyYW1NZXRhZGF0YT4gJiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogSW5zdGFuY2VUeXBlPGFueT4sIG1ldGhvZE5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoUEFSQU1TX01FVEFEQVRBLCB0YXJnZXRbbWV0aG9kTmFtZV0pID8/IFtdO1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFBBUkFNX1RZUEVfTUVUQURBVEEsIHRhcmdldCwgbWV0aG9kTmFtZSlbaW5kZXhdO1xuICAgIGNvbnN0IGFyZ05hbWUgPSBleHRyYWN0UGFyYW1OYW1lcyh0YXJnZXRbbWV0aG9kTmFtZV0pW2luZGV4XTtcblxuICAgIHBhcmFtc1tpbmRleF0gPSB7XG4gICAgICBhcmdOYW1lLFxuICAgICAgYXJnVHlwZSxcbiAgICAgIGluZGV4LFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBwYXJhbXNcbiAgICAgIC5maWx0ZXIoKHBhcmFtOiBQYXJhbU1ldGFkYXRhKSA9PiBwYXJhbS5wYXJhbVR5cGUgPT09IG1ldGFkYXRhLnBhcmFtVHlwZSlcbiAgICAgIC5mb3JFYWNoKChwYXJhbTogUGFyYW1NZXRhZGF0YSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBwYXJhbS5jYWxsSW5kZXggPSBpbmRleDtcbiAgICAgIH0pO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShQQVJBTVNfTUVUQURBVEEsIHBhcmFtcywgdGFyZ2V0W21ldGhvZE5hbWVdKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZERlY29yYXRvckZhY3RvcnkobWV0YWRhdGE6IFBhcnRpYWw8TWV0aG9kTWV0YWRhdGE+ICYgeyBba2V5OiBzdHJpbmddOiBhbnk7IH0pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IG9iamVjdCwgbWV0aG9kTmFtZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSA9PiB7XG4gICAgY29uc3QgbWV0aG9kcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoTUVUSE9EX01FVEFEQVRBLCB0YXJnZXQuY29uc3RydWN0b3IpID8/IFtdO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFJFVFVSTl9UWVBFX01FVEFEQVRBLCB0YXJnZXQsIG1ldGhvZE5hbWUpO1xuXG4gICAgbWV0aG9kcy5wdXNoKHsgbWV0aG9kTmFtZSwgcmV0dXJuVHlwZTogcmV0dXJuVHlwZSA9PT0gUHJvbWlzZSA/IG51bGwgOiByZXR1cm5UeXBlLCAuLi5tZXRhZGF0YSB9KTtcblxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoTUVUSE9EX01FVEFEQVRBLCBtZXRob2RzLCB0YXJnZXQuY29uc3RydWN0b3IpO1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBwYXJhbWV0ZXIgZGVjb3JhdG9yXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAuLi5cbiAqIGV4cG9ydCBmdW5jdGlvbiBBY2Nlc3NQYXJhbSgpIHtcbiAqICAgcmV0dXJuIGNyZWF0ZVBhcmFtRGVjb3JhdG9yKChjb250ZXh0OiBIdHRwQ29udGV4dCkgPT4ge1xuICogICAgIGNvbnN0IHJlcSA9IGNvbnRleHQuZ2V0UmVxdWVzdDxSZXF1ZXN0PigpO1xuICpcbiAqICAgICByZXR1cm4gcmVxLnF1ZXJ5LmFjY2VzcztcbiAqICB9KTtcbiAqIH1cbiAqXG4gKiAuLi5cbiAqIGF1dGhvcml6ZShAQWNjZXNzUGFyYW0oKSBhY2Nlc3M6IHN0cmluZylcbiAqIC4uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyYW1EZWNvcmF0b3IoZmFjdG9yeTogKGNvbnRleHQ6IENvbnRleHQpID0+IFByb21pc2U8YW55PiB8IGFueSkge1xuICByZXR1cm4gcGFyYW1EZWNvcmF0b3JGYWN0b3J5KHsgZmFjdG9yeTogKGNvbnRleHQ6IENvbnRleHQpID0+ICgpID0+IGZhY3RvcnkoY29udGV4dCkgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBtZXRob2Qgb3IgY2xhc3MgZGVjb3JhdG9yXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAuLi5cbiAqIGV4cG9ydCBmdW5jdGlvbiBBY2Nlc3MoYWNjZXNzOiBzdHJpbmcpIHtcbiAqICAgcmV0dXJuIERlY29yYXRlKCdhY2Nlc3MnLCBhY2Nlc3MpO1xuICogfVxuICogLi4uXG4gKlxuICogQEFjY2VzcygnZ3JhbnRlZCcpXG4gKiBjcmVhdGUoKVxuICogLi4uXG4gKlxuICogQWxzbyBjYW4gYmUgdXNlZCB3aXRob3V0IGEgd3JhcHBlcjpcbiAqXG4gKiAuLi5cbiAqIEBEZWNvcmF0ZSgnYWNjZXNzJywgZ3JhbnRlZClcbiAqIGNyZWF0ZSgpXG4gKiAuLi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gKHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eUtleT86IGFueSwgZGVzY3JpcHRvcj86IGFueSkgPT4ge1xuICAgIGNvbnN0IG1ldGFUYXJnZXQgPSBkZXNjcmlwdG9yPy52YWx1ZSA/PyB0YXJnZXQ7XG5cbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIG1ldGFUYXJnZXQsIGRlc2NyaXB0b3IgPyB1bmRlZmluZWQgOiBwcm9wZXJ0eUtleSk7XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuICB9O1xufVxuIl19