UNPKG

@curvenote/cli

Version:
49 lines (48 loc) 1.9 kB
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; }