@ima/core
Version:
IMA.js framework for isomorphic javascript application
83 lines (82 loc) • 2.8 kB
JavaScript
"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