@delta-ai/platform 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action/common/action.d.ts +75 -0
- package/dist/action/common/action.d.ts.map +1 -0
- package/dist/action/common/action.js +17 -0
- package/dist/action/common/action.js.map +1 -0
- package/dist/action/common/actionCommonCategories.d.ts +9 -0
- package/dist/action/common/actionCommonCategories.d.ts.map +1 -0
- package/dist/action/common/actionCommonCategories.js +14 -0
- package/dist/action/common/actionCommonCategories.js.map +1 -0
- package/dist/commands/common/commands.d.ts +52 -0
- package/dist/commands/common/commands.d.ts.map +1 -0
- package/dist/commands/common/commands.js +79 -0
- package/dist/commands/common/commands.js.map +1 -0
- package/dist/contextkey/common/contextkey.d.ts +439 -0
- package/dist/contextkey/common/contextkey.d.ts.map +1 -0
- package/dist/contextkey/common/contextkey.js +1729 -0
- package/dist/contextkey/common/contextkey.js.map +1 -0
- package/dist/contextkey/common/scanner.d.ts +142 -0
- package/dist/contextkey/common/scanner.d.ts.map +1 -0
- package/dist/contextkey/common/scanner.js +311 -0
- package/dist/contextkey/common/scanner.js.map +1 -0
- package/dist/environment/common/argv.d.ts +173 -0
- package/dist/environment/common/argv.d.ts.map +1 -0
- package/dist/environment/common/argv.js +6 -0
- package/dist/environment/common/argv.js.map +1 -0
- package/dist/environment/common/environment.d.ts +113 -0
- package/dist/environment/common/environment.d.ts.map +1 -0
- package/dist/environment/common/environment.js +9 -0
- package/dist/environment/common/environment.js.map +1 -0
- package/dist/environment/common/environmentService.d.ts +91 -0
- package/dist/environment/common/environmentService.d.ts.map +1 -0
- package/dist/environment/common/environmentService.js +278 -0
- package/dist/environment/common/environmentService.js.map +1 -0
- package/dist/instantiation/common/descriptors.d.ts +10 -0
- package/dist/instantiation/common/descriptors.d.ts.map +1 -0
- package/dist/instantiation/common/descriptors.js +15 -0
- package/dist/instantiation/common/descriptors.js.map +1 -0
- package/dist/instantiation/common/graph.d.ts +26 -0
- package/dist/instantiation/common/graph.d.ts.map +1 -0
- package/dist/instantiation/common/graph.js +96 -0
- package/dist/instantiation/common/graph.js.map +1 -0
- package/dist/instantiation/common/instantiation.d.ts +76 -0
- package/dist/instantiation/common/instantiation.d.ts.map +1 -0
- package/dist/instantiation/common/instantiation.js +49 -0
- package/dist/instantiation/common/instantiation.js.map +1 -0
- package/dist/instantiation/common/instantiationService.d.ts +56 -0
- package/dist/instantiation/common/instantiationService.d.ts.map +1 -0
- package/dist/instantiation/common/instantiationService.js +415 -0
- package/dist/instantiation/common/instantiationService.js.map +1 -0
- package/dist/instantiation/common/serviceCollection.d.ts +10 -0
- package/dist/instantiation/common/serviceCollection.d.ts.map +1 -0
- package/dist/instantiation/common/serviceCollection.js +25 -0
- package/dist/instantiation/common/serviceCollection.js.map +1 -0
- package/dist/log/common/log.d.ts +297 -0
- package/dist/log/common/log.d.ts.map +1 -0
- package/dist/log/common/log.js +668 -0
- package/dist/log/common/log.js.map +1 -0
- package/dist/registry/common/platform.d.ts +21 -0
- package/dist/registry/common/platform.d.ts.map +1 -0
- package/dist/registry/common/platform.js +31 -0
- package/dist/registry/common/platform.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as nls from '@delta-ai/base/nls.js';
|
|
6
|
+
import { toErrorMessage } from '@delta-ai/base/common/errorMessage.js';
|
|
7
|
+
import { Emitter, Event } from '@delta-ai/base/common/event.js';
|
|
8
|
+
import { hash } from '@delta-ai/base/common/hash.js';
|
|
9
|
+
import { Disposable, toDisposable } from '@delta-ai/base/common/lifecycle.js';
|
|
10
|
+
import { ResourceMap } from '@delta-ai/base/common/map.js';
|
|
11
|
+
import { isWindows } from '@delta-ai/base/common/platform.js';
|
|
12
|
+
import { joinPath } from '@delta-ai/base/common/resources.js';
|
|
13
|
+
import { isNumber, isString } from '@delta-ai/base/common/types.js';
|
|
14
|
+
import { URI } from '@delta-ai/base/common/uri.js';
|
|
15
|
+
import { RawContextKey } from '@delta-ai/platform/contextkey/common/contextkey.js';
|
|
16
|
+
import { IEnvironmentService } from '../../environment/common/environment.js';
|
|
17
|
+
import { createDecorator } from '@delta-ai/platform/instantiation/common/instantiation.js';
|
|
18
|
+
export const ILogService = createDecorator('logService');
|
|
19
|
+
export const ILoggerService = createDecorator('loggerService');
|
|
20
|
+
function now() {
|
|
21
|
+
return new Date().toISOString();
|
|
22
|
+
}
|
|
23
|
+
export function isLogLevel(thing) {
|
|
24
|
+
return isNumber(thing);
|
|
25
|
+
}
|
|
26
|
+
export var LogLevel;
|
|
27
|
+
(function (LogLevel) {
|
|
28
|
+
LogLevel[LogLevel["Off"] = 0] = "Off";
|
|
29
|
+
LogLevel[LogLevel["Trace"] = 1] = "Trace";
|
|
30
|
+
LogLevel[LogLevel["Debug"] = 2] = "Debug";
|
|
31
|
+
LogLevel[LogLevel["Info"] = 3] = "Info";
|
|
32
|
+
LogLevel[LogLevel["Warning"] = 4] = "Warning";
|
|
33
|
+
LogLevel[LogLevel["Error"] = 5] = "Error";
|
|
34
|
+
})(LogLevel || (LogLevel = {}));
|
|
35
|
+
export const DEFAULT_LOG_LEVEL = LogLevel.Info;
|
|
36
|
+
export function canLog(loggerLevel, messageLevel) {
|
|
37
|
+
return loggerLevel !== LogLevel.Off && loggerLevel <= messageLevel;
|
|
38
|
+
}
|
|
39
|
+
export function log(logger, level, message) {
|
|
40
|
+
switch (level) {
|
|
41
|
+
case LogLevel.Trace:
|
|
42
|
+
logger.trace(message);
|
|
43
|
+
break;
|
|
44
|
+
case LogLevel.Debug:
|
|
45
|
+
logger.debug(message);
|
|
46
|
+
break;
|
|
47
|
+
case LogLevel.Info:
|
|
48
|
+
logger.info(message);
|
|
49
|
+
break;
|
|
50
|
+
case LogLevel.Warning:
|
|
51
|
+
logger.warn(message);
|
|
52
|
+
break;
|
|
53
|
+
case LogLevel.Error:
|
|
54
|
+
logger.error(message);
|
|
55
|
+
break;
|
|
56
|
+
case LogLevel.Off: /* do nothing */ break;
|
|
57
|
+
default: throw new Error(`Invalid log level ${level}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Flag to enable forwarding of console.* calls to the log service in development.
|
|
62
|
+
* This is intended for the use of agents to quickly instrument the code with console.logs
|
|
63
|
+
* which will end up in the log service's file outputs.
|
|
64
|
+
*/
|
|
65
|
+
export const isDevConsoleLogForwardingEnabled = false;
|
|
66
|
+
let isConsoleForwarding = false;
|
|
67
|
+
let isLogServiceConsoleEcho = false;
|
|
68
|
+
function getConsoleMethod(method) {
|
|
69
|
+
switch (method) {
|
|
70
|
+
case 'debug': return console.debug;
|
|
71
|
+
case 'error': return console.error;
|
|
72
|
+
case 'info': return console.info;
|
|
73
|
+
case 'log': return console.log;
|
|
74
|
+
case 'warn': return console.warn;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function setConsoleMethod(method, fn) {
|
|
78
|
+
switch (method) {
|
|
79
|
+
case 'debug':
|
|
80
|
+
console.debug = fn;
|
|
81
|
+
break;
|
|
82
|
+
case 'error':
|
|
83
|
+
console.error = fn;
|
|
84
|
+
break;
|
|
85
|
+
case 'info':
|
|
86
|
+
console.info = fn;
|
|
87
|
+
break;
|
|
88
|
+
case 'log':
|
|
89
|
+
console.log = fn;
|
|
90
|
+
break;
|
|
91
|
+
case 'warn':
|
|
92
|
+
console.warn = fn;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function logToConsole(method, ...args) {
|
|
97
|
+
if (isConsoleForwarding) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
isLogServiceConsoleEcho = true;
|
|
101
|
+
try {
|
|
102
|
+
getConsoleMethod(method).apply(console, args);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
isLogServiceConsoleEcho = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export function registerDevConsoleLogForwarder(logService) {
|
|
109
|
+
const originalConsoleMethods = {
|
|
110
|
+
debug: console.debug,
|
|
111
|
+
error: console.error,
|
|
112
|
+
info: console.info,
|
|
113
|
+
log: console.log,
|
|
114
|
+
warn: console.warn
|
|
115
|
+
};
|
|
116
|
+
const forward = (method, level, args) => {
|
|
117
|
+
if (!isLogServiceConsoleEcho) {
|
|
118
|
+
isConsoleForwarding = true;
|
|
119
|
+
try {
|
|
120
|
+
log(logService, level, format(args));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Best-effort development logging must not break normal console semantics.
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
isConsoleForwarding = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
originalConsoleMethods[method].apply(console, args);
|
|
130
|
+
};
|
|
131
|
+
const wrappers = {
|
|
132
|
+
debug: (...args) => forward('debug', LogLevel.Debug, args),
|
|
133
|
+
error: (...args) => forward('error', LogLevel.Error, args),
|
|
134
|
+
info: (...args) => forward('info', LogLevel.Info, args),
|
|
135
|
+
log: (...args) => forward('log', LogLevel.Info, args),
|
|
136
|
+
warn: (...args) => forward('warn', LogLevel.Warning, args)
|
|
137
|
+
};
|
|
138
|
+
setConsoleMethod('debug', wrappers.debug);
|
|
139
|
+
setConsoleMethod('error', wrappers.error);
|
|
140
|
+
setConsoleMethod('info', wrappers.info);
|
|
141
|
+
setConsoleMethod('log', wrappers.log);
|
|
142
|
+
setConsoleMethod('warn', wrappers.warn);
|
|
143
|
+
return toDisposable(() => {
|
|
144
|
+
if (console.debug === wrappers.debug) {
|
|
145
|
+
console.debug = originalConsoleMethods.debug;
|
|
146
|
+
}
|
|
147
|
+
if (console.error === wrappers.error) {
|
|
148
|
+
console.error = originalConsoleMethods.error;
|
|
149
|
+
}
|
|
150
|
+
if (console.info === wrappers.info) {
|
|
151
|
+
console.info = originalConsoleMethods.info;
|
|
152
|
+
}
|
|
153
|
+
if (console.log === wrappers.log) {
|
|
154
|
+
console.log = originalConsoleMethods.log;
|
|
155
|
+
}
|
|
156
|
+
if (console.warn === wrappers.warn) {
|
|
157
|
+
console.warn = originalConsoleMethods.warn;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function format(args, verbose = false) {
|
|
162
|
+
let result = '';
|
|
163
|
+
for (let i = 0; i < args.length; i++) {
|
|
164
|
+
let a = args[i];
|
|
165
|
+
if (a instanceof Error) {
|
|
166
|
+
a = toErrorMessage(a, verbose);
|
|
167
|
+
}
|
|
168
|
+
if (typeof a === 'object') {
|
|
169
|
+
try {
|
|
170
|
+
a = JSON.stringify(a);
|
|
171
|
+
}
|
|
172
|
+
catch (e) { }
|
|
173
|
+
}
|
|
174
|
+
result += (i > 0 ? ' ' : '') + a;
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
export class AbstractLogger extends Disposable {
|
|
179
|
+
level = DEFAULT_LOG_LEVEL;
|
|
180
|
+
_onDidChangeLogLevel = this._register(new Emitter());
|
|
181
|
+
get onDidChangeLogLevel() { return this._onDidChangeLogLevel.event; }
|
|
182
|
+
setLevel(level) {
|
|
183
|
+
if (this.level !== level) {
|
|
184
|
+
this.level = level;
|
|
185
|
+
this._onDidChangeLogLevel.fire(this.level);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
getLevel() {
|
|
189
|
+
return this.level;
|
|
190
|
+
}
|
|
191
|
+
checkLogLevel(level) {
|
|
192
|
+
return canLog(this.level, level);
|
|
193
|
+
}
|
|
194
|
+
canLog(level) {
|
|
195
|
+
if (this._store.isDisposed) {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
return this.checkLogLevel(level);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export class AbstractMessageLogger extends AbstractLogger {
|
|
202
|
+
logAlways;
|
|
203
|
+
constructor(logAlways) {
|
|
204
|
+
super();
|
|
205
|
+
this.logAlways = logAlways;
|
|
206
|
+
}
|
|
207
|
+
checkLogLevel(level) {
|
|
208
|
+
return this.logAlways || super.checkLogLevel(level);
|
|
209
|
+
}
|
|
210
|
+
trace(message, ...args) {
|
|
211
|
+
if (this.canLog(LogLevel.Trace)) {
|
|
212
|
+
this.log(LogLevel.Trace, format([message, ...args], true));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
debug(message, ...args) {
|
|
216
|
+
if (this.canLog(LogLevel.Debug)) {
|
|
217
|
+
this.log(LogLevel.Debug, format([message, ...args]));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
info(message, ...args) {
|
|
221
|
+
if (this.canLog(LogLevel.Info)) {
|
|
222
|
+
this.log(LogLevel.Info, format([message, ...args]));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
warn(message, ...args) {
|
|
226
|
+
if (this.canLog(LogLevel.Warning)) {
|
|
227
|
+
this.log(LogLevel.Warning, format([message, ...args]));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
error(message, ...args) {
|
|
231
|
+
if (this.canLog(LogLevel.Error)) {
|
|
232
|
+
if (message instanceof Error) {
|
|
233
|
+
const array = Array.prototype.slice.call(arguments);
|
|
234
|
+
array[0] = message.stack;
|
|
235
|
+
this.log(LogLevel.Error, format(array));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this.log(LogLevel.Error, format([message, ...args]));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
flush() { }
|
|
243
|
+
}
|
|
244
|
+
export class ConsoleMainLogger extends AbstractLogger {
|
|
245
|
+
useColors;
|
|
246
|
+
constructor(logLevel = DEFAULT_LOG_LEVEL) {
|
|
247
|
+
super();
|
|
248
|
+
this.setLevel(logLevel);
|
|
249
|
+
this.useColors = !isWindows;
|
|
250
|
+
}
|
|
251
|
+
trace(message, ...args) {
|
|
252
|
+
if (this.canLog(LogLevel.Trace)) {
|
|
253
|
+
if (this.useColors) {
|
|
254
|
+
logToConsole('log', `\x1b[90m[main ${now()}]\x1b[0m`, message, ...args);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
logToConsole('log', `[main ${now()}]`, message, ...args);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
debug(message, ...args) {
|
|
262
|
+
if (this.canLog(LogLevel.Debug)) {
|
|
263
|
+
if (this.useColors) {
|
|
264
|
+
logToConsole('log', `\x1b[90m[main ${now()}]\x1b[0m`, message, ...args);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
logToConsole('log', `[main ${now()}]`, message, ...args);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
info(message, ...args) {
|
|
272
|
+
if (this.canLog(LogLevel.Info)) {
|
|
273
|
+
if (this.useColors) {
|
|
274
|
+
logToConsole('log', `\x1b[90m[main ${now()}]\x1b[0m`, message, ...args);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
logToConsole('log', `[main ${now()}]`, message, ...args);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
warn(message, ...args) {
|
|
282
|
+
if (this.canLog(LogLevel.Warning)) {
|
|
283
|
+
if (this.useColors) {
|
|
284
|
+
logToConsole('warn', `\x1b[93m[main ${now()}]\x1b[0m`, message, ...args);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
logToConsole('warn', `[main ${now()}]`, message, ...args);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
error(message, ...args) {
|
|
292
|
+
if (this.canLog(LogLevel.Error)) {
|
|
293
|
+
if (this.useColors) {
|
|
294
|
+
logToConsole('error', `\x1b[91m[main ${now()}]\x1b[0m`, message, ...args);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
logToConsole('error', `[main ${now()}]`, message, ...args);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
flush() {
|
|
302
|
+
// noop
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export class ConsoleLogger extends AbstractLogger {
|
|
306
|
+
useColors;
|
|
307
|
+
constructor(logLevel = DEFAULT_LOG_LEVEL, useColors = true) {
|
|
308
|
+
super();
|
|
309
|
+
this.useColors = useColors;
|
|
310
|
+
this.setLevel(logLevel);
|
|
311
|
+
}
|
|
312
|
+
trace(message, ...args) {
|
|
313
|
+
if (this.canLog(LogLevel.Trace)) {
|
|
314
|
+
if (this.useColors) {
|
|
315
|
+
logToConsole('log', '%cTRACE', 'color: #888', message, ...args);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
logToConsole('log', message, ...args);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
debug(message, ...args) {
|
|
323
|
+
if (this.canLog(LogLevel.Debug)) {
|
|
324
|
+
if (this.useColors) {
|
|
325
|
+
logToConsole('log', '%cDEBUG', 'background: #eee; color: #888', message, ...args);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
logToConsole('log', message, ...args);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
info(message, ...args) {
|
|
333
|
+
if (this.canLog(LogLevel.Info)) {
|
|
334
|
+
if (this.useColors) {
|
|
335
|
+
logToConsole('log', '%c INFO', 'color: #33f', message, ...args);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
logToConsole('log', message, ...args);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
warn(message, ...args) {
|
|
343
|
+
if (this.canLog(LogLevel.Warning)) {
|
|
344
|
+
if (this.useColors) {
|
|
345
|
+
logToConsole('warn', '%c WARN', 'color: #993', message, ...args);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
logToConsole('log', message, ...args);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
error(message, ...args) {
|
|
353
|
+
if (this.canLog(LogLevel.Error)) {
|
|
354
|
+
if (this.useColors) {
|
|
355
|
+
logToConsole('error', '%c ERR', 'color: #f33', message, ...args);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
logToConsole('error', message, ...args);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
flush() {
|
|
363
|
+
// noop
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
export class AdapterLogger extends AbstractLogger {
|
|
367
|
+
adapter;
|
|
368
|
+
constructor(adapter, logLevel = DEFAULT_LOG_LEVEL) {
|
|
369
|
+
super();
|
|
370
|
+
this.adapter = adapter;
|
|
371
|
+
this.setLevel(logLevel);
|
|
372
|
+
}
|
|
373
|
+
trace(message, ...args) {
|
|
374
|
+
if (this.canLog(LogLevel.Trace)) {
|
|
375
|
+
this.adapter.log(LogLevel.Trace, [this.extractMessage(message), ...args]);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
debug(message, ...args) {
|
|
379
|
+
if (this.canLog(LogLevel.Debug)) {
|
|
380
|
+
this.adapter.log(LogLevel.Debug, [this.extractMessage(message), ...args]);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
info(message, ...args) {
|
|
384
|
+
if (this.canLog(LogLevel.Info)) {
|
|
385
|
+
this.adapter.log(LogLevel.Info, [this.extractMessage(message), ...args]);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
warn(message, ...args) {
|
|
389
|
+
if (this.canLog(LogLevel.Warning)) {
|
|
390
|
+
this.adapter.log(LogLevel.Warning, [this.extractMessage(message), ...args]);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
error(message, ...args) {
|
|
394
|
+
if (this.canLog(LogLevel.Error)) {
|
|
395
|
+
this.adapter.log(LogLevel.Error, [this.extractMessage(message), ...args]);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
extractMessage(msg) {
|
|
399
|
+
if (typeof msg === 'string') {
|
|
400
|
+
return msg;
|
|
401
|
+
}
|
|
402
|
+
return toErrorMessage(msg, this.canLog(LogLevel.Trace));
|
|
403
|
+
}
|
|
404
|
+
flush() {
|
|
405
|
+
// noop
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
export class MultiplexLogger extends AbstractLogger {
|
|
409
|
+
loggers;
|
|
410
|
+
constructor(loggers) {
|
|
411
|
+
super();
|
|
412
|
+
this.loggers = loggers;
|
|
413
|
+
if (loggers.length) {
|
|
414
|
+
this.setLevel(loggers[0].getLevel());
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
setLevel(level) {
|
|
418
|
+
for (const logger of this.loggers) {
|
|
419
|
+
logger.setLevel(level);
|
|
420
|
+
}
|
|
421
|
+
super.setLevel(level);
|
|
422
|
+
}
|
|
423
|
+
trace(message, ...args) {
|
|
424
|
+
for (const logger of this.loggers) {
|
|
425
|
+
logger.trace(message, ...args);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
debug(message, ...args) {
|
|
429
|
+
for (const logger of this.loggers) {
|
|
430
|
+
logger.debug(message, ...args);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
info(message, ...args) {
|
|
434
|
+
for (const logger of this.loggers) {
|
|
435
|
+
logger.info(message, ...args);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
warn(message, ...args) {
|
|
439
|
+
for (const logger of this.loggers) {
|
|
440
|
+
logger.warn(message, ...args);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
error(message, ...args) {
|
|
444
|
+
for (const logger of this.loggers) {
|
|
445
|
+
logger.error(message, ...args);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
flush() {
|
|
449
|
+
for (const logger of this.loggers) {
|
|
450
|
+
logger.flush();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
dispose() {
|
|
454
|
+
for (const logger of this.loggers) {
|
|
455
|
+
logger.dispose();
|
|
456
|
+
}
|
|
457
|
+
super.dispose();
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
export class AbstractLoggerService extends Disposable {
|
|
461
|
+
logLevel;
|
|
462
|
+
logsHome;
|
|
463
|
+
_loggers = new ResourceMap();
|
|
464
|
+
_onDidChangeLoggers = this._register(new Emitter);
|
|
465
|
+
onDidChangeLoggers = this._onDidChangeLoggers.event;
|
|
466
|
+
_onDidChangeLogLevel = this._register(new Emitter);
|
|
467
|
+
onDidChangeLogLevel = this._onDidChangeLogLevel.event;
|
|
468
|
+
_onDidChangeVisibility = this._register(new Emitter);
|
|
469
|
+
onDidChangeVisibility = this._onDidChangeVisibility.event;
|
|
470
|
+
constructor(logLevel, logsHome, loggerResources) {
|
|
471
|
+
super();
|
|
472
|
+
this.logLevel = logLevel;
|
|
473
|
+
this.logsHome = logsHome;
|
|
474
|
+
if (loggerResources) {
|
|
475
|
+
for (const loggerResource of loggerResources) {
|
|
476
|
+
this._loggers.set(loggerResource.resource, { logger: undefined, info: loggerResource });
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
getLoggerEntry(resourceOrId) {
|
|
481
|
+
if (isString(resourceOrId)) {
|
|
482
|
+
return [...this._loggers.values()].find(logger => logger.info.id === resourceOrId);
|
|
483
|
+
}
|
|
484
|
+
return this._loggers.get(resourceOrId);
|
|
485
|
+
}
|
|
486
|
+
getLogger(resourceOrId) {
|
|
487
|
+
return this.getLoggerEntry(resourceOrId)?.logger;
|
|
488
|
+
}
|
|
489
|
+
createLogger(idOrResource, options) {
|
|
490
|
+
const resource = this.toResource(idOrResource);
|
|
491
|
+
const id = isString(idOrResource) ? idOrResource : (options?.id ?? hash(resource.toString()).toString(16));
|
|
492
|
+
let logger = this._loggers.get(resource)?.logger;
|
|
493
|
+
const logLevel = options?.logLevel === 'always' ? LogLevel.Trace : options?.logLevel;
|
|
494
|
+
if (!logger) {
|
|
495
|
+
logger = this.doCreateLogger(resource, logLevel ?? this.getLogLevel(resource) ?? this.logLevel, { ...options, id });
|
|
496
|
+
}
|
|
497
|
+
const loggerEntry = {
|
|
498
|
+
logger,
|
|
499
|
+
info: {
|
|
500
|
+
resource,
|
|
501
|
+
id,
|
|
502
|
+
logLevel,
|
|
503
|
+
name: options?.name,
|
|
504
|
+
hidden: options?.hidden,
|
|
505
|
+
group: options?.group,
|
|
506
|
+
extensionId: options?.extensionId,
|
|
507
|
+
when: options?.when
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
this.registerLogger(loggerEntry.info);
|
|
511
|
+
// TODO: @sandy081 Remove this once registerLogger can take ILogger
|
|
512
|
+
this._loggers.set(resource, loggerEntry);
|
|
513
|
+
return logger;
|
|
514
|
+
}
|
|
515
|
+
toResource(idOrResource) {
|
|
516
|
+
return isString(idOrResource) ? joinPath(this.logsHome, `${idOrResource.replace(/[\\/:\*\?"<>\|]/g, '')}.log`) : idOrResource;
|
|
517
|
+
}
|
|
518
|
+
setLogLevel(arg1, arg2) {
|
|
519
|
+
if (URI.isUri(arg1)) {
|
|
520
|
+
const resource = arg1;
|
|
521
|
+
const logLevel = arg2;
|
|
522
|
+
const logger = this._loggers.get(resource);
|
|
523
|
+
if (logger && logLevel !== logger.info.logLevel) {
|
|
524
|
+
logger.info.logLevel = logLevel === this.logLevel ? undefined : logLevel;
|
|
525
|
+
logger.logger?.setLevel(logLevel);
|
|
526
|
+
this._loggers.set(logger.info.resource, logger);
|
|
527
|
+
this._onDidChangeLogLevel.fire([resource, logLevel]);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
this.logLevel = arg1;
|
|
532
|
+
for (const [resource, logger] of this._loggers.entries()) {
|
|
533
|
+
if (this._loggers.get(resource)?.info.logLevel === undefined) {
|
|
534
|
+
logger.logger?.setLevel(this.logLevel);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
this._onDidChangeLogLevel.fire(this.logLevel);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
setVisibility(resourceOrId, visibility) {
|
|
541
|
+
const logger = this.getLoggerEntry(resourceOrId);
|
|
542
|
+
if (logger && visibility !== !logger.info.hidden) {
|
|
543
|
+
logger.info.hidden = !visibility;
|
|
544
|
+
this._loggers.set(logger.info.resource, logger);
|
|
545
|
+
this._onDidChangeVisibility.fire([logger.info.resource, visibility]);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
getLogLevel(resource) {
|
|
549
|
+
let logLevel;
|
|
550
|
+
if (resource) {
|
|
551
|
+
logLevel = this._loggers.get(resource)?.info.logLevel;
|
|
552
|
+
}
|
|
553
|
+
return logLevel ?? this.logLevel;
|
|
554
|
+
}
|
|
555
|
+
registerLogger(resource) {
|
|
556
|
+
const existing = this._loggers.get(resource.resource);
|
|
557
|
+
if (existing) {
|
|
558
|
+
if (existing.info.hidden !== resource.hidden) {
|
|
559
|
+
this.setVisibility(resource.resource, !resource.hidden);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
this._loggers.set(resource.resource, { info: resource, logger: undefined });
|
|
564
|
+
this._onDidChangeLoggers.fire({ added: [resource], removed: [] });
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
deregisterLogger(idOrResource) {
|
|
568
|
+
const resource = this.toResource(idOrResource);
|
|
569
|
+
const existing = this._loggers.get(resource);
|
|
570
|
+
if (existing) {
|
|
571
|
+
if (existing.logger) {
|
|
572
|
+
existing.logger.dispose();
|
|
573
|
+
}
|
|
574
|
+
this._loggers.delete(resource);
|
|
575
|
+
this._onDidChangeLoggers.fire({ added: [], removed: [existing.info] });
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
*getRegisteredLoggers() {
|
|
579
|
+
for (const entry of this._loggers.values()) {
|
|
580
|
+
yield entry.info;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
getRegisteredLogger(resource) {
|
|
584
|
+
return this._loggers.get(resource)?.info;
|
|
585
|
+
}
|
|
586
|
+
dispose() {
|
|
587
|
+
this._loggers.forEach(logger => logger.logger?.dispose());
|
|
588
|
+
this._loggers.clear();
|
|
589
|
+
super.dispose();
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
export class NullLogger {
|
|
593
|
+
onDidChangeLogLevel = new Emitter().event;
|
|
594
|
+
setLevel(level) { }
|
|
595
|
+
getLevel() { return LogLevel.Info; }
|
|
596
|
+
trace(message, ...args) { }
|
|
597
|
+
debug(message, ...args) { }
|
|
598
|
+
info(message, ...args) { }
|
|
599
|
+
warn(message, ...args) { }
|
|
600
|
+
error(message, ...args) { }
|
|
601
|
+
critical(message, ...args) { }
|
|
602
|
+
dispose() { }
|
|
603
|
+
flush() { }
|
|
604
|
+
}
|
|
605
|
+
export class NullLogService extends NullLogger {
|
|
606
|
+
}
|
|
607
|
+
export class NullLoggerService extends AbstractLoggerService {
|
|
608
|
+
constructor() {
|
|
609
|
+
super(LogLevel.Off, URI.parse('log:///log'));
|
|
610
|
+
}
|
|
611
|
+
doCreateLogger(resource, logLevel, options) {
|
|
612
|
+
return new NullLogger();
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
export function getLogLevel(environmentService) {
|
|
616
|
+
if (environmentService.verbose) {
|
|
617
|
+
return LogLevel.Trace;
|
|
618
|
+
}
|
|
619
|
+
if (typeof environmentService.logLevel === 'string') {
|
|
620
|
+
const logLevel = parseLogLevel(environmentService.logLevel.toLowerCase());
|
|
621
|
+
if (logLevel !== undefined) {
|
|
622
|
+
return logLevel;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
return DEFAULT_LOG_LEVEL;
|
|
626
|
+
}
|
|
627
|
+
export function LogLevelToString(logLevel) {
|
|
628
|
+
switch (logLevel) {
|
|
629
|
+
case LogLevel.Trace: return 'trace';
|
|
630
|
+
case LogLevel.Debug: return 'debug';
|
|
631
|
+
case LogLevel.Info: return 'info';
|
|
632
|
+
case LogLevel.Warning: return 'warn';
|
|
633
|
+
case LogLevel.Error: return 'error';
|
|
634
|
+
case LogLevel.Off: return 'off';
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
export function LogLevelToLocalizedString(logLevel) {
|
|
638
|
+
switch (logLevel) {
|
|
639
|
+
case LogLevel.Trace: return { original: 'Trace', value: nls.localize('trace', "Trace") };
|
|
640
|
+
case LogLevel.Debug: return { original: 'Debug', value: nls.localize('debug', "Debug") };
|
|
641
|
+
case LogLevel.Info: return { original: 'Info', value: nls.localize('info', "Info") };
|
|
642
|
+
case LogLevel.Warning: return { original: 'Warning', value: nls.localize('warn', "Warning") };
|
|
643
|
+
case LogLevel.Error: return { original: 'Error', value: nls.localize('error', "Error") };
|
|
644
|
+
case LogLevel.Off: return { original: 'Off', value: nls.localize('off', "Off") };
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
export function parseLogLevel(logLevel) {
|
|
648
|
+
switch (logLevel) {
|
|
649
|
+
case 'trace':
|
|
650
|
+
return LogLevel.Trace;
|
|
651
|
+
case 'debug':
|
|
652
|
+
return LogLevel.Debug;
|
|
653
|
+
case 'info':
|
|
654
|
+
return LogLevel.Info;
|
|
655
|
+
case 'warn':
|
|
656
|
+
return LogLevel.Warning;
|
|
657
|
+
case 'error':
|
|
658
|
+
return LogLevel.Error;
|
|
659
|
+
case 'critical':
|
|
660
|
+
return LogLevel.Error;
|
|
661
|
+
case 'off':
|
|
662
|
+
return LogLevel.Off;
|
|
663
|
+
}
|
|
664
|
+
return undefined;
|
|
665
|
+
}
|
|
666
|
+
// Contexts
|
|
667
|
+
export const CONTEXT_LOG_LEVEL = new RawContextKey('logLevel', LogLevelToString(LogLevel.Info));
|
|
668
|
+
//# sourceMappingURL=log.js.map
|