This commit is contained in:
61
node_modules/geotiff/dist-module/source/client/xhr.js
generated
vendored
Normal file
61
node_modules/geotiff/dist-module/source/client/xhr.js
generated
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
import { BaseClient, BaseResponse } from './base.js';
|
||||
import { AbortError } from '../../utils.js';
|
||||
|
||||
class XHRResponse extends BaseResponse {
|
||||
/**
|
||||
* BaseResponse facade for XMLHttpRequest
|
||||
* @param {XMLHttpRequest} xhr
|
||||
* @param {ArrayBuffer} data
|
||||
*/
|
||||
constructor(xhr, data) {
|
||||
super();
|
||||
this.xhr = xhr;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
get status() {
|
||||
return this.xhr.status;
|
||||
}
|
||||
|
||||
getHeader(name) {
|
||||
return this.xhr.getResponseHeader(name);
|
||||
}
|
||||
|
||||
async getData() {
|
||||
return this.data;
|
||||
}
|
||||
}
|
||||
|
||||
export class XHRClient extends BaseClient {
|
||||
constructRequest(headers, signal) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', this.url);
|
||||
xhr.responseType = 'arraybuffer';
|
||||
for (const [key, value] of Object.entries(headers)) {
|
||||
xhr.setRequestHeader(key, value);
|
||||
}
|
||||
|
||||
// hook signals
|
||||
xhr.onload = () => {
|
||||
const data = xhr.response;
|
||||
resolve(new XHRResponse(xhr, data));
|
||||
};
|
||||
xhr.onerror = reject;
|
||||
xhr.onabort = () => reject(new AbortError('Request aborted'));
|
||||
xhr.send();
|
||||
|
||||
if (signal) {
|
||||
if (signal.aborted) {
|
||||
xhr.abort();
|
||||
}
|
||||
signal.addEventListener('abort', () => xhr.abort());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async request({ headers, signal } = {}) {
|
||||
const response = await this.constructRequest(headers, signal);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user