UNPKG

3.7 kBJavaScriptView Raw
1(function (global, factory) {
2 if (typeof define === "function" && define.amd) {
3 define(['module', 'exports'], factory);
4 } else if (typeof exports !== "undefined") {
5 factory(module, exports);
6 } else {
7 var mod = {
8 exports: {}
9 };
10 factory(mod, mod.exports);
11 global.prefix = mod.exports;
12 }
13})(this, function (module, exports) {
14 'use strict';
15
16 Object.defineProperty(exports, "__esModule", {
17 value: true
18 });
19 var merge = function merge(target) {
20 for (var i = 1; i < arguments.length; i += 1) {
21 for (var prop in arguments[i]) {
22 if (Object.prototype.hasOwnProperty.call(arguments[i], prop)) {
23 target[prop] = arguments[i][prop];
24 }
25 }
26 }
27 return target;
28 };
29
30 var defaults = {
31 template: '[%t] %l:',
32 timestampFormatter: function timestampFormatter(date) {
33 return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
34 },
35 levelFormatter: function levelFormatter(level) {
36 return level.toUpperCase();
37 },
38 nameFormatter: function nameFormatter(name) {
39 return name || 'root';
40 }
41 };
42
43 var loglevel = void 0;
44 var originalFactory = void 0;
45 var pluginFactory = void 0;
46
47 var apply = function apply(logger, options) {
48 if (!logger || !logger.getLogger) {
49 throw new TypeError('Argument is not a root loglevel object');
50 }
51
52 if (loglevel && pluginFactory !== logger.methodFactory) {
53 throw new Error("You can't reassign a plugin after appling another plugin");
54 }
55
56 loglevel = logger;
57
58 options = merge({}, defaults, options);
59
60 originalFactory = originalFactory || logger.methodFactory;
61
62 pluginFactory = function methodFactory(methodName, logLevel, loggerName) {
63 var rawMethod = originalFactory(methodName, logLevel, loggerName);
64
65 var hasTimestamp = options.template.indexOf('%t') !== -1;
66 var hasLevel = options.template.indexOf('%l') !== -1;
67 var hasName = options.template.indexOf('%n') !== -1;
68
69 return function () {
70 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
71 args[_key] = arguments[_key];
72 }
73
74 var content = options.template;
75 if (hasTimestamp) content = content.replace(/%t/, options.timestampFormatter(new Date()));
76 if (hasLevel) content = content.replace(/%l/, options.levelFormatter(methodName));
77 if (hasName) content = content.replace(/%n/, options.nameFormatter(loggerName));
78
79 if (args.length && typeof args[0] === 'string') {
80 // concat prefix with first argument to support string substitutions
81 args[0] = content + ' ' + args[0];
82 } else {
83 args.unshift(content);
84 }
85 rawMethod.apply(undefined, args);
86 };
87 };
88
89 logger.methodFactory = pluginFactory;
90 logger.setLevel(logger.getLevel());
91 return logger;
92 };
93
94 var disable = function disable() {
95 if (!loglevel) {
96 throw new Error("You can't disable a not appled plugin");
97 }
98
99 if (pluginFactory !== loglevel.methodFactory) {
100 throw new Error("You can't disable a plugin after appling another plugin");
101 }
102
103 loglevel.methodFactory = originalFactory;
104 loglevel.setLevel(loglevel.getLevel());
105 originalFactory = undefined;
106 loglevel = undefined;
107 };
108
109 var prefix = {};
110 prefix.apply = apply;
111 prefix.disable = disable;
112
113 var save = typeof window !== 'undefined' ? window.prefix : undefined;
114
115 prefix.noConflict = function () {
116 if (typeof window !== 'undefined' && window.prefix === prefix) {
117 window.prefix = save;
118 }
119 return prefix;
120 };
121
122 exports.default = prefix;
123 module.exports = exports['default'];
124});