diff options
| author | Martin Ridgers <[email protected]> | 2024-11-11 10:31:34 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-11-11 10:31:34 +0100 |
| commit | 05d1044045539557dfe4e9c8996737d83f9dee89 (patch) | |
| tree | 00907e9a5306318e8a9d169348348b7a5cc1f32d /src/zenserver/frontend/html/util/fetcher.js | |
| parent | Update VERSION.txt (diff) | |
| download | zen-05d1044045539557dfe4e9c8996737d83f9dee89.tar.xz zen-05d1044045539557dfe4e9c8996737d83f9dee89.zip | |
Self-hosted dashboard: Searchable oplog and links between oplog entry dependencies (#213)v5.5.12-pre0
* Consistent use of semicolons
* Added fallback if oplog entry assumptions do not hold
* 'marker' and 'expired' cells were incorrectly friendly
* Two spaces when there should only be one
* Robustness against .text(undefined) calls
* A single step into JavaScript modules
* Turned Fetcher into a module
* Friendly into a module
* Specialise Cbo field name comparison as TextDecoder() is very slow
* Prefer is_named() over get_name()
* Incorrect logic checking if a server reply was okay
* Try and make sure it's always numbers that flow through Friendly
* Added a progress bar component
* Swap key and package hash columns
* CbObject cloning
* Dark and light themes depending on browser settings
* Adjust styling of input boxes
* Add theme swatches to test page
* Turns out one can nest CSS selectors
* Separate swatch for links/actions
* Generate theme by lerping intermediate colours
* Clearer progress bar
* Chromium was complaining about label-less input elements
* Promise-based cache using an IndexedDb
* WebWorker for generating map of package ids to names
* Indexer class for building, loading, and saving map of ids to names
* Added links to oplog entries of an entry's dependencies
* This doesn't need to be decorated as async any longer
* Implemented oplog searching
* View and drop make no sense on package data payloads
* Rudimentary search result truncation
* Updated changelog
* Updated HTML zip archive
Diffstat (limited to 'src/zenserver/frontend/html/util/fetcher.js')
| -rw-r--r-- | src/zenserver/frontend/html/util/fetcher.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/zenserver/frontend/html/util/fetcher.js b/src/zenserver/frontend/html/util/fetcher.js new file mode 100644 index 000000000..45f597404 --- /dev/null +++ b/src/zenserver/frontend/html/util/fetcher.js @@ -0,0 +1,76 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +"use strict"; + +import { CbObject } from "./compactbinary.js" + +//////////////////////////////////////////////////////////////////////////////// +export class Fetcher +{ + constructor() + { + this._resource = ""; + this._query = {}; + } + + resource(...parts) + { + var value = parts.join("/"); + if (!value.startsWith("/")) + value= "/" + value; + this._resource = value; + return this; + } + + param(name, value) + { + this._query[name] = value; + return this; + } + + async json() + { + const response = await this._get("application/json"); + return response ? (await response.json()) : {}; + } + + async cbo() + { + const response = await this._get("application/x-ue-cb"); + if (!response) + return null; + + const buffer = await response.arrayBuffer(); + const data = new Uint8Array(buffer); + return new CbObject(data); + } + + async delete() + { + const resource = this._build_uri(); + const response = await fetch(resource, { "method" : "DELETE" }); + } + + _build_uri() + { + var suffix = ""; + for (var key in this._query) + { + suffix += suffix ? "&" : "?"; + suffix += key + "=" + this._query[key]; + } + return this._resource + suffix; + } + + async _get(accept="*") + { + const resource = this._build_uri(); + const response = await fetch(resource, { + "method" : "GET", + "headers" : { "Accept": accept }, + }); + + if (response.status >= 200 && response.status <= 299) + return response; + } +} |