@grnsft/if
Version:
Impact Framework
113 lines • 13.5 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initialize = void 0;
const path = __importStar(require("node:path"));
const utils_1 = require("@grnsft/if-core/utils");
const aggregate_1 = require("./aggregate");
const logger_1 = require("../../common/util/logger");
const log_memoize_1 = require("../util/log-memoize");
const plugin_storage_1 = require("../util/plugin-storage");
const config_1 = require("../config");
const { PluginInitializationError, MissingPluginMethodError, MissingPluginPathError, } = utils_1.ERRORS;
const { GITHUB_PATH, NATIVE_PLUGIN } = config_1.CONFIG;
const { MISSING_METHOD, MISSING_PATH, NOT_NATIVE_PLUGIN, INVALID_MODULE_PATH, LOADING_PLUGIN_FROM_PATH, INITIALIZING_PLUGIN, INITIALIZING_PLUGINS, } = config_1.STRINGS;
/**
* Imports module by given `path`.
*/
const importModuleFrom = async (path) => {
const module = await Promise.resolve(`${path}`).then(s => __importStar(require(s))).catch(error => {
throw new PluginInitializationError(INVALID_MODULE_PATH(path, error));
});
return module;
};
/**
* Imports `module` from given `path` and returns requested `method`.
*/
const importAndVerifyModule = async (method, path) => {
const pluginModule = await importModuleFrom(path);
return pluginModule[method];
};
/**
* Checks if plugin is missing then rejects with error.
* Then checks if `path` is starting with github, then grabs the repository name.
* Imports module, then checks if it's a valid plugin.
*/
const handModule = (method, pluginPath) => {
console.debug(LOADING_PLUGIN_FROM_PATH(method, pluginPath), '\n');
if (pluginPath === 'builtin') {
pluginPath = path.normalize(`${__dirname}/../builtins`);
}
else {
if (pluginPath?.startsWith(GITHUB_PATH)) {
const parts = pluginPath.split('/');
pluginPath = parts[parts.length - 1];
}
if (!pluginPath.includes(NATIVE_PLUGIN)) {
(0, log_memoize_1.memoizedLog)(logger_1.logger.warn, NOT_NATIVE_PLUGIN(pluginPath));
}
}
return importAndVerifyModule(method, pluginPath);
};
/**
* Initializes plugin with config.
*/
const initPlugin = async (initPluginParams) => {
const { method, path, mapping, config, 'parameter-metadata': parameterMetadata, } = initPluginParams;
if (!method) {
throw new MissingPluginMethodError(MISSING_METHOD);
}
if (!path) {
throw new MissingPluginPathError(MISSING_PATH);
}
const plugin = await handModule(method, path);
return plugin(config, parameterMetadata, mapping);
};
/**
* Registers all plugins from `manifest`.`initialize` property.
* 1. Initalizes plugin storage.
* 2. Iterates over plugin names array.
* 3. While iteration, initalizes current plugin, gathers it's parameters (input/output).
* Then stores the aggregation metrics for each parameter to override stub values.
*/
const initialize = async (context) => {
console.debug(INITIALIZING_PLUGINS, '\n');
const { plugins } = context.initialize;
const storage = (0, plugin_storage_1.pluginStorage)();
for await (const pluginName of Object.keys(plugins)) {
console.debug(INITIALIZING_PLUGIN(pluginName));
const plugin = await initPlugin(plugins[pluginName]);
const parameters = { ...plugin.metadata.inputs, ...plugin.metadata.outputs };
Object.keys(parameters).forEach(current => {
(0, aggregate_1.storeAggregationMetrics)({
[current]: parameters[current]['aggregation-method'],
});
});
storage.set(pluginName, plugin);
}
return storage;
};
exports.initialize = initialize;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL2luaXRpYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFFbEMsaURBQTZDO0FBRzdDLDJDQUFvRDtBQUVwRCxxREFBZ0Q7QUFDaEQscURBQWdEO0FBQ2hELDJEQUFxRDtBQUVyRCxzQ0FBMEM7QUFLMUMsTUFBTSxFQUNKLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLEdBQUcsY0FBTSxDQUFDO0FBRVgsTUFBTSxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDNUMsTUFBTSxFQUNKLGNBQWMsRUFDZCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLG9CQUFvQixHQUNyQixHQUFHLGdCQUFPLENBQUM7QUFFWjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO0lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQU8sSUFBSSx3Q0FBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDOUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDbkUsTUFBTSxZQUFZLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsRCxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFD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QUNqQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQXZCVyxRQUFBLFVBQVUsY0F1QnJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3N0b3JlQWdncmVnYXRpb25NZXRyaWNzfSBmcm9tICcuL2FnZ3JlZ2F0ZSc7XG5cbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9sb2dnZXInO1xuaW1wb3J0IHttZW1vaXplZExvZ30gZnJvbSAnLi4vdXRpbC9sb2ctbWVtb2l6ZSc7XG5pbXBvcnQge3BsdWdpblN0b3JhZ2V9IGZyb20gJy4uL3V0aWwvcGx1Z2luLXN0b3JhZ2UnO1xuXG5pbXBvcnQge0NPTkZJRywgU1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtDb250ZXh0LCBQbHVnaW5PcHRpb25zfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMvbWFuaWZlc3QnO1xuaW1wb3J0IHtQbHVnaW5TdG9yYWdlSW50ZXJmYWNlfSBmcm9tICcuLi90eXBlcy9wbHVnaW4tc3RvcmFnZSc7XG5cbmNvbnN0IHtcbiAgUGx1Z2luSW5pdGlhbGl6YXRpb25FcnJvcixcbiAgTWlzc2luZ1BsdWdpbk1ldGhvZEVycm9yLFxuICBNaXNzaW5nUGx1Z2luUGF0aEVycm9yLFxufSA9IEVSUk9SUztcblxuY29uc3Qge0dJVEhVQl9QQVRILCBOQVRJVkVfUExVR0lOfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19NRVRIT0QsXG4gIE1JU1NJTkdfUEFUSCxcbiAgTk9UX05BVElWRV9QTFVHSU4sXG4gIElOVkFMSURfTU9EVUxFX1BBVEgsXG4gIExPQURJTkdfUExVR0lOX0ZST01fUEFUSCxcbiAgSU5JVElBTElaSU5HX1BMVUdJTixcbiAgSU5JVElBTElaSU5HX1BMVUdJTlMsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gKi9cbmNvbnN0IGltcG9ydE1vZHVsZUZyb20gPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgdGhyb3cgbmV3IFBsdWdpbkluaXRpYWxpemF0aW9uRXJyb3IoSU5WQUxJRF9NT0RVTEVfUEFUSChwYXRoLCBlcnJvcikpO1xuICB9KTtcblxuICByZXR1cm4gbW9kdWxlO1xufTtcblxuLyoqXG4gKiBJbXBvcnRzIGBtb2R1bGVgIGZyb20gZ2l2ZW4gYHBhdGhgIGFuZCByZXR1cm5zIHJlcXVlc3RlZCBgbWV0aG9kYC5cbiAqL1xuY29uc3QgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlID0gYXN5bmMgKG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGx1Z2luTW9kdWxlID0gYXdhaXQgaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICByZXR1cm4gcGx1Z2luTW9kdWxlW21ldGhvZF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBwbHVnaW4gaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAqIFRoZW4gY2hlY2tzIGlmIGBwYXRoYCBpcyBzdGFydGluZyB3aXRoIGdpdGh1YiwgdGhlbiBncmFicyB0aGUgcmVwb3NpdG9yeSBuYW1lLlxuICogSW1wb3J0cyBtb2R1bGUsIHRoZW4gY2hlY2tzIGlmIGl0J3MgYSB2YWxpZCBwbHVnaW4uXG4gKi9cbmNvbnN0IGhhbmRNb2R1bGUgPSAobWV0aG9kOiBzdHJpbmcsIHBsdWdpblBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zb2xlLmRlYnVnKExPQURJTkdfUExVR0lOX0ZST01fUEFUSChtZXRob2QsIHBsdWdpblBhdGgpLCAnXFxuJyk7XG5cbiAgaWYgKHBsdWdpblBhdGggPT09ICdidWlsdGluJykge1xuICAgIHBsdWdpblBhdGggPSBwYXRoLm5vcm1hbGl6ZShgJHtfX2Rpcm5hbWV9Ly4uL2J1aWx0aW5zYCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBsdWdpblBhdGg/LnN0YXJ0c1dpdGgoR0lUSFVCX1BBVEgpKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHBsdWdpblBhdGguc3BsaXQoJy8nKTtcbiAgICAgIHBsdWdpblBhdGggPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBpZiAoIXBsdWdpblBhdGguaW5jbHVkZXMoTkFUSVZFX1BMVUdJTikpIHtcbiAgICAgIG1lbW9pemVkTG9nKGxvZ2dlci53YXJuLCBOT1RfTkFUSVZFX1BMVUdJTihwbHVnaW5QYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGltcG9ydEFuZFZlcmlmeU1vZHVsZShtZXRob2QsIHBsdWdpblBhdGgpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBwbHVnaW4gd2l0aCBjb25maWcuXG4gKi9cbmNvbnN0IGluaXRQbHVnaW4gPSBhc3luYyAoXG4gIGluaXRQbHVnaW5QYXJhbXM6IFBsdWdpbk9wdGlvbnNcbik6IFByb21pc2U8UGx1Z2luSW50ZXJmYWNlPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBtZXRob2QsXG4gICAgcGF0aCxcbiAgICBtYXBwaW5nLFxuICAgIGNvbmZpZyxcbiAgICAncGFyYW1ldGVyLW1ldGFkYXRhJzogcGFyYW1ldGVyTWV0YWRhdGEsXG4gIH0gPSBpbml0UGx1Z2luUGFyYW1zITtcblxuICBpZiAoIW1ldGhvZCkge1xuICAgIHRocm93IG5ldyBNaXNzaW5nUGx1Z2luTWV0aG9kRXJyb3IoTUlTU0lOR19NRVRIT0QpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgbmV3IE1pc3NpbmdQbHVnaW5QYXRoRXJyb3IoTUlTU0lOR19QQVRIKTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGhhbmRNb2R1bGUobWV0aG9kLCBwYXRoKTtcblxuICByZXR1cm4gcGx1Z2luKGNvbmZpZywgcGFyYW1ldGVyTWV0YWRhdGEsIG1hcHBpbmcpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHBsdWdpbnMgZnJvbSBgbWFuaWZlc3RgLmBpbml0aWFsaXplYCBwcm9wZXJ0eS5cbiAqIDEuIEluaXRhbGl6ZXMgcGx1Z2luIHN0b3JhZ2UuXG4gKiAyLiBJdGVyYXRlcyBvdmVyIHBsdWdpbiBuYW1lcyBhcnJheS5cbiAqIDMuIFdoaWxlIGl0ZXJhdGlvbiwgaW5pdGFsaXplcyBjdXJyZW50IHBsdWdpbiwgZ2F0aGVycyBpdCdzIHBhcmFtZXRlcnMgKGlucHV0L291dHB1dCkuXG4gKiAgICBUaGVuIHN0b3JlcyB0aGUgYWdncmVnYXRpb24gbWV0cmljcyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8gb3ZlcnJpZGUgc3R1YiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplID0gYXN5bmMgKFxuICBjb250ZXh0OiBDb250ZXh0XG4pOiBQcm9taXNlPFBsdWdpblN0b3JhZ2VJbnRlcmZhY2U+ID0+IHtcbiAgY29uc29sZS5kZWJ1ZyhJTklUSUFMSVpJTkdfUExVR0lOUywgJ1xcbicpO1xuICBjb25zdCB7cGx1Z2luc30gPSBjb250ZXh0LmluaXRpYWxpemU7XG4gIGNvbnN0IHN0b3JhZ2UgPSBwbHVnaW5TdG9yYWdlKCk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBwbHVnaW5OYW1lIG9mIE9iamVjdC5rZXlzKHBsdWdpbnMpKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhJTklUSUFMSVpJTkdfUExVR0lOKHBsdWdpbk5hbWUpKTtcblxuICAgIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGluaXRQbHVnaW4ocGx1Z2luc1twbHVnaW5OYW1lXSk7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHsuLi5wbHVnaW4ubWV0YWRhdGEuaW5wdXRzLCAuLi5wbHVnaW4ubWV0YWRhdGEub3V0cHV0c307XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5mb3JFYWNoKGN1cnJlbnQgPT4ge1xuICAgICAgc3RvcmVBZ2dyZWdhdGlvbk1ldHJpY3Moe1xuICAgICAgICBbY3VycmVudF06IHBhcmFtZXRlcnNbY3VycmVudF1bJ2FnZ3JlZ2F0aW9uLW1ldGhvZCddLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzdG9yYWdlLnNldChwbHVnaW5OYW1lLCBwbHVnaW4pO1xuICB9XG5cbiAgcmV0dXJuIHN0b3JhZ2U7XG59O1xuIl19