1 | "use strict";
|
2 |
|
3 | var ensureArray = require("type/array/ensure")
|
4 | , isValue = require("type/value/is")
|
5 | , ensureString = require("type/string/ensure")
|
6 | , includes = require("es5-ext/array/#/contains")
|
7 | , endsWith = require("es5-ext/string/#/ends-with")
|
8 | , logger = require("./private/logger-prototype")
|
9 | , emitter = require("./emitter")
|
10 | , levels = require("../levels");
|
11 |
|
12 | var resolveDebugNamespaces = function (debugNamespacesTokens, debugNamespacesSettings) {
|
13 | ensureArray(debugNamespacesTokens).forEach(function (ns) {
|
14 | ns = ensureString(ns).trim();
|
15 | if (!ns) return;
|
16 | var isEnabled = ns[0] !== "-";
|
17 | if (!isEnabled) ns = ns.slice(1);
|
18 | if (endsWith.call(ns, ":*")) ns = ns.slice(0, -2);
|
19 | ns = ns.split(":").filter(Boolean).join(":");
|
20 | debugNamespacesSettings[ns] = isEnabled;
|
21 | });
|
22 | };
|
23 |
|
24 | module.exports = function (thresholdLevelName, debugNamespacesTokens) {
|
25 |
|
26 |
|
27 | if (!thresholdLevelName || !includes.call(levels, thresholdLevelName)) {
|
28 | thresholdLevelName = "notice";
|
29 | }
|
30 | var thresholdLevelIndex = levels.indexOf(thresholdLevelName);
|
31 |
|
32 |
|
33 |
|
34 | var debugNamespacesSettings = Object.create(null);
|
35 | resolveDebugNamespaces(debugNamespacesTokens, debugNamespacesSettings);
|
36 | var debugNamespacesList = Object.keys(debugNamespacesSettings);
|
37 |
|
38 |
|
39 | levels.forEach(function (levelName, levelIndex) {
|
40 |
|
41 | if (!logger.isLevelInitialized(levelName)) return;
|
42 |
|
43 | if (levelIndex <= thresholdLevelIndex) return;
|
44 |
|
45 |
|
46 | var levelLogger = logger[levelName];
|
47 | levelLogger.isEnabled = false;
|
48 |
|
49 |
|
50 | debugNamespacesList.forEach(function (ns) {
|
51 | if (ns === "*") {
|
52 | levelLogger.isEnabled = debugNamespacesSettings[ns];
|
53 | } else if (levelLogger.isNamespaceInitialized(ns)) {
|
54 | levelLogger.get(ns).isEnabled = debugNamespacesSettings[ns];
|
55 | }
|
56 | });
|
57 | });
|
58 |
|
59 |
|
60 | emitter.on("init", function (event) {
|
61 | var newLogger = event.logger;
|
62 | if (!newLogger.namespace && newLogger.levelIndex > thresholdLevelIndex) {
|
63 |
|
64 | newLogger.isEnabled = false;
|
65 | }
|
66 |
|
67 |
|
68 | var isEnabled = debugNamespacesSettings[newLogger.namespace || "*"];
|
69 | if (isValue(isEnabled)) newLogger.isEnabled = isEnabled;
|
70 | });
|
71 | };
|