analogger 1.17.2 → 1.18.2

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/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "analogger",
3
- "version": "1.17.2",
3
+ "version": "1.18.2",
4
4
  "description": "Js Logger",
5
5
  "main": "./src/ana-logger.cjs",
6
- "module": "./esm/ana-logger.mjs",
7
- "type": "module",
6
+ "module": "./esm/src/ana-logger.mjs",
7
+ "type": "commonjs",
8
8
  "imports": {
9
9
  "flatted": "./node_modules/flatted/esm/index.js",
10
10
  "to-ansi": "./node_modules/to-ansi/index.mjs"
@@ -12,45 +12,43 @@
12
12
  "exports": {
13
13
  ".": {
14
14
  "require": "./src/ana-logger.cjs",
15
- "import": "./esm/ana-logger.mjs"
15
+ "import": "./esm/src/ana-logger.mjs"
16
16
  }
17
17
  },
18
18
  "browser": "./dist/analogger-browser.min.mjs",
19
19
  "scripts": {
20
20
  "lint": "eslint.cmd \"src/**/*.{cjs,js}\"",
21
21
  "test": "npm run build:demo && nyc --reporter=lcov --reporter=text-summary mocha --exit --sort",
22
- "manual:check": "genserve.cmd start --port 9877 --dir ./ --open example/index.html",
23
- "demo:terminal:cjs": "node example/more/demo.cjs",
22
+ "manual:check": "genserve.cmd start --port 9877 --dir ./ --open models/example-1/index.html",
23
+ "demo:terminal:cjs": "node models/jscode/demo.cjs",
24
24
  "*** Pre-Cleaning-1 ****": "# ----------------------------------------------------------------------------------------------------------",
25
25
  "*** Pre-Cleaning-2 ****": "# Clean directory",
26
26
  "*** Pre-Cleaning-3 ****": "# ----------------------------------------------------------------------------------------------------------",
27
- "clean:all": "rimraf ./generated && rimraf ./dist",
28
- "clean:terminal": "rimraf ./esm/",
29
- "clean:browser": "rimraf ./generated/browser",
30
- "clean:browser:importmaps": "rimraf ./generated/browser-import-maps && rimraf ./example-2/index-with-import-maps.html && clonefile example-2/index-maps.html example-2/index-with-import-maps.html",
31
- "clean:browser:minified": "rimraf ./generated/browser-minified",
32
- "clean:browser3": "rimraf ./generated/browser-minified-js",
27
+ "clean:browser:importmaps": "rimraf ./demo/browser-import-maps",
33
28
  "clean:demo": "rimraf ./generated/demo/",
29
+ "*** On the Theme-1 ****": "# ----------------------------------------------------------------------------------------------------------",
30
+ "*** On the Theme-2 ****": "# CSS",
31
+ "*** On the Theme-3 ****": "# ----------------------------------------------------------------------------------------------------------",
32
+ "copy:css": "clonefile --force src/ana-logger.css dist/analogger.min.css",
34
33
  "*** On the Terminal-1 ****": "# ----------------------------------------------------------------------------------------------------------",
35
- "*** On the Terminal-2 ****": "# Generate library code",
34
+ "*** On the Terminal-2 ****": "# Generate library code in esm/ (esm version), browser (browser version) and dist (browser minified version)",
36
35
  "*** On the Terminal-3 ****": "# ----------------------------------------------------------------------------------------------------------",
37
- "build:esm:terminal": " npm run clean:terminal && to-esm.cmd src/ana-logger.cjs --output esm/ --config .toesm.cjs --target esm --update-all",
38
- "build:esm:browser": " npm run clean:browser && to-esm src/ana-logger.cjs --output generated/browser/ --config .toesm.cjs --target package",
39
- "build:esm:browser:importmaps": " npm run clean:browser:importmaps && to-esm src/ana-logger.cjs --output generated/browser-importmaps/ --config .toesm.cjs --target browser --useImportMaps",
40
- "build:esm:browser:minified": " npm run clean:browser:minified && to-esm src/ana-logger.cjs --output generated/browser-minified/ --config .toesm.cjs --target browser --bundle-browser ./dist/analogger-browser.min.mjs --update-all",
41
- "build:esm": "npm run clean:all && npm run build:esm:terminal && npm run build:esm:browser && npm run build:esm:browser:importmaps && npm run build:esm:browser:minified && clonefile src/ana-logger.css dist/analogger.min.css && npm pack",
36
+ "build:esm:terminal": " rimraf ./esm/ && to-esm src/ana-logger.cjs --output esm/ --config .toesm.cjs --target esm --update-all",
37
+ "build:esm:browser": " rimraf ./browser && to-esm src/ana-logger.cjs --output browser/ --config .toesm.cjs --target browser --update-all",
38
+ "build:esm:browser:minified": " rimraf ./dist/analogger-browser.min.mjs && to-esm src/ana-logger.cjs --bundle dist/analogger-browser.min.mjs --config .toesm.cjs --target browser --update-all --bundle-browser ./dist/analogger-browser.min.mjs ",
39
+ "build:esm": "npm run build:esm:terminal && npm run build:esm:browser && npm run build:esm:browser:minified && npm run copy:css",
42
40
  "*** In the Browser-1 ****": "# ----------------------------------------------------------------------------------------------------------",
43
- "*** In the Browser-2 ****": "# Generate Demo code",
41
+ "*** In the Browser-2 ****": "# Generate Demo code - They don't need to have the AnaLogger library built to work!!!",
44
42
  "*** In the Browser-3 ****": "# ----------------------------------------------------------------------------------------------------------",
45
- "build:demo:terminal": " to-esm.cmd example/more/demo.cjs --output=generated/demo/terminal/ --config .toesm.cjs --target=esm",
46
- "build:demo:browser": " to-esm.cmd example/more/demo.cjs --output generated/demo/browser/ --config .toesm.cjs --target browser",
47
- "build:demo:browser:importmaps": " to-esm.cmd example/more/demo.cjs --output generated/demo/browser-import-maps/ --config .toesm.cjs --target browser --html=example-2/index-with-import-maps.html --useImportMaps",
48
- "build:demo:minified": " to-esm.cmd example/more/demo.cjs --output generated/demo/browser-minified/ --config .toesm.cjs --target browser --bundle ./dist/analogger-browser-demo.min.mjs",
43
+ "build:demo:terminal": " to-esm.cmd models/jscode/demo.cjs --output demo/terminal/ --config .toesm.cjs --target=esm",
44
+ "build:demo:browser": " rimraf ./demo/browser-minified && clonefile --force models/example-1/index.html demo/browser/ && to-esm.cmd models/jscode/demo.cjs --output demo/browser/ --config .toesm.cjs --target browser",
45
+ "build:demo:browser:importmaps": " rimraf ./demo/browser-import-maps/ && clonefile --force models/example-2/index-maps.html demo/browser-import-maps/ && to-esm.cmd models/jscode/demo.cjs --output demo/browser-import-maps/ --config .toesm.cjs --target browser --html demo/browser-import-maps/*.html --useImportMaps ",
46
+ "build:demo:minified": " rimraf ./demo/browser-minified && clonefile --force models/example-3/index-bundle.html demo/browser-minified/ && to-esm.cmd models/jscode/demo.cjs --config .toesm.cjs --target browser --bundle ./demo/browser-minified/analogger-browser-demo.min.mjs",
49
47
  "*** In the Browser with importmap-1 ****": "# ----------------------------------------------------------------------------------------------------------",
50
- "*** In the Browser with importmap-2 ****": "# Generate demo code with import map",
48
+ "*** In the Browser with importmap-2 ****": "# Generate models code with import map",
51
49
  "*** In the Browser with importmap-3 ****": "# ----------------------------------------------------------------------------------------------------------",
52
- "build:demo": "npm run build:esm --recursive && npm run build:demo:terminal && npm run build:demo:browser && npm run build:demo:browser:importmaps && npm run build:demo:minified",
53
- "quick:run": "node example/more/demo.cjs"
50
+ "build:demo": "npm run build:demo:terminal && npm run build:demo:browser && npm run build:demo:browser:importmaps && npm run build:demo:minified",
51
+ "quick:run": "node models/jscode/demo.cjs"
54
52
  },
55
53
  "author": "Patrice Thimothee",
56
54
  "license": "MIT",
@@ -79,9 +77,10 @@
79
77
  "chai-spies": "^1.0.0",
80
78
  "chromedriver": "^2.33.0",
81
79
  "chromium": "^3.0.3",
82
- "clonefile": "^1.0.1",
80
+ "clonefile": "^1.1.3",
83
81
  "eslint": "^8.8.0",
84
- "genserve": "^1.18.1",
82
+ "genserve": "^2.9.0",
83
+ "glob": "^8.0.3",
85
84
  "jsdom": "19.0.0",
86
85
  "jsdom-global": "3.0.2",
87
86
  "mocha": "^9.2.0",
@@ -90,9 +89,10 @@
90
89
  "selenium-webdriver": "^4.1.1",
91
90
  "semantic-release": "^19.0.2",
92
91
  "sinon": "^13.0.1",
93
- "to-esm": "^2.13.1"
92
+ "to-esm": "^2.19.0"
94
93
  },
