UNPKG

@ima/core

Version:

IMA.js framework for isomorphic javascript application

83 lines (82 loc) 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "ComponentUtils", { enumerable: true, get: function() { return ComponentUtils; } }); class ComponentUtils { /** * The application's dependency injector - the object container. */ _oc; /** * Map of registered utilities. */ _utilityClasses = {}; /** * Map of instantiated utilities */ _utilities; /** * Map of referrers to utilities */ _utilityReferrers = {}; /** * Initializes the registry used for managing component utils. * * @param oc The application's dependency injector - the * object container. */ constructor(oc){ this._oc = oc; } /** * Registers single utility class or multiple classes in alias->class mapping. */ register(name, componentUtilityClass, referrer) { if (typeof componentUtilityClass === 'function' || typeof componentUtilityClass === 'string') { const alias = String(name); this._utilityClasses[alias] = componentUtilityClass; if (referrer && typeof referrer === 'string') { this._utilityReferrers[alias] = referrer; } if (this._utilities) { this._createUtilityInstance(alias, componentUtilityClass); } } else if (name && typeof name === 'object' && name.constructor === Object) { const utilityClasses = name; // @ts-expect-error referrer = componentUtilityClass; for (const alias of Object.keys(utilityClasses)){ if (!Object.prototype.hasOwnProperty.call(utilityClasses, alias)) { continue; } // @ts-expect-error this.register(alias, utilityClasses[alias], referrer); } } } /** * Returns object containing all registered utilities */ getUtils() { if (this._utilities) { return this._utilities; } this._utilities = {}; // create instance of each utility class for (const alias of Object.keys(this._utilityClasses)){ this._createUtilityInstance(alias, this._utilityClasses[alias]); } if (this._oc.has('$Utils')) { // fallback for backward compatibility Object.assign(this._utilities, this._oc.get('$Utils')); } return this._utilities; } getReferrers() { return this._utilityReferrers; } _createUtilityInstance(alias, utilityClass) { // @ts-expect-error No way to handle this with current OC typing setup return this._utilities[alias] = this._oc.get(utilityClass); } } //# sourceMappingURL=ComponentUtils.js.map