node-red-contrib-vocalrec
Version:
Nodos personalizados de Node-RED para la API de VocalRec
66 lines (58 loc) • 2.95 kB
JavaScript
module.exports = function(RED) {
function VocalRecExtractPropertiesNode(config) {
RED.nodes.createNode(this, config);
const node = this;
// Validar configuración
let mappings = [];
try {
mappings = config.mappings || [];
if (!Array.isArray(mappings)) {
mappings = [];
}
} catch (e) {
node.error("Error al parsear los mappings: " + e.message);
mappings = [];
}
node.on('input', function(msg, send, done) {
// Para compatibilidad con versiones antiguas de Node-RED
send = send || function() { node.send.apply(node, arguments) };
done = done || function() {};
try {
// Procesar cada mapeo
// mappings.forEach(mapping => {
// if (mapping.dest && mapping.source) {
// try {
// // Obtener el valor de origen
// const sourceValue = RED.util.evaluateNodeProperty(mapping.source, 'msg', node, msg);
// if (sourceValue !== undefined) {
// // Asignar el valor al destino usando RED.util.setMessageProperty
// RED.util.setMessageProperty(msg, mapping.dest, sourceValue);
// }
// } catch (evalError) {
// node.warn(`Error evaluando '${mapping.source}' para '${mapping.dest}': ${evalError.message}`);
// }
// }
// });
mappings.forEach(mapping => {
if (mapping.dest && mapping.source) {
try {
const sourceType = 'msg'; // o usa mapping.sourceType si ya lo estás manejando
const sourceValue = RED.util.evaluateNodeProperty(mapping.source, sourceType, node, msg);
if (sourceValue !== undefined) {
RED.util.setMessageProperty(msg, mapping.dest, sourceValue, true);
const outputValue = RED.util.getMessageProperty(msg, mapping.dest);
}
} catch (evalError) {
node.warn(`Error evaluando '${mapping.source}' para '${mapping.dest}': ${evalError.message}`);
}
}
});
send(msg);
done();
} catch (error) {
done(error);
}
});
}
RED.nodes.registerType("vocalrec-extract-properties", VocalRecExtractPropertiesNode);
}