gle
Version:
Global Log Engine: Environment-agnostic debugging & logging utility
64 lines (63 loc) • 2.35 kB
JavaScript
import { getGlobalObject } from "./compat.js";
export function getDebugContextPatterns() {
const flags = getEnvironmentDebugFlags();
return flags.reduce((output, flag) => {
let newFlag = flag.trim(), enabled = true;
if (/^-/.test(newFlag)) {
newFlag = newFlag.substring(1);
enabled = false;
}
if (output[newFlag] !== false) {
output[newFlag] = enabled;
}
return output;
}, {});
}
function getEnvironmentDebugFlags() {
var _a, _b, _c;
const globalObj = getGlobalObject();
const debugFlags = new Set();
if (storageAvailable(globalObj) && typeof ((_a = globalObj.localStorage) === null || _a === void 0 ? void 0 : _a.debug) === "string") {
globalObj.localStorage.debug.split(",").forEach((flag) => debugFlags.add(flag));
}
if (typeof ((_c = (_b = globalObj.process) === null || _b === void 0 ? void 0 : _b.env) === null || _c === void 0 ? void 0 : _c.DEBUG) === "string") {
globalObj.process.env.DEBUG.split(",").forEach((flag) => debugFlags.add(flag));
}
return [...debugFlags];
}
export function getEnvironmentType() {
if (typeof process === "undefined" || process.type === 'renderer' || process.browser === true || process.__nwjs) {
return "browser";
}
return "node";
}
/**
* Check if storage is available
* @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API
*/
function storageAvailable(win) {
let storage;
try {
storage = win.localStorage;
const x = "__storage_test__";
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch (e) {
return (typeof DOMException !== "undefined" &&
e instanceof DOMException &&
// everything except Firefox
(e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === "QuotaExceededError" ||
// Firefox
e.name === "NS_ERROR_DOM_QUOTA_REACHED") &&
// acknowledge QuotaExceededError only if there's something already stored
storage &&
storage.length !== 0);
}
}