@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
50 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IAutoManager = void 0;
require("reflect-metadata");
const logger_1 = require("../../logger");
const logger = logger_1.LoggerContext.getSubLogger('AutoManager', true);
class IAutoManager {
entities = new Map();
/**
* 将实体添加到指定的键下
* @param entity 要添加的实体
*/
collection(entity) {
// 检查实体是否有含有已知的装饰器
if (!this.identify(entity)) {
return;
}
// 找到所有与实体匹配的 keys
const keys = this.keys.filter((k) => Reflect.getMetadata(k, entity) === true);
// 如果没有匹配的 keys,则输出警告
if (keys.length === 0) {
return;
}
// 将实体添加到所有匹配的 keys 下
for (const key of keys) {
if (!this.entities.has(key)) {
this.entities.set(key, new Set());
}
// 将实体添加到 key 对应的实体列表中
logger.silly(`扫描到管理器: ${entity.name}`);
this.entities.get(key)?.add(entity);
}
}
/**
* 识别目标是否包含指定装饰器
* @param entity 目标类
* @returns {boolean} 如果目标类上含有任何一个指定装饰器,则返回 true
*/
identify(entity) {
if (typeof entity.prototype === 'undefined') {
return false;
}
// if (Clazz.hasClassInChain(entity as TConstructor, this.clazz)) {
return this.keys.some((key) => Reflect.getMetadata(key, entity) === true);
// }
// return false;
}
}
exports.IAutoManager = IAutoManager;
//# sourceMappingURL=IAutoManager.js.map