axe 10.0.4 → 10.1.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 +53 -75
- package/dist/axe.js +66 -14
- package/dist/axe.min.js +1 -1
- package/lib/index.js +8 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -399,21 +399,21 @@ See [Browser](#browser-1) usage below for more information.
|
|
|
399
399
|
|
|
400
400
|
### Options
|
|
401
401
|
|
|
402
|
-
| Property | Type | Default Value
|
|
403
|
-
| ----------------------- | ----------------- |
|
|
404
|
-
| `showStack` | Boolean | `true`
|
|
405
|
-
| `meta` | Object | See below
|
|
406
|
-
| `meta.show` | Boolean | `true`
|
|
407
|
-
| `meta.remappedFields` | Object | `{}`
|
|
408
|
-
| `meta.omittedFields` | Array | `['level','err','app', 'args']`
|
|
409
|
-
| `meta.pickedFields` | Array | `[]`
|
|
410
|
-
| `meta.cleanupRemapping` | Boolean | `true`
|
|
411
|
-
| `silent` | Boolean | `false`
|
|
412
|
-
| `logger` | Object | `console`
|
|
413
|
-
| `name` | String or Boolean | `false`
|
|
414
|
-
| `level` | String | `"info"`
|
|
415
|
-
| `levels` | Array | `['info','warn','error','fatal']`
|
|
416
|
-
| `appInfo` | Boolean | `true`
|
|
402
|
+
| Property | Type | Default Value | Description | |
|
|
403
|
+
| ----------------------- | ----------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - |
|
|
404
|
+
| `showStack` | Boolean | `true` | Attempts to parse a boolean value from `process.env.AXE_SHOW_STACK`). **If this value is `true`, then if `message` is an instance of an Error, it will be invoked as the first argument to logger methods. If this is `false`, then only the `err.message` will be invoked as the first argument to logger methods.** Basically if `true` it will call `logger.method(err)` and if `false` it will call `logger.method(err.message)`. If you pass `err` as the first argument to a logger method, then it will show the stack trace via `err.stack` typically. | |
|
|
405
|
+
| `meta` | Object | See below | Stores all meta config information (see the following nested properties below). | |
|
|
406
|
+
| `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. | |
|
|
407
|
+
| `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. | |
|
|
408
|
+
| `meta.omittedFields` | Array | `['level','err','app', 'args']` | Attempts to parse an array value from `process.env.AXE_OMIT_META_FIELDS` (`,` delimited) - meaning you can pass a flag `OMIT_META_FIELDS=user,id node app.js`), determining which fields to omit in the metadata passed to logger methods. Supports dot-notation. | |
|
|
409
|
+
| `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. `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. | |
|
|
410
|
+
| `meta.cleanupRemapping` | Boolean | `true` | Whether or not to cleanup empty objects after remapping operations are completed) | |
|
|
411
|
+
| `silent` | Boolean | `false` | Whether or not to invoke logger methods. Pre and post hooks will still run even if this option is set to `false`. | |
|
|
412
|
+
| `logger` | Object | `console` | Defaults to `console` with [console-polyfill][] added automatically, though **you can bring your own logger**. See [custom logger](#custom-logger) – you can pass an instance of `pino`, `signale`, `winston`, `bunyan`, etc. | |
|
|
413
|
+
| `name` | String or Boolean | `false` if `NODE_ENV` is `"development"` otherwise the value of `process.env.HOSTNAME` or `os.hostname()` | The default name for the logger (defaults to `false` in development environments, which does not set `logger.name`) – this is useful if you are using a logger like `pino` which prefixes log output with the name set here. | |
|
|
414
|
+
| `level` | String | `"info"` | The default level of logging to invoke `logger` methods for (defaults to `info`, which includes all logs including info and higher in severity (e.g. `info`, `warn`, `error`, `fatal`) | |
|
|
415
|
+
| `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. | |
|
|
416
|
+
| `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][]). | |
|
|
417
417
|
|
|
418
418
|
### Supported Platforms
|
|
419
419
|
|
|
@@ -584,7 +584,7 @@ Please see Cabin's documentation for [stack traces and error handling](https://g
|
|
|
584
584
|
|
|
585
585
|
### Hooks
|
|
586
586
|
|
|
587
|
-
You can add synchronous "pre" hooks and/or asynchronous/synchronous "post" hooks with Axe. Both pre and post hooks accept four arguments (`level`, `err`, `message`, and `meta`). Pre hooks are required to be synchronous.
|
|
587
|
+
You can add synchronous "pre" hooks and/or asynchronous/synchronous "post" hooks with Axe. Both pre and post hooks accept four arguments (`level`, `err`, `message`, and `meta`). Pre hooks are required to be synchronous. Pre hooks also run before any metadata is picked, omitted, remapped, etc.
|
|
588
588
|
|
|
589
589
|
Both pre and post hooks execute serially – and while pre hooks are blocking, post-hooks will run in the background after logger methods are invoked (you can have a post hook that's a Promise or async function).
|
|
590
590
|
|
|
@@ -736,80 +736,61 @@ This is an example of using hooks to send a POST request to an HTTP endpoint wit
|
|
|
736
736
|
|
|
737
737
|
We recommend [superagent](https://github.com/visionmedia/superagent), however there are plenty of alternatives such as [axios](https://github.com/axios/axios) and [ky](https://github.com/sindresorhus/ky).
|
|
738
738
|
|
|
739
|
-
1. You will need to install
|
|
739
|
+
1. You will also need to install additional packages:
|
|
740
740
|
|
|
741
741
|
```sh
|
|
742
|
-
npm install
|
|
742
|
+
npm install axe fast-safe-stringify cuid superagent
|
|
743
743
|
```
|
|
744
744
|
|
|
745
|
-
2. Implementation example is provided below:
|
|
745
|
+
2. Implementation example is provided below (and you can also refer to the [Forward Email][forward-email-code] code base):
|
|
746
746
|
|
|
747
747
|
```js
|
|
748
|
-
const os = require('os');
|
|
749
|
-
|
|
750
748
|
const Axe = require('axe');
|
|
751
|
-
const superagent = require('superagent');
|
|
752
|
-
const cuid = require('cuid');
|
|
753
749
|
const safeStringify = require('fast-safe-stringify');
|
|
750
|
+
const cuid = require('cuid');
|
|
751
|
+
const superagent = require('superagent');
|
|
754
752
|
|
|
755
|
-
|
|
756
|
-
const logger = new Axe({
|
|
757
|
-
logger: console, // optional (e.g. pino, signale, consola),
|
|
758
|
-
level: 'info', // optional (defaults to info)
|
|
759
|
-
name: process.env.HOSTNAME || os.hostname() // optional
|
|
760
|
-
});
|
|
753
|
+
const logger = new Axe();
|
|
761
754
|
|
|
762
|
-
|
|
755
|
+
// <https://github.com/cabinjs/axe/#send-logs-to-http-endpoint>
|
|
756
|
+
async function hook(err, message, meta) {
|
|
763
757
|
//
|
|
764
758
|
// return early if we wish to ignore this
|
|
765
759
|
// (this prevents recursion; see end of this fn)
|
|
766
760
|
//
|
|
767
|
-
if (meta.
|
|
761
|
+
if (meta.ignore_hook) return;
|
|
768
762
|
|
|
769
763
|
try {
|
|
770
|
-
//
|
|
771
|
-
// set the body used in the HTTP request to be consistent object with
|
|
772
|
-
// two properties sent in the payload of `message` and `meta`
|
|
773
|
-
// (and also remove circular references)
|
|
774
|
-
//
|
|
775
|
-
const body = safeStringify({ message, meta });
|
|
776
|
-
|
|
777
|
-
//
|
|
778
|
-
// send to Cabin or your own custom endpoint here
|
|
779
|
-
// https://cabinjs.com
|
|
780
|
-
//
|
|
781
764
|
const request = superagent
|
|
782
|
-
.post(
|
|
783
|
-
|
|
765
|
+
.post(`https://api.example.com/v1/log`)
|
|
766
|
+
// if the meta object already contained a request ID then re-use it
|
|
767
|
+
// otherwise generate one that gets re-used in the API log request
|
|
768
|
+
// (which normalizes server/browser request id formatting)
|
|
769
|
+
.set(
|
|
770
|
+
'X-Request-Id',
|
|
771
|
+
meta && meta.request && meta.request.id ? meta.request.id : cuid()
|
|
772
|
+
)
|
|
784
773
|
.set('X-Axe-Version', logger.config.version)
|
|
785
774
|
.timeout(5000);
|
|
786
775
|
|
|
787
|
-
//
|
|
788
|
-
//
|
|
789
|
-
|
|
790
|
-
// set any additional headers if necessary
|
|
791
|
-
// request.set({ ... });
|
|
776
|
+
// if your endpoint is protected by an API token
|
|
777
|
+
// note that superagent exposes `.auth()` method
|
|
778
|
+
// request.auth(API_TOKEN);
|
|
792
779
|
|
|
793
780
|
const response = await request
|
|
794
781
|
.type('application/json')
|
|
795
782
|
.retry(3)
|
|
796
|
-
.send(
|
|
783
|
+
.send(safeStringify({ err, message, meta }));
|
|
797
784
|
|
|
798
|
-
logger.info('log sent over HTTP', { response });
|
|
785
|
+
logger.info('log sent over HTTP', { response, ignore_hook: true });
|
|
799
786
|
} catch (err) {
|
|
800
|
-
logger.fatal(err, {
|
|
787
|
+
logger.fatal(err, { ignore_hook: true });
|
|
801
788
|
}
|
|
802
|
-
|
|
803
|
-
// move along to the next hook
|
|
804
|
-
next();
|
|
805
789
|
}
|
|
806
790
|
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
// test out the HTTP integration
|
|
812
|
-
logger.error(new Error('Uh oh something went wrong!'));
|
|
791
|
+
for (const level of logger.config.levels) {
|
|
792
|
+
logger.post(level, hook);
|
|
793
|
+
}
|
|
813
794
|
```
|
|
814
795
|
|
|
815
796
|
### Send Logs to Slack
|
|
@@ -837,8 +818,7 @@ This is an example of using hooks to send a message to Slack with logs of the "f
|
|
|
837
818
|
// create our application logger that uses hooks
|
|
838
819
|
const logger = new Axe({
|
|
839
820
|
logger: console, // optional (e.g. pino, signale, consola)
|
|
840
|
-
level: 'info'
|
|
841
|
-
name: process.env.HOSTNAME || os.hostname() // optional
|
|
821
|
+
level: 'info' // optional (defaults to info)
|
|
842
822
|
});
|
|
843
823
|
|
|
844
824
|
// create an instance of the Slack Web Client API for posting messages
|
|
@@ -848,12 +828,12 @@ This is an example of using hooks to send a message to Slack with logs of the "f
|
|
|
848
828
|
logLevel: logger.config.level
|
|
849
829
|
});
|
|
850
830
|
|
|
851
|
-
async function hook(
|
|
831
|
+
async function hook(err, message, meta) {
|
|
852
832
|
//
|
|
853
833
|
// return early if we wish to ignore this
|
|
854
834
|
// (this prevents recursion; see end of this fn)
|
|
855
835
|
//
|
|
856
|
-
if (meta.
|
|
836
|
+
if (meta.ignore_hook) return;
|
|
857
837
|
|
|
858
838
|
// otherwise post a message to the slack channel
|
|
859
839
|
try {
|
|
@@ -863,9 +843,9 @@ This is an example of using hooks to send a message to Slack with logs of the "f
|
|
|
863
843
|
icon_emoji: ':axe:',
|
|
864
844
|
attachments: [
|
|
865
845
|
{
|
|
866
|
-
title:
|
|
846
|
+
title: err && err.message ? err.message : message,
|
|
867
847
|
color: 'danger',
|
|
868
|
-
text:
|
|
848
|
+
text: err && err.stack ? err.stack : message,
|
|
869
849
|
fields: [
|
|
870
850
|
{
|
|
871
851
|
title: 'Level',
|
|
@@ -895,11 +875,8 @@ This is an example of using hooks to send a message to Slack with logs of the "f
|
|
|
895
875
|
// finally log the result from slack
|
|
896
876
|
logger.info('slack message sent', { result });
|
|
897
877
|
} catch (err) {
|
|
898
|
-
logger.fatal(err, {
|
|
878
|
+
logger.fatal(err, { ignore_hook: true });
|
|
899
879
|
}
|
|
900
|
-
|
|
901
|
-
// move along to the next hook
|
|
902
|
-
next();
|
|
903
880
|
}
|
|
904
881
|
|
|
905
882
|
// bind custom hooks for "fatal" and "error" log levels
|
|
@@ -931,14 +908,13 @@ Sentry.init({
|
|
|
931
908
|
});
|
|
932
909
|
|
|
933
910
|
for (const level of logger.config.levels) {
|
|
934
|
-
logger.post(level, (
|
|
911
|
+
logger.post(level, (err, message, meta) => {
|
|
935
912
|
// https://docs.sentry.io/clients/node/usage/
|
|
936
|
-
if (
|
|
937
|
-
Sentry.captureException(
|
|
913
|
+
if (err) {
|
|
914
|
+
Sentry.captureException(err, meta);
|
|
938
915
|
} else {
|
|
939
916
|
Sentry.captureMessage(message, meta);
|
|
940
917
|
}
|
|
941
|
-
next();
|
|
942
918
|
});
|
|
943
919
|
}
|
|
944
920
|
|
|
@@ -1056,6 +1032,8 @@ logger.error(new Error('oops!'), {
|
|
|
1056
1032
|
|
|
1057
1033
|
[forward-email]: https://forwardemail.net
|
|
1058
1034
|
|
|
1035
|
+
[forward-email-code]: https://github.com/forwardemail/forwardemail.net
|
|
1036
|
+
|
|
1059
1037
|
[high-console]: https://github.com/tusharf5/high-console
|
|
1060
1038
|
|
|
1061
1039
|
[maybe-combine-errors]: https://github.com/vweevers/maybe-combine-errors
|
package/dist/axe.js
CHANGED
|
@@ -780,6 +780,56 @@ module.exports = function () {
|
|
|
780
780
|
};
|
|
781
781
|
|
|
782
782
|
},{"is-plain-obj":14}],20:[function(require,module,exports){
|
|
783
|
+
exports.endianness = function () {
|
|
784
|
+
return 'LE';
|
|
785
|
+
};
|
|
786
|
+
exports.hostname = function () {
|
|
787
|
+
if (typeof location !== 'undefined') {
|
|
788
|
+
return location.hostname;
|
|
789
|
+
} else return '';
|
|
790
|
+
};
|
|
791
|
+
exports.loadavg = function () {
|
|
792
|
+
return [];
|
|
793
|
+
};
|
|
794
|
+
exports.uptime = function () {
|
|
795
|
+
return 0;
|
|
796
|
+
};
|
|
797
|
+
exports.freemem = function () {
|
|
798
|
+
return Number.MAX_VALUE;
|
|
799
|
+
};
|
|
800
|
+
exports.totalmem = function () {
|
|
801
|
+
return Number.MAX_VALUE;
|
|
802
|
+
};
|
|
803
|
+
exports.cpus = function () {
|
|
804
|
+
return [];
|
|
805
|
+
};
|
|
806
|
+
exports.type = function () {
|
|
807
|
+
return 'Browser';
|
|
808
|
+
};
|
|
809
|
+
exports.release = function () {
|
|
810
|
+
if (typeof navigator !== 'undefined') {
|
|
811
|
+
return navigator.appVersion;
|
|
812
|
+
}
|
|
813
|
+
return '';
|
|
814
|
+
};
|
|
815
|
+
exports.networkInterfaces = exports.getNetworkInterfaces = function () {
|
|
816
|
+
return {};
|
|
817
|
+
};
|
|
818
|
+
exports.arch = function () {
|
|
819
|
+
return 'javascript';
|
|
820
|
+
};
|
|
821
|
+
exports.platform = function () {
|
|
822
|
+
return 'browser';
|
|
823
|
+
};
|
|
824
|
+
exports.tmpdir = exports.tmpDir = function () {
|
|
825
|
+
return '/tmp';
|
|
826
|
+
};
|
|
827
|
+
exports.EOL = '\n';
|
|
828
|
+
exports.homedir = function () {
|
|
829
|
+
return '/';
|
|
830
|
+
};
|
|
831
|
+
|
|
832
|
+
},{}],21:[function(require,module,exports){
|
|
783
833
|
'use strict';
|
|
784
834
|
|
|
785
835
|
const pMapSeries = async (iterable, mapper) => {
|
|
@@ -795,7 +845,7 @@ module.exports = pMapSeries;
|
|
|
795
845
|
// TODO: Remove this for the next major release
|
|
796
846
|
module.exports.default = pMapSeries;
|
|
797
847
|
|
|
798
|
-
},{}],
|
|
848
|
+
},{}],22:[function(require,module,exports){
|
|
799
849
|
"use strict";
|
|
800
850
|
|
|
801
851
|
var isError = require('iserror'); // we want to support parsing other fields than the standard:
|
|
@@ -817,7 +867,7 @@ var parseErr = function parseErr(err) {
|
|
|
817
867
|
};
|
|
818
868
|
module.exports = parseErr;
|
|
819
869
|
|
|
820
|
-
},{"iserror":15}],
|
|
870
|
+
},{"iserror":15}],23:[function(require,module,exports){
|
|
821
871
|
'use strict';
|
|
822
872
|
|
|
823
873
|
const get = require('@strikeentco/get');
|
|
@@ -852,7 +902,7 @@ module.exports = function (obj, paths) {
|
|
|
852
902
|
return pick(obj, paths, length, sep);
|
|
853
903
|
};
|
|
854
904
|
|
|
855
|
-
},{"@strikeentco/get":2,"@strikeentco/set":3}],
|
|
905
|
+
},{"@strikeentco/get":2,"@strikeentco/set":3}],24:[function(require,module,exports){
|
|
856
906
|
// shim for using process in browser
|
|
857
907
|
var process = module.exports = {};
|
|
858
908
|
|
|
@@ -1029,7 +1079,7 @@ process.umask = function () {
|
|
|
1029
1079
|
return 0;
|
|
1030
1080
|
};
|
|
1031
1081
|
|
|
1032
|
-
},{}],
|
|
1082
|
+
},{}],25:[function(require,module,exports){
|
|
1033
1083
|
/*!
|
|
1034
1084
|
* unset-value <https://github.com/jonschlinkert/unset-value>
|
|
1035
1085
|
*
|
|
@@ -1074,11 +1124,11 @@ module.exports = function unset(obj, prop) {
|
|
|
1074
1124
|
return true;
|
|
1075
1125
|
};
|
|
1076
1126
|
|
|
1077
|
-
},{"has-value":12,"isobject":16}],
|
|
1127
|
+
},{"has-value":12,"isobject":16}],26:[function(require,module,exports){
|
|
1078
1128
|
module.exports={
|
|
1079
1129
|
"name": "axe",
|
|
1080
1130
|
"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.",
|
|
1081
|
-
"version": "10.0
|
|
1131
|
+
"version": "10.1.0",
|
|
1082
1132
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
1083
1133
|
"browser": {
|
|
1084
1134
|
"parse-app-info": false
|
|
@@ -1211,10 +1261,11 @@ module.exports={
|
|
|
1211
1261
|
"unpkg": "dist/axe.min.js"
|
|
1212
1262
|
}
|
|
1213
1263
|
|
|
1214
|
-
},{}],
|
|
1264
|
+
},{}],27:[function(require,module,exports){
|
|
1215
1265
|
(function (process){(function (){
|
|
1216
1266
|
// eslint-disable-next-line import/no-unassigned-import
|
|
1217
1267
|
require('console-polyfill');
|
|
1268
|
+
const os = require('os');
|
|
1218
1269
|
const combine = require('maybe-combine-errors');
|
|
1219
1270
|
const format = require('@ladjs/format-util');
|
|
1220
1271
|
const formatSpecifiers = require('format-specifiers');
|
|
@@ -1238,6 +1289,7 @@ const aliases = {
|
|
|
1238
1289
|
err: 'error'
|
|
1239
1290
|
};
|
|
1240
1291
|
const levelError = `\`level\` invalid, must be: ${levels.join(', ')}`;
|
|
1292
|
+
const name = process.env.NODE_ENV === 'development' ? false : process.env.HOSTNAME || os.hostname();
|
|
1241
1293
|
|
|
1242
1294
|
// <https://github.com/sindresorhus/is-plain-obj/blob/main/index.js>
|
|
1243
1295
|
function isPlainObject(value) {
|
|
@@ -1309,7 +1361,7 @@ class Axe {
|
|
|
1309
1361
|
version: pkg.version,
|
|
1310
1362
|
silent: false,
|
|
1311
1363
|
logger: console,
|
|
1312
|
-
name
|
|
1364
|
+
name,
|
|
1313
1365
|
level: 'info',
|
|
1314
1366
|
levels: ['info', 'warn', 'error', 'fatal'],
|
|
1315
1367
|
appInfo: process.env.AXE_APP_INFO ? boolean(process.env.AXE_APP_INFO) : true,
|
|
@@ -1533,6 +1585,11 @@ class Axe {
|
|
|
1533
1585
|
//
|
|
1534
1586
|
const method = modifier === -1 ? 'log' : level;
|
|
1535
1587
|
|
|
1588
|
+
// pre-hooks
|
|
1589
|
+
for (const hook of this.config.hooks.pre) {
|
|
1590
|
+
[err, message, meta] = hook(method, err, message, meta);
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1536
1593
|
//
|
|
1537
1594
|
// NOTE: using lodash _.omit and _.pick would have been _very slow_
|
|
1538
1595
|
//
|
|
@@ -1609,11 +1666,6 @@ class Axe {
|
|
|
1609
1666
|
meta = pickDeep(meta, dotified);
|
|
1610
1667
|
}
|
|
1611
1668
|
|
|
1612
|
-
// pre-hooks
|
|
1613
|
-
for (const hook of this.config.hooks.pre) {
|
|
1614
|
-
[err, message, meta] = hook(method, err, message, meta);
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
1669
|
// only invoke logger methods if it was not silent
|
|
1618
1670
|
if (!config.silent) {
|
|
1619
1671
|
// Show stack trace if necessary (along with any metadata)
|
|
@@ -1639,5 +1691,5 @@ class Axe {
|
|
|
1639
1691
|
module.exports = Axe;
|
|
1640
1692
|
|
|
1641
1693
|
}).call(this)}).call(this,require('_process'))
|
|
1642
|
-
},{"../package.json":
|
|
1694
|
+
},{"../package.json":26,"@ladjs/format-util":1,"@strikeentco/get":2,"@strikeentco/set":3,"_process":24,"boolean":5,"console-polyfill":8,"format-specifiers":9,"iserror":15,"maybe-combine-errors":18,"merge-options":19,"os":20,"p-map-series":21,"parse-app-info":7,"parse-err":22,"pick-deep":23,"unset-value":25}]},{},[27])(27)
|
|
1643
1695
|
});
|
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);const e=Symbol("kErrors");class t extends Error{constructor(t){const o=new Set(t.map(i).filter(Boolean));super(Array.from(o).join("; ")),r(this,"name","CombinedError"),r(this,e,t),n(this,"stack",()=>t.map(s).join("\n\n")),n(this,"transient",()=>t.length>0&&t.every(c)),n(this,"expected",()=>t.length>0&&t.every(a))}[Symbol.iterator](){return this[e][Symbol.iterator]()}}function r(e,t,r){Object.defineProperty(e,t,{value:r})}function n(e,t,r){Object.defineProperty(e,t,{get:r})}function o(e){return null!=e}function i(e){return e.message}function s(e){return e.stack}function c(e){return!0===e.transient}function a(e){return!0===e.expected}var f=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,"%")},l=["%s","%d","%i","%f","%j","%o","%O","%%"],u=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}},p=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:h}=Object.prototype,{propertyIsEnumerable:y}=Object,d=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),b=this,m={concatArrays:!1,ignoreUndefined:!1},v=e=>{const t=[];for(const r in e)h.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)y.call(e,n)&&t.push(n)}return t};function A(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return v(e).forEach(r=>{d(t,r,A(e[r]))}),t}(e):p(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return v(e).forEach(r=>{d(t,r,A(e[r]))}),t}(e):e}const j=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?d(e,r,O(e[r],t[r],n)):d(e,r,A(t[r])))}),e);function O(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++)h.call(t,r)&&(i.push(String(r)),d(n,o++,t===e?t[r]:A(t[r])));n=j(n,t,v(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):p(t)&&p(e)?j(e,t,v(t),r):A(t)}var w={};const E=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(w=E).default=E;var S={},_=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 T=e=>"object"==typeof e||"function"==typeof e,k=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!T(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(k(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];k(e,o)||(o=T(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},x=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 L(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function F(e){return x(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function N(e){return"function"==typeof e.constructor?e.constructor.name:null}var C=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"===N(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(N(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=M.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}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&C(function(e,t,r){if(x(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 L(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(!L(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(!L(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 X=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=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(D(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(),X(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,H,K,V="10.0.4",G=R={};function J(){throw new Error("setTimeout has not been defined")}function $(){throw new Error("clearTimeout has not been defined")}function q(e){if(H===setTimeout)return setTimeout(e,0);if((H===J||!H)&&setTimeout)return H=setTimeout,setTimeout(e,0);try{return H(e,0)}catch(t){try{return H.call(null,e,0)}catch(t){return H.call(this,e,0)}}}!function(){try{H="function"==typeof setTimeout?setTimeout:J}catch(e){H=J}try{K="function"==typeof clearTimeout?clearTimeout:$}catch(e){K=$}}();var Q,Y=[],Z=!1,ee=-1;function te(){Z&&Q&&(Z=!1,Q.length?Y=Q.concat(Y):ee=-1,Y.length&&re())}function re(){if(!Z){var e=q(te);Z=!0;for(var t=Y.length;t;){for(Q=Y,Y=[];++ee<t;)Q&&Q[ee].run();ee=-1,t=Y.length}Q=null,Z=!1,function(e){if(K===clearTimeout)return clearTimeout(e);if((K===$||!K)&&clearTimeout)return K=clearTimeout,clearTimeout(e);try{K(e)}catch(t){try{return K.call(null,e)}catch(t){return K.call(this,e)}}}(e)}}function ne(e,t){this.fun=e,this.array=t}function oe(){}G.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];Y.push(new ne(e,t)),1!==Y.length||Z||q(re)},ne.prototype.run=function(){this.fun.apply(null,this.array)},G.title="browser",G.browser=!0,G.env={},G.argv=[],G.version="",G.versions={},G.on=oe,G.addListener=oe,G.once=oe,G.off=oe,G.removeListener=oe,G.removeAllListeners=oe,G.emit=oe,G.prependListener=oe,G.prependOnceListener=oe,G.listeners=function(e){return[]},G.binding=function(e){throw new Error("process.binding is not supported")},G.cwd=function(){return"/"},G.chdir=function(e){throw new Error("process.chdir is not supported")},G.umask=function(){return 0};var ie={};return function(e){(function(){const{boolean:r}=z,n=new Set(["config","log"]),i=["trace","debug","info","warn","error","fatal"],s={warning:"warn",err:"error"},c="`level` invalid, must be: "+i.join(", ");function a(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 h(e){return null==e||"object"==typeof e&&0===Object.keys(e).length||"string"==typeof e&&0===e.trim().length}function y(e){return void 0===e}function d(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function v(e){return"string"==typeof e}ie=class{constructor(){var t=this;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const s={};if(e.env.AXE_REMAPPED_META_FIELDS){const t=e.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[e,r]of t)s[e]=r}this.config=function(){const e=O(A(m),this!==b&&this||{},m);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(!p(i))throw new TypeError("`"+i+"` is not an Option Object");t=O(t,{_:i},e)}return t._}({showStack:!e.env.AXE_SHOW_STACK||r(e.env.AXE_SHOW_STACK),meta:Object.assign({show:!e.env.AXE_SHOW_META||r(e.env.AXE_SHOW_META),remappedFields:s,omittedFields:e.env.AXE_OMIT_META_FIELDS?e.env.AXE_OMIT_META_FIELDS.split(",").map(e=>e.trim()):["level","err","app","args"],pickedFields:e.env.AXE_PICK_META_FIELDS?e.env.AXE_PICK_META_FIELDS.split(",").map(e=>e.trim()):[],cleanupRemapping:!0},"object"==typeof o.meta?o.meta:{}),version:V,silent:!1,logger:console,name:!1,level:"info",levels:["info","warn","error","fatal"],appInfo:!e.env.AXE_APP_INFO||r(e.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof o.hooks?o.hooks:{})},o),this.appInfo=!!this.config.appInfo&&"function"==typeof S&&S(),this.log=this.log.bind(this);const c=Object.keys(this.config.logger).filter(e=>!n.has(e));for(const e of c)this[e]=this.config.logger[e];for(const e of i)"function"!=typeof this.config.logger[e]&&("fatal"===e?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[e]=this.config.logger.info||this.config.logger.log),this[e]=function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return t.log(e,...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(!v(e)||-1===i.indexOf(e))throw new Error(c);v(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=i.slice(i.indexOf(e))}getNormalizedLevel(e){return v(e)?v(s[e])?s[e]:-1===i.indexOf(e)?"info":e:"info"}setName(e){if(!v(e))throw new Error("`name` must be a String");v(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,r,n){const c=[],p=[];y(e)||c.push(e),y(r)||c.push(r),y(n)||c.push(n);for(var b=arguments.length,m=new Array(b>3?b-3:0),A=3;A<b;A++)m[A-3]=arguments[A];for(const t of Array.prototype.slice.call(m))c.push(t);const{config:j}=this;let O=0;if(v(e)&&v(s[e])?e=s[e]:g(e)?(n=r,r=e,e="error"):v(e)&&-1!==i.indexOf(e)||(n=r,r=e,e=this.getNormalizedLevel(e),O=-1),-1===j.levels.indexOf(e))return;let E,S=!1;if((d(r)||Array.isArray(r))&&v(n)){S=!0;const e=n;n=r,r=v(e)&&c.length>=3+O?f(...c.slice(2+O)):e}if(y(r)&&(r=e),1!==c.slice(1+O).length||v(r)||g(r))if(!S&&c.length>=4+O){r=void 0,n={};const t=[];for(const e of c)g(e)?p.push(e):v(e)&&t.push(e);0===p.length&&t.length>0?r=f(...t):p.length>0&&"log"===e&&(e="error")}else if(!S&&c.length===3+O&&v(r)&&l.some(e=>-1!==r.indexOf(e)))r=f(r,n),n={};else if(g(r)){if(g(n)){p.push(n);for(const e of c.slice(2+O))n!==e&&g(e)&&p.push(e);n={}}}else g(n)?(p.push(n),n={}):d(n)||y(n)||null===n?v(r)||(r=f(r)):(r=f(r,n),n={});else n={message:r},r=e;y(n)||d(n)?d(n)||(n={}):n={original_meta:n},g(r)&&(p.unshift(r),r=void 0),d(n.err)&&(g(n.err)&&p.push(n.err),n.original_err=g(n.err)?_(n.err):n.err),p.length>0&&(E=function(e){if(0!==(e=e.filter(o)).length)return 1===e.length?e[0]:new t(e)}(p),n.err=_(E),v(r)||(r=E.message)),n.args=c,n.level=e,this.appInfo&&(n.app=this.appInfo);const T=-1===O?"log":e;if(!h(this.config.meta.remappedFields))for(const t of Object.keys(this.config.meta.remappedFields))if(P(n,this.config.meta.remappedFields[t],u(n,t)),B(n,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);h(u(n,r))&&B(n,r)}if(!h(this.config.meta.omittedFields)||!h(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;a(i)?e(i,s):t.push(s)}}(e),t}(n);if(!h(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(!h(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=u(e,n,r);return void 0!==o?P({},n,o,r):{}}return((e,t,r,n)=>{const o={};for(let i=0;i<r;i++){const r=t[i],s=u(e,r,n);void 0!==s&&P(o,r,s,n)}return o})(e,t,o,r)}(n,e)}for(const t of this.config.hooks.pre)[E,r,n]=t(T,E,r,n);j.silent||(g(E)&&j.showStack?!j.meta.show||h(n)?this.config.logger[T](E):this.config.logger[T](E,n):!j.meta.show||h(n)?this.config.logger[T](r):this.config.logger[T](r,n)),w(this.config.hooks.post,e=>e(T,E,r,n)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,R),ie}));
|
|
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","%%"],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}},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 O(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return A(e).forEach(r=>{m(t,r,O(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,O(e[r]))}),t}(e):e}const j=(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,O(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]:O(t[r])));n=j(n,t,A(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):h(t)&&h(e)?j(e,t,A(t),r):O(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(!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 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)},I=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function L(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function F(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function M(e){return I(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(I(r)||(r={default:r}),!M(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return F(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=c.length,f=0;do{let t=c[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=L([t.slice(0,-1),c[++f]||""],s,r);if(t in e){if(!F(t,e,r))return r.default;e=e[t]}else{let n=!1,o=f+1;for(;o<a;)if(n=(t=L([t,c[o++]],s,r))in e){if(!F(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&M(e));return f===a?e:r.default}(e,t,r));var n};const B=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var U=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},W={};Object.defineProperty(W,"__esModule",{value:!0}),W.boolean=void 0,W.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 z={};Object.defineProperty(z,"__esModule",{value:!0}),z.isBooleanable=void 0,z.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 H={};Object.defineProperty(H,"__esModule",{value:!0}),H.boolean=void 0,Object.defineProperty(H,"boolean",{enumerable:!0,get:function(){return W.boolean}}),Object.defineProperty(H,"isBooleanable",{enumerable:!0,get:function(){return z.isBooleanable}});var R,K,V,G="10.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}=H,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 j(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}this.config=function(){const e=w(O(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:t.env.AXE_OMIT_META_FIELDS?t.env.AXE_OMIT_META_FIELDS.split(",").map(e=>e.trim()):["level","err","app","args"],pickedFields:t.env.AXE_PICK_META_FIELDS?t.env.AXE_PICK_META_FIELDS.split(",").map(e=>e.trim()):[],cleanupRemapping:!0},"object"==typeof r.meta?r.meta:{}),version:G,silent:!1,logger:console,name:f,level:"info",levels:["info","warn","error","fatal"],appInfo:!t.env.AXE_APP_INFO||n(t.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof r.hooks?r.hooks:{})},r),this.appInfo=!!this.config.appInfo&&"function"==typeof _&&_(),this.log=this.log.bind(this);const c=Object.keys(this.config.logger).filter(e=>!o.has(e));for(const t of c)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(c[e])?c[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,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);const{config:v}=this;let O=0;if(j(e)&&j(c[e])?e=c[e]:g(e)?(n=t,t=e,e="error"):j(e)&&-1!==s.indexOf(e)||(n=t,t=e,e=this.getNormalizedLevel(e),O=-1),-1===v.levels.indexOf(e))return;let w,S=!1;if((A(t)||Array.isArray(t))&&j(n)){S=!0;const e=n;n=t,t=j(e)&&o.length>=3+O?l(...o.slice(2+O)):e}if(m(t)&&(t=e),1!==o.slice(1+O).length||j(t)||g(t))if(!S&&o.length>=4+O){t=void 0,n={};const r=[];for(const e of o)g(e)?a.push(e):j(e)&&r.push(e);0===a.length&&r.length>0?t=l(...r):a.length>0&&"log"===e&&(e="error")}else if(!S&&o.length===3+O&&j(t)&&u.some(e=>-1!==t.indexOf(e)))t=l(t,n),n={};else if(g(t)){if(g(n)){a.push(n);for(const e of o.slice(2+O))n!==e&&g(e)&&a.push(e);n={}}}else g(n)?(a.push(n),n={}):A(n)||m(n)||null===n?j(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},g(t)&&(a.unshift(t),t=void 0),A(n.err)&&(g(n.err)&&a.push(n.err),n.original_err=g(n.err)?T(n.err):n.err),a.length>0&&(w=function(e){if(0!==(e=e.filter(i)).length)return 1===e.length?e[0]:new r(e)}(a),n.err=T(w),j(t)||(t=w.message)),n.args=o,n.level=e,this.appInfo&&(n.app=this.appInfo);const _=-1===O?"log":e;for(const r of this.config.hooks.pre)[w,t,n]=r(_,w,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],p(n,r)),U(n,r),this.config.meta.cleanupRemapping){const e=r.lastIndexOf(".");if(-1===e)continue;const t=r.slice(0,e);d(p(n,t))&&U(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=p(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=p(e,r,n);void 0!==s&&x(o,r,s,n)}return o})(e,t,o,r)}(n,e)}v.silent||(g(w)&&v.showStack?!v.meta.show||d(n)?this.config.logger[_](w):this.config.logger[_](w,n):!v.meta.show||d(n)?this.config.logger[_](t):this.config.logger[_](t,n)),E(this.config.hooks.post,e=>e(_,w,t,n)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,R),se}));
|
package/lib/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// eslint-disable-next-line import/no-unassigned-import
|
|
4
4
|
require('console-polyfill');
|
|
5
|
+
const os = require('os');
|
|
5
6
|
const combine = require('maybe-combine-errors');
|
|
6
7
|
const format = require('@ladjs/format-util');
|
|
7
8
|
const formatSpecifiers = require('format-specifiers');
|
|
@@ -25,6 +26,7 @@ const aliases = {
|
|
|
25
26
|
err: 'error'
|
|
26
27
|
};
|
|
27
28
|
const levelError = `\`level\` invalid, must be: ${levels.join(', ')}`;
|
|
29
|
+
const name = process.env.NODE_ENV === 'development' ? false : process.env.HOSTNAME || os.hostname();
|
|
28
30
|
|
|
29
31
|
// <https://github.com/sindresorhus/is-plain-obj/blob/main/index.js>
|
|
30
32
|
function isPlainObject(value) {
|
|
@@ -96,7 +98,7 @@ class Axe {
|
|
|
96
98
|
version: pkg.version,
|
|
97
99
|
silent: false,
|
|
98
100
|
logger: console,
|
|
99
|
-
name
|
|
101
|
+
name,
|
|
100
102
|
level: 'info',
|
|
101
103
|
levels: ['info', 'warn', 'error', 'fatal'],
|
|
102
104
|
appInfo: process.env.AXE_APP_INFO ? boolean(process.env.AXE_APP_INFO) : true,
|
|
@@ -320,6 +322,11 @@ class Axe {
|
|
|
320
322
|
//
|
|
321
323
|
const method = modifier === -1 ? 'log' : level;
|
|
322
324
|
|
|
325
|
+
// pre-hooks
|
|
326
|
+
for (const hook of this.config.hooks.pre) {
|
|
327
|
+
[err, message, meta] = hook(method, err, message, meta);
|
|
328
|
+
}
|
|
329
|
+
|
|
323
330
|
//
|
|
324
331
|
// NOTE: using lodash _.omit and _.pick would have been _very slow_
|
|
325
332
|
//
|
|
@@ -396,11 +403,6 @@ class Axe {
|
|
|
396
403
|
meta = pickDeep(meta, dotified);
|
|
397
404
|
}
|
|
398
405
|
|
|
399
|
-
// pre-hooks
|
|
400
|
-
for (const hook of this.config.hooks.pre) {
|
|
401
|
-
[err, message, meta] = hook(method, err, message, meta);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
406
|
// only invoke logger methods if it was not silent
|
|
405
407
|
if (!config.silent) {
|
|
406
408
|
// Show stack trace if necessary (along with any metadata)
|
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": "10.0
|
|
4
|
+
"version": "10.1.0",
|
|
5
5
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
6
6
|
"browser": {
|
|
7
7
|
"parse-app-info": false
|