db: function(verbose) { if (verbose) { return t.reader('json-verbose').read( t.writer('json-verbose', writer.options).write(attendees) ); } else { return JSON.parse( t.writer('json', writer.options).write(attendees) ); } }
var getRawBody = require('raw-body'); var t = require('transit-js'); var Attendee = function(name, email) { this.name = name; this.email = email; }; var AttendeeWriteHandler = t.makeWriteHandler({ tag: function() { return 'att'; }, rep: function(v) { return t.map([t.keyword('name'), v.name, t.keyword('email'), v.email]); } }); var writer = t.writer('json', { handlers: t.map([ Attendee, AttendeeWriteHandler ]) }); var reader = t.reader('json', { handlers: { 'att': function (rep) { return new Attendee(rep.get(t.keyword('name')), rep.get(t.keyword('email'))); } } }); var attendees = [ new Attendee('Filip Zrůst', t.uri('mailto:frzng@me.com')), new Attendee('Stojan Jakotyč', t.uri('mailto:sj@example.com')) ];
var generateData = function() { return { rows: Immutable.Range(1, Infinity).take(numRows).reduce(function(row) { row.push({ cells: Immutable.Range(100, Infinity).take(numColls).reduce(function(cell, n) { cell.push(n); return cell; }, []) }); return row; }, []) }; }; var r = transit.reader('json'), w = transit.writer('json'); var data = {}; var suite = new Benchmark.Suite; suite.add('Transit to Immutable', { 'defer': true, 'onStart': function() { return data = w.write(generateData()); }, 'fn': function(deferred) { var _data = reader.read(data); return deferred.resolve(); } }).add('JSON to Transit Bridge to Immutable', {
function createWriter(recordMap, predicate) { function mapSerializer(m) { var i = 0; if (predicate) { m = m.filter(predicate); } var a = new Array(2 * m.size); m.forEach(function(v, k) { a[i++] = k; a[i++] = v; }); return a; } var handlers = transit.map([ Immutable.Map, transit.makeWriteHandler({ tag: function() { return 'iM'; }, rep: mapSerializer }), Immutable.OrderedMap, transit.makeWriteHandler({ tag: function() { return 'iOM'; }, rep: mapSerializer }), Immutable.List, transit.makeWriteHandler({ tag: function() { return "iL"; }, rep: function(v) { if (predicate) { v = v.filter(predicate); } return v.toArray(); } }), Immutable.Set, transit.makeWriteHandler({ tag: function() { return "iS"; }, rep: function(v) { if (predicate) { v = v.filter(predicate); } return v.toArray(); } }), Immutable.OrderedSet, transit.makeWriteHandler({ tag: function() { return "iOS"; }, rep: function(v) { if (predicate) { v = v.filter(predicate); } return v.toArray(); } }), Function, transit.makeWriteHandler({ tag: function() { return '_'; }, rep: function() { return null; } }), "default", transit.makeWriteHandler({ tag: function() { return 'iM'; }, rep: function(m) { if (!('toMap' in m)) { var e = "Error serializing unrecognized object " + m.toString(); throw new Error(e); } return mapSerializer(m.toMap()); } }) ]); Object.keys(recordMap).forEach(function(name) { handlers.set(recordMap[name], makeRecordHandler(name, predicate)); }); return transit.writer('json', { handlers: handlers }); }
}, finalize(ret, node) { return ret; }, fromArray(arr, node) { return arr; } }, mapBuilder: { init(node) { return {}; }, add(ret, key, val, node) { ret[key] = val; return ret; }, finalize(ret, node) { return ret; } } }); return decoder; }, createEncoder(options) { const encoder = transit.writer('json'); return encoder; } };