95
94
  "dependencies": {
95
+ "@thimpat/libutils": "^1.5.0",
96
96
  "flatted": "^3.2.5",
97
97
  "to-ansi": "^1.4.3",
98
98
  "window-size": "^1.1.1"
@@ -119,6 +119,9 @@ class ____AnaLogger
119
119
  {
120
120
  system = "";
121
121
 
122
+ instanceId = "";
123
+ instanceName = "";
124
+
122
125
  logIndex = 0;
123
126
  logCounter = 0;
124
127
  contexts = [];
@@ -156,14 +159,21 @@ class ____AnaLogger
156
159
  NODE : "NODE",
157
160
  OTHER : "OTHER"
158
161
  };
162
+
163
+ static instanceCount = 0;
164
+
159
165
  originalFormatFunction;
160
166
 
161
- constructor()
167
+ constructor({name = "default"} = {})
162
168
  {
163
169
  this.system = (typeof process === "object") ? SYSTEM.NODE : SYSTEM.BROWSER;
164
170
  this.format = this.onBuildLog.bind(this);
165
171
  this.originalFormatFunction = this.format;
166
172
 
173
+ this.instanceName = name;
174
+ ++____AnaLogger.instanceCount;
175
+ this.instanceId = ____AnaLogger.instanceCount + "-" + Date.now();
176
+
167
177
  this.errorTargetHandler = this.onError.bind(this);
168
178
  this.errorUserTargetHandler = this.onErrorForUserTarget.bind(this);
169
179
 
@@ -175,10 +185,15 @@ class ____AnaLogger
175
185
  this.rawError = this.#realConsoleError;
176
186
 
177
187
  console.rawLog = this.#realConsoleLog;
188
+ console.raw = this.#realConsoleLog;
189
+
178
190
  console.rawInfo = this.#realConsoleInfo;
179
191
  console.rawWarn = this.#realConsoleWarn;
180
192
  console.rawError = this.#realConsoleError;
181
193
 
194
+ console.keepLogHistory = this.keepLogHistory;
195
+ console.getLogHistory = this.getLogHistory;
196
+
182
197
  console.table = this.table;
183
198
  console.buildTable = this.buildTable;
184
199
  console.isNode = this.isNode;
@@ -192,6 +207,18 @@ class ____AnaLogger
192
207
 
193
208
  this.ALIGN = ____AnaLogger.ALIGN;
194
209
  this.ENVIRONMENT_TYPE = ____AnaLogger.ENVIRONMENT_TYPE;
210
+
211
+ this.resetLogHistory();
212
+ }
213
+
214
+ getName()
215
+ {
216
+ return this.instanceName;
217
+ }
218
+
219
+ getId()
220
+ {
221
+ return this.instanceId;
195
222
  }
196
223
 
197
224
  keepLogHistory()
@@ -211,7 +238,13 @@ class ____AnaLogger
211
238
 
212
239
  getLogHistory(join = true, symbol = EOL)
213
240
  {
214
- const history = JSON.parse(JSON.stringify(this.logHistory.slice(0)));
241
+ const historyLog = this.logHistory;
242
+ if (!historyLog)
243
+ {
244
+ return "";
245
+ }
246
+ const logs = this.logHistory.slice(0);
247
+ const history = JSON.parse(JSON.stringify(logs));
215
248
  if (!join)
216
249
  {
217
250
  return history;
@@ -254,8 +287,6 @@ class ____AnaLogger
254
287
  this.options.logToDom = undefined;
255
288
  this.options.logToFile = undefined;
256
289
  this.options.logToDomlogToFile = undefined;
257
- this.options.silent = false;
258
-
259
290
  }
260
291
 
261
292
  resetOptions()
@@ -295,9 +326,20 @@ class ____AnaLogger
295
326
  this.options.hideHookMessage = !!hideHookMessage;
296
327
  }
297
328
 
298
- if (hideLog !== undefined)
329
+ // TODO: Make one of silent or hideToLog options obsolete
330
+ let solveSilent = undefined;
331
+ if (silent !== undefined)
332
+ {
333
+ solveSilent = !!silent;
334
+ }
335
+ else if (hideLog !== undefined)
336
+ {
337
+ solveSilent = !!hideLog;
338
+ }
339
+
340
+ if (solveSilent)
299
341
  {
300
- this.options.hideLog = !!hideLog;
342
+ this.options.hideLog = !!solveSilent;
301
343
  }
302
344
 
303
345
  if (hideError !== undefined)
@@ -337,12 +379,6 @@ class ____AnaLogger
337
379
  **/
338
380
  }
