38 lines
952 B
JavaScript
38 lines
952 B
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const PROVIDERS_DIR = path.join(__dirname, '..', 'providers');
|
|
|
|
function listAll() {
|
|
return fs
|
|
.readdirSync(PROVIDERS_DIR)
|
|
.filter((f) => f.endsWith('.js'))
|
|
.map((f) => f.slice(0, -3))
|
|
.sort();
|
|
}
|
|
|
|
function loadProviders(names) {
|
|
const providers = [];
|
|
const loadErrors = {};
|
|
for (const name of names) {
|
|
const file = path.join(PROVIDERS_DIR, `${name}.js`);
|
|
if (!fs.existsSync(file)) {
|
|
loadErrors[name] = 'not found';
|
|
continue;
|
|
}
|
|
try {
|
|
const mod = require(file);
|
|
if (typeof mod.getStreams !== 'function') {
|
|
loadErrors[name] = 'does not export getStreams()';
|
|
continue;
|
|
}
|
|
providers.push({ name, getStreams: mod.getStreams });
|
|
} catch (err) {
|
|
loadErrors[name] = err.message.split('\n')[0];
|
|
}
|
|
}
|
|
return { providers, loadErrors };
|
|
}
|
|
|
|
module.exports = { listAll, loadProviders, PROVIDERS_DIR };
|