@suites/unit
Version:
29 lines (28 loc) • 1.01 kB
JavaScript
/**
* 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);
}
}