@iobroker/js-controller-common 4.0.21 → 4.1.0-alpha.0-20220819-74ceeddc

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.
@@ -1,85 +1,110 @@
1
- /* jshint -W097 */
2
- /* jshint strict: false */
3
- /* jslint node: true */
4
- /* jslint esversion: 6 */
5
- 'use strict';
6
-
7
- const winston = require('winston');
8
- const DailyRotateFile = require('winston-daily-rotate-file');
9
- const fs = require('fs');
10
- const path = require('path');
11
- const os = require('os');
12
- const tools = require('./tools');
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.logger = void 0;
30
+ const winston_1 = __importDefault(require("winston"));
31
+ const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
32
+ const fs_1 = __importDefault(require("fs"));
33
+ const path_1 = __importDefault(require("path"));
34
+ const os_1 = __importDefault(require("os"));
35
+ const tools = __importStar(require("./tools"));
36
+ const winston_transport_1 = __importDefault(require("winston-transport"));
37
+ const triple_beam_1 = require("triple-beam");
38
+ const deep_clone_1 = __importDefault(require("deep-clone"));
13
39
  const hostname = tools.getHostName();
14
- const Transport = require('winston-transport');
15
- const { LEVEL } = require('triple-beam');
16
- const deepClone = require('deep-clone');
17
-
18
40
  let SysLog;
19
41
  try {
42
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
43
  SysLog = require('winston-syslog').Syslog;
21
- } catch {
44
+ }
45
+ catch {
22
46
  //console.log('No syslog support');
23
47
  }
24
-
25
48
  let Seq;
26
49
  try {
50
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
27
51
  Seq = require('@datalust/winston-seq').SeqTransport;
28
- } catch {
52
+ }
53
+ catch {
29
54
  //console.log('No seq support');
30
55
  }
31
-
32
56
  // We must check if SysLog is defined before extending it
