docs: function(config) {
        if (qp.is(config.fso, 'fso')) {
          this.fullname = config.fso.fullname;
        } else if (qp.is(config.url, 'url')) {
          var fullname = path.join(config.base, config.url.fullname);
          if (qp.starts(fullname, config.base)) {
            this.fullname = fullname;
          }
        } else if (qp.is(config.path, 'string')) {
          this.fullname = path.join(config.base || '', config.path);
        } else if (qp.is(config.path, 'array')) {
          this.fullname = path.join.apply(null, config.path);
        }
  
        if (config.ext) {
          this.fullname = qp.rtrim(this.fullname, this.sep) + '.' + config.ext;
        }
  
        this.exists = fss.exists(this.fullname);
        if (this.exists) {
          var stat = fss.stat(this.fullname);
          this.size = stat.size;
          this.is_file = stat.isFile();
          this.is_directory = stat.isDirectory();
          this.ino = stat.ino;
          this.atime = stat.atime;
          this.mtime = stat.mtime;
          this.ctime = stat.ctime;
        }
        if (!this.exists || this.is_file) {
          this.path = this.self.pathname(this.fullname);
          this.file = this.self.filename(this.fullname);
          if (this.file.length) {
            this.is_file = true;
            var parts = qp.split(this.file, '.');
            this.ext = parts.pop();
            this.name = parts.join('.');
          } else {
            this.is_directory = true;
          }
        }
        if (this.is_file) {
          this.filename = this.fullname;
          this.filepath = qp.rtrim(this.fullname, '.' + this.ext);
          if (qp.contains(this.filename, '-v')) {
            this.version = this.self.parse_version(this.filename);
            this.has_version = qp.not_empty(this.version);
          }
        }
        this.mime = mime.getType(this.fullname);
      }