UNPKG

@fimbul/wotan

Version:

Pluggable TypeScript and JavaScript linter

46 lines 2.04 kB
"use strict"; 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