339
381
 
340
- if (silent !== undefined)
341
- {
342
- this.options.silent = !!silent;
343
- this.options.hideLog = this.options.silent;
344
- }
345
-
346
382
  }
347
383
 
348
384
  getOptions()
@@ -593,13 +629,71 @@ class ____AnaLogger
593
629
  this.log(...args);
594
630
  }
595
631
 
632
+ assistStask(error)
633
+ {
634
+ try
635
+ {
636
+ const lines = error.stack.split("\n");
637
+ const stack = [];
638
+
639
+ for (let i = 0; i < lines.length; ++i)
640
+ {
641
+ const line = lines[i];
642
+ stack.push(line);
643
+ }
644
+
645
+ return stack;
646
+ }
647
+ catch (e)
648
+ {
649
+ console.rawError(e.message);
650
+ }
651
+
652
+ return error.message;
653
+ }
654
+
596
655
  /**
597
656
  * Forward input to real console log
598
657
  * @param args
599
658
  */
600
659
  onDisplayError(...args)
601
660
  {
602
- this.error(...args);
661
+ try
662
+ {
663
+ let mainIndex = -1
664
+ let extracted = null;
665
+ for (let i = 0; i < args.length; ++i)
666
+ {
667
+ const arg = args[i];
668
+ if (arg instanceof Error)
669
+ {
670
+ if (arg.stack)
671
+ {
672
+ mainIndex = i;
673
+ extracted = this.assistStask(arg) || []
674
+ break;
675
+ }
676
+ }
677
+ }
678
+
679
+ if (!extracted)
680
+ {
681
+ this.error(...args);
682
+ return
683
+ }
684
+
685
+ for (let i = 0; i < extracted.length; ++i)
686
+ {
687
+ args[mainIndex] = extracted[i];
688
+ this.error(...args);
689
+ }
690
+
691
+ }
692
+ catch (e)
693
+ {
694
+ console.rawError(e);
695
+ }
696
+
603
697
  }
