@snow-tzu/type-config
Version:
Core configuration management system with Spring Boot-like features
35 lines (34 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MapBinder = void 0;
require("reflect-metadata");
const decorators_1 = require("./decorators");
class MapBinder {
isMapProperty(target, propertyKey) {
const type = Reflect.getMetadata('design:type', target, propertyKey);
return type === Map;
}
isRecordProperty(target, propertyKey) {
const type = Reflect.getMetadata('design:type', target, propertyKey);
const isRecord = Reflect.getMetadata(decorators_1.RECORD_TYPE_KEY, target, propertyKey);
return type === Object && isRecord === true;
}
objectToMap(obj, valueType) {
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
throw new Error('Expected object for Map binding');
}
const map = new Map();
for (const [key, value] of Object.entries(obj)) {
if (valueType) {
const instance = new valueType();
Object.assign(instance, value);
map.set(key, instance);
}
else {
map.set(key, value);
}
}
return map;
}
}
exports.MapBinder = MapBinder;