custom-automapper
Version:
A powerful, type-safe object mapping library for TypeScript and NestJS
59 lines • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MAPPER_DESTINATION = exports.MAPPER_SOURCE = exports.USE_MAPPER = void 0;
exports.UseMapper = UseMapper;
exports.MapFrom = MapFrom;
exports.MapTo = MapTo;
exports.AutoMap = AutoMap;
exports.getMapperMetadata = getMapperMetadata;
exports.getAutoMapMetadata = getAutoMapMetadata;
require("reflect-metadata");
exports.USE_MAPPER = Symbol.for('USE_MAPPER');
exports.MAPPER_SOURCE = Symbol('MAPPER_SOURCE');
exports.MAPPER_DESTINATION = Symbol('MAPPER_DESTINATION');
function UseMapper(mapperClass) {
return target => {
Reflect.defineMetadata(exports.USE_MAPPER, mapperClass, target);
};
}
function MapFrom(sourcePropertyOrType) {
return (target, propertyKey) => {
if (!sourcePropertyOrType) {
throw new Error('@MapFrom requires a source property or class type');
}
Reflect.defineMetadata('mapper:source', sourcePropertyOrType, target, propertyKey);
};
}
function MapTo(destinationPropertyOrType) {
return (target, propertyKey) => {
if (!destinationPropertyOrType) {
throw new Error('@MapTo requires a destination property or class type');
}
Reflect.defineMetadata('mapper:destination', destinationPropertyOrType, target, propertyKey);
};
}
function AutoMap(destination) {
return (target, propertyKey) => {
const METADATA_KEY = Symbol.for('AUTO_MAP_METADATA');
if (propertyKey) {
const existingProps = Reflect.getMetadata(METADATA_KEY, target.constructor) || {};
existingProps[propertyKey] = destination;
Reflect.defineMetadata(METADATA_KEY, existingProps, target.constructor);
}
else {
Reflect.defineMetadata(METADATA_KEY, { __class__: destination || target }, target);
}
};
}
function getMapperMetadata(target) {
return {
useMapper: Reflect.getMetadata(exports.USE_MAPPER, target),
sources: Reflect.getMetadata(exports.MAPPER_SOURCE, target) || {},
destinations: Reflect.getMetadata(exports.MAPPER_DESTINATION, target) || {}
};
}
function getAutoMapMetadata(target) {
const METADATA_KEY = Symbol.for('AUTO_MAP_METADATA');
return Reflect.getMetadata(METADATA_KEY, target) || {};
}
//# sourceMappingURL=decorators.js.map