UNPKG

@suites/unit

Version:
29 lines (28 loc) 1.01 kB
/** * Shared package resolver with IoC composition. * Module-specific strategies are injected via constructor. * @module */ /** * Package resolver that uses an injected strategy to check package availability */ export class PackageResolver { adapters; resolverStrategy; constructor(adapters, resolverStrategy) { this.adapters = adapters; this.resolverStrategy = resolverStrategy; } async resolveCorrespondingAdapter() { const resolvers = Object.keys(this.adapters); const adapterName = resolvers.find((resolverName) => this.resolverStrategy(this.adapters[resolverName])); if (!adapterName) { throw new Error('Adapter not found'); } const adapter = await import(this.adapters[adapterName]); if (!Object.prototype.hasOwnProperty.call(adapter, 'adapter')) { throw new Error('Adapter has no export'); } return import(this.adapters[adapterName]).then((module) => module.adapter); } }