typescript-logging
Version:
Library for logging, written in typescript, can be used by normal es5+ javascript as well.
200 lines • 7.96 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var CategoryService_1 = require("../log/category/CategoryService");
var LoggerOptions_1 = require("../log/LoggerOptions");
var MessageUtils_1 = require("../utils/MessageUtils");
var ExtensionHelper = (function () {
function ExtensionHelper() {
// Private constructor
}
/**
* Enables the window event listener to listen to messages (from extensions).
* Can be registered/enabled only once.
*/
ExtensionHelper.register = function () {
if (!ExtensionHelper.registered) {
var listener = function (evt) {
var msg = evt.data;
if (msg !== null) {
ExtensionHelper.processMessageFromExtension(msg);
}
};
if (typeof window !== "undefined" && typeof window.removeEventListener !== "undefined" && typeof window.addEventListener !== "undefined") {
window.removeEventListener("message", listener);
window.addEventListener("message", listener);
ExtensionHelper.registered = true;
}
}
};
ExtensionHelper.processMessageFromExtension = function (msg) {
if (!ExtensionHelper.registered) {
return;
}
/* tslint:disable:no-console */
if (msg.from === "tsl-extension") {
var data = msg.data;
switch (data.type) {
case "register":
ExtensionHelper.enableExtensionIntegration();
break;
case "request-change-loglevel":
var valueRequest = data.value;
var catsApplied = ExtensionHelper.applyLogLevel(valueRequest.categoryId, valueRequest.logLevel, valueRequest.recursive);
if (catsApplied.length > 0) {
// Send changes back
ExtensionHelper.sendCategoriesRuntimeUpdateMessage(catsApplied);
}
break;
default:
console.log("Unknown command to process message from extension, command was: " + data.type);
break;
}
}
/* tslint:enable:no-console */
};
ExtensionHelper.sendCategoryLogMessage = function (msg) {
if (!ExtensionHelper.registered) {
return;
}
var categoryIds = msg.categories.map(function (cat) {
return cat.id;
});
var content = {
type: "log-message",
value: {
categories: categoryIds,
errorAsStack: msg.errorAsStack,
formattedMessage: MessageUtils_1.MessageFormatUtils.renderDefaultMessage(msg, false),
logLevel: LoggerOptions_1.LogLevel[msg.level].toString(),
message: msg.messageAsString,
resolvedErrorMessage: msg.isResolvedErrorMessage
}
};
var message = {
data: content,
from: "tsl-logging",
};
ExtensionHelper.sendMessage(message);
};
ExtensionHelper.sendCategoriesRuntimeUpdateMessage = function (categories) {
if (!ExtensionHelper.registered) {
return;
}
var service = CategoryService_1.CategoryServiceImpl.getInstance();
var catLevels = { categories: Array() };
categories.forEach(function (cat) {
var catSettings = service.getCategorySettings(cat);
if (catSettings != null) {
catLevels.categories.push({ id: cat.id, logLevel: LoggerOptions_1.LogLevel[catSettings.logLevel].toString() });
}
});
var content = {
type: "categories-rt-update",
value: catLevels,
};
var message = {
data: content,
from: "tsl-logging"
};
ExtensionHelper.sendMessage(message);
};
ExtensionHelper.sendRootCategoriesToExtension = function () {
if (!ExtensionHelper.registered) {
return;
}
var categories = CategoryService_1.CategoryServiceImpl.getInstance().getRootCategories().map(function (cat) {
return ExtensionHelper.getCategoryAsJSON(cat);
});
var content = {
type: "root-categories-tree",
value: categories
};
var message = {
data: content,
from: "tsl-logging"
};
ExtensionHelper.sendMessage(message);
};
/**
* If extension integration is enabled, will send the root categories over to the extension.
* Otherwise does nothing.
*/
ExtensionHelper.getCategoryAsJSON = function (cat) {
var childCategories = cat.children.map(function (child) {
return ExtensionHelper.getCategoryAsJSON(child);
});
return {
children: childCategories,
id: cat.id,
logLevel: LoggerOptions_1.LogLevel[cat.logLevel].toString(),
name: cat.name,
parentId: (cat.parent != null ? cat.parent.id : null),
};
};
ExtensionHelper.applyLogLevel = function (categoryId, logLevel, recursive) {
var cats = [];
var category = CategoryService_1.CategoryServiceImpl.getInstance().getCategoryById(categoryId);
if (category != null) {
ExtensionHelper._applyLogLevelRecursive(category, LoggerOptions_1.LogLevel.fromString(logLevel), recursive, cats);
}
else {
/* tslint:disable:no-console */
console.log("Could not change log level, failed to find category with id: " + categoryId);
/* tslint:enable:no-console */
}
return cats;
};
ExtensionHelper._applyLogLevelRecursive = function (category, logLevel, recursive, cats) {
var categorySettings = CategoryService_1.CategoryServiceImpl.getInstance().getCategorySettings(category);
if (categorySettings != null) {
categorySettings.logLevel = logLevel;
cats.push(category);
if (recursive) {
category.children.forEach(function (child) {
ExtensionHelper._applyLogLevelRecursive(child, logLevel, recursive, cats);
});
}
}
};
ExtensionHelper.getAllCategories = function () {
var cats = [];
var addCats = function (cat, allCats) {
allCats.push(cat);
cat.children.forEach(function (catChild) {
addCats(catChild, allCats);
});
};
CategoryService_1.CategoryServiceImpl.getInstance().getRootCategories().forEach(function (cat) {
addCats(cat, cats);
});
return cats;
};
ExtensionHelper.sendMessage = function (msg) {
if (!ExtensionHelper.registered) {
return;
}
if (typeof window !== "undefined" && typeof window.postMessage !== "undefined") {
window.postMessage(msg, "*");
}
};
/**
* Extension framework will call this to enable the integration between two,
* after this call the framework will respond with postMessage() messages.
*/
ExtensionHelper.enableExtensionIntegration = function () {
if (!ExtensionHelper.registered) {
return;
}
var instance = CategoryService_1.CategoryServiceImpl.getInstance();
instance.enableExtensionIntegration();
// Send over all categories
ExtensionHelper.sendRootCategoriesToExtension();
// Send over the current runtime levels
var cats = ExtensionHelper.getAllCategories();
ExtensionHelper.sendCategoriesRuntimeUpdateMessage(cats);
};
ExtensionHelper.registered = false;
return ExtensionHelper;
}());
exports.ExtensionHelper = ExtensionHelper;
//# sourceMappingURL=ExtensionHelper.js.map
;