@decorators/server
Version:
node decorators - decorators for express library
94 lines • 9.72 kB
JavaScript
;
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