whole_func_string: function updateMap(ast, newJson, json, yaml) {
  
    // look for changes
    (0, _lodash.each)(ast.value, function (pair) {
      var _pair = _slicedToArray(pair, 2);
  
      var keyNode = _pair[0];
      var valNode = _pair[1];
  
      // node is deleted
      if ((0, _lodash.isUndefined)(newJson[keyNode.value])) {
  
        // TODO: can we use of the methods below?
        yaml = yaml.substr(0, keyNode.start_mark.pointer) + yaml.substring(getNodeEndMark(valNode).pointer);
        return;
      }
  
      var value = json[keyNode.value];
      var newValue = newJson[keyNode.value];
  
      // primitive value has changed
      if (newValue !== value && !(0, _lodash.isArray)(valNode.value)) {
  
        // replace the value node
        yaml = replacePrimitive(valNode, newValue, yaml);
  
        // remove the key/value from newJson so it's not detected as new pair in
        // later code
        delete newJson[keyNode.value];
      }
  
      // non primitive value has changed
      if (!(0, _lodash.isEqual)(newValue, value) && (0, _lodash.isArray)(valNode.value)) {
  
        // array value has changed
        if ((0, _lodash.isArray)(newValue)) {
  
          // recurse
          yaml = updateSeq(valNode, newValue, yaml);
  
          // map value has changed
        } else {
  
            // recurse
            yaml = updateMap(valNode, newValue, value, yaml);
  
            ast = (0, _yamlJs.compose)(yaml);
  
            // remove the key/value from newJson so it's not detected as new pair in
            // later code
            delete newJson[keyNode.value];
          }
      }
    });
  
    // look for new items to add
    (0, _lodash.each)(newJson, function (value, key) {
  
      // item is new
      if ((0, _lodash.isUndefined)(json[key])) {
        var newValue = cleanDump(_defineProperty({}, key, value));
  
        yaml = insertAfterNode(ast, newValue, yaml);
      }
    });
  
    return yaml;
  }
func_code_string: function updateMap(ast, newJson, json, yaml) {
  
    // look for changes
    (0, _lodash.each)(ast.value, function (pair) {
      var _pair = _slicedToArray(pair, 2);
  
      var keyNode = _pair[0];
      var valNode = _pair[1];
  
      // node is deleted
      if ((0, _lodash.isUndefined)(newJson[keyNode.value])) {
  
        // TODO: can we use of the methods below?
        yaml = yaml.substr(0, keyNode.start_mark.pointer) + yaml.substring(getNodeEndMark(valNode).pointer);
        return;
      }
  
      var value = json[keyNode.value];
      var newValue = newJson[keyNode.value];
  
      // primitive value has changed
      if (newValue !== value && !(0, _lodash.isArray)(valNode.value)) {
  
        // replace the value node
        yaml = replacePrimitive(valNode, newValue, yaml);
  
        // remove the key/value from newJson so it's not detected as new pair in
        // later code
        delete newJson[keyNode.value];
      }
  
      // non primitive value has changed
      if (!(0, _lodash.isEqual)(newValue, value) && (0, _lodash.isArray)(valNode.value)) {
  
        // array value has changed
        if ((0, _lodash.isArray)(newValue)) {
  
          // recurse
          yaml = updateSeq(valNode, newValue, yaml);
  
          // map value has changed
        } else {
  
            // recurse
            yaml = updateMap(valNode, newValue, value, yaml);
  
            ast = (0, _yamlJs.compose)(yaml);
  
            // remove the key/value from newJson so it's not detected as new pair in
            // later code
            delete newJson[keyNode.value];
          }
      }
    });
  
    // look for new items to add
    (0, _lodash.each)(newJson, function (value, key) {
  
      // item is new
      if ((0, _lodash.isUndefined)(json[key])) {
        var newValue = cleanDump(_defineProperty({}, key, value));
  
        yaml = insertAfterNode(ast, newValue, yaml);
      }
    });
  
    return yaml;
  }
func_documentation_string: /*
  update a map structure with new values
  
  @param {AST} ast - a map AST
  @param {any} newJson
  @param {any} - json
  @param {string} yaml
  @returns {boolean}
  @throws {YAWNError} - if json has weird type