UNPKG

3.52 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.GitLogger = exports.createLogger = void 0;
4const debug_1 = require("debug");
5const utils_1 = require("./utils");
6debug_1.default.formatters.L = (value) => String(utils_1.filterHasLength(value) ? value.length : '-');
7debug_1.default.formatters.B = (value) => {
8 if (Buffer.isBuffer(value)) {
9 return value.toString('utf8');
10 }
11 return utils_1.objectToString(value);
12};
13function createLog() {
14 return debug_1.default('simple-git');
15}
16function prefixedLogger(to, prefix, forward) {
17 if (!prefix || !String(prefix).replace(/\s*/, '')) {
18 return !forward ? to : (message, ...args) => {
19 to(message, ...args);
20 forward(message, ...args);
21 };
22 }
23 return (message, ...args) => {
24 to(`%s ${message}`, prefix, ...args);
25 if (forward) {
26 forward(message, ...args);
27 }
28 };
29}
30function childLoggerName(name, childDebugger, { namespace: parentNamespace }) {
31 if (typeof name === 'string') {
32 return name;
33 }
34 const childNamespace = childDebugger && childDebugger.namespace || '';
35 if (childNamespace.startsWith(parentNamespace)) {
36 return childNamespace.substr(parentNamespace.length + 1);
37 }
38 return childNamespace || parentNamespace;
39}
40function createLogger(label, verbose, initialStep, infoDebugger = createLog()) {
41 const labelPrefix = label && `[${label}]` || '';
42 const spawned = [];
43 const debugDebugger = (typeof verbose === 'string') ? infoDebugger.extend(verbose) : verbose;
44 const key = childLoggerName(utils_1.filterType(verbose, utils_1.filterString), debugDebugger, infoDebugger);
45 return step(initialStep);
46 function sibling(name, initial) {
47 return utils_1.append(spawned, createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger));
48 }
49 function step(phase) {
50 const stepPrefix = phase && `[${phase}]` || '';
51 const debug = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || utils_1.NOOP;
52 const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);
53 return Object.assign(debugDebugger ? debug : info, {
54 label,
55 sibling,
56 info,
57 step,
58 });
59 }
60}
61exports.createLogger = createLogger;
62/**
63 * The `GitLogger` is used by the main `SimpleGit` runner to handle logging
64 * any warnings or errors.
65 */
66class GitLogger {
67 constructor(_out = createLog()) {
68 this._out = _out;
69 this.error = prefixedLogger(_out, '[ERROR]');
70 this.warn = prefixedLogger(_out, '[WARN]');
71 }
72 silent(silence = false) {
73 if (silence !== this._out.enabled) {
74 return;
75 }
76 const { namespace } = this._out;
77 const env = (process.env.DEBUG || '').split(',').filter(s => !!s);
78 const hasOn = env.includes(namespace);
79 const hasOff = env.includes(`-${namespace}`);
80 // enabling the log
81 if (!silence) {
82 if (hasOff) {
83 utils_1.remove(env, `-${namespace}`);
84 }
85 else {
86 env.push(namespace);
87 }
88 }
89 else {
90 if (hasOn) {
91 utils_1.remove(env, namespace);
92 }
93 else {
94 env.push(`-${namespace}`);
95 }
96 }
97 debug_1.default.enable(env.join(','));
98 }
99}
100exports.GitLogger = GitLogger;
101//# sourceMappingURL=git-logger.js.map
\No newline at end of file