// Generated by CoffeeScript 1.10.0 (function() { var clone, graph, json, processNode, reflite; reflite = require('json-ref-lite'); clone = function(obj) { return JSON.parse(JSON.stringify(obj)); }; processNode = function(node, data) { var edge, i, len, ref, result, results; result = node.process(data); if (result) { ref = node["$ref"]; results = []; for (i = 0, len = ref.length; i < len; i++) { edge = ref[i]; results.push(processNode(edge, clone(data))); } return results; } }; json = { a: { "$ref": [ { "$ref": "#/b" } ], process: function(data) { data.a = true; return console.dir(data); } }, b: { "$ref": [ { "$ref": "#/a" } ], process: function(data) { if (data.b != null) { return void 0; } return data.b = true; } }, c: { "$ref": [ { "$ref": "#/a" } ], process: function(data) { return data.c = true; } } }; graph = reflite.resolve(json); processNode(graph.b, { foo: "bar" }); processNode(graph.c, { foo: "bar" }); console.log("for a more advanced example see https://npmjs.org/packages/jsongraph"); }).call(this);