| 'use strict'; |
| |
| const { |
| DateNow, |
| NumberIsNaN, |
| ObjectDefineProperties, |
| StringPrototypeToWellFormed, |
| SymbolToStringTag, |
| } = primordials; |
| |
| const { |
| Blob, |
| } = require('internal/blob'); |
| |
| const { |
| customInspectSymbol: kInspect, |
| kEnumerableProperty, |
| kEmptyObject, |
| } = require('internal/util'); |
| |
| const { |
| codes: { |
| ERR_MISSING_ARGS, |
| }, |
| } = require('internal/errors'); |
| |
| const { |
| inspect, |
| } = require('internal/util/inspect'); |
| |
| class File extends Blob { |
| /** @type {string} */ |
| #name; |
| |
| /** @type {number} */ |
| #lastModified; |
| |
| constructor(fileBits, fileName, options = kEmptyObject) { |
| if (arguments.length < 2) { |
| throw new ERR_MISSING_ARGS('fileBits', 'fileName'); |
| } |
| |
| super(fileBits, options); |
| |
| let { lastModified } = options ?? kEmptyObject; |
| |
| if (lastModified !== undefined) { |
| // Using Number(...) will not throw an error for bigints. |
| lastModified = +lastModified; |
| |
| if (NumberIsNaN(lastModified)) { |
| lastModified = 0; |
| } |
| } else { |
| lastModified = DateNow(); |
| } |
| |
| this.#name = StringPrototypeToWellFormed(`${fileName}`); |
| this.#lastModified = lastModified; |
| } |
| |
| get name() { |
| return this.#name; |
| } |
| |
| get lastModified() { |
| return this.#lastModified; |
| } |
| |
| [kInspect](depth, options) { |
| if (depth < 0) { |
| return this; |
| } |
| |
| const opts = { |
| ...options, |
| depth: options.depth == null ? null : options.depth - 1, |
| }; |
| |
| return `File ${inspect({ |
| size: this.size, |
| type: this.type, |
| name: this.#name, |
| lastModified: this.#lastModified, |
| }, opts)}`; |
| } |
| } |
| |
| ObjectDefineProperties(File.prototype, { |
| name: kEnumerableProperty, |
| lastModified: kEnumerableProperty, |
| [SymbolToStringTag]: { |
| __proto__: null, |
| configurable: true, |
| value: 'File', |
| }, |
| }); |
| |
| module.exports = { |
| File, |
| }; |