@suites/unit
Version:
<p align="center"> <img width="200" src="https://raw.githubusercontent.com/suites-dev/suites/master/logo.png" alt="Logo" /> </p>
28 lines (27 loc) • 885 B
JavaScript
export class PackageResolver {
adapters;
constructor(adapters) {
this.adapters = adapters;
}
async resolveCorrespondingAdapter() {
const resolvers = Object.keys(this.adapters);
const adapterName = resolvers.find((resolverName) => this.packageIsAvailable(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);
}
packageIsAvailable(path) {
try {
require.resolve(path);
return true;
}
catch (e) {
return false;
}
}
}