axe 11.1.0 → 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 +61 -1
- package/dist/axe.js +179 -29
- package/dist/axe.min.js +1 -1
- package/lib/index.js +49 -13
- package/package.json +2 -1
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,7 +394,7 @@ 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. | |
|
|
399
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. | |
|
|
@@ -404,6 +405,65 @@ See [Browser](#browser-1) usage below for more information.
|
|
|
404
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. | |
|
|
405
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][]). | |
|
|
406
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
|
+
|
|
407
467
|
### Supported Platforms
|
|
408
468
|
|
|
409
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":
|
|
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":
|
|
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
|
-
},{}],
|
|
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
|
-
},{}],
|
|
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
|
-
},{}],
|
|
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
|
-
},{}],
|
|
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
|
-
},{}],
|
|
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":
|
|
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
|
-
},{}],
|
|
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
|
-
},{}],
|
|
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":
|
|
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}],
|
|
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
|
-
},{}],
|
|
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":
|
|
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.
|
|
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
|
-
},{}],
|
|
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
|
|
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' &&
|
|
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;
|
|
@@ -1621,8 +1738,10 @@ class Axe {
|
|
|
1621
1738
|
// (and not have two operations, one for omit, and one for pick)
|
|
1622
1739
|
//
|
|
1623
1740
|
|
|
1741
|
+
// set a boolean flag if we had the silent symbol or not
|
|
1742
|
+
const hadTrueSilentSymbol = boolean(meta[silentSymbol]);
|
|
1624
1743
|
if (!isEmpty(this.config.meta.remappedFields)) {
|
|
1625
|
-
for (const key of
|
|
1744
|
+
for (const key of Reflect.ownKeys(this.config.meta.remappedFields)) {
|
|
1626
1745
|
set(meta, this.config.meta.remappedFields[key], get(meta, key));
|
|
1627
1746
|
unset(meta, key);
|
|
1628
1747
|
// cleanup empty objects after remapping
|
|
@@ -1653,10 +1772,11 @@ class Axe {
|
|
|
1653
1772
|
// <https://stackoverflow.com/a/9882349>
|
|
1654
1773
|
let i = dotified.length;
|
|
1655
1774
|
while (i--) {
|
|
1656
|
-
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);
|
|
1657
1776
|
}
|
|
1658
1777
|
}
|
|
1659
1778
|
}
|
|
1779
|
+
const pickedSymbols = [];
|
|
1660
1780
|
if (!isEmpty(this.config.meta.pickedFields)) {
|
|
1661
1781
|
for (const prop of this.config.meta.pickedFields) {
|
|
1662
1782
|
// response.headers.boop
|
|
@@ -1666,12 +1786,16 @@ class Axe {
|
|
|
1666
1786
|
// response
|
|
1667
1787
|
//
|
|
1668
1788
|
// so we need to split by the first period and omit any keys from dotified starting with it
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
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
|
+
}
|
|
1675
1799
|
}
|
|
1676
1800
|
}
|
|
1677
1801
|
|
|
@@ -1680,12 +1804,38 @@ class Axe {
|
|
|
1680
1804
|
}
|
|
1681
1805
|
}
|
|
1682
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
|
+
//
|
|
1683
1818
|
// now we call pick-deep using the final array
|
|
1819
|
+
//
|
|
1820
|
+
// NOTE: this does not pick symbols nor bigints
|
|
1821
|
+
//
|
|
1684
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
|
+
}
|
|
1685
1835
|
}
|
|
1686
1836
|
|
|
1687
1837
|
// only invoke logger methods if it was not silent
|
|
1688
|
-
if (!this.config.silent) {
|
|
1838
|
+
if (!this.config.silent && !hadTrueSilentSymbol) {
|
|
1689
1839
|
// Show stack trace if necessary (along with any metadata)
|
|
1690
1840
|
if (isError(err) && this.config.showStack) {
|
|
1691
1841
|
if (!this.config.meta.show || isEmpty(meta)) {
|
|
@@ -1713,5 +1863,5 @@ class Axe {
|
|
|
1713
1863
|
module.exports = Axe;
|
|
1714
1864
|
|
|
1715
1865
|
}).call(this)}).call(this,require('_process'))
|
|
1716
|
-
},{"../package.json":
|
|
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)
|
|
1717
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 M(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function F(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}),!F(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 M(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(!M(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(!M(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&F(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.1.0",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:"is_http",hideMeta:"hide_meta"},"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.meta.hideMeta&&n[this.config.meta.hideMeta]?this.config.logger[S](j):this.config.logger[S](j,n):!this.config.meta.show||d(n)||this.config.meta.hideMeta&&n[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&n[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
|
|
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' &&
|
|
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;
|
|
@@ -358,8 +360,10 @@ class Axe {
|
|
|
358
360
|
// (and not have two operations, one for omit, and one for pick)
|
|
359
361
|
//
|
|
360
362
|
|
|
363
|
+
// set a boolean flag if we had the silent symbol or not
|
|
364
|
+
const hadTrueSilentSymbol = boolean(meta[silentSymbol]);
|
|
361
365
|
if (!isEmpty(this.config.meta.remappedFields)) {
|
|
362
|
-
for (const key of
|
|
366
|
+
for (const key of Reflect.ownKeys(this.config.meta.remappedFields)) {
|
|
363
367
|
set(meta, this.config.meta.remappedFields[key], get(meta, key));
|
|
364
368
|
unset(meta, key);
|
|
365
369
|
// cleanup empty objects after remapping
|
|
@@ -390,10 +394,11 @@ class Axe {
|
|
|
390
394
|
// <https://stackoverflow.com/a/9882349>
|
|
391
395
|
let i = dotified.length;
|
|
392
396
|
while (i--) {
|
|
393
|
-
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);
|
|
394
398
|
}
|
|
395
399
|
}
|
|
396
400
|
}
|
|
401
|
+
const pickedSymbols = [];
|
|
397
402
|
if (!isEmpty(this.config.meta.pickedFields)) {
|
|
398
403
|
for (const prop of this.config.meta.pickedFields) {
|
|
399
404
|
// response.headers.boop
|
|
@@ -403,12 +408,16 @@ class Axe {
|
|
|
403
408
|
// response
|
|
404
409
|
//
|
|
405
410
|
// so we need to split by the first period and omit any keys from dotified starting with it
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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
|
+
}
|
|
412
421
|
}
|
|
413
422
|
}
|
|
414
423
|
|
|
@@ -417,12 +426,38 @@ class Axe {
|
|
|
417
426
|
}
|
|
418
427
|
}
|
|
419
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
|
+
//
|
|
420
440
|
// now we call pick-deep using the final array
|
|
441
|
+
//
|
|
442
|
+
// NOTE: this does not pick symbols nor bigints
|
|
443
|
+
//
|
|
421
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
|
+
}
|
|
422
457
|
}
|
|
423
458
|
|
|
424
459
|
// only invoke logger methods if it was not silent
|
|
425
|
-
if (!this.config.silent) {
|
|
460
|
+
if (!this.config.silent && !hadTrueSilentSymbol) {
|
|
426
461
|
// Show stack trace if necessary (along with any metadata)
|
|
427
462
|
if (isError(err) && this.config.showStack) {
|
|
428
463
|
if (!this.config.meta.show || isEmpty(meta)) {
|
|
@@ -447,4 +482,5 @@ class Axe {
|
|
|
447
482
|
});
|
|
448
483
|
}
|
|
449
484
|
}
|
|
450
|
-
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.
|
|
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",
|