nestjs-auto-reflect-metadata-emitter
Version:
[](https://github.com/Codibre/nestjs-auto-reflect-metadata-emitter/actions) [;
exports.isMetadata = isMetadata;
exports.registerClassMetadata = registerClassMetadata;
exports.registerPropertyMetadata = registerPropertyMetadata;
exports.registerMethodMetadata = registerMethodMetadata;
const internal_1 = require("../internal");
const metadata = (0, internal_1.getMetadataStorage)();
const metadataSymbol = Symbol('metadataSymbol');
const metadataMarker = { [metadataSymbol]: true };
function getMeta(prototype) {
let ref = metadata.get(prototype);
if (!ref) {
ref = {
ctor: undefined,
properties: new Map(),
methods: new Map(),
};
Object.assign(ref, metadataMarker);
metadata.set(prototype, ref);
}
return ref;
}
function isMetadata(ref) {
return typeof ref === 'object' && !!ref && metadataSymbol in ref;
}
function registerClassMetadata(modifiers) {
return (cls) => {
const { prototype } = cls;
const ref = getMeta(prototype);
ref.ctor = {
cls,
args: Reflect.getMetadata('design:paramtypes', cls),
modifiers,
};
};
}
function registerPropertyMetadata(modifiers) {
return (prototype, key) => {
const ref = getMeta(prototype);
const type = Reflect.getMetadata('design:type', prototype, key);
ref.properties.set(key, {
name: key,
type,
modifiers,
});
};
}
function registerMethodMetadata(modifiers) {
return (prototype, key, propertyDescriptor) => {
const ref = getMeta(prototype);
const returnType = Reflect.getMetadata('design:returntype', prototype, key);
ref.methods.set(key, {
name: key,
args: Reflect.getMetadata('design:paramtypes', prototype, key),
returnType,
propertyDescriptor,
modifiers,
});
};
}
//# sourceMappingURL=decorators.js.map