axe 11.0.5 → 11.2.0

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/README.md CHANGED
@@ -19,6 +19,7 @@
19
19
  * [Browser](#browser)
20
20
  * [Usage](#usage)
21
21
  * [Options](#options)
22
+ * [Suppress Console Output and Logger Invocation](#suppress-console-output-and-logger-invocation)
22
23
  * [Supported Platforms](#supported-platforms)
23
24
  * [Node](#node-1)
24
25
  * [Browser](#browser-1)
@@ -393,9 +394,10 @@ See [Browser](#browser-1) usage below for more information.
393
394
  | `meta.show` | Boolean | `true` | Attempts to parse a boolean value from `process.env.AXE_SHOW_META` – meaning you can pass a flag `AXE_SHOW_META=true node app.js` when needed for debugging), whether or not to output metadata to logger methods. If set to `false`, then fields will not be omitted nor picked; the entire meta object will be hidden from logger output. | |
394
395
  | `meta.remappedFields` | Object | `{}` | Attempts to parse an Object mapping from `process.env.AXE_REMAPPED_META_FIELDS` (`,` and `:` delimited, e.g. `REMAPPED_META_FIELDS=foo:bar,beep.boop:beepBoop` to remap `meta.foo` to `meta.bar` and `meta.beep.boop` to `meta.beepBoop`). Note that this will clean up empty objects by default unless you set the option `meta.cleanupRemapping` to `false`). Supports dot-notation. | |
395
396
  | `meta.omittedFields` | Array | `[]` | Attempts to parse an array value from `process.env.AXE_OMIT_META_FIELDS` (`,` delimited) - meaning you can pass a flag `AXE_OMIT_META_FIELDS=user,id node app.js`), determining which fields to omit in the metadata passed to logger methods. Supports dot-notation. | |
396
- | `meta.pickedFields` | Array | `[]` | Attempts to parse an array value from `process.env.AXE_PICK_META_FIELDS` (`,` delimited) - meaning you can pass a flag, e.g. `AXE_PICK_META_FIELDS=request.headers,response.headers node app.js` which would pick from `meta.request` and `meta.response` *only* `meta.request.headers` and `meta.response.headers`), **This takes precedence after fields are omitted, which means this acts as a whitelist.** Supports dot-notation. | |
397
+ | `meta.pickedFields` | Array | `[]` | Attempts to parse an array value from `process.env.AXE_PICK_META_FIELDS` (`,` delimited) - meaning you can pass a flag, e.g. `AXE_PICK_META_FIELDS=request.headers,response.headers node app.js` which would pick from `meta.request` and `meta.response` *only* `meta.request.headers` and `meta.response.headers`), **This takes precedence after fields are omitted, which means this acts as a whitelist.** Supports dot-notation. **As of v11.2.0 this now supports Symbols, but only top-level symbols via `Reflect.ownKeys` (not recursive yet).** | |
397
398
  | `meta.cleanupRemapping` | Boolean | `true` | Whether or not to cleanup empty objects after remapping operations are completed) | |
398
399
  | `meta.hideHTTP` | Boolean | `true` | Whether to suppress HTTP metadata (prevents logger invocation with second arg `meta`) if `meta.is_http` is `true` (via [parse-request][] v5.1.0+). If you manually set `meta.is_http = true` and this is `true`, then `meta` arg will be suppressed as well. | |
400
+ | `meta.hideMeta` | String or Boolean | `"hide_meta"` | If this value is provided as a String, then if `meta[config.hideMeta]` is `true`, it will suppress the entire metadata object `meta` (the second arg) from being passed/invoked to the logger. This is useful when you want to suppress metadata from the logger invocation, but still persist it to post hooks (e.g. for sending upstream to your log storage provider). This helps to keep development and production console output clean while also allowing you to still store the meta object. | |
399
401
  | `silent` | Boolean | `false` | Whether or not to invoke logger methods. Pre and post hooks will still run even if this option is set to `false`. | |
400
402
  | `logger` | Object | `console` | Defaults to `console` with [console-polyfill][] added automatically, though **you can bring your own logger**. See [custom logger](#custom-logger) – you can pass an instance of `pino`, `signale`, `winston`, `bunyan`, etc. | |
401
403
  | `name` | String or Boolean | `false` if `NODE_ENV` is `"development"` otherwise the value of `process.env.HOSTNAME` or `os.hostname()` | The default name for the logger (defaults to `false` in development environments, which does not set `logger.name`) – this is useful if you are using a logger like `pino` which prefixes log output with the name set here. | |
@@ -403,6 +405,65 @@ See [Browser](#browser-1) usage below for more information.
403
405
  | `levels` | Array | `['info','warn','error','fatal']` | An Array of logging levels to support. You usually shouldn't change this unless you want to prevent logger methods from being invoked or prevent hooks from being run for a certain log level. If an invalid log level is attempted to be invoked, and if it is not in this Array, then no hooks and no logger methods will be invoked. | |
404
406
  | `appInfo` | Boolean | `true` | Attempts to parse a boolean value from `process.env.AXE_APP_INFO`) - whether or not to parse application information (using [parse-app-info][]). | |
405
407
 
408
+ ### Suppress Console Output and Logger Invocation
409
+
410
+ If you wish to suppress console output (e.g. prevent logger invocation) for a specific log – you can do so by setting a special property to have a `true` value in the meta object.
411
+
412
+ This special property is a Symbol via `Symbol.for('axe.silent')`. Using a Symbol will prevent logs from being suppressed inadvertently (e.g. if a meta object contained `is_silent: true` however you did not explicitly set `is_silent: true`, as it might have been the result of another package or Object parsed.
413
+
414
+ To do so, simply declare `const silentSymbol = Symbol.for('axe.silent')` and then use it as follows:
415
+
416
+ ```js
417
+ const Axe = require('axe');
418
+
419
+ const silentSymbol = Symbol.for('axe.silent');
420
+
421
+ const logger = new Axe();
422
+
423
+ logger.info('hello world'); // <--- outputs to console "hello world"
424
+ logger.info('hello world', { [silentSymbol]: true }); // <--- **does not output to console**
425
+ ```
426
+
427
+ Pre and post hooks will still run whether this is set to true or not – this is simply only for logger method invocation.
428
+
429
+ Another common use case for this is to suppress console output for HTTP asset requests that are successful.
430
+
431
+ Note that the example provided below assumes you are using [Cabin's middleware][cabin] which parses HTTP requests into the `meta` Object properly:
432
+
433
+ ```js
434
+ const Axe = require('axe');
435
+
436
+ const silentSymbol = Symbol.for('axe.silent');
437
+
438
+ const logger = new Axe();
439
+
440
+ const IGNORED_CONTENT_TYPES = [
441
+ 'application/javascript; charset=utf-8',
442
+ 'application/manifest+json',
443
+ 'font',
444
+ 'image',
445
+ 'text/css'
446
+ ];
447
+
448
+ //
449
+ // set the silent symbol in axe to true for successful asset responses
450
+ //
451
+ for (const level of logger.config.levels) {
452
+ logger.pre(level, function (err, message, meta) {
453
+ if (
454
+ meta?.is_http &&
455
+ meta?.response?.status_code < 400 &&
456
+ meta?.response?.headers?.['content-type'] &&
457
+ IGNORED_CONTENT_TYPES.some((c) =>
458
+ meta.response.headers['content-type'].startsWith(c)
459
+ )
460
+ )
461
+ meta[silentSymbol] = true;
462
+ return [err, message, meta];
463
+ });
464
+ }
465
+ ```
466
+
406
467
  ### Supported Platforms
407
468
 
408
469
  * Node: v14+
package/dist/axe.js CHANGED
@@ -315,6 +315,86 @@ module.exports = function isObject(val) {
315
315
  };
316
316
 
317
317
  },{}],12:[function(require,module,exports){
318
+ 'use strict';
319
+
320
+ var origSymbol = typeof Symbol !== 'undefined' && Symbol;
321
+ var hasSymbolSham = require('./shams');
322
+ module.exports = function hasNativeSymbols() {
323
+ if (typeof origSymbol !== 'function') {
324
+ return false;
325
+ }
326
+ if (typeof Symbol !== 'function') {
327
+ return false;
328
+ }
329
+ if (typeof origSymbol('foo') !== 'symbol') {
330
+ return false;
331
+ }
332
+ if (typeof Symbol('bar') !== 'symbol') {
333
+ return false;
334
+ }
335
+ return hasSymbolSham();
336
+ };
337
+
338
+ },{"./shams":13}],13:[function(require,module,exports){
339
+ 'use strict';
340
+
341
+ /* eslint complexity: [2, 18], max-statements: [2, 33] */
342
+ module.exports = function hasSymbols() {
343
+ if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') {
344
+ return false;
345
+ }
346
+ if (typeof Symbol.iterator === 'symbol') {
347
+ return true;
348
+ }
349
+ var obj = {};
350
+ var sym = Symbol('test');
351
+ var symObj = Object(sym);
352
+ if (typeof sym === 'string') {
353
+ return false;
354
+ }
355
+ if (Object.prototype.toString.call(sym) !== '[object Symbol]') {
356
+ return false;
357
+ }
358
+ if (Object.prototype.toString.call(symObj) !== '[object Symbol]') {
359
+ return false;
360
+ }
361
+
362
+ // temp disabled per https://github.com/ljharb/object.assign/issues/17
363
+ // if (sym instanceof Symbol) { return false; }
364
+ // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
365
+ // if (!(symObj instanceof Symbol)) { return false; }
366
+
367
+ // if (typeof Symbol.prototype.toString !== 'function') { return false; }
368
+ // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
369
+
370
+ var symVal = 42;
371
+ obj[sym] = symVal;
372
+ for (sym in obj) {
373
+ return false;
374
+ } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
375
+ if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) {
376
+ return false;
377
+ }
378
+ if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) {
379
+ return false;
380
+ }
381
+ var syms = Object.getOwnPropertySymbols(obj);
382
+ if (syms.length !== 1 || syms[0] !== sym) {
383
+ return false;
384
+ }
385
+ if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
386
+ return false;
387
+ }
388
+ if (typeof Object.getOwnPropertyDescriptor === 'function') {
389
+ var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
390
+ if (descriptor.value !== symVal || descriptor.enumerable !== true) {
391
+ return false;
392
+ }
393
+ }
394
+ return true;
395
+ };
396
+
397
+ },{}],14:[function(require,module,exports){
318
398
  /*!
319
399
  * has-value <https://github.com/jonschlinkert/has-value>
320
400
  *
@@ -336,7 +416,7 @@ function isObject(val) {
336
416
  return val != null && (typeof val === 'object' || typeof val === 'function' || Array.isArray(val));
337
417
  }
338
418
 
339
- },{"get-value":10,"has-values":13}],13:[function(require,module,exports){
419
+ },{"get-value":10,"has-values":15}],15:[function(require,module,exports){
340
420
  /*!
341
421
  * has-values <https://github.com/jonschlinkert/has-values>
342
422
  *
@@ -387,7 +467,7 @@ module.exports = function has(val) {
387
467
  }
388
468
  };
389
469
 
390
- },{"kind-of":17}],14:[function(require,module,exports){
470
+ },{"kind-of":20}],16:[function(require,module,exports){
391
471
  'use strict';
392
472
 
393
473
  module.exports = value => {
@@ -398,7 +478,41 @@ module.exports = value => {
398
478
  return prototype === null || prototype === Object.prototype;
399
479
  };
400
480
 
401
- },{}],15:[function(require,module,exports){
481
+ },{}],17:[function(require,module,exports){
482
+ 'use strict';
483
+
484
+ var toStr = Object.prototype.toString;
485
+ var hasSymbols = require('has-symbols')();
486
+ if (hasSymbols) {
487
+ var symToStr = Symbol.prototype.toString;
488
+ var symStringRegex = /^Symbol\(.*\)$/;
489
+ var isSymbolObject = function isRealSymbolObject(value) {
490
+ if (typeof value.valueOf() !== 'symbol') {
491
+ return false;
492
+ }
493
+ return symStringRegex.test(symToStr.call(value));
494
+ };
495
+ module.exports = function isSymbol(value) {
496
+ if (typeof value === 'symbol') {
497
+ return true;
498
+ }
499
+ if (toStr.call(value) !== '[object Symbol]') {
500
+ return false;
501
+ }
502
+ try {
503
+ return isSymbolObject(value);
504
+ } catch (e) {
505
+ return false;
506
+ }
507
+ };
508
+ } else {
509
+ module.exports = function isSymbol(value) {
510
+ // this environment does not support Symbols.
511
+ return false && value;
512
+ };
513
+ }
514
+
515
+ },{"has-symbols":12}],18:[function(require,module,exports){
402
516
  /**
403
517
  * Expose `isError`.
404
518
  */
@@ -425,7 +539,7 @@ function isError(value) {
425
539
  }
426
540
  }
427
541
 
428
- },{}],16:[function(require,module,exports){
542
+ },{}],19:[function(require,module,exports){
429
543
  'use strict';
430
544
 
431
545
  /*!
@@ -439,7 +553,7 @@ function isObject(val) {
439
553
  }
440
554
  module.exports = isObject;
441
555
 
442
- },{}],17:[function(require,module,exports){
556
+ },{}],20:[function(require,module,exports){
443
557
  var toString = Object.prototype.toString;
444
558
  module.exports = function kindOf(val) {
445
559
  if (val === void 0) return 'undefined';
@@ -570,7 +684,7 @@ function isBuffer(val) {
570
684
  return false;
571
685
  }
572
686
 
573
- },{}],18:[function(require,module,exports){
687
+ },{}],21:[function(require,module,exports){
574
688
  'use strict';
575
689
 
576
690
  const kErrors = Symbol('kErrors');
@@ -621,7 +735,7 @@ function expected(err) {
621
735
  return err.expected === true;
622
736
  }
623
737
 
624
- },{}],19:[function(require,module,exports){
738
+ },{}],22:[function(require,module,exports){
625
739
  'use strict';
626
740
 
627
741
  const isOptionObject = require('is-plain-obj');
@@ -779,7 +893,7 @@ module.exports = function () {
779
893
  return merged._;
780
894
  };
781
895
 
782
- },{"is-plain-obj":14}],20:[function(require,module,exports){
896
+ },{"is-plain-obj":16}],23:[function(require,module,exports){
783
897
  exports.endianness = function () {
784
898
  return 'LE';
785
899
  };
@@ -829,7 +943,7 @@ exports.homedir = function () {
829
943
  return '/';
830
944
  };
831
945
 
832
- },{}],21:[function(require,module,exports){
946
+ },{}],24:[function(require,module,exports){
833
947
  'use strict';
834
948
 
835
949
  const pMapSeries = async (iterable, mapper) => {
@@ -845,7 +959,7 @@ module.exports = pMapSeries;
845
959
  // TODO: Remove this for the next major release
846
960
  module.exports.default = pMapSeries;
847
961
 
848
- },{}],22:[function(require,module,exports){
962
+ },{}],25:[function(require,module,exports){
849
963
  "use strict";
850
964
 
851
965
  var isError = require('iserror'); // we want to support parsing other fields than the standard:
@@ -867,7 +981,7 @@ var parseErr = function parseErr(err) {
867
981
  };
868
982
  module.exports = parseErr;
869
983
 
870
- },{"iserror":15}],23:[function(require,module,exports){
984
+ },{"iserror":18}],26:[function(require,module,exports){
871
985
  'use strict';
872
986
 
873
987
  const get = require('@strikeentco/get');
@@ -902,7 +1016,7 @@ module.exports = function (obj, paths) {
902
1016
  return pick(obj, paths, length, sep);
903
1017
  };
904
1018
 
905
- },{"@strikeentco/get":2,"@strikeentco/set":3}],24:[function(require,module,exports){
1019
+ },{"@strikeentco/get":2,"@strikeentco/set":3}],27:[function(require,module,exports){
906
1020
  // shim for using process in browser
907
1021
  var process = module.exports = {};
908
1022
 
@@ -1079,7 +1193,7 @@ process.umask = function () {
1079
1193
  return 0;
1080
1194
  };
1081
1195
 
1082
- },{}],25:[function(require,module,exports){
1196
+ },{}],28:[function(require,module,exports){
1083
1197
  /*!
1084
1198
  * unset-value <https://github.com/jonschlinkert/unset-value>
1085
1199
  *
@@ -1124,11 +1238,11 @@ module.exports = function unset(obj, prop) {
1124
1238
  return true;
1125
1239
  };
1126
1240
 
1127
- },{"has-value":12,"isobject":16}],26:[function(require,module,exports){
1241
+ },{"has-value":14,"isobject":19}],29:[function(require,module,exports){
1128
1242
  module.exports={
1129
1243
  "name": "axe",
1130
1244
  "description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
1131
- "version": "11.0.5",
1245
+ "version": "11.2.0",
1132
1246
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
1133
1247
  "browser": {
1134
1248
  "parse-app-info": false
@@ -1149,6 +1263,7 @@ module.exports={
1149
1263
  "boolean": "3.2.0",
1150
1264
  "console-polyfill": "0.3.0",
1151
1265
  "format-specifiers": "^1.0.0",
1266
+ "is-symbol": "^1.0.4",
1152
1267
  "iserror": "0.0.2",
1153
1268
  "maybe-combine-errors": "1.0.0",
1154
1269
  "merge-options": "3.0.4",
@@ -1261,7 +1376,7 @@ module.exports={
1261
1376
  "unpkg": "dist/axe.min.js"
1262
1377
  }
1263
1378
 
1264
- },{}],27:[function(require,module,exports){
1379
+ },{}],30:[function(require,module,exports){
1265
1380
  (function (process){(function (){
1266
1381
  // eslint-disable-next-line import/no-unassigned-import
1267
1382
  require('console-polyfill');
@@ -1273,6 +1388,7 @@ const format = require('@ladjs/format-util');
1273
1388
  const formatSpecifiers = require('format-specifiers');
1274
1389
  const get = require('@strikeentco/get');
1275
1390
  const isError = require('iserror');
1391
+ const isSymbol = require('is-symbol');
1276
1392
  const mergeOptions = require('merge-options');
1277
1393
  const pMapSeries = require('p-map-series');
1278
1394
  const parseAppInfo = require('parse-app-info');
@@ -1284,6 +1400,7 @@ const {
1284
1400
  boolean
1285
1401
  } = require('boolean');
1286
1402
  const pkg = require('../package.json');
1403
+ const silentSymbol = Symbol.for('axe.silent');
1287
1404
  const omittedLoggerKeys = new Set(['config', 'log']);
1288
1405
  const levels = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
1289
1406
  const aliases = {
@@ -1299,14 +1416,14 @@ function isPlainObject(value) {
1299
1416
  return false;
1300
1417
  }
1301
1418
  const prototype = Object.getPrototypeOf(value);
1302
- return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
1419
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value) && !isSymbol(value);
1303
1420
  }
1304
1421
 
1305
1422
  // <https://github.com/GeenenTijd/dotify/blob/master/dotify.js>
1306
1423
  function dotifyToArray(obj) {
1307
1424
  const res = [];
1308
1425
  function recurse(obj, current) {
1309
- for (const key of Object.keys(obj)) {
1426
+ for (const key of Reflect.ownKeys(obj)) {
1310
1427
  const value = obj[key];
1311
1428
  const newKey = current ? current + '.' + key : key; // joined key with dot
1312
1429
  // if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
@@ -1323,7 +1440,7 @@ function dotifyToArray(obj) {
1323
1440
 
1324
1441
  // <https://stackoverflow.com/a/43233163>
1325
1442
  function isEmpty(value) {
1326
- return value === undefined || value === null || typeof value === 'object' && Object.keys(value).length === 0 || typeof value === 'string' && value.trim().length === 0;
1443
+ return value === undefined || value === null || typeof value === 'object' && Reflect.ownKeys(value).length === 0 || typeof value === 'string' && value.trim().length === 0;
1327
1444
  }
1328
1445
  function isNull(value) {
1329
1446
  return value === null;
@@ -1369,7 +1486,10 @@ class Axe {
1369
1486
  omittedFields,
1370
1487
  pickedFields,
1371
1488
  cleanupRemapping: true,
1372
- hideHTTP: true
1489
+ hideHTTP: 'is_http',
1490
+ // implemented mainly for @ladjs/graceful to
1491
+ // suppress unnecessary meta output to console
1492
+ hideMeta: 'hide_meta'
1373
1493
  }, typeof config.meta === 'object' ? config.meta : {}),
1374
1494
  version: pkg.version,
1375
1495
  silent: false,
@@ -1618,8 +1738,10 @@ class Axe {
1618
1738
  // (and not have two operations, one for omit, and one for pick)
1619
1739
  //
1620
1740
 
1741
+ // set a boolean flag if we had the silent symbol or not
1742
+ const hadTrueSilentSymbol = boolean(meta[silentSymbol]);
1621
1743
  if (!isEmpty(this.config.meta.remappedFields)) {
1622
- for (const key of Object.keys(this.config.meta.remappedFields)) {
1744
+ for (const key of Reflect.ownKeys(this.config.meta.remappedFields)) {
1623
1745
  set(meta, this.config.meta.remappedFields[key], get(meta, key));
1624
1746
  unset(meta, key);
1625
1747
  // cleanup empty objects after remapping
@@ -1650,10 +1772,11 @@ class Axe {
1650
1772
  // <https://stackoverflow.com/a/9882349>
1651
1773
  let i = dotified.length;
1652
1774
  while (i--) {
1653
- if (dotified[i] === prop || dotified[i].indexOf(`${prop}.`) === 0) dotified.splice(i, 1);
1775
+ if (dotified[i] === prop || !isSymbol(dotified[i]) && dotified[i].indexOf(`${prop}.`) === 0) dotified.splice(i, 1);
1654
1776
  }
1655
1777
  }
1656
1778
  }
1779
+ const pickedSymbols = [];
1657
1780
  if (!isEmpty(this.config.meta.pickedFields)) {
1658
1781
  for (const prop of this.config.meta.pickedFields) {
1659
1782
  // response.headers.boop
@@ -1663,12 +1786,16 @@ class Axe {
1663
1786
  // response
1664
1787
  //
1665
1788
  // so we need to split by the first period and omit any keys from dotified starting with it
1666
- const index = prop.indexOf('.');
1667
- const key = prop.slice(0, index + 1);
1668
- if (index !== -1) {
1669
- let i = dotified.length;
1670
- while (i--) {
1671
- if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
1789
+ if (isSymbol(prop)) {
1790
+ if (meta[prop]) pickedSymbols.push([prop, meta[prop]]);
1791
+ } else {
1792
+ const index = prop.indexOf('.');
1793
+ const key = prop.slice(0, index + 1);
1794
+ if (index !== -1) {
1795
+ let i = dotified.length;
1796
+ while (i--) {
1797
+ if (!isSymbol(dotified[i]) && dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
1798
+ }
1672
1799
  }
1673
1800
  }
1674
1801
 
@@ -1677,22 +1804,50 @@ class Axe {
1677
1804
  }
1678
1805
  }
1679
1806
 
1807
+ //
1808
+ // iterate over all dotified values to check for symbols
1809
+ //
1810
+ // NOTE: this does not take into account that they could already be in `pickedSymbols`
1811
+ // (and it doesn't also do bigints yet)
1812
+ //
1813
+ for (const prop of dotified) {
1814
+ if (isSymbol(prop) && meta[prop]) pickedSymbols.push([prop, meta[prop]]);
1815
+ }
1816
+
1817
+ //
1680
1818
  // now we call pick-deep using the final array
1819
+ //
1820
+ // NOTE: this does not pick symbols nor bigints
1821
+ //
1681
1822
  meta = pickDeep(meta, dotified);
1823
+
1824
+ //
1825
+ // if there were any top-level symbols to be
1826
+ // picked then we need to add them back here to the list
1827
+ //
1828
+ // NOTE: we'd probably want to do the same for bigints as symbols
1829
+ //
1830
+ if (pickedSymbols.length > 0) {
1831
+ for (const [key, value] of pickedSymbols) {
1832
+ meta[key] = value;
1833
+ }
1834
+ }
1682
1835
  }
1683
1836
 
1684
1837
  // only invoke logger methods if it was not silent
1685
- if (!this.config.silent) {
1838
+ if (!this.config.silent && !hadTrueSilentSymbol) {
1686
1839
  // Show stack trace if necessary (along with any metadata)
1687
1840
  if (isError(err) && this.config.showStack) {
1688
1841
  if (!this.config.meta.show || isEmpty(meta)) {
1689
1842
  this.config.logger[method](err);
1843
+ } else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta]) {
1844
+ this.config.logger[method](err);
1690
1845
  } else {
1691
1846
  this.config.logger[method](err, meta);
1692
1847
  }
1693
1848
  } else if (!this.config.meta.show || isEmpty(meta)) {
1694
1849
  this.config.logger[method](message);
1695
- } else if (meta.is_http && this.config.meta.hideHTTP) {
1850
+ } else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta] || this.config.meta.hideHTTP && meta[this.config.meta.hideHTTP]) {
1696
1851
  this.config.logger[method](message);
1697
1852
  } else {
1698
1853
  this.config.logger[method](message, meta);
@@ -1708,5 +1863,5 @@ class Axe {
1708
1863
  module.exports = Axe;
1709
1864
 
1710
1865
  }).call(this)}).call(this,require('_process'))
1711
- },{"../package.json":26,"@ladjs/format-util":1,"@strikeentco/get":2,"@strikeentco/set":3,"_process":24,"boolean":5,"console-polyfill":8,"format-specifiers":9,"iserror":15,"maybe-combine-errors":18,"merge-options":19,"os":20,"p-map-series":21,"parse-app-info":7,"parse-err":22,"pick-deep":23,"unset-value":25}]},{},[27])(27)
1866
+ },{"../package.json":29,"@ladjs/format-util":1,"@strikeentco/get":2,"@strikeentco/set":3,"_process":27,"boolean":5,"console-polyfill":8,"format-specifiers":9,"is-symbol":17,"iserror":18,"maybe-combine-errors":21,"merge-options":22,"os":23,"p-map-series":24,"parse-app-info":7,"parse-err":25,"pick-deep":26,"unset-value":28}]},{},[30])(30)
1712
1867
  });
package/dist/axe.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}};const t=Symbol("kErrors");class r extends Error{constructor(e){const r=new Set(e.map(s).filter(Boolean));super(Array.from(r).join("; ")),n(this,"name","CombinedError"),n(this,t,e),o(this,"stack",()=>e.map(c).join("\n\n")),o(this,"transient",()=>e.length>0&&e.every(a)),o(this,"expected",()=>e.length>0&&e.every(f))}[Symbol.iterator](){return this[t][Symbol.iterator]()}}function n(e,t,r){Object.defineProperty(e,t,{value:r})}function o(e,t,r){Object.defineProperty(e,t,{get:r})}function i(e){return null!=e}function s(e){return e.message}function c(e){return e.stack}function a(e){return!0===e.transient}function f(e){return!0===e.expected}var l=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},u=["%s","%d","%i","%f","%j","%o","%O","%%"],g=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},p=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},h=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:y}=Object.prototype,{propertyIsEnumerable:d}=Object,m=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),b=this,v={concatArrays:!1,ignoreUndefined:!1},A=e=>{const t=[];for(const r in e)y.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)d.call(e,n)&&t.push(n)}return t};function j(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return A(e).forEach(r=>{m(t,r,j(e[r]))}),t}(e):h(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return A(e).forEach(r=>{m(t,r,j(e[r]))}),t}(e):e}const O=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?m(e,r,w(e[r],t[r],n)):m(e,r,j(t[r])))}),e);function w(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)y.call(t,r)&&(i.push(String(r)),m(n,o++,t===e?t[r]:j(t[r])));n=O(n,t,A(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):h(t)&&h(e)?O(e,t,A(t),r):j(t)}var E={};const S=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(E=S).default=S;var _={},T=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!p(e))throw new Error("`err` must be an Error");if(!Array.isArray(t))throw new Error("`fields` must be an Array");var r={};return Object.getOwnPropertyNames(Object.getPrototypeOf(e)).concat(Object.getOwnPropertyNames(e)).forEach((function(t){"function"!=typeof e[t]&&(r[t]=e[t])})),!r.name&&e.constructor.name&&(r.name=e.constructor.name),Array.isArray(t)&&0!==t.length?r.filter((function(e){return t.includes(e)})):r};const k=e=>"object"==typeof e||"function"==typeof e,P=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var x=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!k(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(P(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];P(e,o)||(o=k(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},L=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function I(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function F(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function M(e){return L(e)||Array.isArray(e)||"function"==typeof e}var N=Object.prototype.toString;function C(e){return"function"==typeof e.constructor?e.constructor.name:null}var D=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===C(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(C(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=N.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},X=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&D(function(e,t,r){if(L(r)||(r={default:r}),!M(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return F(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=c.length,f=0;do{let t=c[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=I([t.slice(0,-1),c[++f]||""],s,r);if(t in e){if(!F(t,e,r))return r.default;e=e[t]}else{let n=!1,o=f+1;for(;o<a;)if(n=(t=I([t,c[o++]],s,r))in e){if(!F(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&M(e));return f===a?e:r.default}(e,t,r));var n};const B=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var H=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(X(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),B(t),e=e[t];return delete e[i]}return!0},U={};Object.defineProperty(U,"__esModule",{value:!0}),U.boolean=void 0,U.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var W={};Object.defineProperty(W,"__esModule",{value:!0}),W.isBooleanable=void 0,W.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var z={};Object.defineProperty(z,"__esModule",{value:!0}),z.boolean=void 0,Object.defineProperty(z,"boolean",{enumerable:!0,get:function(){return U.boolean}}),Object.defineProperty(z,"isBooleanable",{enumerable:!0,get:function(){return W.isBooleanable}});var R,K,V,G="11.0.5",J=R={};function $(){throw new Error("setTimeout has not been defined")}function q(){throw new Error("clearTimeout has not been defined")}function Q(e){if(K===setTimeout)return setTimeout(e,0);if((K===$||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:$}catch(e){K=$}try{V="function"==typeof clearTimeout?clearTimeout:q}catch(e){V=q}}();var Y,Z=[],ee=!1,te=-1;function re(){ee&&Y&&(ee=!1,Y.length?Z=Y.concat(Z):te=-1,Z.length&&ne())}function ne(){if(!ee){var e=Q(re);ee=!0;for(var t=Z.length;t;){for(Y=Z,Z=[];++te<t;)Y&&Y[te].run();te=-1,t=Z.length}Y=null,ee=!1,function(e){if(V===clearTimeout)return clearTimeout(e);if((V===q||!V)&&clearTimeout)return V=clearTimeout,clearTimeout(e);try{V(e)}catch(t){try{return V.call(null,e)}catch(t){return V.call(this,e)}}}(e)}}function oe(e,t){this.fun=e,this.array=t}function ie(){}J.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Z.push(new oe(e,t)),1!==Z.length||ee||Q(ne)},oe.prototype.run=function(){this.fun.apply(null,this.array)},J.title="browser",J.browser=!0,J.env={},J.argv=[],J.version="",J.versions={},J.on=ie,J.addListener=ie,J.once=ie,J.off=ie,J.removeListener=ie,J.removeAllListeners=ie,J.emit=ie,J.prependListener=ie,J.prependOnceListener=ie,J.listeners=function(e){return[]},J.binding=function(e){throw new Error("process.binding is not supported")},J.cwd=function(){return"/"},J.chdir=function(e){throw new Error("process.chdir is not supported")},J.umask=function(){return 0};var se={};return function(t){(function(){const{boolean:n}=z,o=new Set(["config","log"]),s=["trace","debug","info","warn","error","fatal"],c={warning:"warn",err:"error"},a="`level` invalid, must be: "+s.join(", "),f=t.env.HOSTNAME||e.hostname();function y(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)}function d(e){return null==e||"object"==typeof e&&0===Object.keys(e).length||"string"==typeof e&&0===e.trim().length}function m(e){return void 0===e}function A(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function O(e){return"string"==typeof e}se=class{constructor(){var e=this;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const i={};if(t.env.AXE_REMAPPED_META_FIELDS){const e=t.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,r]of e)i[t]=r}let c=t.env.AXE_OMIT_META_FIELDS;"string"==typeof c&&(c=c.split(",").map(e=>e.trim())),Array.isArray(c)||(c=[]);let a=t.env.AXE_PICK_META_FIELDS;"string"==typeof a&&(a=a.split(",").map(e=>e.trim())),Array.isArray(a)||(a=[]),this.config=function(){const e=w(j(v),this!==b&&this||{},v);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!h(i))throw new TypeError("`"+i+"` is not an Option Object");t=w(t,{_:i},e)}return t._}({showStack:!t.env.AXE_SHOW_STACK||n(t.env.AXE_SHOW_STACK),meta:Object.assign({show:!t.env.AXE_SHOW_META||n(t.env.AXE_SHOW_META),remappedFields:i,omittedFields:c,pickedFields:a,cleanupRemapping:!0,hideHTTP:!0},"object"==typeof r.meta?r.meta:{}),version:G,silent:!1,logger:console,name:f,level:"info",levels:["info","warn","error","fatal"],appInfo:!t.env.AXE_APP_INFO||n(t.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof r.hooks?r.hooks:{})},r),this.appInfo=!!this.config.appInfo&&"function"==typeof _&&_(),this.log=this.log.bind(this);const l=Object.keys(this.config.logger).filter(e=>!o.has(e));for(const t of l)this[t]=this.config.logger[t];for(const t of s)"function"!=typeof this.config.logger[t]&&("fatal"===t?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[t]=this.config.logger.info||this.config.logger.log),this[t]=function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return e.log(t,...Array.prototype.slice.call(n))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!O(e)||-1===s.indexOf(e))throw new Error(a);O(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=s.slice(s.indexOf(e))}getNormalizedLevel(e){return O(e)?O(c[e])?c[e]:-1===s.indexOf(e)?"info":e:"info"}setName(e){if(!O(e))throw new Error("`name` must be a String");O(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,t,n){const o=[],a=[];m(e)||o.push(e),m(t)||o.push(t),m(n)||o.push(n);for(var f=arguments.length,h=new Array(f>3?f-3:0),b=3;b<f;b++)h[b-3]=arguments[b];for(const r of Array.prototype.slice.call(h))o.push(r);let v=0;if(O(e)&&O(c[e])?e=c[e]:p(e)?(n=t,t=e,e="error"):O(e)&&-1!==s.indexOf(e)||(n=t,t=e,e=this.getNormalizedLevel(e),v=-1),-1===this.config.levels.indexOf(e))return;let j,w=!1;if((A(t)||Array.isArray(t))&&O(n)){w=!0;const e=n;n=t,t=O(e)&&o.length>=3+v?l(...o.slice(2+v)):e}if(m(t)&&(t=e),1!==o.slice(1+v).length||O(t)||p(t))if(!w&&o.length>=4+v){t=void 0,n={};const r=[];for(const e of o)p(e)?a.push(e):O(e)&&r.push(e);0===a.length&&r.length>0?t=l(...r):a.length>0&&"log"===e&&(e="error")}else if(!w&&o.length===3+v&&O(t)&&u.some(e=>-1!==t.indexOf(e)))t=l(t,n),n={};else if(p(t)){if(p(n)){a.push(n);for(const e of o.slice(2+v))n!==e&&p(e)&&a.push(e);n={}}}else p(n)?(a.push(n),n={}):A(n)||m(n)||null===n?O(t)||(t=l(t)):(t=l(t,n),n={});else n={message:t},t=e;m(n)||A(n)?A(n)||(n={}):n={original_meta:n},p(t)&&(a.unshift(t),t=void 0),A(n.err)&&(p(n.err)&&a.push(n.err),n.original_err=p(n.err)?T(n.err):n.err),a.length>0&&(j=function(e){if(0!==(e=e.filter(i)).length)return 1===e.length?e[0]:new r(e)}(a),n.err=T(j),O(t)||(t=j.message)),n.level=e,this.appInfo&&(n.app=this.appInfo);const S=-1===v?"log":e;for(const r of this.config.hooks.pre)[j,t,n]=r(S,j,t,n);if(!d(this.config.meta.remappedFields))for(const r of Object.keys(this.config.meta.remappedFields))if(x(n,this.config.meta.remappedFields[r],g(n,r)),H(n,r),this.config.meta.cleanupRemapping){const e=r.lastIndexOf(".");if(-1===e)continue;const t=r.slice(0,e);d(g(n,t))&&H(n,t)}if(!d(this.config.meta.omittedFields)||!d(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Object.keys(r)){const i=r[o],s=n?n+"."+o:o;y(i)?e(i,s):t.push(s)}}(e),t}(n);if(!d(this.config.meta.omittedFields))for(const t of this.config.meta.omittedFields){let r=e.length;for(;r--;)e[r]!==t&&0!==e[r].indexOf(t+".")||e.splice(r,1)}if(!d(this.config.meta.pickedFields))for(const t of this.config.meta.pickedFields){const r=t.indexOf("."),n=t.slice(0,r+1);if(-1!==r){let t=e.length;for(;t--;)0===e[t].indexOf(n)&&e.splice(t,1)}-1===e.indexOf(t)&&e.push(t)}n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var n;const{length:o}=t;if("string"==typeof t||o<2){const n="string"==typeof t?t:t[0],o=g(e,n,r);return void 0!==o?x({},n,o,r):{}}return((e,t,r,n)=>{const o={};for(let i=0;i<r;i++){const r=t[i],s=g(e,r,n);void 0!==s&&x(o,r,s,n)}return o})(e,t,o,r)}(n,e)}this.config.silent||(p(j)&&this.config.showStack?!this.config.meta.show||d(n)?this.config.logger[S](j):this.config.logger[S](j,n):!this.config.meta.show||d(n)||n.is_http&&this.config.meta.hideHTTP?this.config.logger[S](t):this.config.logger[S](t,n)),E(this.config.hooks.post,e=>e(S,j,t,n)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,R),se}));
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],c="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=c.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}};const t=Symbol("kErrors");class r extends Error{constructor(e){const r=new Set(e.map(c).filter(Boolean));super(Array.from(r).join("; ")),n(this,"name","CombinedError"),n(this,t,e),o(this,"stack",()=>e.map(s).join("\n\n")),o(this,"transient",()=>e.length>0&&e.every(f)),o(this,"expected",()=>e.length>0&&e.every(a))}[Symbol.iterator](){return this[t][Symbol.iterator]()}}function n(e,t,r){Object.defineProperty(e,t,{value:r})}function o(e,t,r){Object.defineProperty(e,t,{get:r})}function i(e){return null!=e}function c(e){return e.message}function s(e){return e.stack}function f(e){return!0===e.transient}function a(e){return!0===e.expected}var l=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},u=["%s","%d","%i","%f","%j","%o","%O","%%"],p=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},g=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},y="undefined"!=typeof Symbol&&Symbol,h={},b=Object.prototype.toString;if("function"==typeof y&&"function"==typeof Symbol&&"symbol"==typeof y("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var d=Symbol.prototype.toString,m=/^Symbol\(.*\)$/;h=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==b.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&m.test(d.call(e))}(e)}catch(t){return!1}}}else h=function(e){return!1};var v=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:O}=Object.prototype,{propertyIsEnumerable:j}=Object,A=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),w=this,S={concatArrays:!1,ignoreUndefined:!1},E=e=>{const t=[];for(const r in e)O.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)j.call(e,n)&&t.push(n)}return t};function _(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return E(e).forEach(r=>{A(t,r,_(e[r]))}),t}(e):v(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return E(e).forEach(r=>{A(t,r,_(e[r]))}),t}(e):e}const P=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?A(e,r,T(e[r],t[r],n)):A(e,r,_(t[r])))}),e);function T(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)O.call(t,r)&&(i.push(String(r)),A(n,o++,t===e?t[r]:_(t[r])));n=P(n,t,E(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):v(t)&&v(e)?P(e,t,E(t),r):_(t)}var k={};const x=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(k=x).default=x;var I={},L=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!g(e))throw new Error("`err` must be an Error");if(!Array.isArray(t))throw new Error("`fields` must be an Array");var r={};return Object.getOwnPropertyNames(Object.getPrototypeOf(e)).concat(Object.getOwnPropertyNames(e)).forEach((function(t){"function"!=typeof e[t]&&(r[t]=e[t])})),!r.name&&e.constructor.name&&(r.name=e.constructor.name),Array.isArray(t)&&0!==t.length?r.filter((function(e){return t.includes(e)})):r};const M=e=>"object"==typeof e||"function"==typeof e,F=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var N=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!M(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(F(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];F(e,o)||(o=M(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},D=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function C(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function X(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function B(e){return D(e)||Array.isArray(e)||"function"==typeof e}var H=Object.prototype.toString;function R(e){return"function"==typeof e.constructor?e.constructor.name:null}var K=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===R(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(R(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=H.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},U=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&K(function(e,t,r){if(D(r)||(r={default:r}),!B(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",c=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return X(t,e,r)?e[t]:r.default;let s=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=s.length,a=0;do{let t=s[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=C([t.slice(0,-1),s[++a]||""],c,r);if(t in e){if(!X(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=C([t,s[o++]],c,r))in e){if(!X(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&B(e));return a===f?e:r.default}(e,t,r));var n};const W=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var z=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(U(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),W(t),e=e[t];return delete e[i]}return!0},V={};Object.defineProperty(V,"__esModule",{value:!0}),V.boolean=void 0,V.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var $={};Object.defineProperty($,"__esModule",{value:!0}),$.isBooleanable=void 0,$.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var G={};Object.defineProperty(G,"__esModule",{value:!0}),G.boolean=void 0,Object.defineProperty(G,"boolean",{enumerable:!0,get:function(){return V.boolean}}),Object.defineProperty(G,"isBooleanable",{enumerable:!0,get:function(){return $.isBooleanable}});var J,q,Q,Y="11.2.0",Z=J={};function ee(){throw new Error("setTimeout has not been defined")}function te(){throw new Error("clearTimeout has not been defined")}function re(e){if(q===setTimeout)return setTimeout(e,0);if((q===ee||!q)&&setTimeout)return q=setTimeout,setTimeout(e,0);try{return q(e,0)}catch(t){try{return q.call(null,e,0)}catch(t){return q.call(this,e,0)}}}!function(){try{q="function"==typeof setTimeout?setTimeout:ee}catch(e){q=ee}try{Q="function"==typeof clearTimeout?clearTimeout:te}catch(e){Q=te}}();var ne,oe=[],ie=!1,ce=-1;function se(){ie&&ne&&(ie=!1,ne.length?oe=ne.concat(oe):ce=-1,oe.length&&fe())}function fe(){if(!ie){var e=re(se);ie=!0;for(var t=oe.length;t;){for(ne=oe,oe=[];++ce<t;)ne&&ne[ce].run();ce=-1,t=oe.length}ne=null,ie=!1,function(e){if(Q===clearTimeout)return clearTimeout(e);if((Q===te||!Q)&&clearTimeout)return Q=clearTimeout,clearTimeout(e);try{Q(e)}catch(t){try{return Q.call(null,e)}catch(t){return Q.call(this,e)}}}(e)}}function ae(e,t){this.fun=e,this.array=t}function le(){}Z.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];oe.push(new ae(e,t)),1!==oe.length||ie||re(fe)},ae.prototype.run=function(){this.fun.apply(null,this.array)},Z.title="browser",Z.browser=!0,Z.env={},Z.argv=[],Z.version="",Z.versions={},Z.on=le,Z.addListener=le,Z.once=le,Z.off=le,Z.removeListener=le,Z.removeAllListeners=le,Z.emit=le,Z.prependListener=le,Z.prependOnceListener=le,Z.listeners=function(e){return[]},Z.binding=function(e){throw new Error("process.binding is not supported")},Z.cwd=function(){return"/"},Z.chdir=function(e){throw new Error("process.chdir is not supported")},Z.umask=function(){return 0};var ue={};return function(t){(function(){const{boolean:n}=G,o=Symbol.for("axe.silent"),c=new Set(["config","log"]),s=["trace","debug","info","warn","error","fatal"],f={warning:"warn",err:"error"},a="`level` invalid, must be: "+s.join(", "),y=t.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||h(e))}function d(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function m(e){return void 0===e}function O(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function j(e){return"string"==typeof e}ue=class{constructor(){var e=this;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o={};if(t.env.AXE_REMAPPED_META_FIELDS){const e=t.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,r]of e)o[t]=r}let i=t.env.AXE_OMIT_META_FIELDS;"string"==typeof i&&(i=i.split(",").map(e=>e.trim())),Array.isArray(i)||(i=[]);let f=t.env.AXE_PICK_META_FIELDS;"string"==typeof f&&(f=f.split(",").map(e=>e.trim())),Array.isArray(f)||(f=[]),this.config=function(){const e=T(_(S),this!==w&&this||{},S);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!v(i))throw new TypeError("`"+i+"` is not an Option Object");t=T(t,{_:i},e)}return t._}({showStack:!t.env.AXE_SHOW_STACK||n(t.env.AXE_SHOW_STACK),meta:Object.assign({show:!t.env.AXE_SHOW_META||n(t.env.AXE_SHOW_META),remappedFields:o,omittedFields:i,pickedFields:f,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof r.meta?r.meta:{}),version:Y,silent:!1,logger:console,name:y,level:"info",levels:["info","warn","error","fatal"],appInfo:!t.env.AXE_APP_INFO||n(t.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof r.hooks?r.hooks:{})},r),this.appInfo=!!this.config.appInfo&&"function"==typeof I&&I(),this.log=this.log.bind(this);const a=Object.keys(this.config.logger).filter(e=>!c.has(e));for(const t of a)this[t]=this.config.logger[t];for(const t of s)"function"!=typeof this.config.logger[t]&&("fatal"===t?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[t]=this.config.logger.info||this.config.logger.log),this[t]=function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return e.log(t,...Array.prototype.slice.call(n))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!j(e)||-1===s.indexOf(e))throw new Error(a);j(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=s.slice(s.indexOf(e))}getNormalizedLevel(e){return j(e)?j(f[e])?f[e]:-1===s.indexOf(e)?"info":e:"info"}setName(e){if(!j(e))throw new Error("`name` must be a String");j(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,t,c){const a=[],y=[];m(e)||a.push(e),m(t)||a.push(t),m(c)||a.push(c);for(var v=arguments.length,A=new Array(v>3?v-3:0),w=3;w<v;w++)A[w-3]=arguments[w];for(const r of Array.prototype.slice.call(A))a.push(r);let S=0;if(j(e)&&j(f[e])?e=f[e]:g(e)?(c=t,t=e,e="error"):j(e)&&-1!==s.indexOf(e)||(c=t,t=e,e=this.getNormalizedLevel(e),S=-1),-1===this.config.levels.indexOf(e))return;let E,_=!1;if((O(t)||Array.isArray(t))&&j(c)){_=!0;const e=c;c=t,t=j(e)&&a.length>=3+S?l(...a.slice(2+S)):e}if(m(t)&&(t=e),1!==a.slice(1+S).length||j(t)||g(t))if(!_&&a.length>=4+S){t=void 0,c={};const r=[];for(const e of a)g(e)?y.push(e):j(e)&&r.push(e);0===y.length&&r.length>0?t=l(...r):y.length>0&&"log"===e&&(e="error")}else if(!_&&a.length===3+S&&j(t)&&u.some(e=>-1!==t.indexOf(e)))t=l(t,c),c={};else if(g(t)){if(g(c)){y.push(c);for(const e of a.slice(2+S))c!==e&&g(e)&&y.push(e);c={}}}else g(c)?(y.push(c),c={}):O(c)||m(c)||null===c?j(t)||(t=l(t)):(t=l(t,c),c={});else c={message:t},t=e;m(c)||O(c)?O(c)||(c={}):c={original_meta:c},g(t)&&(y.unshift(t),t=void 0),O(c.err)&&(g(c.err)&&y.push(c.err),c.original_err=g(c.err)?L(c.err):c.err),y.length>0&&(E=function(e){if(0!==(e=e.filter(i)).length)return 1===e.length?e[0]:new r(e)}(y),c.err=L(E),j(t)||(t=E.message)),c.level=e,this.appInfo&&(c.app=this.appInfo);const P=-1===S?"log":e;for(const r of this.config.hooks.pre)[E,t,c]=r(P,E,t,c);const T=n(c[o]);if(!d(this.config.meta.remappedFields))for(const r of Reflect.ownKeys(this.config.meta.remappedFields))if(N(c,this.config.meta.remappedFields[r],p(c,r)),z(c,r),this.config.meta.cleanupRemapping){const e=r.lastIndexOf(".");if(-1===e)continue;const t=r.slice(0,e);d(p(c,t))&&z(c,t)}if(!d(this.config.meta.omittedFields)||!d(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=n?n+"."+o:o;b(i)?e(i,c):t.push(c)}}(e),t}(c);if(!d(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!h(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!d(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(h(r))c[r]&&t.push([r,c[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)h(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)h(r)&&c[r]&&t.push([r,c[r]]);if(c=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var n;const{length:o}=t;if("string"==typeof t||o<2){const n="string"==typeof t?t:t[0],o=p(e,n,r);return void 0!==o?N({},n,o,r):{}}return((e,t,r,n)=>{const o={};for(let i=0;i<r;i++){const r=t[i],c=p(e,r,n);void 0!==c&&N(o,r,c,n)}return o})(e,t,o,r)}(c,e),t.length>0)for(const[r,n]of t)c[r]=n}this.config.silent||T||(g(E)&&this.config.showStack?!this.config.meta.show||d(c)||this.config.meta.hideMeta&&c[this.config.meta.hideMeta]?this.config.logger[P](E):this.config.logger[P](E,c):!this.config.meta.show||d(c)||this.config.meta.hideMeta&&c[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&c[this.config.meta.hideHTTP]?this.config.logger[P](t):this.config.logger[P](t,c)),k(this.config.hooks.post,e=>e(P,E,t,c)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,J),ue}));
package/lib/index.js CHANGED
@@ -10,6 +10,7 @@ const format = require('@ladjs/format-util');
10
10
  const formatSpecifiers = require('format-specifiers');
11
11
  const get = require('@strikeentco/get');
12
12
  const isError = require('iserror');
13
+ const isSymbol = require('is-symbol');
13
14
  const mergeOptions = require('merge-options');
14
15
  const pMapSeries = require('p-map-series');
15
16
  const parseAppInfo = require('parse-app-info');
@@ -21,6 +22,7 @@ const {
21
22
  boolean
22
23
  } = require('boolean');
23
24
  const pkg = require('../package.json');
25
+ const silentSymbol = Symbol.for('axe.silent');
24
26
  const omittedLoggerKeys = new Set(['config', 'log']);
25
27
  const levels = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
26
28
  const aliases = {
@@ -36,14 +38,14 @@ function isPlainObject(value) {
36
38
  return false;
37
39
  }
38
40
  const prototype = Object.getPrototypeOf(value);
39
- return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
41
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value) && !isSymbol(value);
40
42
  }
41
43
 
42
44
  // <https://github.com/GeenenTijd/dotify/blob/master/dotify.js>
43
45
  function dotifyToArray(obj) {
44
46
  const res = [];
45
47
  function recurse(obj, current) {
46
- for (const key of Object.keys(obj)) {
48
+ for (const key of Reflect.ownKeys(obj)) {
47
49
  const value = obj[key];
48
50
  const newKey = current ? current + '.' + key : key; // joined key with dot
49
51
  // if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
@@ -60,7 +62,7 @@ function dotifyToArray(obj) {
60
62
 
61
63
  // <https://stackoverflow.com/a/43233163>
62
64
  function isEmpty(value) {
63
- return value === undefined || value === null || typeof value === 'object' && Object.keys(value).length === 0 || typeof value === 'string' && value.trim().length === 0;
65
+ return value === undefined || value === null || typeof value === 'object' && Reflect.ownKeys(value).length === 0 || typeof value === 'string' && value.trim().length === 0;
64
66
  }
65
67
  function isNull(value) {
66
68
  return value === null;
@@ -106,7 +108,10 @@ class Axe {
106
108
  omittedFields,
107
109
  pickedFields,
108
110
  cleanupRemapping: true,
109
- hideHTTP: true
111
+ hideHTTP: 'is_http',
112
+ // implemented mainly for @ladjs/graceful to
113
+ // suppress unnecessary meta output to console
114
+ hideMeta: 'hide_meta'
110
115
  }, typeof config.meta === 'object' ? config.meta : {}),
111
116
  version: pkg.version,
112
117
  silent: false,
@@ -355,8 +360,10 @@ class Axe {
355
360
  // (and not have two operations, one for omit, and one for pick)
356
361
  //
357
362
 
363
+ // set a boolean flag if we had the silent symbol or not
364
+ const hadTrueSilentSymbol = boolean(meta[silentSymbol]);
358
365
  if (!isEmpty(this.config.meta.remappedFields)) {
359
- for (const key of Object.keys(this.config.meta.remappedFields)) {
366
+ for (const key of Reflect.ownKeys(this.config.meta.remappedFields)) {
360
367
  set(meta, this.config.meta.remappedFields[key], get(meta, key));
361
368
  unset(meta, key);
362
369
  // cleanup empty objects after remapping
@@ -387,10 +394,11 @@ class Axe {
387
394
  // <https://stackoverflow.com/a/9882349>
388
395
  let i = dotified.length;
389
396
  while (i--) {
390
- if (dotified[i] === prop || dotified[i].indexOf(`${prop}.`) === 0) dotified.splice(i, 1);
397
+ if (dotified[i] === prop || !isSymbol(dotified[i]) && dotified[i].indexOf(`${prop}.`) === 0) dotified.splice(i, 1);
391
398
  }
392
399
  }
393
400
  }
401
+ const pickedSymbols = [];
394
402
  if (!isEmpty(this.config.meta.pickedFields)) {
395
403
  for (const prop of this.config.meta.pickedFields) {
396
404
  // response.headers.boop
@@ -400,12 +408,16 @@ class Axe {
400
408
  // response
401
409
  //
402
410
  // so we need to split by the first period and omit any keys from dotified starting with it
403
- const index = prop.indexOf('.');
404
- const key = prop.slice(0, index + 1);
405
- if (index !== -1) {
406
- let i = dotified.length;
407
- while (i--) {
408
- if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
411
+ if (isSymbol(prop)) {
412
+ if (meta[prop]) pickedSymbols.push([prop, meta[prop]]);
413
+ } else {
414
+ const index = prop.indexOf('.');
415
+ const key = prop.slice(0, index + 1);
416
+ if (index !== -1) {
417
+ let i = dotified.length;
418
+ while (i--) {
419
+ if (!isSymbol(dotified[i]) && dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
420
+ }
409
421
  }
410
422
  }
411
423
 
@@ -414,22 +426,50 @@ class Axe {
414
426
  }
415
427
  }
416
428
 
429
+ //
430
+ // iterate over all dotified values to check for symbols
431
+ //
432
+ // NOTE: this does not take into account that they could already be in `pickedSymbols`
433
+ // (and it doesn't also do bigints yet)
434
+ //
435
+ for (const prop of dotified) {
436
+ if (isSymbol(prop) && meta[prop]) pickedSymbols.push([prop, meta[prop]]);
437
+ }
438
+
439
+ //
417
440
  // now we call pick-deep using the final array
441
+ //
442
+ // NOTE: this does not pick symbols nor bigints
443
+ //
418
444
  meta = pickDeep(meta, dotified);
445
+
446
+ //
447
+ // if there were any top-level symbols to be
448
+ // picked then we need to add them back here to the list
449
+ //
450
+ // NOTE: we'd probably want to do the same for bigints as symbols
451
+ //
452
+ if (pickedSymbols.length > 0) {
453
+ for (const [key, value] of pickedSymbols) {
454
+ meta[key] = value;
455
+ }
456
+ }
419
457
  }
420
458
 
421
459
  // only invoke logger methods if it was not silent
422
- if (!this.config.silent) {
460
+ if (!this.config.silent && !hadTrueSilentSymbol) {
423
461
  // Show stack trace if necessary (along with any metadata)
424
462
  if (isError(err) && this.config.showStack) {
425
463
  if (!this.config.meta.show || isEmpty(meta)) {
426
464
  this.config.logger[method](err);
465
+ } else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta]) {
466
+ this.config.logger[method](err);
427
467
  } else {
428
468
  this.config.logger[method](err, meta);
429
469
  }
430
470
  } else if (!this.config.meta.show || isEmpty(meta)) {
431
471
  this.config.logger[method](message);
432
- } else if (meta.is_http && this.config.meta.hideHTTP) {
472
+ } else if (this.config.meta.hideMeta && meta[this.config.meta.hideMeta] || this.config.meta.hideHTTP && meta[this.config.meta.hideHTTP]) {
433
473
  this.config.logger[method](message);
434
474
  } else {
435
475
  this.config.logger[method](message, meta);
@@ -442,4 +482,5 @@ class Axe {
442
482
  });
443
483
  }
444
484
  }
445
- module.exports = Axe;
485
+ module.exports = Axe;
486
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJjb21iaW5lIiwiZm9ybWF0IiwiZm9ybWF0U3BlY2lmaWVycyIsImdldCIsImlzRXJyb3IiLCJpc1N5bWJvbCIsIm1lcmdlT3B0aW9ucyIsInBNYXBTZXJpZXMiLCJwYXJzZUFwcEluZm8iLCJwYXJzZUVyciIsInBpY2tEZWVwIiwic2V0IiwidW5zZXQiLCJib29sZWFuIiwicGtnIiwic2lsZW50U3ltYm9sIiwiU3ltYm9sIiwiZm9yIiwib21pdHRlZExvZ2dlcktleXMiLCJTZXQiLCJsZXZlbHMiLCJhbGlhc2VzIiwid2FybmluZyIsImVyciIsImxldmVsRXJyb3IiLCJqb2luIiwibmFtZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkhPU1ROQU1FIiwiaG9zdG5hbWUiLCJpc1BsYWluT2JqZWN0IiwidmFsdWUiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJkb3RpZnlUb0FycmF5Iiwib2JqIiwicmVzIiwicmVjdXJzZSIsImN1cnJlbnQiLCJrZXkiLCJSZWZsZWN0Iiwib3duS2V5cyIsIm5ld0tleSIsInB1c2giLCJpc0VtcHR5IiwidW5kZWZpbmVkIiwibGVuZ3RoIiwidHJpbSIsImlzTnVsbCIsImlzVW5kZWZpbmVkIiwiaXNPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJBeGUiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsImFyZ3MiLCJzbGljZSIsImNhbGwiLCJzZXRMZXZlbCIsImdldE5vcm1hbGl6ZWRMZXZlbCIsInNldE5hbWUiLCJ3YXJuIiwiZm4iLCJfbGV2ZWwiLCJpbmRleE9mIiwiRXJyb3IiLCJsb2dMZXZlbCIsInNjb3BlIiwibWVzc2FnZSIsIm9yaWdpbmFsQXJncyIsImVycm9ycyIsImFyZyIsIm1vZGlmaWVyIiwiaXNCdW55YW4iLCJfbWV0YSIsIm1lc3NhZ2VzIiwic29tZSIsInQiLCJvcmlnaW5hbF9tZXRhIiwidW5zaGlmdCIsIm9yaWdpbmFsX2VyciIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgY29tYmluZSA9IHJlcXVpcmUoJ21heWJlLWNvbWJpbmUtZXJyb3JzJyk7XG5jb25zdCBmb3JtYXQgPSByZXF1aXJlKCdAbGFkanMvZm9ybWF0LXV0aWwnKTtcbmNvbnN0IGZvcm1hdFNwZWNpZmllcnMgPSByZXF1aXJlKCdmb3JtYXQtc3BlY2lmaWVycycpO1xuY29uc3QgZ2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL2dldCcpO1xuY29uc3QgaXNFcnJvciA9IHJlcXVpcmUoJ2lzZXJyb3InKTtcbmNvbnN0IGlzU3ltYm9sID0gcmVxdWlyZSgnaXMtc3ltYm9sJyk7XG5jb25zdCBtZXJnZU9wdGlvbnMgPSByZXF1aXJlKCdtZXJnZS1vcHRpb25zJyk7XG5jb25zdCBwTWFwU2VyaWVzID0gcmVxdWlyZSgncC1tYXAtc2VyaWVzJyk7XG5jb25zdCBwYXJzZUFwcEluZm8gPSByZXF1aXJlKCdwYXJzZS1hcHAtaW5mbycpO1xuY29uc3QgcGFyc2VFcnIgPSByZXF1aXJlKCdwYXJzZS1lcnInKTtcbmNvbnN0IHBpY2tEZWVwID0gcmVxdWlyZSgncGljay1kZWVwJyk7XG5jb25zdCBzZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vc2V0Jyk7XG5jb25zdCB1bnNldCA9IHJlcXVpcmUoJ3Vuc2V0LXZhbHVlJyk7XG5jb25zdCB7IGJvb2xlYW4gfSA9IHJlcXVpcmUoJ2Jvb2xlYW4nKTtcblxuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgbmV3S2V5ID0gY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXk7IC8vIGpvaW5lZCBrZXkgd2l0aCBkb3RcbiAgICAgIC8vIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiAhT2JqZWN0SUQuaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZWN1cnNlKHZhbHVlLCBuZXdLZXkpOyAvLyBpdCdzIGEgbmVzdGVkIG9iamVjdCwgc28gZG8gaXQgYWdhaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5wdXNoKG5ld0tleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzZShvYmopO1xuICByZXR1cm4gcmVzO1xufVxuXG4vLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQzMjMzMTYzPlxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIFJlZmxlY3Qub3duS2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmNsYXNzIEF4ZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFM7XG4gICAgICBjb25zdCBhcnIgPSBmaWVsZHMuc3BsaXQoJywnKS5tYXAoKHYpID0+IHYuc3BsaXQoJzonKSk7XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wLCB2YWx1ZV0gb2YgYXJyKSB7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW3Byb3BdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZW52aWZ5IGRvZXMgbm90IHN1cHBvcnQgY29uZGl0aW9uYWxzIHdlbGwgZW5vdWdoIHNvIHdlIGRlY2xhcmUgdmFycyBvdXRzaWRlXG4gICAgbGV0IG9taXR0ZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfT01JVF9NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIG9taXR0ZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgb21pdHRlZEZpZWxkcyA9IG9taXR0ZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob21pdHRlZEZpZWxkcykpIG9taXR0ZWRGaWVsZHMgPSBbXTtcblxuICAgIGxldCBwaWNrZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUElDS19NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIHBpY2tlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBwaWNrZWRGaWVsZHMgPSBwaWNrZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlja2VkRmllbGRzKSkgcGlja2VkRmllbGRzID0gW107XG5cbiAgICB0aGlzLmNvbmZpZyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgc2hvd1N0YWNrOiBwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDS1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDSylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIG1ldGE6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2hvdzogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQVxuICAgICAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQSlcbiAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICAgICAgcmVtYXBwZWRGaWVsZHMsXG4gICAgICAgICAgICBvbWl0dGVkRmllbGRzLFxuICAgICAgICAgICAgcGlja2VkRmllbGRzLFxuICAgICAgICAgICAgY2xlYW51cFJlbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhpZGVIVFRQOiAnaXNfaHR0cCcsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRlZCBtYWlubHkgZm9yIEBsYWRqcy9ncmFjZWZ1bCB0b1xuICAgICAgICAgICAgLy8gc3VwcHJlc3MgdW5uZWNlc3NhcnkgbWV0YSBvdXRwdXQgdG8gY29uc29sZVxuICAgICAgICAgICAgaGlkZU1ldGE6ICdoaWRlX21ldGEnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLm1ldGEgPT09ICdvYmplY3QnID8gY29uZmlnLm1ldGEgOiB7fVxuICAgICAgICApLFxuICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgICAgICAgc2lsZW50OiBmYWxzZSxcbiAgICAgICAgbG9nZ2VyOiBjb25zb2xlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBsZXZlbHM6IFsnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2ZhdGFsJ10sXG4gICAgICAgIGFwcEluZm86IHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GT1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfQVBQX0lORk8pXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBob29rczogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmU6IFtdLFxuICAgICAgICAgICAgcG9zdDogW11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcuaG9va3MgPT09ICdvYmplY3QnID8gY29uZmlnLmhvb2tzIDoge31cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmFwcEluZm8gPSB0aGlzLmNvbmZpZy5hcHBJbmZvXG4gICAgICA/IGlzRnVuY3Rpb24ocGFyc2VBcHBJbmZvKVxuICAgICAgICA/IHBhcnNlQXBwSW5mbygpXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLmxvZyA9IHRoaXMubG9nLmJpbmQodGhpcyk7XG5cbiAgICAvLyBJbmhlcml0IG1ldGhvZHMgZnJvbSBwYXJlbnQgbG9nZ2VyXG4gICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmxvZ2dlcikuZmlsdGVyKFxuICAgICAgKGtleSkgPT4gIW9taXR0ZWRMb2dnZXJLZXlzLmhhcyhrZXkpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWV0aG9kcykge1xuICAgICAgdGhpc1tlbGVtZW50XSA9IHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XTtcbiAgICB9XG5cbiAgICAvLyBCaW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2ggbG9nIGxldmVsXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxldmVscykge1xuICAgICAgLy8gRW5zdXJlIGZ1bmN0aW9uIGV4aXN0cyBpbiBsb2dnZXIgcGFzc2VkXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gJ2ZhdGFsJykge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5mYXRhbCA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fCB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJpbmQgbG9nIGhhbmRsZXIgd2hpY2ggbm9ybWFsaXplcyBhcmdzIGFuZCBwb3B1bGF0ZXMgbWV0YVxuICAgICAgdGhpc1tlbGVtZW50XSA9ICguLi5hcmdzKSA9PlxuICAgICAgICB0aGlzLmxvZyhlbGVtZW50LCAuLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMZXZlbCA9IHRoaXMuc2V0TGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXROYW1lID0gdGhpcy5zZXROYW1lLmJpbmQodGhpcyk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBuYW1lXG4gICAgaWYgKHRoaXMuY29uZmlnLm5hbWUpIHRoaXMuc2V0TmFtZSh0aGlzLmNvbmZpZy5uYW1lKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIGxldmVsXG4gICAgdGhpcy5zZXRMZXZlbCh0aGlzLmNvbmZpZy5sZXZlbCk7XG5cbiAgICAvLyBBbGlhc2VzXG4gICAgdGhpcy5lcnIgPSB0aGlzLmVycm9yO1xuICAgIHRoaXMud2FybmluZyA9IHRoaXMud2FybjtcblxuICAgIC8vIFByZSBhbmQgUG9zdCBIb29rc1xuICAgIHRoaXMucHJlID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucHJlLnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMucG9zdCA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnBvc3QucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGxldmVsRXJyb3IpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYGxvZ0xldmVsYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwpKVxuICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsID0gbGV2ZWw7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubGV2ZWwgPSBsZXZlbDtcbiAgICAvLyBBZGp1c3RzIGB0aGlzLmNvbmZpZy5sZXZlbHNgIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCBoYXMgYWxsIHByb2NlZWRpbmcgKGluY2x1c2l2ZSlcbiAgICB0aGlzLmNvbmZpZy5sZXZlbHMgPSBsZXZlbHMuc2xpY2UobGV2ZWxzLmluZGV4T2YobGV2ZWwpKTtcbiAgfVxuXG4gIGdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpKSByZXR1cm4gJ2luZm8nO1xuICAgIGlmIChpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHJldHVybiBhbGlhc2VzW2xldmVsXTtcbiAgICBpZiAobGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuICdpbmZvJztcbiAgICByZXR1cm4gbGV2ZWw7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ2BuYW1lYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgc2NvcGVgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSkpIHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubmFtZSA9IG5hbWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBsb2cobGV2ZWwsIG1lc3NhZ2UsIG1ldGEsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFyZ3MgPSBbXTtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGxldmVsKSkgb3JpZ2luYWxBcmdzLnB1c2gobGV2ZWwpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWVzc2FnZSkpIG9yaWdpbmFsQXJncy5wdXNoKG1lc3NhZ2UpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkpIG9yaWdpbmFsQXJncy5wdXNoKG1ldGEpO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKSB7XG4gICAgICBvcmlnaW5hbEFyZ3MucHVzaChhcmcpO1xuICAgIH1cblxuICAgIGxldCBtb2RpZmllciA9IDA7XG5cbiAgICBpZiAoaXNTdHJpbmcobGV2ZWwpICYmIGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkge1xuICAgICAgbGV2ZWwgPSBhbGlhc2VzW2xldmVsXTtcbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobGV2ZWwpKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKTtcbiAgICAgIG1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGlmIGl0IGlzIG5vdCBhIHZhbGlkIGxvZ2dpbmcgbGV2ZWxcbiAgICBpZiAodGhpcy5jb25maWcubGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuO1xuXG4gICAgLy8gQnVueWFuIHN1cHBvcnQgKG1ldGEsIG1lc3NhZ2UsIC4uLmFyZ3MpXG4gICAgbGV0IGlzQnVueWFuID0gZmFsc2U7XG4gICAgaWYgKChpc09iamVjdChtZXNzYWdlKSB8fCBBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSAmJiBpc1N0cmluZyhtZXRhKSkge1xuICAgICAgaXNCdW55YW4gPSB0cnVlO1xuICAgICAgY29uc3QgX21ldGEgPSBtZXRhO1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgaXNTdHJpbmcoX21ldGEpICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gMyArIG1vZGlmaWVyXG4gICAgICAgICAgPyBmb3JtYXQoLi4ub3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpXG4gICAgICAgICAgOiBfbWV0YTtcbiAgICB9XG5cbiAgICAvLyBJZiBtZXNzYWdlIHdhcyB1bmRlZmluZWQgdGhlbiBzZXQgaXQgdG8gbGV2ZWxcbiAgICBpZiAoaXNVbmRlZmluZWQobWVzc2FnZSkpIG1lc3NhZ2UgPSBsZXZlbDtcblxuICAgIC8vIElmIG9ubHkgYG1lc3NhZ2VgIHdhcyBwYXNzZWQgdGhlbiBpZiBpdCB3YXMgYW4gT2JqZWN0XG4gICAgLy8gcHJlc2VydmUgaXQgYXMgYW4gT2JqZWN0IGJ5IHNldHRpbmcgaXQgYXMgbWV0YVxuICAgIGlmIChcbiAgICAgIG9yaWdpbmFsQXJncy5zbGljZSgxICsgbW9kaWZpZXIpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIWlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICAhaXNFcnJvcihtZXNzYWdlKVxuICAgICkge1xuICAgICAgbWV0YSA9IHsgbWVzc2FnZSB9O1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzQnVueWFuICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gNCArIG1vZGlmaWVyKSB7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICBtZXRhID0ge307XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzKSB7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGFyZykpIG1lc3NhZ2VzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDAgJiYgbWVzc2FnZXMubGVuZ3RoID4gMClcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdCguLi5tZXNzYWdlcyk7XG4gICAgICBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMCAmJiBsZXZlbCA9PT0gJ2xvZycpIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIWlzQnVueWFuICYmXG4gICAgICBvcmlnaW5hbEFyZ3MubGVuZ3RoID09PSAzICsgbW9kaWZpZXIgJiZcbiAgICAgIGlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICBmb3JtYXRTcGVjaWZpZXJzLnNvbWUoKHQpID0+IG1lc3NhZ2UuaW5kZXhPZih0KSAhPT0gLTEpXG4gICAgKSB7XG4gICAgICAvLyBPdGhlcndpc2UgaWYgdGhlcmUgYXJlIHRocmVlIGFyZ3MgYW5kIGlmIHRoZSBgbWVzc2FnZWAgY29udGFpbnNcbiAgICAgIC8vIGEgcGxhY2Vob2xkZXIgdG9rZW4gKGUuZy4gJyVzJyBvciAnJWQnIC0gc2VlIGFib3ZlIGBmb3JtYXRTcGVjaWZpZXJzYCB2YXJpYWJsZSlcbiAgICAgIC8vIHRoZW4gd2UgY2FuIGluZmVyIHRoYXQgdGhlIGBtZXRhYCBhcmcgcGFzc2VkIGlzIHVzZWQgZm9yIGZvcm1hdHRpbmdcbiAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICBtZXRhID0ge307XG4gICAgfSBlbHNlIGlmICghaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpICYmICFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNOdWxsKG1ldGEpKSB7XG4gICAgICAgIC8vIElmIHRoZSBgbWV0YWAgdmFyaWFibGUgcGFzc2VkIHdhcyBub3QgYW4gT2JqZWN0IHRoZW4gY29udmVydCBpdFxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkge1xuICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBzdHJpbmcgdGhlbiB3ZSBzaG91bGQgcnVuIGB1dGlsLmZvcm1hdGAgb24gaXRcbiAgICAgICAgLy8gYXNzdW1pbmcgd2UncmUgZm9ybWF0dGluZyBpdCBsaWtlIGl0IHdhcyBhbm90aGVyIGFyZ3VtZW50XG4gICAgICAgIC8vIChhcyBvcHBvc2VkIHRvIHVzaW5nIHNvbWV0aGluZyBsaWtlIGZhc3QtanNvbi1zdHJpbmdpZnkpXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgIC8vIGhhbmRsZSBhZGRpdGlvbmFsIGFyZ3NcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKSB7XG4gICAgICAgIC8vIHNob3VsZCBza2lwIHRoaXMgYmV0dGVyIHdpdGggc2xpY2UgYW5kIG1vZGlmaWVyIGFkanVzdG1lbnRcbiAgICAgICAgaWYgKG1ldGEgPT09IGFyZykgY29udGludWU7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc09iamVjdChtZXRhKSkgbWV0YSA9IHsgb3JpZ2luYWxfbWV0YTogbWV0YSB9O1xuICAgIGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSkgbWV0YSA9IHt9O1xuXG4gICAgaWYgKGlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGVycm9ycy51bnNoaWZ0KG1lc3NhZ2UpO1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHJld3JpdGUgYG1ldGEuZXJyYCB0byBgbWV0YS5vcmlnaW5hbF9lcnJgIGZvciBjb25zaXN0ZW5jeVxuICAgIC8vIChpbiBjYXNlIHNvbWVvbmUgaGFzIGFuIG9iamVjdCB3aXRoIGAuZXJyYCBwcm9wZXJ0eSBvbiBpdCB3aXRoIGFuIGVycm9yKVxuICAgIC8vXG4gICAgaWYgKGlzT2JqZWN0KG1ldGEuZXJyKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YS5lcnIpKSBlcnJvcnMucHVzaChtZXRhLmVycik7XG4gICAgICBtZXRhLm9yaWdpbmFsX2VyciA9IGlzRXJyb3IobWV0YS5lcnIpID8gcGFyc2VFcnIobWV0YS5lcnIpIDogbWV0YS5lcnI7XG4gICAgfVxuXG4gICAgbGV0IGVycjtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVyciA9IGNvbWJpbmUoZXJyb3JzKTtcbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2woZG90aWZpZWRbaV0pICYmIGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMClcbiAgICAgICAgICAgICAgICAgIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZpbmFsbHkgYWRkIGl0IGlmIGl0IGRpZCBub3QgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIGlmIChkb3RpZmllZC5pbmRleE9mKHByb3ApID09PSAtMSkgZG90aWZpZWQucHVzaChwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gaXRlcmF0ZSBvdmVyIGFsbCBkb3RpZmllZCB2YWx1ZXMgdG8gY2hlY2sgZm9yIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhleSBjb3VsZCBhbHJlYWR5IGJlIGluIGBwaWNrZWRTeW1ib2xzYFxuICAgICAgLy8gICAgICAgKGFuZCBpdCBkb2Vzbid0IGFsc28gZG8gYmlnaW50cyB5ZXQpXG4gICAgICAvL1xuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRvdGlmaWVkKSB7XG4gICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSAmJiBtZXRhW3Byb3BdKVxuICAgICAgICAgIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgfVxuXG4gICAgICAvL1xuICAgICAgLy8gbm93IHdlIGNhbGwgcGljay1kZWVwIHVzaW5nIHRoZSBmaW5hbCBhcnJheVxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgcGljayBzeW1ib2xzIG5vciBiaWdpbnRzXG4gICAgICAvL1xuICAgICAgbWV0YSA9IHBpY2tEZWVwKG1ldGEsIGRvdGlmaWVkKTtcblxuICAgICAgLy9cbiAgICAgIC8vIGlmIHRoZXJlIHdlcmUgYW55IHRvcC1sZXZlbCBzeW1ib2xzIHRvIGJlXG4gICAgICAvLyBwaWNrZWQgdGhlbiB3ZSBuZWVkIHRvIGFkZCB0aGVtIGJhY2sgaGVyZSB0byB0aGUgbGlzdFxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHdlJ2QgcHJvYmFibHkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgYmlnaW50cyBhcyBzeW1ib2xzXG4gICAgICAvL1xuICAgICAgaWYgKHBpY2tlZFN5bWJvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwaWNrZWRTeW1ib2xzKSB7XG4gICAgICAgICAgbWV0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGludm9rZSBsb2dnZXIgbWV0aG9kcyBpZiBpdCB3YXMgbm90IHNpbGVudFxuICAgIGlmICghdGhpcy5jb25maWcuc2lsZW50ICYmICFoYWRUcnVlU2lsZW50U3ltYm9sKSB7XG4gICAgICAvLyBTaG93IHN0YWNrIHRyYWNlIGlmIG5lY2Vzc2FyeSAoYWxvbmcgd2l0aCBhbnkgbWV0YWRhdGEpXG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIHRoaXMuY29uZmlnLnNob3dTdGFjaykge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhICYmXG4gICAgICAgICAgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVyciwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29uZmlnLm1ldGEuc2hvdyB8fCBpc0VtcHR5KG1ldGEpKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhXSkgfHxcbiAgICAgICAgKHRoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFAgJiYgbWV0YVt0aGlzLmNvbmZpZy5tZXRhLmhpZGVIVFRQXSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBvc3QtaG9va3NcbiAgICBwTWFwU2VyaWVzKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QsIChob29rKSA9PlxuICAgICAgaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSlcbiAgICApXG4gICAgICAudGhlbigpXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXhlO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7QUFFM0I7QUFDQSxNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFeEIsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsc0JBQXNCLENBQUM7QUFDL0MsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsb0JBQW9CLENBQUM7QUFDNUMsTUFBTUksZ0JBQWdCLEdBQUdKLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztBQUNyRCxNQUFNSyxHQUFHLEdBQUdMLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNTSxPQUFPLEdBQUdOLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbEMsTUFBTU8sUUFBUSxHQUFHUCxPQUFPLENBQUMsV0FBVyxD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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "axe",
3
3
  "description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
4
- "version": "11.0.5",
4
+ "version": "11.2.0",
5
5
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
6
6
  "browser": {
7
7
  "parse-app-info": false
@@ -22,6 +22,7 @@
22
22
  "boolean": "3.2.0",
23
23
  "console-polyfill": "0.3.0",
24
24
  "format-specifiers": "^1.0.0",
25
+ "is-symbol": "^1.0.4",
25
26
  "iserror": "0.0.2",
26
27
  "maybe-combine-errors": "1.0.0",
27
28
  "merge-options": "3.0.4",