'use strict'; const { getConfig, setError, setSuccess, clearStatus, pickMsgField } = require('../lib/utils'); const { transformStructure } = require('../lib/collabora'); const { loadSourceBuffer } = require('../lib/bridge'); module.exports = function (RED) { function CollaboraTransformNode(config) { RED.nodes.createNode(this, config); const node = this; node.configNode = RED.nodes.getNode(config.config); node.on('input', async (msg, send, done) => { send = send || function () { node.send.apply(node, arguments); }; done = done || function (err) { if (err) { node.error(err, msg); } }; clearStatus(node); try { const cfg = getConfig(node); const transform = pickMsgField(msg, 'transform') || msg.fields; if (!transform) { throw new Error('Ange msg.transform eller msg.fields'); } const source = await loadSourceBuffer(cfg, msg); const result = await transformStructure(cfg, { buffer: source.buffer, filename: source.filename, transform }); msg.payload = result.buffer; msg.contentType = result.contentType; setSuccess(node, msg, 'transform'); send(msg); done(); } catch (err) { setError(node, msg, err); send(msg); done(err); } }); } RED.nodes.registerType('collabora-transform', CollaboraTransformNode); };