nowjs-core
Version:
NowCanDo Javascript Core [nowjs-core] is a library written by TypeScript code maintains under Apache 2.0 licence
111 lines (110 loc) • 3.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class ProviderManager {
static add(type, name, provider, isDefault, args) {
if (!ProviderManager.providers.has(type)) {
ProviderManager.providers.set(type, new Map());
}
const typeMap = ProviderManager.providers.get(type);
if (isDefault === true) {
for (const [key, value] of typeMap) {
value.isDefault = false;
}
}
typeMap.set(name, { isDefault: typeMap.size === 0 ? true : isDefault, provider, arguments: args });
return ProviderManager;
}
static clear(type) {
const typeMap = ProviderManager.providers.get(type);
if (!typeMap)
return;
typeMap.clear();
}
static hasAnyProvider(type) {
return ProviderManager.countByType(type) > 0;
}
static count() {
let ic = 0;
for (const [key, value] of ProviderManager.providers) {
ic += value.size;
}
return ic;
}
static countByType(type) {
const typeMap = ProviderManager.providers.get(type);
if (!typeMap)
return 0;
return typeMap.size;
}
static getNames() {
const names = [];
for (const [segName, seg] of ProviderManager.providers) {
for (const name of seg.keys()) {
names.push(name);
}
}
return names;
}
static getNamesByType(type) {
const names = [];
const typeMap = ProviderManager.providers.get(type);
if (!typeMap)
return names;
for (const name of typeMap.keys()) {
names.push(name);
}
return names;
}
static remove(type, name) {
const typeMap = ProviderManager.providers.get(type);
if (!typeMap)
return false;
let defaultName = '';
if (typeMap && typeMap.has(name)) {
for (const [key, value] of typeMap) {
if (value.isDefault === true) {
defaultName = key;
break;
}
}
}
else {
return false;
}
if (defaultName === name)
return false;
return typeMap.delete(name);
}
static get(type, name) {
if (type) {
const typeMap = ProviderManager.providers.get(type);
if (!typeMap)
return null;
if (!name) {
for (const [key, value] of typeMap) {
if (value.isDefault === true) {
name = key;
break;
}
}
}
if (!name)
return null;
const itemMap = typeMap.get(name);
if (itemMap && itemMap.provider) {
if (typeof itemMap.provider === 'function')
return itemMap.provider.apply(null, itemMap.arguments);
else
return itemMap.provider;
}
else {
return null;
}
}
else {
return null;
}
}
}
exports.ProviderManager = ProviderManager;
ProviderManager.providers = new Map();