@curvenote/cli
Version:
CLI Client library for Curvenote
49 lines (48 loc) • 1.9 kB
JavaScript
import fs from 'node:fs';
import { plural } from 'myst-common';
import { loadPlugins, selectors } from 'myst-cli';
/**
* Load user-defined plugin modules declared in the project frontmatter
*
* @param session session with logging
*/
export async function loadProjectPlugins(session) {
var _a;
const config = selectors.selectCurrentProjectConfig(session.store.getState());
const mystPlugins = await loadPlugins(session);
const plugins = {
...mystPlugins,
checks: [],
};
if (!(config === null || config === void 0 ? void 0 : config.plugins) || config.plugins.length === 0) {
return plugins;
}
// Already validated by myst plugin loader
const modules = await Promise.all((_a = config === null || config === void 0 ? void 0 : config.plugins) === null || _a === void 0 ? void 0 : _a.map(async (plugin) => {
if (fs.statSync(plugin.path).isFile() && plugin.path.endsWith('.mjs')) {
let module;
try {
module = await import(plugin.path);
}
catch (error) {
return null;
}
return { path: plugin.path, module };
}
return null;
}));
modules.forEach((pluginLoader) => {
var _a;
if (!pluginLoader)
return;
const plugin = pluginLoader.module.default || pluginLoader.module.plugin;
const checks = plugin.checks || pluginLoader.module.checks;
if (checks) {
session.log.debug(`🔌 ${(_a = plugin === null || plugin === void 0 ? void 0 : plugin.name) !== null && _a !== void 0 ? _a : 'Unnamed Plugin'} (${pluginLoader.path}) also loaded loaded: ${plural('%s check(s)', checks)}`);
// TODO: validate each check
plugins.checks.push(...checks);
}
});
session.log.debug('Project Plugins loaded');
return plugins;
}