"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const core_1 = require("@restlessness/core");
class Plugin {
    static get pluginsJsonPath() {
        return path_1.default.join(core_1.PathResolver.getPrjPath, 'plugins.json');
    }
    static getList(withModule = false) {
        return __awaiter(this, void 0, void 0, function* () {
            const file = yield fs_1.promises.readFile(Plugin.pluginsJsonPath);
            const jsonPlugins = JSON.parse(file.toString());
            return jsonPlugins.map(jsonPlugin => {
                const plugin = new Plugin();
                plugin.id = jsonPlugin.id;
                plugin.name = jsonPlugin.name;
                plugin.package = jsonPlugin.package;
                if (withModule) {
                    plugin.module = require(path_1.default.join(core_1.PathResolver.getNodeModulesPath, plugin.package));
                }
                return plugin;
            });
        });
    }
    getById(pluginId) {
        return __awaiter(this, void 0, void 0, function* () {
            const plugins = yield Plugin.getList();
            const plugin = plugins.find(d => d.id === pluginId);
            if (plugin) {
                Object.assign(this, Object.assign({}, plugin));
                this.module = require(path_1.default.join(core_1.PathResolver.getNodeModulesPath, this.package));
                return true;
            }
            else {
                return false;
            }
        });
    }
}
exports.default = Plugin;
//# sourceMappingURL=index.js.map