index.js
function Value (val, parent, opts) {
  var obj = Object.create(Value.prototype)
  opts = opts || {}
  obj.value = val
  obj.parent = parent
  obj.type = getType(val)
  obj.key = opts.key
  obj.length = opts.length !== undefined ? opts.length : (val && val.length)
  return obj
}
function Value (val, parent, opts) {
  var obj = Object.create(Value.prototype)
  opts = opts || {}
  obj.value = val
  obj.parent = parent
  obj.type = getType(val)
  obj.key = opts.key
  obj.length = opts.length !== undefined ? opts.length : (val && val.length)
  return obj
}
function Value ( val , parent , opts ) { var obj = Object . create ( Value . prototype ) opts = opts || { } obj . value = val obj . parent = parent obj . type = getType ( val ) obj . key = opts . key obj . length = opts . length !== undefined ? opts . length : ( val && val . length ) return obj }
Value wrapper to contain state.

@param {*} val Value to wrap
@param {Value|null} parent Parent value
@param {object} [opts] Options
@param {string|number} [opts.key] Key/index if value is contained in an object/array
@param {number} [opts.length] Length if value is an object/array
@return {Value}
Value wrapper to contain state .