@flowfuse/nr-file-nodes 0.0.5-479584e-202310241453.0 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/file.js +108 -107
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ #### 0.0.5: Release
2
+
3
+ - Fix jsonata evaluation in filename field (#38) @knolleary
4
+ - Pin reusable workflows to v0.1.0 (#36) @ppawlowski
5
+
1
6
  #### 0.0.3: Release
2
7
 
3
8
  - Increase timeout & show NR error as request timeout (#16) @Steve-Mcl
package/file.js CHANGED
@@ -63,7 +63,7 @@ module.exports = function (RED) {
63
63
  node.closeCallback = null
64
64
 
65
65
  function processMsg (msg, nodeSend, done) {
66
- let filename = node.filename || ''
66
+ const filename = node.filename || ''
67
67
  // Pre V3 compatibility - if filenameType is empty, do in place upgrade
68
68
  if (typeof node.filenameType === 'undefined' || node.filenameType === '') {
69
69
  // existing node AND filenameType is not set - inplace (compatible) upgrade
@@ -80,9 +80,12 @@ module.exports = function (RED) {
80
80
  node.error(err, msg)
81
81
  return done()
82
82
  } else {
83
- filename = value
83
+ completeProcessMsg(msg, nodeSend, value, done)
84
84
  }
85
85
  })
86
+ }
87
+
88
+ function completeProcessMsg (msg, nodeSend, filename, done) {
86
89
  filename = filename || ''
87
90
  msg.filename = filename
88
91
  let fullFilename = filename
@@ -262,61 +265,73 @@ module.exports = function (RED) {
262
265
  node.filenameType = 'str'
263
266
  }
264
267
  }
265
- let propertyError = false
266
268
  RED.util.evaluateNodeProperty(node.filename, node.filenameType, node, msg, (err, value) => {
267
269
  if (err) {
268
270
  node.error(err, msg)
269
- propertyError = true
270
- // return done()
271
+ return nodeDone()
271
272
  } else {
272
273
  filename = (value || '').replace(/\t|\r|\n/g, '')
274
+ completeProcessMsg(msg, nodeSend, filename, nodeDone)
273
275
  }
274
276
  })
275
- if (propertyError) {
276
- return
277
- }
278
- filename = filename || ''
279
- let fullFilename = filename
277
+ function completeProcessMsg (msg, nodeSend, filename, nodeDone) {
278
+ filename = filename || ''
279
+ let fullFilename = filename
280
280
 
281
- if (filename && RED.settings.fileWorkingDirectory && !path.isAbsolute(filename)) {
282
- // fullFilename = path.resolve(path.join(RED.settings.fileWorkingDirectory, filename))
283
- fullFilename = path.join(RED.settings.fileWorkingDirectory, filename)
284
- }
285
- if (!node.filename) {
286
- node.status({ fill: 'grey', shape: 'dot', text: filename })
287
- }
288
- if (path.isAbsolute(fullFilename)) {
289
- fullFilename = fullFilename.slice(1)
290
- }
291
- if (filename === '') {
292
- node.warn(RED._('file.errors.nofilename'))
293
- nodeDone()
294
- } else {
295
- msg.filename = filename
296
- let lines = Buffer.from([])
297
- let spare = ''
298
- let count = 0
299
- let type = 'buffer'
300
- let ch = ''
301
- if (node.format === 'lines') {
302
- ch = '\n'
303
- type = 'string'
281
+ if (filename && RED.settings.fileWorkingDirectory && !path.isAbsolute(filename)) {
282
+ // fullFilename = path.resolve(path.join(RED.settings.fileWorkingDirectory, filename))
283
+ fullFilename = path.join(RED.settings.fileWorkingDirectory, filename)
284
+ }
285
+ if (!node.filename) {
286
+ node.status({ fill: 'grey', shape: 'dot', text: filename })
287
+ }
288
+ if (path.isAbsolute(fullFilename)) {
289
+ fullFilename = fullFilename.slice(1)
304
290
  }
305
- let getout = false
291
+ if (filename === '') {
292
+ node.warn(RED._('file.errors.nofilename'))
293
+ nodeDone()
294
+ } else {
295
+ msg.filename = filename
296
+ let lines = Buffer.from([])
297
+ let spare = ''
298
+ let count = 0
299
+ let type = 'buffer'
300
+ let ch = ''
301
+ if (node.format === 'lines') {
302
+ ch = '\n'
303
+ type = 'string'
304
+ }
305
+ let getout = false
306
306
 
307
- const rs = fs.createReadStream(fullFilename)
308
- .on('readable', function () {
309
- let chunk
310
- let m
311
- const hwm = rs._readableState.highWaterMark
312
- while ((chunk = rs.read()) !== null) {
313
- if (node.chunk === true) {
314
- getout = true
315
- if (node.format === 'lines') {
316
- spare += decode(chunk, node.encoding)
317
- const bits = spare.split('\n')
318
- let i = 0
319
- for (i = 0; i < bits.length - 1; i++) {
307
+ const rs = fs.createReadStream(fullFilename)
308
+ .on('readable', function () {
309
+ let chunk
310
+ let m
311
+ const hwm = rs._readableState.highWaterMark
312
+ while ((chunk = rs.read()) !== null) {
313
+ if (node.chunk === true) {
314
+ getout = true
315
+ if (node.format === 'lines') {
316
+ spare += decode(chunk, node.encoding)
317
+ const bits = spare.split('\n')
318
+ let i = 0
319
+ for (i = 0; i < bits.length - 1; i++) {
320
+ m = {}
321
+ if (node.allProps === true) {
322
+ m = RED.util.cloneMessage(msg)
323
+ } else {
324
+ m.topic = msg.topic
325
+ m.filename = msg.filename
326
+ }
327
+ m.payload = bits[i]
328
+ m.parts = { index: count, ch, type, id: msg._msgid }
329
+ count += 1
330
+ nodeSend(m)
331
+ }
332
+ spare = bits[i]
333
+ }
334
+ if (node.format === 'stream') {
320
335
  m = {}
321
336
  if (node.allProps === true) {
322
337
  m = RED.util.cloneMessage(msg)
@@ -324,74 +339,60 @@ module.exports = function (RED) {
324
339
  m.topic = msg.topic
325
340
  m.filename = msg.filename
326
341
  }
327
- m.payload = bits[i]
342
+ m.payload = chunk
328
343
  m.parts = { index: count, ch, type, id: msg._msgid }
329
344
  count += 1
345
+ if (chunk.length < hwm) { // last chunk is smaller that high water mark = eof
346
+ getout = false
347
+ m.parts.count = count
348
+ }
330
349
  nodeSend(m)
331
350
  }
332
- spare = bits[i]
333
- }
334
- if (node.format === 'stream') {
335
- m = {}
336
- if (node.allProps === true) {
337
- m = RED.util.cloneMessage(msg)
338
- } else {
339
- m.topic = msg.topic
340
- m.filename = msg.filename
341
- }
342
- m.payload = chunk
343
- m.parts = { index: count, ch, type, id: msg._msgid }
344
- count += 1
345
- if (chunk.length < hwm) { // last chunk is smaller that high water mark = eof
346
- getout = false
347
- m.parts.count = count
348
- }
349
- nodeSend(m)
351
+ } else {
352
+ lines = Buffer.concat([lines, chunk])
350
353
  }
351
- } else {
352
- lines = Buffer.concat([lines, chunk])
353
354
  }
354
- }
355
- })
356
- .on('error', function (err) {
357
- node.error(err, msg)
358
- if (node.sendError) {
359
- const sendMessage = RED.util.cloneMessage(msg)
360
- delete sendMessage.payload
361
- sendMessage.error = err
362
- nodeSend(sendMessage)
363
- }
364
- nodeDone()
365
- })
366
- .on('end', function () {
367
- if (node.chunk === false) {
368
- if (node.format === 'utf8') {
369
- msg.payload = decode(lines, node.encoding)
370
- } else { msg.payload = lines }
371
- nodeSend(msg)
372
- } else if (node.format === 'lines') {
373
- let m = {}
374
- if (node.allProps) {
375
- m = RED.util.cloneMessage(msg)
376
- } else {
377
- m.topic = msg.topic
378
- m.filename = msg.filename
355
+ })
356
+ .on('error', function (err) {
357
+ node.error(err, msg)
358
+ if (node.sendError) {
359
+ const sendMessage = RED.util.cloneMessage(msg)
360
+ delete sendMessage.payload
361
+ sendMessage.error = err
362
+ nodeSend(sendMessage)
379
363
  }
380
- m.payload = spare
381
- m.parts = {
382
- index: count,
383
- count: count + 1,
384
- ch,
385
- type,
386
- id: msg._msgid
364
+ nodeDone()
365
+ })
366
+ .on('end', function () {
367
+ if (node.chunk === false) {
368
+ if (node.format === 'utf8') {
369
+ msg.payload = decode(lines, node.encoding)
370
+ } else { msg.payload = lines }
371
+ nodeSend(msg)
372
+ } else if (node.format === 'lines') {
373
+ let m = {}
374
+ if (node.allProps) {
375
+ m = RED.util.cloneMessage(msg)
376
+ } else {
377
+ m.topic = msg.topic
378
+ m.filename = msg.filename
379
+ }
380
+ m.payload = spare
381
+ m.parts = {
382
+ index: count,
383
+ count: count + 1,
384
+ ch,
385
+ type,
386
+ id: msg._msgid
387
+ }
388
+ nodeSend(m)
389
+ } else if (getout) { // last chunk same size as high water mark - have to send empty extra packet.
390
+ const m = { parts: { index: count, count, ch, type, id: msg._msgid } }
391
+ nodeSend(m)
387
392
  }
388
- nodeSend(m)
389
- } else if (getout) { // last chunk same size as high water mark - have to send empty extra packet.
390
- const m = { parts: { index: count, count, ch, type, id: msg._msgid } }
391
- nodeSend(m)
392
- }
393
- nodeDone()
394
- })
393
+ nodeDone()
394
+ })
395
+ }
395
396
  }
396
397
  })
397
398
  this.on('close', function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowfuse/nr-file-nodes",
3
- "version": "0.0.5-479584e-202310241453.0",
3
+ "version": "0.0.5",
4
4
  "description": "Node-RED file nodes packaged for FlowFuse",
5
5
  "main": "index.js",
6
6
  "scripts": {