JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 245156
  • Score
    100M100P100Q209085F
  • License MIT

Parse and generate RS-delimited JSON sequences according to draft-ietf-json-text-sequence

Package Exports

  • json-text-sequence

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (json-text-sequence) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Parse and generate JSON text sequences as defined in draft-ietf-json-text-sequence.

JSON text sequences are nice for unambiguous JSON log files. They are resilient to many forms of damage such as truncation, multiple writers incorrectly configured to write to the same file, corrupted JSON, etc. An example sequence:

␞{"d":"2014-09-22T21:58:35.270Z","value":6}␤
␞{"d":"2014-09-22T21:59:15.117Z","value":12}␤

Where "␞" is the ASCII "Record Separator" character (U+001E), and "␤" is the ASCII "LINE FEED" character (U+000A), otherwise known as "\n".

To parse the format, pipe an input source into a parser stream:

var parser = require('json-text-sequence').parser;
var fs = require('fs');

var p = new parser()
  .on('json', function(obj) {
    console.log('JSON:', obj);
  })
  .on('truncated', function(buf) {
    console.log('Truncated:', buf);
  })
  .on('invalid', function(buf) {
    console.log('Invalid:', buf);
  })
  .on('finish', function() {
    console.log('DONE');
  });

fs.createReadStream('example.log').pipe(p);

To generate the format, create a generator, pipe its output somewhere interesting, then write objects to the generator:

var generator = require('json-text-sequence').generator;
var fs = require('fs');

var g = new generator();
g.pipe(fs.createWriteStream('example.log'));

g.write({
  d: new Date(),
  count: 0
});