function makeEntry (name, value, filename) {
  // 1. Set name to the result of converting name into a scalar value string.
  // Note: This operation was done by the webidl converter USVString.

  // 2. If value is a string, then set value to the result of converting
  //    value into a scalar value string.
  if (typeof value === 'string') {
    // Note: This operation was done by the webidl converter USVString.
  } else {
    // 3. Otherwise:

    // 1. If value is not a File object, then set value to a new File object,
    //    representing the same bytes, whose name attribute value is "blob"
    if (!webidl.is.File(value)) {
      value = new File([value], 'blob', { type: value.type })
    }

    // 2. If filename is given, then set value to a new File object,
    //    representing the same bytes, whose name attribute is filename.
    if (filename !== undefined) {
      /** @type {FilePropertyBag} */
      const options = {
        type: value.type,
        lastModified: value.lastModified
      }

      value = new File([value], filename, options)
    }
  }

  // 4. Return an entry whose name is name and whose value is value.
  return { name, value }
}
@see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry
@param {string} name
@param {string|Blob} value
@param {?string} filename
@returns