index.js
function unist(node) {
  var type
  var children
  var value
  var key
  var index
  var length

  assert.ok(object(node), 'node should be an object')

  type = node.type
  children = node.children
  value = node.value

  assert.ok('type' in node, 'node should have a type')
  assert.strictEqual(typeof type, 'string', '`type` should be a string')
  assert.notStrictEqual(type, '', '`type` should not be empty')

  if (value != null) {
    assert.strictEqual(typeof value, 'string', '`value` should be a string')
  }

  location(node.position)

  for (key in node) {
    if (defined.indexOf(key) === -1) {
      vanilla(key, node[key])
    }
  }

  if (children != null) {
    assert.ok(array(children), '`children` should be an array')
    index = -1
    length = children.length

    while (++index < length) {
      exports(children[index], node)
    }
  }
}
function unist(node) {
  var type
  var children
  var value
  var key
  var index
  var length

  assert.ok(object(node), 'node should be an object')

  type = node.type
  children = node.children
  value = node.value

  assert.ok('type' in node, 'node should have a type')
  assert.strictEqual(typeof type, 'string', '`type` should be a string')
  assert.notStrictEqual(type, '', '`type` should not be empty')

  if (value != null) {
    assert.strictEqual(typeof value, 'string', '`value` should be a string')
  }

  location(node.position)

  for (key in node) {
    if (defined.indexOf(key) === -1) {
      vanilla(key, node[key])
    }
  }

  if (children != null) {
    assert.ok(array(children), '`children` should be an array')
    index = -1
    length = children.length

    while (++index < length) {
      exports(children[index], node)
    }
  }
}
/* Assert.