{ "version": 3, "sources": ["../../node/Common/Environment.ts", "../../node/Common/TypeGuards.ts", "../../node/Common/ErrorReporting.ts", "../app/Framework/Environment.ts", "../app/Framework/Themes.ts", "../app/Framework/Framework.ts"], "sourcesContent": ["export interface IHostEnvironment {\n\tenvironment: string;\n}\n\nexport function getHostEnvironment() {\n\tconst element = document.getElementById(\"host-environment\");\n\n\treturn element?.textContent != null ?\n\t\tJSON.parse(element.textContent) as IHostEnvironment\n\t\t: null;\n}\n\nexport function isDevelopment() {\n\tconst hostEnvironment = getHostEnvironment();\n\n\treturn hostEnvironment?.environment === \"Development\"\n\t\t|| document.cookie.includes(\"development=1\");\n}\n", "export function isError(instance: unknown): instance is Error {\n\tif (instance instanceof Error) {\n\t\treturn true;\n\t}\n\n\tconst obj = instance as Unknown;\n\n\t// For errors thrown via iframes\n\treturn obj != null\n\t\t&& typeof obj === \"object\"\n\t\t&& typeof obj.name === \"string\"\n\t\t&& typeof obj.message === \"string\";\n}\n\nexport function isNotNull(value: T | null): value is T {\n\treturn value !== null;\n}\n", "\uFEFFimport { isDevelopment } from \"./Environment\";\nimport { isError } from \"./TypeGuards\";\n\nconst headers = new Headers();\nheaders.append(\"Content-Type\", \"application/json\");\n\nconst reportedErrors: string[] = [];\nconst reportEndpoint = \"https://log.steamcore.se/js\";\n\ninterface IScriptError extends Error {\n\tcolumnNumber: number;\n\tfileName: string;\n\tlineNumber: number;\n}\n\nfunction isScriptError(instance: unknown): instance is IScriptError {\n\tif (isError(instance)) {\n\t\tconst obj = instance as IScriptError;\n\n\t\treturn typeof obj.columnNumber === \"number\"\n\t\t\t&& typeof obj.fileName === \"string\"\n\t\t\t&& typeof obj.lineNumber === \"number\";\n\t}\n\n\treturn false;\n}\n\nasync function getUserAgentData() {\n\tif (!navigator.userAgentData) {\n\t\treturn undefined;\n\t}\n\n\tlet platform: string | undefined = undefined;\n\tlet uaFullVersion: string | undefined = undefined;\n\n\ttry {\n\t\tconst data = await navigator.userAgentData.getHighEntropyValues([\"platform\", \"uaFullVersion\"]);\n\n\t\tplatform = data.platform;\n\t\tuaFullVersion = data.uaFullVersion;\n\t} catch {\n\t\t/* do nothing */\n\t}\n\n\treturn {\n\t\tbrands: navigator.userAgentData.brands,\n\t\tmobile: navigator.userAgentData.mobile,\n\t\tplatform,\n\t\tuaFullVersion\n\t};\n}\n\nexport async function reportError(error: Error | string, src?: string, line?: number, column?: number, stack?: string) {\n\tconst content = {\n\t\tcolumn,\n\t\terror,\n\t\tline,\n\t\tsrc,\n\t\tstack,\n\t\turl: window.location.href,\n\t\tuserAgent: navigator.userAgent,\n\t\tuserAgentData: await getUserAgentData()\n\t};\n\n\tconst body = JSON.stringify(content);\n\tconsole.debug(\"reportError\", content);\n\n\tif (isDevelopment()) {\n\t\treturn;\n\t}\n\n\tif (reportedErrors.findIndex(err => err === body) === -1) {\n\t\treportedErrors.push(body);\n\t\tawait fetch(reportEndpoint, { body, headers, method: \"POST\", mode: \"cors\" });\n\t}\n}\n\nwindow.addEventListener(\"error\", e => {\n\tvoid reportError(e.message, e.filename, e.lineno, e.colno, isError(e.error) ? e.error.stack : undefined);\n});\n\nwindow.addEventListener(\"unhandledrejection\", e => {\n\tif (isError(e.reason)) {\n\t\tconst error = e.reason;\n\t\tif (isScriptError(error)) {\n\t\t\tvoid reportError(error.message, error.fileName, error.lineNumber, error.columnNumber, error.stack);\n\t\t} else {\n\t\t\tvoid reportError(error.message, undefined, undefined, undefined, error.stack);\n\t\t}\n\t} else if (typeof e.reason === \"string\") {\n\t\tvoid reportError(e.reason);\n\t}\n});\n", "import { isDevelopment } from \"Common/Environment\";\n\nif (!isDevelopment()) {\n\tconsole.debug = function () { /* noop */ };\n}\n", "interface IThemeSettings {\n\tdarkThemeUrl: string;\n\tlightThemeUrl: string;\n\tthemeElement: HTMLLinkElement;\n}\n\nexport type Theme = \"dark\" | \"light\";\n\nconst storageKey = \"theme\";\n\nfunction getElement(id: string) {\n\treturn document.getElementById(id) as T | null;\n}\n\nfunction getSettings(): IThemeSettings | null {\n\tconst themeElement = getElement(\"theme\");\n\tconst darkThemeUrl = getElement(\"theme-dark\")?.href;\n\tconst lightThemeUrl = getElement(\"theme-light\")?.href;\n\n\treturn themeElement != null && darkThemeUrl && lightThemeUrl\n\t\t? { darkThemeUrl, lightThemeUrl, themeElement }\n\t\t: null;\n}\n\nfunction getStoredTheme() {\n\treturn localStorage.getItem(storageKey);\n}\n\nexport function getTheme(): Theme {\n\tconst storedTheme = getStoredTheme();\n\tconst prefersDarkScheme = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\tconst useDarkTheme = storedTheme === \"dark\" || storedTheme == null && prefersDarkScheme.matches;\n\n\treturn useDarkTheme ? \"dark\" : \"light\";\n}\n\nfunction getThemeUrl(settings: IThemeSettings, theme: Theme) {\n\treturn theme === \"dark\"\n\t\t? settings.darkThemeUrl\n\t\t: settings.lightThemeUrl;\n}\n\nfunction getToggles() {\n\treturn {\n\t\tdarkToggle: getElement(\"theme-toggle-dark\"),\n\t\tlightToggle: getElement(\"theme-toggle-light\")\n\t};\n}\n\nfunction toggle(element: HTMLButtonElement | null, enabled: boolean, fixed: boolean) {\n\tif (!element) {\n\t\treturn;\n\t}\n\n\tconst color = fixed ? \"primary\" : \"secondary\";\n\tconst on = `btn-${color}`;\n\tconst off = `btn-outline-${color}`;\n\n\telement.className = \"\";\n\telement.classList.add(\"btn\");\n\telement.classList.add(enabled ? on : off);\n}\n\nfunction updateTheme(settings: IThemeSettings, theme: Theme) {\n\tsettings.themeElement.href = getThemeUrl(settings, theme);\n}\n\nfunction updateToggles(theme: Theme) {\n\tconst storedTheme = getStoredTheme();\n\tconst { darkToggle, lightToggle } = getToggles();\n\n\ttoggle(darkToggle, theme === \"dark\", storedTheme != null);\n\ttoggle(lightToggle, theme === \"light\", storedTheme != null);\n}\n\nfunction selectTheme(settings: IThemeSettings, theme: Theme) {\n\tconst storedTheme = getStoredTheme();\n\n\tif (theme === storedTheme) {\n\t\tlocalStorage.removeItem(storageKey);\n\t\ttheme = getTheme();\n\t} else {\n\t\tlocalStorage.setItem(storageKey, theme);\n\t}\n\n\tupdateTheme(settings, theme);\n\tupdateToggles(theme);\n\n\tdocument.dispatchEvent(new CustomEvent(\"ThemeChanged\"));\n}\n\nconst settings = getSettings();\n\nif (settings) {\n\tconst initialTheme = getTheme();\n\n\tupdateTheme(settings, initialTheme);\n\n\twindow.addEventListener(\"DOMContentLoaded\", () => {\n\t\tupdateToggles(initialTheme);\n\n\t\tconst { darkToggle, lightToggle } = getToggles();\n\n\t\tdarkToggle?.addEventListener(\"click\", () => selectTheme(settings, \"dark\"));\n\t\tlightToggle?.addEventListener(\"click\", () => selectTheme(settings, \"light\"));\n\t});\n\n\twindow.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\", () => {\n\t\tconst theme = getTheme();\n\n\t\tupdateTheme(settings, theme);\n\t\tupdateToggles(theme);\n\n\t\tdocument.dispatchEvent(new CustomEvent(\"ThemeChanged\"));\n\t});\n}\n\nexport { };\n", "\uFEFFconsole.log(\"Steamcore\");\n\nimport \"Common/ErrorReporting\";\nimport \"./Environment\";\nimport \"./Themes\";\n"], "mappings": "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", "names": ["getHostEnvironment", "element", "isDevelopment", "hostEnvironment", "isError", "instance", "obj", "headers", "reportedErrors", "reportEndpoint", "isScriptError", "instance", "isError", "obj", "getUserAgentData", "__async", "platform", "uaFullVersion", "data", "e", "reportError", "error", "src", "line", "column", "stack", "content", "body", "isDevelopment", "err", "isDevelopment", "storageKey", "getElement", "id", "getSettings", "_a", "_b", "themeElement", "darkThemeUrl", "lightThemeUrl", "getStoredTheme", "getTheme", "storedTheme", "prefersDarkScheme", "getThemeUrl", "settings", "theme", "getToggles", "toggle", "element", "enabled", "fixed", "color", "on", "off", "updateTheme", "updateToggles", "darkToggle", "lightToggle", "selectTheme", "initialTheme"] }