import {UIEventSource} from "../UIEventSource"; import {Utils} from "../../Utils"; /** * Fetches data from random data sources, used in the metatagging */ export default class LiveQueryHandler { private static neededShorthands = {} // url -> (shorthand:paths)[] public static FetchLiveData(url: string, shorthands: string[]): UIEventSource string */> { const shorthandsSet: string[] = LiveQueryHandler.neededShorthands[url] ?? [] for (const shorthand of shorthands) { if (shorthandsSet.indexOf(shorthand) < 0) { shorthandsSet.push(shorthand); } } LiveQueryHandler.neededShorthands[url] = shorthandsSet; if (LiveQueryHandler[url] === undefined) { const source = new UIEventSource({}); LiveQueryHandler[url] = source; console.log("Fetching live data from a third-party (unknown) API:", url) Utils.downloadJson(url).then(data => { for (const shorthandDescription of shorthandsSet) { const descr = shorthandDescription.trim().split(":"); const shorthand = descr[0]; const path = descr[1]; const parts = path.split("."); let trail = data; for (const part of parts) { if (trail !== undefined) { trail = trail[part]; } } source.data[shorthand] = trail; } source.ping(); }) } return LiveQueryHandler[url]; } }