tus-js-client
Version:
A pure JavaScript client for the tus resumable upload protocol
98 lines (77 loc) • 1.59 kB
JavaScript
export default class XHRHttpStack {
createRequest(method, url) {
return new Request(method, url)
}
getName() {
return 'XHRHttpStack'
}
}
class Request {
constructor(method, url) {
this._xhr = new XMLHttpRequest()
this._xhr.open(method, url, true)
this._method = method
this._url = url
this._headers = {}
}
getMethod() {
return this._method
}
getURL() {
return this._url
}
setHeader(header, value) {
this._xhr.setRequestHeader(header, value)
this._headers[header] = value
}
getHeader(header) {
return this._headers[header]
}
setProgressHandler(progressHandler) {
// Test support for progress events before attaching an event listener
if (!('upload' in this._xhr)) {
return
}
this._xhr.upload.onprogress = (e) => {
if (!e.lengthComputable) {
return
}
progressHandler(e.loaded)
}
}
send(body = null) {
return new Promise((resolve, reject) => {
this._xhr.onload = () => {
resolve(new Response(this._xhr))
}
this._xhr.onerror = (err) => {
reject(err)
}
this._xhr.send(body)
})
}
abort() {
this._xhr.abort()
return Promise.resolve()
}
getUnderlyingObject() {
return this._xhr
}
}
class Response {
constructor(xhr) {
this._xhr = xhr
}
getStatus() {
return this._xhr.status
}
getHeader(header) {
return this._xhr.getResponseHeader(header)
}
getBody() {
return this._xhr.responseText
}
getUnderlyingObject() {
return this._xhr
}
}