diff --git a/package.json b/package.json index 43ab467c778454836c388bd0f988c7f7294d59f9..7c62e7996d8b1acd18fc05cc0256eecf2333da7d 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ "react": "^16.8.6", "react-dom": "^16.8.6", "rxjs": "^6.5.2", - "swagger-ui-dist": "^3.22.1" + "swagger-ui-dist": "^3.22.1", + "xhr2": "^0.1.4" } } diff --git a/src/mol-util/data-source.ts b/src/mol-util/data-source.ts index f451719aeaae9f8f8db103a9a3ddbf98bd093961..e390a897a8b3a695162b5004618201f39a069f75 100644 --- a/src/mol-util/data-source.ts +++ b/src/mol-util/data-source.ts @@ -2,12 +2,23 @@ * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> + * @author Alexander Rose <alexander.rose@weirdbyte.de> * * Adapted from LiteMol */ import { Task, RuntimeContext } from 'mol-task'; import { utf8Read } from 'mol-io/common/utf8'; +// polyfill XMLHttpRequest in node.js +const XHR = typeof document === 'undefined' ? require('xhr2') as { + prototype: XMLHttpRequest; + new(): XMLHttpRequest; + readonly DONE: number; + readonly HEADERS_RECEIVED: number; + readonly LOADING: number; + readonly OPENED: number; + readonly UNSENT: number; +} : XMLHttpRequest // export enum DataCompressionMethod { // None, @@ -39,6 +50,7 @@ export function ajaxGet(url: string): Task<string> export function ajaxGet(params: AjaxGetParams<'string'>): Task<string> export function ajaxGet(params: AjaxGetParams<'binary'>): Task<Uint8Array> export function ajaxGet<T = any>(params: AjaxGetParams<'json'>): Task<T> +export function ajaxGet(params: AjaxGetParams<'string' | 'binary'>): Task<string | Uint8Array> export function ajaxGet(params: AjaxGetParams<'string' | 'binary' | 'json'>): Task<string | Uint8Array | object> export function ajaxGet(params: AjaxGetParams<'string' | 'binary' | 'json'> | string) { if (typeof params === 'string') return ajaxGetInternal(params, params, 'string', false); @@ -121,7 +133,7 @@ class RequestPool { if (this.pool.length) { return this.pool.pop()!; } - return new XMLHttpRequest(); + return new XHR(); } static emptyFunc() { }