33
- const IoSysLog =
34
- SysLog &&
57
+ const IoSysLog = SysLog &&
35
58
  class extends SysLog {
36
59
  constructor(options) {
37
60
  super(options);
38
61
  }
39
-
40
62
  log(info, callback) {
63
+ var _a;
41
64
  // we need to map the ioBroker loglevels to the Syslog ones
42
65
  const ioInfo = info;
43
- if (ioInfo[LEVEL] === 'warn') {
44
- ioInfo[LEVEL] = 'warning';
66
+ if (ioInfo[triple_beam_1.LEVEL] === 'warn') {
67
+ ioInfo[triple_beam_1.LEVEL] = 'warning';
45
68
  }
46
- if (ioInfo[LEVEL] === 'info') {
47
- ioInfo[LEVEL] = 'notice';
69
+ if (ioInfo[triple_beam_1.LEVEL] === 'info') {
70
+ ioInfo[triple_beam_1.LEVEL] = 'notice';
48
71
  }
49
- if (ioInfo[LEVEL] === 'debug') {
50
- ioInfo[LEVEL] = 'info';
72
+ if (ioInfo[triple_beam_1.LEVEL] === 'debug') {
73
+ ioInfo[triple_beam_1.LEVEL] = 'info';
51
74
  }
52
- if (ioInfo[LEVEL] === 'silly') {
53
- ioInfo[LEVEL] = 'debug';
75
+ if (ioInfo[triple_beam_1.LEVEL] === 'silly') {
76
+ ioInfo[triple_beam_1.LEVEL] = 'debug';
54
77
  }
55
- super.log(ioInfo, callback);
78
+ // No clue why log could ever be undefined, but hey...
79
+ (_a = super.log) === null || _a === void 0 ? void 0 : _a.call(this, ioInfo, callback);
56
80
  }
57
81
  };
58
-
59
82
  // We want to enhance some data for Seq
60
- const IoSeq =
61
- Seq &&
83
+ const IoSeq = Seq &&
62
84
  class extends Seq {
63
85
  log(info, callback) {
64
- const ioInfo = deepClone(info);
86
+ const ioInfo = (0, deep_clone_1.default)(info);
65
87
  ioInfo.props = ioInfo.props || {};
66
-
67
88
  // map our log levels to Seq levels
68
89
  const level = (ioInfo.level || '').toLowerCase();
69
90
  if (level.includes('error')) {
70
91
  ioInfo.level = 'Error';
71
- } else if (level.includes('warn')) {
92
+ }
93
+ else if (level.includes('warn')) {
72
94
  ioInfo.level = 'Warning';
73
- } else if (level.includes('info')) {
95
+ }
96
+ else if (level.includes('info')) {
74
97
  ioInfo.level = 'Information';
75
- } else if (level.includes('debug')) {
98
+ }
99
+ else if (level.includes('debug')) {
76
100
  ioInfo.level = 'Debug';
77
- } else if (level.includes('silly')) {
101
+ }
102
+ else if (level.includes('silly')) {
78
103
  ioInfo.level = 'Verbose';
79
- } else {
104
+ }
105
+ else {
80
106
  ioInfo.level = 'Information';
81
107
  }
82
-
83
108
  // we add own properties
84
109
  ioInfo.props.Hostname = tools.getHostName();
85
110
  if (ioInfo.message) {
@@ -88,24 +113,23 @@ const IoSeq =
88
113
  if (msgParts) {
89
114
  ioInfo.props.Source = msgParts[1];
90
115
  ioInfo.props.Pid = msgParts[2];
91
- } else {
116
+ }
117
+ else {
92
118
  ioInfo.props.Source = 'js-controller';
93
119
  }
94
120
  }
95
121
  super.log(ioInfo, callback);
96
122
  }
97
123
  };
98
-
99
124
  // Class used to inform adapter about new log entry
100
- class NotifierTransport extends Transport {
125
+ class NotifierTransport extends winston_transport_1.default {
101
126
  constructor(opts) {
102
127
  super(opts);
103
128
  this.name = 'NT'; // NotifierTransport
104
129
  }
105
-
106
130
  log(info, callback) {
107
131
  const msg = {
108
- severity: info[LEVEL],
132
+ severity: info[triple_beam_1.LEVEL],
109
133
  ts: new Date(info.timestamp).getTime(),
110
134
  message: info.message
111
135
  };
@@ -113,93 +137,74 @@ class NotifierTransport extends Transport {
113
137
  callback();
114
138
  }
115
139
  }
116
-
117
- const logger = function (level, files, noStdout, prefix) {
118
- let userOptions = {};
140
+ function logger(level, files, noStdout, prefix) {
119
141
  const options = {
120
142
  transports: []
121
143
  };
122
-
123
144
  //var defaultMaxSize;// = 10 * 1024 * 1024;
124
-
125
145
  if (typeof files === 'string') {
126
146
  files = [files];
127
147
  }
128
-
129
- const formatter = info => `${timestamp(info.timestamp)} - ${info.level}: ${info.message}`;
130
-
148
+ const formatter = (info) => `${timestamp(info.timestamp)} - ${info.level}: ${info.message}`;
131
149
  files = files || [];
132
-
133
150
  // indicator which is used to determine the log dir for developing, where it should be inside the repository
134
151
  const isNpm = !__dirname
135
152
  .replace(/\\/g, '/')
136
153
  .toLowerCase()
137
- .includes(tools.appName.toLowerCase() + `.js-controller/packages/`);
138
-
139
- if (typeof level === 'object') {
140
- userOptions = deepClone(level);
141
-
154
+ .includes(`${tools.appName.toLowerCase()}.js-controller/packages/`);
155
+ if (tools.isObject(level)) {
156
+ const userOptions = (0, deep_clone_1.default)(level);
142
157
  level = userOptions.level;
143
- prefix = userOptions.prefix;
158
+ prefix = userOptions.prefix || '';
144
159
  noStdout = userOptions.noStdout;
145
-
146
160
  const winstonFormats = [];
147
- winstonFormats.push(winston.format.timestamp({ format: timestamp }));
161
+ /** @ts-expect-error formatter arg wrongly documented */
162
+ winstonFormats.push(winston_1.default.format.timestamp({ format: timestamp }));
148
163
  if (userOptions.json === undefined || userOptions.json) {
149
- winstonFormats.push(winston.format.json());
164
+ winstonFormats.push(winston_1.default.format.json());
150
165
  }
151
166
  if (prefix) {
152
- winstonFormats.push(winston.format.label({ label: prefix }));
167
+ winstonFormats.push(winston_1.default.format.label({ label: prefix }));
153
168
  }
154
169
  if (userOptions.colorize === undefined || userOptions.colorize) {
155
- winstonFormats.push(winston.format.colorize());
170
+ winstonFormats.push(winston_1.default.format.colorize());
156
171
  }
157
- options.format = winston.format.combine.apply(null, winstonFormats);
158
-
172
+ options.format = winston_1.default.format.combine.apply(null, winstonFormats);
159
173
  if (userOptions.prefix !== undefined) {
160
174
  delete userOptions.prefix;
161
175
  }
162
-
163
176
  if (userOptions.transport) {
164
177
  let fName = 0;
165
- const isWindows = os.platform().startsWith('win');
178
+ const isWindows = os_1.default.platform().startsWith('win');
166
179
  Object.keys(userOptions.transport).forEach(f => {
167
180
  const transport = userOptions.transport[f];
168
-
169
181
  transport._defaultConfigLoglevel = transport.level; // remember Loglevel if set
170
182
  transport.level = transport.level || level;
171
-
172
183
  if (transport.type === 'file' && transport.enabled !== false) {
173
184
  transport.filename = transport.filename || 'log/' + tools.appName;
174
-
175
185
  if (!transport.fileext && transport.filename.indexOf('.log') === -1) {
176
186
  transport.fileext = '.log';
177
187
  }
178
-
179
188
  if (!fName) {
180
189
  transport.systemLog = true;
181
190
  }
182
-
183
191
  transport.handleExceptions = false;
184
- transport.name = !fName ? tools.appName : 'dailyRotateFile' + fName;
192
+ transport.name = fName ? `dailyRotateFile${fName}` : tools.appName;
185
193
  fName++;
186
194
  transport.filename = transport.filename.replace(/\\/g, '/');
187
195
  if (transport.filename.match(/^\w:\/|^\//)) {
188
- transport.filename = path.normalize(transport.filename);
189
- } else {
190
- transport.filename = path.normalize(
191
- `${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}`
192
- );
196
+ transport.filename = path_1.default.normalize(transport.filename);
193
197
  }
194
- transport.auditFile = transport.filename + '-audit.json';
195
-
198
+ else {
199
+ transport.filename = path_1.default.normalize(`${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}`);
200
+ }
201
+ transport.auditFile = `${transport.filename}-audit.json`;
196
202
  transport.createSymlink =
197
203
  transport.createSymlink !== undefined ? transport.createSymlink : !isWindows;
198
204
  transport.symlinkName =
199
205
  transport.symlinkName !== undefined
200
206
  ? transport.symlinkName
201
- : path.basename(transport.filename + '.current.log');
202
-
207
+ : path_1.default.basename(`${transport.filename}.current.log`);
203
208
  transport.filename += '.%DATE%' + (transport.fileext || '');
204
209
  //transport.label = prefix || ''; //TODO format.label()
205
210
  // transport.json = (transport.json !== undefined) ? transport.json : false; // TODO format.json(), new Default!!
@@ -209,35 +214,35 @@ const logger = function (level, files, noStdout, prefix) {
209
214
  transport.localTime !== undefined
210
215
  ? transport.localTime
211
216
  : userOptions.localTime === undefined
212
- ? true
213
- : userOptions.localTime;
217
+ ? true
218
+ : userOptions.localTime;
214
219
  transport.datePattern = 'YYYY-MM-DD';
215
- transport.format = winston.format.combine(winston.format.printf(formatter));
220
+ transport.format = winston_1.default.format.combine(winston_1.default.format.printf(formatter));
216
221
  /*transport.logException = function (message, info, next, err) {
217
222
  console.error(message);
218
223
  };*/
219
224
  transport.zippedArchive = isWindows
220
225
  ? false
221
226
  : transport.zippedArchive !== undefined
222
- ? transport.zippedArchive
223
- : true;
224
-
227
+ ? transport.zippedArchive
228
+ : true;
225
229
  if (transport.maxFiles === null && userOptions.maxDays) {
226
230
  transport.maxFiles = userOptions.maxDays + 'd';
227
231
  }
228
-
229
232
  try {
230
- const _log = new DailyRotateFile(transport);
233
+ const _log = new winston_daily_rotate_file_1.default(transport);
231
234
  options.transports.push(_log);
232
- } catch (e) {
235
+ }
236
+ catch (e) {
233
237
  if (e.code === 'EACCES') {
234
238
  // modify error code to make it unique for handling
235
239
  e.code = 'EACCES_LOG';
236
240
  }
237
241
  throw e;
238
242
  }
239
- } else if (transport.type === 'syslog' && transport.enabled !== false) {
240
- if (!SysLog) {
243
+ }
244
+ else if (transport.type === 'syslog' && transport.enabled !== false) {
245
+ if (!IoSysLog) {
241
246
  console.error('Syslog configured, but not installed! Ignore');
242
247
  return;
243
248
  }
@@ -252,88 +257,93 @@ const logger = function (level, files, noStdout, prefix) {
252
257
  // app_name: The name of the application (Default: process.title).
253
258
  // eol: The end of line character to be added to the end of the message (Default: Message without modifications).
254
259
  // replace the used by syslog attribute "type" with own "sysLogType"
255
-
256
260
  // If no name defined, use hostname as name
257
261
  transport.localhost = transport.localhost || hostname;
258
- transport.format = winston.format.combine(winston.format.printf(formatter));
262
+ transport.format = winston_1.default.format.combine(winston_1.default.format.printf(formatter));
259
263
  if (transport.sysLogType) {
260
264
  transport.type = transport.sysLogType;
261
265
  delete transport.sysLogType;
262
- } else {
266
+ }
267
+ else {
263
268
  delete transport.type;
264
269
  }
265
270
  try {
266
271
  options.transports.push(new IoSysLog(transport));
267
- } catch (err) {
272
+ }
273
+ catch (err) {
268
274
  console.log(`Cannot activate Syslog: ${err.message}`);
269
275
  }
270
- } else if (transport.type === 'http' && transport.enabled !== false) {
276
+ }
277
+ else if (transport.type === 'http' && transport.enabled !== false) {
271
278
  // host: (Default: localhost) Remote host of the HTTP logging endpoint
272
279
  // port: (Default: 80 or 443) Remote port of the HTTP logging endpoint
273
280
  // path: (Default: /) Remote URI of the HTTP logging endpoint
274
281
  // auth: (Default: None) An object representing the username and password for HTTP Basic Auth
275
282
  // ssl: (Default: false) Value indicating if we should use HTTPS
276
-
277
283
  // If no name defined, use hostname as name
278
284
  transport.host = transport.host || 'localhost';
279
-
280
285
  try {
281
- options.transports.push(new winston.transports.Http(transport));
282
- } catch (err) {
286
+ options.transports.push(new winston_1.default.transports.Http(transport));
287
+ }
288
+ catch (err) {
283
289
  console.log(`Cannot activate HTTP: ${err.message}`);
284
290
  }
285
- } else if (transport.type === 'stream' && transport.enabled !== false) {
291
+ }
292
+ else if (transport.type === 'stream' && transport.enabled !== false) {
286
293
  // stream: any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written.
287
294
  // level: Level of messages that this transport should log (default: level set on parent logger).
288
295
  // silent: Boolean flag indicating whether to suppress output (default false).
289
296
  // eol: Line-ending character to use. (default: os.EOL).
290
-
291
297
  // If no name defined, use hostname as name
292
298
  transport.host = transport.host || 'localhost';
293
-
294
299
  try {
295
300
  if (typeof transport.stream === 'string') {
296
- transport.stream = fs.createWriteStream(transport.stream);
297
- transport.stream.on('error', err => {
298
- console.log(`Error in Stream: ${err}`);
301
+ transport.stream = fs_1.default.createWriteStream(transport.stream);
302
+ transport.stream.on('error', (err) => {
303
+ console.log(`Error in Stream: ${err.message}`);
299
304
  });
300
305
  }
301
-
302
- options.transports.push(new winston.transports.Stream(transport));
303
- } catch (err) {
304
- console.log(`Cannot activate Stream: ${err}`);
306
+ options.transports.push(new winston_1.default.transports.Stream(transport));
307
+ }
308
+ catch (err) {
309
+ console.log(`Cannot activate Stream: ${err.message}`);
310
+ }
311
+ }
312
+ else if (transport.type === 'seq' && transport.enabled !== false) {
313
+ if (!IoSeq) {
314
+ console.error('Seq configured, but not installed! Ignore');
315
+ return;
305
316
  }
306
- } else if (transport.type === 'seq' && transport.enabled !== false) {
307
317
  // serverUrl?: string;
308
318
  // apiKey?: string;
309
319
  // maxBatchingTime?: number;
310
320
  // eventSizeLimit?: number;
311
321
  // batchSizeLimit?: number;
312
-
313
322
  // Add only if serverUrl is configured at least
314
323
  if (transport.serverUrl) {
315
324
  try {
316
- transport.onError = e => {
317
- console.log(`SEQ error: ${e}`);
325
+ transport.onError = (e) => {
326
+ console.log(`SEQ error: ${e.message}`);
318
327
  };
319
328
  const seqLogger = new IoSeq(transport);
320
329
  options.transports.push(seqLogger);
321
- } catch (err) {
330
+ }
331
+ catch (err) {
322
332
  console.log(`Cannot activate SEQ: ${err.message}`);
323
333
  }
324
- } else {
334
+ }
335
+ else {
325
336
  console.log('Cannot activate SEQ: No serverUrl specified');
326
337
  }
327
338
  }
328
339
  });
329
340
  }
330
- } else {
341
+ }
342
+ else {
331
343
  for (let i = 0; i < files.length; i++) {
332
344
  const opt = {
333
345
  name: i ? 'dailyRotateFile' + i : tools.appName,
334
- filename: path.normalize(
335
- isNpm ? `${__dirname}/../../../log/${files[i]}` : `${__dirname}/../log/${files[i]}`
336
- ),
346
+ filename: path_1.default.normalize(isNpm ? `${__dirname}/../../../log/${files[i]}` : `${__dirname}/../log/${files[i]}`),
337
347
  extension: '.log',
338
348
  datePattern: 'YYYY-MM-DD',
339
349
  //json: false, // If true, messages will be logged as JSON (default true). TODO format.json()
@@ -346,80 +356,82 @@ const logger = function (level, files, noStdout, prefix) {
346
356
  handleExceptions: false
347
357
  //maxSize: defaultMaxSize
348
358
  };
349
-
350
- options.transports.push(new DailyRotateFile(opt));
359
+ options.transports.push(new winston_daily_rotate_file_1.default(opt));
351
360
  }
352
361
  }
353
-
354
362
  if (!noStdout) {
355
- options.transports.push(
356
- new winston.transports.Console({
357
- level,
358
- silent: false,
359
- format: winston.format.combine(winston.format.printf(formatter))
360
- //colorize: (userOptions.colorize === undefined) ? true : userOptions.colorize, // TODO format.colorize()
361
- //timestamp: timestamp, // TODO: format.timestamp()
362
- //label: prefix || '' // TODO format.label()
363
- })
364
- );
363
+ options.transports.push(new winston_1.default.transports.Console({
364
+ level,
365
+ silent: false,
366
+ format: winston_1.default.format.combine(winston_1.default.format.printf(formatter))
367
+ //colorize: (userOptions.colorize === undefined) ? true : userOptions.colorize, // TODO format.colorize()
368
+ //timestamp: timestamp, // TODO: format.timestamp()
369
+ //label: prefix || '' // TODO format.label()
370
+ }));
365
371
  }
366
-
367
372
  // Must be registered, for adapter.js notification about new logs
368
- options.transports.push(
369
- new NotifierTransport({
370
- level,
371
- silent: false
372
- })
373
- );
374
-
375
- const log = winston.createLogger(options);
376
-
373
+ options.transports.push(new NotifierTransport({
374
+ level,
375
+ silent: false
376
+ }));
377
+ const log = winston_1.default.createLogger(options);
378
+ /** @ts-expect-error why do we override/add method to foreign instance? TODO */
377
379
  log.getFileName = function () {
380
+ /** @ts-expect-error we use undocumented stuff here TODO */
378
381
  let transport = this.transports.find(t => (t.transport && t.transport.dirname) || t.dirname);
379
382
  if (transport) {
383
+ /** @ts-expect-error we use undocumented stuff here TODO */
380
384
  transport = transport.transport ? transport.transport : transport;
385
+ /** @ts-expect-error we use undocumented stuff here TODO */
381
386
  return transport.dirname + '/' + transport.filename.replace('%DATE%', getDate());
382
- } else {
387
+ }
388
+ else {
383
389
  return '';
384
390
  }
385
391
  };
386
-
387
392
  log.on('error', error => {
388
393
  console.log('Logger error: ' + error);
389
394
  });
390
-
391
395
  // This cannot be deleted, because file rotate works with the size of files and not with the time
392
396
  // TODO research and open new issue in winston-daily-rotate-file repo
397
+ /** @ts-expect-error why do we override/add method to foreign instance? TODO */
393
398
  log.activateDateChecker = function (isEnabled, daysCount) {
399
+ /** @ts-expect-error we use undocumented stuff here TODO */
394
400
  if (!isEnabled && this._fileChecker) {
401
+ /** @ts-expect-error we use undocumented stuff here TODO */
395
402
  clearInterval(this._fileChecker);
396
- } else if (isEnabled && !this._fileChecker) {
403
+ /** @ts-expect-error we use undocumented stuff here TODO */
404
+ }
405
+ else if (isEnabled && !this._fileChecker) {
397
406
  if (!daysCount) {
398
407
  daysCount = 3;
399
408
  }
400
-
401
409
  // Check every hour
410
+ /** @ts-expect-error we use undocumented stuff here TODO */
402
411
  this._fileChecker = setInterval(() => {
403
412
  this.transports.forEach(transport => {
404
413
  if (
405
- transport.name !== 'dailyRotateFile' ||
414
+ /** @ts-expect-error we use undocumented stuff here TODO */
415
+ transport.name !== 'dailyRotateFile' ||
416
+ /** @ts-expect-error we use undocumented stuff here TODO */
406
417
  !transport.options ||
407
- transport.options.name !== tools.appName
408
- ) {
418
+ /** @ts-expect-error we use undocumented stuff here TODO */
419
+ transport.options.name !== tools.appName) {
409
420
  return;
410
421
  }
411
-
412
- if (transport && fs.existsSync(transport.dirname)) {
422
+ /** @ts-expect-error we use undocumented stuff here TODO */
423
+ if (transport && fs_1.default.existsSync(transport.dirname)) {
413
424
  let files;
414
425
  try {
415
- files = fs.readdirSync(transport.dirname);
416
- } catch (err) {
426
+ /** @ts-expect-error we use undocumented stuff here TODO */
427
+ files = fs_1.default.readdirSync(transport.dirname);
428
+ }
429
+ catch (err) {
417
430
  console.log(`host.${hostname} Cannot read log directory: ${err}`);
418
431
  return;
419
432
  }
420
433
  const forXdays = new Date();
421
434
  forXdays.setDate(forXdays.getDate() - daysCount - 1); // normally winston now takes care, for old or on errors make sure fallback works a day later
422
-
423
435
  for (let i = 0; i < files.length; i++) {
424
436
  const match = files[i].match(/.+\.(\d+-\d+-\d+)/);
425
437
  if (match) {
@@ -432,20 +444,20 @@ const logger = function (level, files, noStdout, prefix) {
432
444
  message: `host.${hostname} Delete log file ${files[i]}`
433
445
  });
434
446
  console.log(`host.${hostname} Delete log file ${files[i]}`);
435
- fs.unlinkSync(transport.dirname + '/' + files[i]);
436
- } catch (e) {
447
+ /** @ts-expect-error we use undocumented stuff here TODO */
448
+ fs_1.default.unlinkSync(transport.dirname + '/' + files[i]);
449
+ }
450
+ catch (e) {
437
451
  // there is a bug under windows, that file stays opened and cannot be deleted
438
452
  this.log({
439
- level: os.platform().startsWith('win') ? 'info' : 'error',
440
- message: `host.${hostname} Cannot delete file "${path.normalize(
441
- transport.dirname + '/' + files[i]
442
- )}": ${e}`
453
+ level: os_1.default.platform().startsWith('win') ? 'info' : 'error',
454
+ message: `host.${hostname} Cannot delete file "${path_1.default.normalize(
455
+ /** @ts-expect-error we use undocumented stuff here TODO */
456
+ transport.dirname + '/' + files[i])}": ${e}`
443
457
  });
444
- console.log(
445
- `host.${hostname} Cannot delete file "${path.normalize(
446
- transport.dirname + '/' + files[i]
447
- )}": ${e}`
448
- );
458
+ console.log(`host.${hostname} Cannot delete file "${path_1.default.normalize(
459
+ /** @ts-expect-error we use undocumented stuff here TODO */
460
+ transport.dirname + '/' + files[i])}": ${e.message}`);
449
461
  }
450
462
  }
451
463
  }
@@ -455,23 +467,19 @@ const logger = function (level, files, noStdout, prefix) {
455
467
  }, 3600000); // every hour
456
468
  }
457
469
  };
458
-
459
470
  //winston.unhandleExceptions();
460
471
  //log.unexceptions.handle();
461
-
462
472
  return log;
463
- };
464
-
473
+ }
474
+ exports.logger = logger;
465
475
  function getDate() {
466
476
  const ts = new Date();
467
477
  let result = ts.getFullYear() + '-';
468
- /** @type {number | string} */
469
478
  let value = ts.getMonth() + 1;
470
479
  if (value < 10) {
471
480
  value = '0' + value;
472
481
  }
473
482
  result += value + '-';
474
-
475
483
  value = ts.getDate();
476
484
  if (value < 10) {
477
485
  value = '0' + value;
@@ -479,52 +487,42 @@ function getDate() {
479
487
  result += value;
480
488
  return result;
481
489
  }
482
-
483
490
  function timestamp(date) {
484
491
  const ts = date ? new Date(date) : new Date();
485
492
  let result = ts.getFullYear() + '-';
486
-
487
- /** @type {number | string} */
488
493
  let value = ts.getMonth() + 1;
489
494
  if (value < 10) {
490
495
  value = '0' + value;
491
496
  }
492
497
  result += value + '-';
493
-
494
498
  value = ts.getDate();
495
499
  if (value < 10) {
496
500
  value = '0' + value;
497
501
  }
498
502
  result += value + ' ';
499
-
500
503
  value = ts.getHours();
501
504
  if (value < 10) {
502
505
  value = '0' + value;
503
506
  }
504
507
  result += value + ':';
505
-
506
508
  value = ts.getMinutes();
507
509
  if (value < 10) {
508
510
  value = '0' + value;
509
511
  }
510
512
  result += value + ':';
511
-
512
513
  value = ts.getSeconds();
513
514
  if (value < 10) {
514
515
  value = '0' + value;
515
516
  }
516
517
  result += value + '.';
517
-
518
518
  value = ts.getMilliseconds();
519
519
  if (value < 10) {
520
520
  value = '00' + value;
521
- } else if (value < 100) {
521
+ }
522
+ else if (value < 100) {
522
523
  value = '0' + value;
523
524
  }
524
-
525
525
  result += value + ' ';
526
-
527
526
  return result;
528
527
  }
529
-
530
- module.exports = logger;
528
+ //# sourceMappingURL=logger.js.map