code: function diff (a, b, offset) {
    if (!isString(a) || !isString(b)) {
      throw new Error('Illegal arguments.')
    }
    offset = offset || 0
    let changes = []
    if (a || b) {
      if (!a && b) {
        changes.push({ type: 'insert', start: offset, text: b })
      } else if (a && !b) {
        changes.push({ type: 'delete', start: offset, end: offset + a.length })
      } else {
        let m = levenshtein(a, b)
        changes = _diff(a, b, m, offset)
      }
    }
    return changes
  }
docs: /*
  Determines a list of changes to transform String a into String b.
  
  @param {String} a
  @param {String} b