* Use private class fields in parts initialization directly. * Move encoder initialization outside the loop * Improve errors reported by Blob constructor. * Simulate WebIDL type casting for lastModified in File constructor. * Add cancel method for Blob.stream() underlying source. * Fix indentation inconsistency. * Use getReader in blob stream cancellation test instead of Symbol.asyncIterator
45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
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";
|
|
}
|
|
}
|
|
|
|
/** @type {typeof globalThis.File} */// @ts-ignore
|
|
export const File = _File;
|
|
export default File;
|