You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.2 KiB
49 lines
1.2 KiB
import Blob from './index.js' |
|
|
|
const _File = class File extends Blob { |
|
#lastModified = 0 |
|
#name = '' |
|
|
|
/** |
|
* @param {*[]} fileBits |
|
* @param {string} fileName |
|
* @param {{lastModified?: number, type?: string}} options |
|
*/// @ts-ignore |
|
constructor (fileBits, fileName, options = {}) { |
|
if (arguments.length < 2) { |
|
throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`) |
|
} |
|
super(fileBits, options) |
|
|
|
if (options === null) options = {} |
|
|
|
// Simulate WebIDL type casting for NaN value in lastModified option. |
|
const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified) |
|
if (!Number.isNaN(lastModified)) { |
|
this.#lastModified = lastModified |
|
} |
|
|
|
this.#name = String(fileName) |
|
} |
|
|
|
get name () { |
|
return this.#name |
|
} |
|
|
|
get lastModified () { |
|
return this.#lastModified |
|
} |
|
|
|
get [Symbol.toStringTag] () { |
|
return 'File' |
|
} |
|
|
|
static [Symbol.hasInstance] (object) { |
|
return !!object && object instanceof Blob && |
|
/^(File)$/.test(object[Symbol.toStringTag]) |
|
} |
|
} |
|
|
|
/** @type {typeof globalThis.File} */// @ts-ignore |
|
export const File = _File |
|
export default File
|
|
|