_ = require("underscore")

traverse = (tree, path, callback, key = "") ->
  if not _.any(tree, ((value, key) -> typeof value is "object"))
    if typeof tree is "object"
      callback(path, tree)
  else
    for key, value of tree
      do (key, value) ->
        traverse(value, path.concat([key]), callback, key)


exports.traverse = traverse