@clawject/di
Version:
<p align="center"> <a href="https://clawject.com/" target="_blank"><img src="https://clawject.com/img/logo.svg" align="center" alt="Clawject Logo" width="120" height="120" /></a> </p>
84 lines (83 loc) • 3.8 kB
JavaScript
;
var _a, _b, _c, _d;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetadataStorage = exports.MetadataKind = void 0;
const Utils_1 = require("./Utils");
var MetadataKind;
(function (MetadataKind) {
MetadataKind["COMPONENT"] = "COMPONENT_METADATA";
MetadataKind["CONFIGURATION_METADATA"] = "CONFIGURATION_METADATA";
MetadataKind["APPLICATION_METADATA"] = "APPLICATION_METADATA";
})(MetadataKind || (exports.MetadataKind = MetadataKind = {}));
class MetadataStorageState {
constructor() {
this[_a] = new WeakMap();
this[_b] = new WeakMap();
this[_c] = new WeakMap();
}
}
_a = MetadataKind.COMPONENT, _b = MetadataKind.CONFIGURATION_METADATA, _c = MetadataKind.APPLICATION_METADATA;
class DevelopmentApplicationMetadataStorageState {
constructor() {
this.developmentIdToClassConstructor = new Map();
this.developmentIdToProjectVersion = new Map();
this.developmentIdToMetadata = new Map();
}
}
class MetadataStorage {
static getComponentMetadataByClassInstance(instance) {
const instanceConstructor = Utils_1.Utils.getConstructorFromInstance(instance);
if (instanceConstructor === null) {
return null;
}
return this.getComponentMetadataByClassConstructor(instanceConstructor);
}
static getComponentMetadataByClassConstructor(clazz) {
return this.componentMetadata.get(clazz) ?? null;
}
static setComponentMetadata(clazz, metadata) {
this.componentMetadata.set(clazz, metadata);
}
static getConfigurationMetadata(clazz) {
return this.configurationMetadata.get(clazz) ?? null;
}
static setConfigurationMetadata(clazz, metadata) {
this.configurationMetadata.set(clazz, metadata);
}
static getApplicationMetadata(clazz) {
const baseApplicationMetadata = this.applicationMetadata.get(clazz) ?? null;
const developmentId = baseApplicationMetadata?.developmentId;
if (!developmentId) {
return baseApplicationMetadata;
}
const developmentMetadata = this.developmentStorage.developmentIdToMetadata.get(developmentId);
if (developmentMetadata) {
return {
...baseApplicationMetadata,
...developmentMetadata,
};
}
return baseApplicationMetadata;
}
static setApplicationMetadata(clazz, metadata) {
this.applicationMetadata.set(clazz, metadata);
if (metadata.developmentId !== undefined) {
this.developmentStorage.developmentIdToClassConstructor.set(metadata.developmentId, clazz);
}
}
static setDevelopmentApplicationMetadata(developmentId, projectVersion, metadata) {
const oldProjectVersion = this.developmentStorage.developmentIdToProjectVersion.get(developmentId);
if (oldProjectVersion !== undefined && oldProjectVersion >= projectVersion) {
return;
}
this.developmentStorage.developmentIdToProjectVersion.set(developmentId, projectVersion);
this.developmentStorage.developmentIdToMetadata.set(developmentId, metadata);
}
}
exports.MetadataStorage = MetadataStorage;
_d = MetadataStorage;
MetadataStorage.storage = Utils_1.Utils.createVersionedStorageOrGetIfExisted('metadata_storage', 0, new MetadataStorageState());
MetadataStorage.developmentStorage = Utils_1.Utils.createVersionedStorageOrGetIfExisted('development_metadata_storage', 0, new DevelopmentApplicationMetadataStorageState());
MetadataStorage.componentMetadata = _d.storage[MetadataKind.COMPONENT];
MetadataStorage.configurationMetadata = _d.storage[MetadataKind.CONFIGURATION_METADATA];
MetadataStorage.applicationMetadata = _d.storage[MetadataKind.APPLICATION_METADATA];