docs: function extend(target = {}, ...args) {
    let i = 0;
    const length = args.length;
    let options;
    let name;
    let src;
    let copy;
    if (!target) {
      target = exports.isArray(args[0]) ? [] : {};
    }
    for (; i < length; i++) {
      options = args[i];
      if (!options) {
        continue;
      }
      for (name in options) {
        src = target[name];
        copy = options[name];
        if (src && src === copy) {
          continue;
        }
        if (exports.isArray(copy)) {
          target[name] = extend([], copy);
        } else if (exports.isObject(copy)) {
          target[name] = extend(src && exports.isObject(src) ? src : {}, copy);
        } else {
          target[name] = copy;
        }
      }
    }
    return target;
  }