async function vinylize(src, options = {}) {
  const {filepath, html} = src;
  const {rebase = {}, request = {}} = options;
  const file = new Vinyl();
  file.cwd = '/';
  file.remote = false;
  file.inline = false;

  if (html) {
    const {to} = rebase;
    file.contents = Buffer.from(html);
    file.path = to || '';
    file.virtualPath = to || '';
  } else if (filepath && Buffer.isBuffer(filepath)) {
    file.path = '';
    file.virtualPath = '';
    file.contents = filepath;
    file.inline = true;
  } else if (filepath && isVinyl(filepath)) {
    return filepath;
  } else if (filepath && isRemote(filepath)) {
    let url = filepath;
    try {
      const response = await fetch(filepath, {...options, request: {...request, method: 'head'}});
      if (response.url !== url) {
        debug(`(vinylize) found redirect from ${url} to ${response.url}`);
        url = response.url;
      }
    } catch {}

    file.remote = true;
    file.url = url;
    file.urlObj = urlParse(url);
    file.contents = await fetch(url, options);
    file.virtualPath = file.urlObj.pathname;
  } else if (filepath && fs.existsSync(filepath)) {
    file.path = filepath;
    file.virtualPath = filepath;
    file.contents = await readFileAsync(filepath);
  } else {
    throw new FileNotFoundError(filepath);
  }

  return file;
}
Create vinyl object from filepath
@param {object} src File descriptor either pass "filepath" or "html"
@param {object} options Critical options
@returns {Promise<Vinyl>} The vinyl object