mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
103 lines
3.1 KiB
JavaScript
103 lines
3.1 KiB
JavaScript
const registry = require("./registry");
|
|
const {events} = require("@node-red/util")
|
|
|
|
var pluginConfigCache = {};
|
|
var pluginToId = {};
|
|
var plugins = {};
|
|
var pluginsByType = {};
|
|
var settings;
|
|
|
|
function init(_settings) {
|
|
settings = _settings;
|
|
plugins = {};
|
|
pluginConfigCache = {};
|
|
pluginToId = {};
|
|
pluginsByType = {};
|
|
}
|
|
|
|
function registerPlugin(nodeSetId,id,definition) {
|
|
var moduleId = registry.getModuleFromSetId(nodeSetId);
|
|
var pluginId = registry.getNodeFromSetId(nodeSetId);
|
|
|
|
definition.id = id;
|
|
definition.module = moduleId;
|
|
pluginToId[id] = nodeSetId;
|
|
plugins[id] = definition;
|
|
var module = registry.getModule(moduleId);
|
|
|
|
definition.path = module.path;
|
|
|
|
module.plugins[pluginId].plugins.push(definition);
|
|
if (definition.type) {
|
|
pluginsByType[definition.type] = pluginsByType[definition.type] || [];
|
|
pluginsByType[definition.type].push(definition);
|
|
}
|
|
if (definition.onadd && typeof definition.onadd === 'function') {
|
|
definition.onadd();
|
|
}
|
|
events.emit("registry:plugin-added",id);
|
|
}
|
|
|
|
function getPlugin(id) {
|
|
return plugins[id]
|
|
}
|
|
|
|
function getPluginsByType(type) {
|
|
return pluginsByType[type] || [];
|
|
}
|
|
|
|
function getPluginConfigs(lang) {
|
|
if (!pluginConfigCache[lang]) {
|
|
var result = "";
|
|
var script = "";
|
|
var moduleConfigs = registry.getModuleList();
|
|
for (var module in moduleConfigs) {
|
|
/* istanbul ignore else */
|
|
if (moduleConfigs.hasOwnProperty(module)) {
|
|
var plugins = moduleConfigs[module].plugins;
|
|
for (var plugin in plugins) {
|
|
if (plugins.hasOwnProperty(plugin)) {
|
|
var config = plugins[plugin];
|
|
if (config.enabled && !config.err && config.config) {
|
|
result += "\n<!-- --- [red-plugin:"+config.id+"] --- -->\n";
|
|
result += config.config;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pluginConfigCache[lang] = result;
|
|
}
|
|
return pluginConfigCache[lang];
|
|
}
|
|
function getPluginList() {
|
|
var list = [];
|
|
var moduleConfigs = registry.getModuleList();
|
|
for (var module in moduleConfigs) {
|
|
/* istanbul ignore else */
|
|
if (moduleConfigs.hasOwnProperty(module)) {
|
|
var plugins = moduleConfigs[module].plugins;
|
|
for (var plugin in plugins) {
|
|
/* istanbul ignore else */
|
|
if (plugins.hasOwnProperty(plugin)) {
|
|
var pluginInfo = registry.filterNodeInfo(plugins[plugin]);
|
|
pluginInfo.version = moduleConfigs[module].version;
|
|
// if (moduleConfigs[module].pending_version) {
|
|
// nodeInfo.pending_version = moduleConfigs[module].pending_version;
|
|
// }
|
|
list.push(pluginInfo);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
module.exports = {
|
|
init,
|
|
registerPlugin,
|
|
getPlugin,
|
|
getPluginsByType,
|
|
getPluginConfigs,
|
|
getPluginList
|
|
} |