604
698
 
605
699
  /**
@@ -1060,12 +1154,14 @@ class ____AnaLogger
1060
1154
  catch (e)
1061
1155
  {
1062
1156
  /* istanbul ignore next */
1063
- console.error("AnaLogger:", e.message);
1157
+ console.rawError("AnaLogger:", e.message);
1064
1158
  }
1065
1159
  }
1066
1160
 
1067
1161
  /**
1068
- * Check that a parameter (should be the first) uses the expected format.
1162
+ * Check that a parameter uses the expected AnaLogger format.
1163
+ * For this, the first parameter should be an object that contains at least
1164
+ * a logging id (lid), a target, a contextName, etc
1069
1165
  * @param options
1070
1166
  * @returns {boolean}
1071
1167
  */
@@ -1314,7 +1410,7 @@ class ____AnaLogger
1314
1410
  {
1315
1411
  try
1316
1412
  {
1317
- const silent = false, lidLenMax = 4;
1413
+ const lidLenMax = 4;
1318
1414
 
1319
1415
  const LOG_CONTEXTS = {
1320
1416
  STANDARD: null,
@@ -1341,7 +1437,7 @@ class ____AnaLogger
1341
1437
 
1342
1438
  activeTarget && this.setActiveTarget(activeTarget);
1343
1439
 
1344
- this.setOptions({silent, hideError: false, hideHookMessage: true, lidLenMax});
1440
+ this.setOptions({silent: false, hideError: false, hideHookMessage: true, lidLenMax});
1345
1441
  if (override)
1346
1442
  {
1347
1443
  this.overrideConsole();