UNPKG

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
"use strict"; 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();