@fimbul/wotan
Version:
Pluggable TypeScript and JavaScript linter
46 lines • 2.04 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.runCommand = void 0;
const tslib_1 = require("tslib");
require("reflect-metadata");
const ymir_1 = require("@fimbul/ymir");
const utils_1 = require("../utils");
const inversify_1 = require("inversify");
const core_module_1 = require("../di/core.module");
const default_module_1 = require("../di/default.module");
const resolve = require("resolve");
const debug = require("debug");
const base_1 = require("./base");
tslib_1.__exportStar(require("./base"), exports);
const log = debug('wotan:commands');
async function runCommand(command, diContainer, globalOptions = {}) {
const container = new inversify_1.Container({ defaultScope: inversify_1.BindingScopeEnum.Singleton });
if (diContainer !== undefined)
container.parent = diContainer;
for (const moduleName of command.modules)
container.load(loadModule(moduleName, globalOptions));
container.load(require(`./${command.command}`).module);
container.load(core_module_1.createCoreModule(globalOptions), default_module_1.createDefaultModule());
const commandRunner = container.get(base_1.AbstractCommandRunner);
return commandRunner.run(command);
}
exports.runCommand = runCommand;
function loadModule(moduleName, options) {
log("Loading module '%s'.", moduleName);
try {
moduleName = resolve.sync(moduleName, {
basedir: process.cwd(),
extensions: Object.keys(require.extensions).filter((ext) => ext !== '.json' && ext !== '.node'),
paths: module.paths.slice(utils_1.OFFSET_TO_NODE_MODULES),
});
}
catch (e) {
throw new ymir_1.ConfigurationError(e.message);
}
log("Found module at '%s'.", moduleName);
const m = require(moduleName);
if (!m || typeof m.createModule !== 'function')
throw new ymir_1.ConfigurationError(`Module '${moduleName}' does not export a function 'createModule'.`);
return m.createModule(options);
}
//# sourceMappingURL=index.js.map
;