diff options
Diffstat (limited to 'src/util.ts')
-rw-r--r-- | src/util.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/util.ts b/src/util.ts index 7129b2b..29c707e 100644 --- a/src/util.ts +++ b/src/util.ts @@ -45,3 +45,36 @@ export class Listenable<T extends any[]> { this.listeners.forEach((l) => l(...args)); } } + +export function get(url: string): Promise<XMLHttpRequest> { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + + const handleError = () => { + if (xhr.readyState !== xhr.DONE) { + reject(new Error('HTTP request ended in state ' + xhr.readyState)); + return; + } + + reject(new Error('HTTP request returned status ' + xhr.status)); + }; + + xhr.addEventListener('error', handleError); + + xhr.addEventListener('load', () => { + if (xhr.readyState !== xhr.DONE || xhr.status !== 200) { + handleError(); + return; + } + + resolve(xhr); + }); + + xhr.open('GET', url, true); + xhr.send(); + }); +} + +export async function getJSON(url: string): Promise<any> { + return JSON.parse((await get(url)).responseText); +} |