diff options
Diffstat (limited to 'src/templates/assets/javascripts/browser/request/index.ts')
| -rw-r--r-- | src/templates/assets/javascripts/browser/request/index.ts | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/src/templates/assets/javascripts/browser/request/index.ts b/src/templates/assets/javascripts/browser/request/index.ts deleted file mode 100644 index 74a56a64..00000000 --- a/src/templates/assets/javascripts/browser/request/index.ts +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -import { - Observable, - Subject, - map, - shareReplay, - switchMap -} from "rxjs" - -/* ---------------------------------------------------------------------------- - * Helper types - * ------------------------------------------------------------------------- */ - -/** - * Options - */ -interface Options { - progress$?: Subject<number> // Progress subject -} - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ - -/** - * Fetch the given URL - * - * If the request fails (e.g. when dispatched from `file://` locations), the - * observable will complete without emitting a value. - * - * @param url - Request URL - * @param options - Options - * - * @returns Response observable - */ -export function request( - url: URL | string, options?: Options -): Observable<Blob> { - return new Observable<Blob>(observer => { - const req = new XMLHttpRequest() - req.open("GET", `${url}`) - req.responseType = "blob" - - // Handle response - req.addEventListener("load", () => { - if (req.status >= 200 && req.status < 300) { - observer.next(req.response) - observer.complete() - } else { - observer.error(new Error(req.statusText)) - } - }) - - // Handle network errors - req.addEventListener("error", () => { - observer.error(new Error("Network Error")) - }) - - // Handle aborted requests - req.addEventListener("abort", () => { - observer.error(new Error("Request aborted")) - }) - - // Handle download progress - if (typeof options?.progress$ !== "undefined") { - req.addEventListener("progress", event => { - options.progress$!.next((event.loaded / event.total) * 100) - }) - - // Immediately set progress to 5% to indicate that we're loading - options.progress$.next(5) - } - - // Send request - req.send() - }) -} - -/* ------------------------------------------------------------------------- */ - -/** - * Fetch JSON from the given URL - * - * @template T - Data type - * - * @param url - Request URL - * @param options - Options - * - * @returns Data observable - */ -export function requestJSON<T>( - url: URL | string, options?: Options -): Observable<T> { - return request(url, options) - .pipe( - switchMap(res => res.text()), - map(body => JSON.parse(body) as T), - shareReplay(1) - ) -} - -/** - * Fetch XML from the given URL - * - * @param url - Request URL - * @param options - Options - * - * @returns Data observable - */ -export function requestXML( - url: URL | string, options?: Options -): Observable<Document> { - const dom = new DOMParser() - return request(url, options) - .pipe( - switchMap(res => res.text()), - map(res => dom.parseFromString(res, "text/xml")), - shareReplay(1) - ) -} |
