UNPKG

@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
"use strict"; 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];