Skip to content

Instantly share code, notes, and snippets.

@Tvaroh
Last active June 2, 2017 19:40
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save Tvaroh/52efbe8f4541ca537908 to your computer and use it in GitHub Desktop.
transit-js bridge to immutable 3.0
define(['transit', 'immutable'], function (Transit, Imm) {
'use strict';
var reader = Transit.reader('json', {
arrayBuilder: {
init: function () { return Imm.List.of().asMutable(); },
add: function (ret, val) { return ret.push(val); },
finalize: function (ret) { return ret.asImmutable(); },
fromArray: function (arr) { return Imm.List(arr); }
},
mapBuilder: {
init: function () { return Imm.Map().asMutable(); },
add: function (ret, key, val) { return ret.set(key, val); },
finalize: function (ret) { return ret.asImmutable(); }
},
handlers: {
set: function (arr) {
return Imm.Set(arr);
},
orderedMap: function (arr) {
return Imm.OrderedMap(arr);
}
}
});
var writer = Transit.writer("json-verbose", {
handlers: Transit.map([
Imm.List, Transit.makeWriteHandler({
tag: function () { return 'array'; },
rep: function (v) { return v; },
stringRep: function () { return null; }
}),
Imm.Map, Transit.makeWriteHandler({
tag: function () { return 'map'; },
rep: function (v) { return v; },
stringRep: function () { return null; }
}),
Imm.Set, Transit.makeWriteHandler({
tag: function () { return 'set'; },
rep: function (v) { return v.toArray(); },
stringRep: function () { return null; }
}),
Imm.OrderedMap, Transit.makeWriteHandler({
tag: function () { return 'orderedMap'; },
rep: function (v) { return v.toArray().filter(function (x) { return x; }); },
stringRep: function () { return null; }
})
])
});
return {
toTransit: function (immutableValue) {
return writer.write(immutableValue);
},
fromTransit: function (ts) {
return reader.read(ts);
}
};
});
@mrjjwright
Copy link

Does this work?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment