54 lines
930 B
JavaScript
54 lines
930 B
JavaScript
import { WriteStream } from 'node:fs'
|
|
import { EventEmitter } from 'node:events'
|
|
|
|
export default class File extends EventEmitter {
|
|
#stream = null
|
|
|
|
size = 0
|
|
path = null
|
|
name = null
|
|
type = null
|
|
lastModifiedDate = null
|
|
|
|
constructor(props = {}) {
|
|
super()
|
|
|
|
for (var key in props) {
|
|
this[key] = props[key]
|
|
}
|
|
}
|
|
|
|
open() {
|
|
this.#stream = new WriteStream(this.path)
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
size: this.size,
|
|
path: this.path,
|
|
name: this.name,
|
|
type: this.type,
|
|
mtime: this.lastModifiedDate,
|
|
length: this.length,
|
|
filename: this.filename,
|
|
mime: this.mime
|
|
}
|
|
}
|
|
|
|
write(buffer, cb) {
|
|
this.#stream.write(buffer, _ => {
|
|
this.lastModifiedDate = new Date()
|
|
this.size += buffer.length
|
|
this.emit('progress', this.size)
|
|
cb()
|
|
})
|
|
}
|
|
|
|
end(cb) {
|
|
this.#stream.end(() => {
|
|
this.emit('end')
|
|
cb()
|
|
})
|
|
}
|
|
}
|