@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
51 lines • 6.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModuleTokenFactory = void 0;
const object_hash_1 = __importDefault(require("object-hash"));
const fast_safe_stringify_1 = __importDefault(require("fast-safe-stringify"));
const utils_1 = require("../../utils");
class ModuleTokenFactory {
constructor() {
this.moduleIdsCache = new WeakMap();
}
create(metaType, dynamicModuleMetadata) {
const moduleId = this.getModuleId(metaType);
const opaqueToken = {
id: moduleId,
module: this.getModuleName(metaType),
dynamic: this.getDynamicMetadataToken(dynamicModuleMetadata),
};
return (0, object_hash_1.default)(opaqueToken, { ignoreUnknown: true });
}
getDynamicMetadataToken(dynamicModuleMetadata) {
return dynamicModuleMetadata ? (0, fast_safe_stringify_1.default)(dynamicModuleMetadata, ModuleTokenFactory.replacer) : '';
}
getModuleId(metaType) {
let moduleId = this.moduleIdsCache.get(metaType);
if (moduleId)
return moduleId;
moduleId = (0, utils_1.randomStringGenerator)();
this.moduleIdsCache.set(metaType, moduleId);
return moduleId;
}
getModuleName(metaType) {
return metaType.name;
}
static replacer(key, value) {
if (typeof value === 'function') {
const funcAsString = value.toString();
const isClass = /^class\s/.test(funcAsString);
if (isClass)
return value.name;
return (0, object_hash_1.default)(funcAsString, { ignoreUnknown: true });
}
if (typeof value === 'symbol')
return value.toString();
return value;
}
}
exports.ModuleTokenFactory = ModuleTokenFactory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXRva2VuLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9pbmplY3Rvci9tb2R1bGUtdG9rZW4tZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4REFBK0I7QUFDL0IsOEVBQTRDO0FBRTVDLHVDQUFrRDtBQUdsRCxNQUFhLGtCQUFrQjtJQUEvQjtRQUNxQixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO0lBMkMzRSxDQUFDO0lBekNVLE1BQU0sQ0FDVCxRQUF1QixFQUFFLHFCQUFtRTtRQUU1RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLEVBQUUsRUFBRSxRQUFRO1lBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7U0FDL0QsQ0FBQztRQUNGLE9BQU8sSUFBQSxxQkFBSSxFQUFDLFdBQVcsRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxxQkFBa0U7UUFDN0YsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBQSw2QkFBUyxFQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEcsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUF1QjtRQUN0QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUU5QixRQUFRLEdBQUcsSUFBQSw2QkFBcUIsR0FBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU0sYUFBYSxDQUFDLFFBQW1CO1FBQ3BDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUMzQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFFL0IsT0FBTyxJQUFBLHFCQUFJLEVBQUMsWUFBWSxFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQTVDRCxnREE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknO1xuXG5pbXBvcnQge3JhbmRvbVN0cmluZ0dlbmVyYXRvcn0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQge0R5bmFtaWNNb2R1bGVJbnRlcmZhY2UsIFR5cGV9IGZyb20gXCIuLi8uLi9jb250cmFjdHNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZHVsZVRva2VuRmFjdG9yeSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVJZHNDYWNoZSA9IG5ldyBXZWFrTWFwPFR5cGU8dW5rbm93bj4sIHN0cmluZz4oKTtcblxuICAgIHB1YmxpYyBjcmVhdGUoXG4gICAgICAgIG1ldGFUeXBlOiBUeXBlPHVua25vd24+LCBkeW5hbWljTW9kdWxlTWV0YWRhdGE/OiBQYXJ0aWFsPER5bmFtaWNNb2R1bGVJbnRlcmZhY2U+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblxuICAgICAgICBjb25zdCBtb2R1bGVJZCA9IHRoaXMuZ2V0TW9kdWxlSWQobWV0YVR5cGUpO1xuICAgICAgICBjb25zdCBvcGFxdWVUb2tlbiA9IHtcbiAgICAgICAgICAgIGlkOiBtb2R1bGVJZCxcbiAgICAgICAgICAgIG1vZHVsZTogdGhpcy5nZXRNb2R1bGVOYW1lKG1ldGFUeXBlKSxcbiAgICAgICAgICAgIGR5bmFtaWM6IHRoaXMuZ2V0RHluYW1pY01ldGFkYXRhVG9rZW4oZHluYW1pY01vZHVsZU1ldGFkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGhhc2gob3BhcXVlVG9rZW4sIHtpZ25vcmVVbmtub3duOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldER5bmFtaWNNZXRhZGF0YVRva2VuKGR5bmFtaWNNb2R1bGVNZXRhZGF0YTogUGFydGlhbDxEeW5hbWljTW9kdWxlSW50ZXJmYWNlPiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkeW5hbWljTW9kdWxlTWV0YWRhdGEgPyBzdHJpbmdpZnkoZHluYW1pY01vZHVsZU1ldGFkYXRhLCBNb2R1bGVUb2tlbkZhY3RvcnkucmVwbGFjZXIpIDogJyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1vZHVsZUlkKG1ldGFUeXBlOiBUeXBlPHVua25vd24+KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG1vZHVsZUlkID0gdGhpcy5tb2R1bGVJZHNDYWNoZS5nZXQobWV0YVR5cGUpO1xuICAgICAgICBpZiAobW9kdWxlSWQpIHJldHVybiBtb2R1bGVJZDtcblxuICAgICAgICBtb2R1bGVJZCA9IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigpO1xuICAgICAgICB0aGlzLm1vZHVsZUlkc0NhY2hlLnNldChtZXRhVHlwZSwgbW9kdWxlSWQpO1xuICAgICAgICByZXR1cm4gbW9kdWxlSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1vZHVsZU5hbWUobWV0YVR5cGU6IFR5cGU8YW55Pik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtZXRhVHlwZS5uYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNBc1N0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBpc0NsYXNzID0gL15jbGFzc1xccy8udGVzdChmdW5jQXNTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKGlzQ2xhc3MpIHJldHVybiB2YWx1ZS5uYW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gaGFzaChmdW5jQXNTdHJpbmcsIHtpZ25vcmVVbmtub3duOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=