From fc2ba410ad83d6a7638ca2d3270e534360619725 Mon Sep 17 00:00:00 2001 From: Harlen Tan Date: Thu, 24 Aug 2017 17:59:00 +0800 Subject: [PATCH 001/454] fix worker will die if the master exit --- lib/appenders/multiprocess.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 09e75a48..9d88d400 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -128,6 +128,7 @@ function workerAppender(config) { socket.on('timeout', socket.end.bind(socket)); // don't bother listening for 'error', 'close' gets called after that anyway socket.on('close', createSocket); + socket.on('error', () => {}); } createSocket(); From 5679eed0220b13f175da2245f0bfd409ce0c51d2 Mon Sep 17 00:00:00 2001 From: Leoni Murilo de Lima Date: Tue, 28 Jan 2020 15:34:44 -0300 Subject: [PATCH 002/454] Update Loading mechanism instruction #1 Update Loading mechanism instruction (number 1 in priority) to match the current behaviour of the library. --- docs/writing-appenders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/writing-appenders.md b/docs/writing-appenders.md index e09ea516..94c2b9c4 100644 --- a/docs/writing-appenders.md +++ b/docs/writing-appenders.md @@ -7,7 +7,7 @@ Log4js can load appenders from outside its core set. To add a custom appender, t When log4js parses your configuration, it loops through the defined appenders. For each one, it will `require` the appender initially using the `type` value prepended with './appenders' as the module identifier - this is to try loading from the core appenders first. If that fails (the module could not be found in the core appenders), then log4js will try to require the module using variations of the `type` value. Log4js checks the following places (in this order) for appenders based on the type value: -1. The core appenders: `require('./appenders/' + type)` +1. The core appenders: `require('./' + type)` 2. node_modules: `require(type)` 3. relative to the main file of your application: `require(path.dirname(require.main.filename) + '/' + type)` 4. relative to the process' current working directory: `require(process.cwd() + '/' + type)` From b342383276787ade3e401d4db1fbe3e590030b98 Mon Sep 17 00:00:00 2001 From: abetomo Date: Mon, 25 May 2020 09:14:32 +0900 Subject: [PATCH 003/454] test(travis-ci): Add Node.js14 to Travis CI configuration --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6e62390e..1f356c1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ os: - windows sudo: false node_js: + - "14" - "12" - "10" - "8" From b5f320e0fdfc871dc78f0b3eac89904774fa5b03 Mon Sep 17 00:00:00 2001 From: abetomo Date: Tue, 26 May 2020 09:19:32 +0900 Subject: [PATCH 004/454] test(improvement): Add tearDown to unit tests This leaves the following Untracked files. `test/tap/freeze-date-file-test` --- test/tap/configuration-validation-test.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index fb965b3b..915e9968 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -1,4 +1,5 @@ const { test } = require("tap"); +const { unlinkSync } = require("fs"); const util = require("util"); const path = require("path"); const sandbox = require("@log4js-node/sandboxed-module"); @@ -247,13 +248,21 @@ test("log4js configuration validation", batch => { ); batch.test("should not throw error if configure object is freezed", t => { + const filename = "test/tap/freeze-date-file-test" + t.tearDown(() => { + try { + unlinkSync(filename); + } catch (_) { + // doesn't really matter if it failed + } + }); t.doesNotThrow(() => log4js.configure( deepFreeze({ appenders: { dateFile: { + filename, type: "dateFile", - filename: "test/tap/freeze-date-file-test", alwaysIncludePattern: false } }, From 0a027d1dffbc60310e26a9e0ee83c22a15fc56de Mon Sep 17 00:00:00 2001 From: Techmunk Date: Tue, 16 Jun 2020 20:39:22 +1000 Subject: [PATCH 005/454] fix: tcp appender was missing from core appenders --- lib/appenders/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index e81f268e..4c333bd5 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -17,6 +17,7 @@ coreAppenders.set('noLogFilter', require('./noLogFilter')); coreAppenders.set('file', require('./file')); coreAppenders.set('dateFile', require('./dateFile')); coreAppenders.set('fileSync', require('./fileSync')); +coreAppenders.set('tcp', require('./tcp')); const appenders = new Map(); From 4075ec5b82a37ff8e1bcb14366fb9c0e82279f81 Mon Sep 17 00:00:00 2001 From: Techmunk Date: Tue, 16 Jun 2020 20:39:42 +1000 Subject: [PATCH 006/454] fix: tcp appender was missing from typescript typings --- types/log4js.d.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..3a9d1d86 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -236,6 +236,23 @@ export interface StandardOutputAppender { layout?: Layout; } +/** + * TCP Appender + * + * @see https://log4js-node.github.io/log4js-node/tcp.html + */ +export interface TCPAppender { + type: 'tcp'; + // defaults to 5000 + port?: number + // defaults to localhost + host?: string + // default to __LOG4JS__ + endMsg?: string + // defaults to a serialized log event + layout?: Layout; +} + export interface CustomAppender { type: string | AppenderModule; [key: string]: any; @@ -257,6 +274,7 @@ export type Appender = CategoryFilterAppender | RecordingAppender | StandardErrorAppender | StandardOutputAppender + | TCPAppender | CustomAppender; export interface Levels { From 1cb9893a50f394cda1ff49bacc0258a3747ed458 Mon Sep 17 00:00:00 2001 From: Ventsislav Dimitrov <4097884+vdmtrv@users.noreply.github.com> Date: Sat, 11 Jul 2020 22:38:54 +0100 Subject: [PATCH 007/454] fix: file appender types --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..45e613f7 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -132,7 +132,7 @@ export interface FileAppender { backups?: number; // defaults to basic layout layout?: Layout; - numBackups?: number; + backups?: number; compress?: boolean; // compress the backups // keep the file extension when rotating logs keepFileExt?: boolean; From e14876a147870930b3940e2a7ba0b49bc1b9b2f1 Mon Sep 17 00:00:00 2001 From: Ventsislav Dimitrov <4097884+vdmtrv@users.noreply.github.com> Date: Sat, 11 Jul 2020 22:41:03 +0100 Subject: [PATCH 008/454] chore: remove duplicate backups type --- types/log4js.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 45e613f7..7c2c1856 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -132,7 +132,6 @@ export interface FileAppender { backups?: number; // defaults to basic layout layout?: Layout; - backups?: number; compress?: boolean; // compress the backups // keep the file extension when rotating logs keepFileExt?: boolean; From da8dc37d1b95814e14d0b8f823d3f24dce66ca10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2020 12:35:13 +0000 Subject: [PATCH 009/454] chore(deps-dev): bump codecov from 3.6.5 to 3.7.1 Bumps [codecov](https://github.com/codecov/codecov-node) from 3.6.5 to 3.7.1. - [Release notes](https://github.com/codecov/codecov-node/releases) - [Commits](https://github.com/codecov/codecov-node/compare/v3.6.5...v3.7.1) Signed-off-by: dependabot[bot] --- package-lock.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..08bbcbf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -139,9 +139,9 @@ } }, "@tootallnate/once": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz", - "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/normalize-package-data": { @@ -163,9 +163,9 @@ "dev": true }, "agent-base": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", - "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", "dev": true, "requires": { "debug": "4" @@ -522,9 +522,9 @@ "dev": true }, "codecov": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.6.5.tgz", - "integrity": "sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", + "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", "dev": true, "requires": { "argv": "0.0.2", From 36b7ba1fe00c2017e54c5393c5b83c240895eb3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2020 14:08:53 +0000 Subject: [PATCH 010/454] chore(deps): bump yargs-parser from 13.1.1 to 13.1.2 Bumps [yargs-parser](https://github.com/yargs/yargs-parser) from 13.1.1 to 13.1.2. - [Release notes](https://github.com/yargs/yargs-parser/releases) - [Changelog](https://github.com/yargs/yargs-parser/blob/master/docs/CHANGELOG-full.md) - [Commits](https://github.com/yargs/yargs-parser/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..f424a662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -416,6 +416,12 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -5165,21 +5171,13 @@ } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yn": { From 344dd147f7c4277f8f55f594d1a2645872b5be85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2020 09:40:16 +0000 Subject: [PATCH 011/454] chore(deps): bump node-fetch from 2.6.0 to 2.6.1 Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. - [Release notes](https://github.com/bitinn/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..6433c6b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2462,9 +2462,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true }, "node-modules-regexp": { From 76f91427ba81d979c3a64af04b929ab11ca3a446 Mon Sep 17 00:00:00 2001 From: abernh Date: Tue, 23 Feb 2021 12:02:15 +0100 Subject: [PATCH 012/454] fix(logger.log): warn on invalid log-level a warning is logged if the `log` method is used with an unknown log-level this happens whenever people confuse the `log` method with yet another log-level-short method (like in the browser console.log) adjusted `newLevel-test` accordingly rel: https://github.com/log4js-node/log4js-node/issues/1042 Signed-off-by: abernh --- lib/logger.js | 11 ++++++++--- test/tap/newLevel-test.js | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/logger.js b/lib/logger.js index dbfd7867..25f54be2 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -7,6 +7,7 @@ const categories = require("./categories"); const configuration = require("./configuration"); const stackReg = /at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/; + function defaultParseCallStack(data, skipIdx = 4) { const stacklines = data.stack.split("\n").slice(skipIdx); const lineMatch = stackReg.exec(stacklines[0]); @@ -68,7 +69,11 @@ class Logger { } log(level, ...args) { - const logLevel = levels.getLevel(level, levels.INFO); + let logLevel = levels.getLevel(level); + if (!logLevel) { + this._log(levels.WARN, 'log4js:logger.log: invalid value for log-level as first parameter given: ', level); + logLevel = levels.INFO; + } if (this.isLevelEnabled(logLevel)) { this._log(logLevel, args); } @@ -116,11 +121,11 @@ function addLevelMethods(target) { ); const isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1); - Logger.prototype[`is${isLevelMethod}Enabled`] = function() { + Logger.prototype[`is${isLevelMethod}Enabled`] = function () { return this.isLevelEnabled(level); }; - Logger.prototype[levelMethod] = function(...args) { + Logger.prototype[levelMethod] = function (...args) { this.log(level, ...args); }; } diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index e70de1aa..2419ff64 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -237,8 +237,10 @@ test("../../lib/logger", batch => { logger.log(log4js.levels.getLevel("LEVEL_DOES_NEXT_EXIST"), "Event 2"); const events = recording.replay(); - t.equal(events[0].level.toString(), "INFO", "should fall back to INFO"); + t.equal(events[0].level.toString(), "WARN", "should log warning"); t.equal(events[1].level.toString(), "INFO", "should fall back to INFO"); + t.equal(events[2].level.toString(), "WARN", "should log warning"); + t.equal(events[3].level.toString(), "INFO", "should fall back to INFO"); t.end(); }); From de83b12087d64ec646935b4caad6ae71edc1f452 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 15:54:48 +0000 Subject: [PATCH 013/454] chore(deps): bump y18n from 4.0.0 to 4.0.1 Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/yargs/y18n/releases) - [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/y18n/commits) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..1d0113ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5048,9 +5048,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { From db1a26556ba9a6d5cfc77089d71811416b1f3c08 Mon Sep 17 00:00:00 2001 From: saulzhong Date: Fri, 23 Apr 2021 13:36:22 +0800 Subject: [PATCH 014/454] fix(types): add defaultLevel parameter declaration to the function getLevel --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..d852259a 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -270,7 +270,7 @@ export interface Levels { FATAL: Level; OFF: Level; levels: Level[]; - getLevel(level: string): Level; + getLevel(level: string, defaultLevel: Level): Level; addLevels(customLevels: object): void; } From 9772a44c43b2c4d36c033a52c988a8a39f9e817b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 May 2021 18:45:50 +0000 Subject: [PATCH 015/454] chore(deps): bump lodash from 4.17.14 to 4.17.21 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.14 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.14...4.17.21) Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..3e507583 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2259,9 +2259,9 @@ } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.flattendeep": { @@ -4081,11 +4081,6 @@ "minimist": "^1.2.5" } }, - "lodash": { - "version": "4.17.15", - "bundled": true, - "dev": true - }, "lodash.throttle": { "version": "4.1.1", "bundled": true, From 834d2dc7a4a0437580f0ce0bbfc875351a6d6913 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 8 May 2021 23:42:39 +0000 Subject: [PATCH 016/454] chore(deps): bump hosted-git-info from 2.7.1 to 2.8.9 Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9. - [Release notes](https://github.com/npm/hosted-git-info/releases) - [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md) - [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..124b78c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1562,9 +1562,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-escaper": { From 5a45e75d5d34870400f54996d07030a647631580 Mon Sep 17 00:00:00 2001 From: Nicolas Gimenez Date: Thu, 13 May 2021 16:48:43 +0200 Subject: [PATCH 017/454] feat(typing): improving @types for AppenderModule --- types/log4js.d.ts | 125 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 93 insertions(+), 32 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..99e81296 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -1,13 +1,21 @@ // Type definitions for log4js -type Format = string | ((req: any, res: any, formatter: ((str: string) => string)) => string); +type Format = + | string + | ((req: any, res: any, formatter: (str: string) => string) => string); export interface Log4js { getLogger(category?: string): Logger; configure(filename: string): Log4js; configure(config: Configuration): Log4js; - addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; - connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; + addLayout( + name: string, + config: (a: any) => (logEvent: LoggingEvent) => string + ): void; + connectLogger( + logger: Logger, + options: { format?: Format; level?: string; nolog?: any } + ): any; // express.Handler; levels: Levels; shutdown(cb: (error: Error) => void): void | null; } @@ -17,28 +25,40 @@ export function getLogger(category?: string): Logger; export function configure(filename: string): Log4js; export function configure(config: Configuration): Log4js; -export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => any): void; - -export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; statusRules?: any[], context?: boolean }): any; // express.Handler; +export function addLayout( + name: string, + config: (a: any) => (logEvent: LoggingEvent) => any +): void; + +export function connectLogger( + logger: Logger, + options: { + format?: Format; + level?: string; + nolog?: any; + statusRules?: any[]; + context?: boolean; + } +): any; // express.Handler; export const levels: Levels; export function shutdown(cb?: (error: Error) => void): void | null; export interface BaseLayout { - type: 'basic'; + type: "basic"; } export interface ColoredLayout { - type: 'colored' | 'coloured'; + type: "colored" | "coloured"; } export interface MessagePassThroughLayout { - type: 'messagePassThrough'; + type: "messagePassThrough"; } export interface DummyLayout { - type: 'dummy'; + type: "dummy"; } export interface Level { @@ -54,9 +74,9 @@ export interface Level { } export interface LoggingEvent { - categoryName: string; // name of category - level: Level; // level of message - data: any[]; // objects to log + categoryName: string; // name of category + level: Level; // level of message + data: any[]; // objects to log startTime: Date; pid: number; context: any; @@ -69,7 +89,7 @@ export interface LoggingEvent { export type Token = ((logEvent: LoggingEvent) => string) | string; export interface PatternLayout { - type: 'pattern'; + type: "pattern"; // specifier for the output format, using placeholders as described below pattern: string; // user-defined tokens to be used in the pattern @@ -81,7 +101,13 @@ export interface CustomLayout { type: string; } -export type Layout = BaseLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; +export type Layout = + | BaseLayout + | ColoredLayout + | MessagePassThroughLayout + | DummyLayout + | PatternLayout + | CustomLayout; /** * Category Filter @@ -117,13 +143,13 @@ export interface NoLogFilterAppender { * @see https://log4js-node.github.io/log4js-node/console.html */ export interface ConsoleAppender { - type: 'console'; + type: "console"; // defaults to colouredLayout layout?: Layout; } export interface FileAppender { - type: 'file'; + type: "file"; // the path of the file where you want your logs written. filename: string; // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. @@ -142,7 +168,7 @@ export interface FileAppender { } export interface SyncfileAppender { - type: 'fileSync'; + type: "fileSync"; // the path of the file where you want your logs written. filename: string; // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. @@ -154,7 +180,7 @@ export interface SyncfileAppender { } export interface DateFileAppender { - type: 'dateFile'; + type: "dateFile"; // the path of the file where you want your logs written. filename: string; // defaults to basic layout @@ -189,7 +215,7 @@ export interface DateFileAppender { } export interface LogLevelFilterAppender { - type: 'logLevelFilter'; + type: "logLevelFilter"; // the name of an appender, defined in the same configuration, that you want to filter appender: string; // the minimum level of event to allow through the filter @@ -199,7 +225,7 @@ export interface LogLevelFilterAppender { } export interface MultiFileAppender { - type: 'multiFile'; + type: "multiFile"; // the base part of the generated log filename base: string; // the value to use to split files (see below). @@ -209,9 +235,9 @@ export interface MultiFileAppender { } export interface MultiprocessAppender { - type: 'multiprocess'; + type: "multiprocess"; // controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. - mode: 'master' | 'worker'; + mode: "master" | "worker"; // (only needed if mode == master)- the name of the appender to send the log events to appender?: string; // (defaults to 5000) - the port to listen on, or send to @@ -221,17 +247,17 @@ export interface MultiprocessAppender { } export interface RecordingAppender { - type: 'recording'; + type: "recording"; } export interface StandardErrorAppender { - type: 'stderr'; + type: "stderr"; // (defaults to colouredLayout) layout?: Layout; } export interface StandardOutputAppender { - type: 'stdout'; + type: "stdout"; // (defaults to colouredLayout) layout?: Layout; } @@ -242,10 +268,39 @@ export interface CustomAppender { } export interface AppenderModule { - configure: Function + configure: (config: ConfigParam, layouts: LayoutsParam) => AppenderGenerator; +} + +export type AppenderGenerator = ( + layout: LayoutFunction, + timezoneOffset?: string +) => AppenderFunction; + +export type AppenderFunction = (loggingEvent: LoggingEvent) => void; + +// TODO: Actually add types here... +export interface ConfigParam {} + +export interface LayoutsParam { + basicLayout: LayoutFunction; + messagePassThroughLayout: LayoutFunction; + patternLayout: LayoutFunction; + colouredLayout: LayoutFunction; + coloredLayout: LayoutFunction; + dummyLayout: LayoutFunction; + addLayout: (name: string, serializerGenerator: LayoutFunction) => void; + layout: (name: string, config: PatternToken) => LayoutFunction; +} + +export interface PatternToken { + pattern: string; // TODO type this to enforce good pattern... + tokens: { [tokenName: string]: () => any }; } -export type Appender = CategoryFilterAppender +export type LayoutFunction = (loggingEvent: LoggingEvent) => string; + +export type Appender = + | CategoryFilterAppender | ConsoleAppender | FileAppender | SyncfileAppender @@ -275,8 +330,14 @@ export interface Levels { } export interface Configuration { - appenders: { [name: string]: Appender; }; - categories: { [name: string]: { appenders: string[]; level: string; enableCallStack?: boolean; } }; + appenders: { [name: string]: Appender }; + categories: { + [name: string]: { + appenders: string[]; + level: string; + enableCallStack?: boolean; + }; + }; pm2?: boolean; pm2InstanceVar?: string; levels?: Levels; @@ -286,8 +347,8 @@ export interface Configuration { export class Logger { new(dispatch: Function, name: string): Logger; - readonly category: string; - level: string; + readonly category: string; + level: string; log(...args: any[]): void; From 92666bf6098f55d1f4e48f54f2a0602293c1dd0d Mon Sep 17 00:00:00 2001 From: Nicolas Gimenez Date: Thu, 13 May 2021 17:13:52 +0200 Subject: [PATCH 018/454] fix(formatting): rollback formatting changes --- types/log4js.d.ts | 95 ++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 64 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 99e81296..40f31b03 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -1,21 +1,13 @@ // Type definitions for log4js -type Format = - | string - | ((req: any, res: any, formatter: (str: string) => string) => string); +type Format = string | ((req: any, res: any, formatter: ((str: string) => string)) => string); export interface Log4js { getLogger(category?: string): Logger; configure(filename: string): Log4js; configure(config: Configuration): Log4js; - addLayout( - name: string, - config: (a: any) => (logEvent: LoggingEvent) => string - ): void; - connectLogger( - logger: Logger, - options: { format?: Format; level?: string; nolog?: any } - ): any; // express.Handler; + addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; + connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; levels: Levels; shutdown(cb: (error: Error) => void): void | null; } @@ -25,40 +17,28 @@ export function getLogger(category?: string): Logger; export function configure(filename: string): Log4js; export function configure(config: Configuration): Log4js; -export function addLayout( - name: string, - config: (a: any) => (logEvent: LoggingEvent) => any -): void; - -export function connectLogger( - logger: Logger, - options: { - format?: Format; - level?: string; - nolog?: any; - statusRules?: any[]; - context?: boolean; - } -): any; // express.Handler; +export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => any): void; + +export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; statusRules?: any[], context?: boolean }): any; // express.Handler; export const levels: Levels; export function shutdown(cb?: (error: Error) => void): void | null; export interface BaseLayout { - type: "basic"; + type: 'basic'; } export interface ColoredLayout { - type: "colored" | "coloured"; + type: 'colored' | 'coloured'; } export interface MessagePassThroughLayout { - type: "messagePassThrough"; + type: 'messagePassThrough'; } export interface DummyLayout { - type: "dummy"; + type: 'dummy'; } export interface Level { @@ -74,9 +54,9 @@ export interface Level { } export interface LoggingEvent { - categoryName: string; // name of category - level: Level; // level of message - data: any[]; // objects to log + categoryName: string; // name of category + level: Level; // level of message + data: any[]; // objects to log startTime: Date; pid: number; context: any; @@ -89,7 +69,7 @@ export interface LoggingEvent { export type Token = ((logEvent: LoggingEvent) => string) | string; export interface PatternLayout { - type: "pattern"; + type: 'pattern'; // specifier for the output format, using placeholders as described below pattern: string; // user-defined tokens to be used in the pattern @@ -101,13 +81,7 @@ export interface CustomLayout { type: string; } -export type Layout = - | BaseLayout - | ColoredLayout - | MessagePassThroughLayout - | DummyLayout - | PatternLayout - | CustomLayout; +export type Layout = BaseLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; /** * Category Filter @@ -143,13 +117,13 @@ export interface NoLogFilterAppender { * @see https://log4js-node.github.io/log4js-node/console.html */ export interface ConsoleAppender { - type: "console"; + type: 'console'; // defaults to colouredLayout layout?: Layout; } export interface FileAppender { - type: "file"; + type: 'file'; // the path of the file where you want your logs written. filename: string; // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. @@ -168,7 +142,7 @@ export interface FileAppender { } export interface SyncfileAppender { - type: "fileSync"; + type: 'fileSync'; // the path of the file where you want your logs written. filename: string; // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. @@ -180,7 +154,7 @@ export interface SyncfileAppender { } export interface DateFileAppender { - type: "dateFile"; + type: 'dateFile'; // the path of the file where you want your logs written. filename: string; // defaults to basic layout @@ -215,7 +189,7 @@ export interface DateFileAppender { } export interface LogLevelFilterAppender { - type: "logLevelFilter"; + type: 'logLevelFilter'; // the name of an appender, defined in the same configuration, that you want to filter appender: string; // the minimum level of event to allow through the filter @@ -225,7 +199,7 @@ export interface LogLevelFilterAppender { } export interface MultiFileAppender { - type: "multiFile"; + type: 'multiFile'; // the base part of the generated log filename base: string; // the value to use to split files (see below). @@ -235,9 +209,9 @@ export interface MultiFileAppender { } export interface MultiprocessAppender { - type: "multiprocess"; + type: 'multiprocess'; // controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. - mode: "master" | "worker"; + mode: 'master' | 'worker'; // (only needed if mode == master)- the name of the appender to send the log events to appender?: string; // (defaults to 5000) - the port to listen on, or send to @@ -247,17 +221,17 @@ export interface MultiprocessAppender { } export interface RecordingAppender { - type: "recording"; + type: 'recording'; } export interface StandardErrorAppender { - type: "stderr"; + type: 'stderr'; // (defaults to colouredLayout) layout?: Layout; } export interface StandardOutputAppender { - type: "stdout"; + type: 'stdout'; // (defaults to colouredLayout) layout?: Layout; } @@ -299,8 +273,7 @@ export interface PatternToken { export type LayoutFunction = (loggingEvent: LoggingEvent) => string; -export type Appender = - | CategoryFilterAppender +export type Appender = CategoryFilterAppender | ConsoleAppender | FileAppender | SyncfileAppender @@ -330,14 +303,8 @@ export interface Levels { } export interface Configuration { - appenders: { [name: string]: Appender }; - categories: { - [name: string]: { - appenders: string[]; - level: string; - enableCallStack?: boolean; - }; - }; + appenders: { [name: string]: Appender; }; + categories: { [name: string]: { appenders: string[]; level: string; enableCallStack?: boolean; } }; pm2?: boolean; pm2InstanceVar?: string; levels?: Levels; @@ -347,8 +314,8 @@ export interface Configuration { export class Logger { new(dispatch: Function, name: string): Logger; - readonly category: string; - level: string; + readonly category: string; + level: string; log(...args: any[]): void; From fc1ccbeb41471a9e0d4d916c9e7eb301b24b8abe Mon Sep 17 00:00:00 2001 From: Richard Hinkamp Date: Wed, 9 Jun 2021 21:19:38 +0200 Subject: [PATCH 019/454] Shutdown cb arg can be undefined + always return null --- lib/log4js.js | 5 ++++- types/log4js.d.ts | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/log4js.js b/lib/log4js.js index fdd48c84..e0585977 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -111,7 +111,10 @@ function shutdown(cb) { if (shutdownFunctions === 0) { debug("No appenders with shutdown functions found."); - return cb !== undefined && cb(); + if (cb) { + cb(undefined); + } + return null; } appendersToCheck.filter(a => a.shutdown).forEach(a => a.shutdown(complete)); diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..560cc9de 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -9,7 +9,7 @@ export interface Log4js { addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; levels: Levels; - shutdown(cb: (error: Error) => void): void | null; + shutdown(cb?: (error: Error | undefined) => void): null; } export function getLogger(category?: string): Logger; @@ -23,7 +23,7 @@ export function connectLogger(logger: Logger, options: { format?: Format; level? export const levels: Levels; -export function shutdown(cb?: (error: Error) => void): void | null; +export function shutdown(cb?: (error: Error | undefined) => void): null; export interface BaseLayout { type: 'basic'; From 761139ed76d3c647fbfef8916ef5bd4a093de6f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Jun 2021 03:28:42 +0000 Subject: [PATCH 020/454] chore(deps): bump glob-parent from 5.1.1 to 5.1.2 Bumps [glob-parent](https://github.com/gulpjs/glob-parent) from 5.1.1 to 5.1.2. - [Release notes](https://github.com/gulpjs/glob-parent/releases) - [Changelog](https://github.com/gulpjs/glob-parent/blob/main/CHANGELOG.md) - [Commits](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2) --- updated-dependencies: - dependency-name: glob-parent dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a81bbf1e..28b9547b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1496,9 +1496,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" From 03484d63a3457ed0e7dd0c5a254c21235093fbeb Mon Sep 17 00:00:00 2001 From: Nicolas Gimenez Date: Sun, 20 Jun 2021 22:29:57 +0200 Subject: [PATCH 021/454] fix(typing): use any for Config for now --- types/log4js.d.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 40f31b03..44d063c9 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -242,7 +242,7 @@ export interface CustomAppender { } export interface AppenderModule { - configure: (config: ConfigParam, layouts: LayoutsParam) => AppenderGenerator; + configure: (config: Config, layouts: LayoutsParam) => AppenderGenerator; } export type AppenderGenerator = ( @@ -253,7 +253,8 @@ export type AppenderGenerator = ( export type AppenderFunction = (loggingEvent: LoggingEvent) => void; // TODO: Actually add types here... -export interface ConfigParam {} +// It's supposed to be the full config element +export type Config = any export interface LayoutsParam { basicLayout: LayoutFunction; From fa366c8abcb6194d746b831036e5b5e7c32248df Mon Sep 17 00:00:00 2001 From: Jhonatan Teixeira Date: Wed, 14 Jul 2021 09:49:30 -0300 Subject: [PATCH 022/454] fix: on newer nodejs versions listening to socket errors are required --- lib/appenders/tcp.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/appenders/tcp.js b/lib/appenders/tcp.js index dd247491..aa41a3ea 100644 --- a/lib/appenders/tcp.js +++ b/lib/appenders/tcp.js @@ -39,7 +39,11 @@ function appender(config, layout) { emptyBuffer(); }); socket.on('timeout', socket.end.bind(socket)); - // don't bother listening for 'error', 'close' gets called after that anyway + socket.on('error', (e) => { + debug('connection error', e); + canWrite = false; + emptyBuffer(); + }) socket.on('close', createSocket); } From 9433b12eac3a528ed63eaf2863c9da89425eb901 Mon Sep 17 00:00:00 2001 From: Aleksandr Nefedov <4eb0da@yandex-team.ru> Date: Mon, 4 Oct 2021 14:55:48 +0300 Subject: [PATCH 023/454] dateFile error handling fix --- lib/appenders/dateFile.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index da50ead3..5534dd25 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -28,6 +28,9 @@ function appender( options ); + logFile.on('error', (err) => { + console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); //eslint-disable-line + }); logFile.on("drain", () => { process.emit("log4js:pause", false); }); From a3e6363cd9fcf626b15d92b8b0cf21e2f11df558 Mon Sep 17 00:00:00 2001 From: Aleksandr Nefedov <4eb0da@yandex-team.ru> Date: Mon, 4 Oct 2021 18:05:19 +0300 Subject: [PATCH 024/454] dateFile error handling fix 2 --- lib/appenders/dateFile.js | 6 ++++++ lib/appenders/file.js | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index 5534dd25..608b3c37 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -22,6 +22,8 @@ function appender( // options should work for dateFile as well. options.maxSize = options.maxLogSize; + let alive = true; + const logFile = new streams.DateRollingFileStream( filename, pattern, @@ -29,6 +31,7 @@ function appender( ); logFile.on('error', (err) => { + alive = false; console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); //eslint-disable-line }); logFile.on("drain", () => { @@ -36,6 +39,9 @@ function appender( }); const app = function (logEvent) { + if (!alive) { + return; + } if (!logFile.write(layout(logEvent, timezoneOffset) + eol, "utf8")) { process.emit("log4js:pause", true); } diff --git a/lib/appenders/file.js b/lib/appenders/file.js index f2c194b4..7fedafd8 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -12,9 +12,6 @@ function openTheStream(file, fileSize, numFiles, options) { numFiles, options ); - stream.on('error', (err) => { - console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); //eslint-disable-line - }); stream.on('drain', () => { process.emit("log4js:pause", false); }); @@ -50,9 +47,18 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset timezoneOffset, ')' ); + let alive = true; + let writer = openTheStream(file, logSize, numBackups, options); + writer.on('error', (err) => { + alive = false; + console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); //eslint-disable-line + }); const app = function (loggingEvent) { + if (!alive) { + return; + } if (options.removeColor === true) { // eslint-disable-next-line no-control-regex const regex = /\x1b[[0-9;]*m/g; From 5b320e3b2f6a8c2df16a392030e9dc38343b0415 Mon Sep 17 00:00:00 2001 From: Angelo Polo Date: Thu, 11 Nov 2021 10:51:57 +0100 Subject: [PATCH 025/454] fix: Expose recording in typescript types --- lib/log4js.js | 8 +++++++- types/log4js.d.ts | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/log4js.js b/lib/log4js.js index fdd48c84..0934be76 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -29,6 +29,7 @@ const categories = require("./categories"); const Logger = require("./logger"); const clustering = require("./clustering"); const connectLogger = require("./connect-logger"); +const recordingModule = require("./appenders/recording"); let enabled = false; @@ -73,6 +74,10 @@ function configure(configurationFileOrObject) { return log4js; } +function recording() { + return recordingModule +} + /** * Shutdown all log appenders. This will first disable all writing to appenders * and then call the shutdown function each appender. @@ -150,7 +155,8 @@ const log4js = { shutdown, connectLogger, levels, - addLayout: layouts.addLayout + addLayout: layouts.addLayout, + recording, }; module.exports = log4js; diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..e7e2bc2b 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -21,6 +21,8 @@ export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEv export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; statusRules?: any[], context?: boolean }): any; // express.Handler; +export function recording(): Recording; + export const levels: Levels; export function shutdown(cb?: (error: Error) => void): void | null; @@ -283,6 +285,14 @@ export interface Configuration { disableClustering?: boolean; } +export interface Recording { + configure(loggingEvent: LoggingEvent): void + replay(): LoggingEvent[] + playback(): LoggingEvent[] + reset(): void + erase(): void +} + export class Logger { new(dispatch: Function, name: string): Logger; From c5ea84764d52d569dea2bd58f94e5c3451a525c9 Mon Sep 17 00:00:00 2001 From: Angelo Polo Date: Thu, 11 Nov 2021 11:50:24 +0100 Subject: [PATCH 026/454] test: Add typescript recording usage example --- types/test.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/types/test.ts b/types/test.ts index a78f8322..a2f0fafc 100644 --- a/types/test.ts +++ b/types/test.ts @@ -136,3 +136,25 @@ log4js.configure({ appenders: { thing: { type: { configure: () => {} }}}, categories: { default: { appenders: ['thing'], level: 'debug'}} }); + +log4js.configure({ + appenders: { rec: { type: 'recording' } }, + categories: { default: { appenders: [ 'rec'], 'level': 'debug' } } +}); +const logger8 = log4js.getLogger(); +logger8.level = 'debug' +logger8.debug('This will go to the recording!') +logger8.debug('Another one') +const recording = log4js.recording() +const loggingEvents = recording.playback() +if (loggingEvents.length !== 2) { + throw new Error(`Expected 2 recorded events, got ${loggingEvents.length}`) +} +if (loggingEvents[1].data[0] !== 'Another one') { + throw new Error(`Expected message 'Another one', got ${loggingEvents[1].data[0]}`) +} +recording.reset() +const loggingEventsPostReset = recording.playback() +if (loggingEventsPostReset.length !== 0) { + throw new Error(`Expected 0 recorded events after reset, got ${loggingEventsPostReset.length}`) +} From ac72e99de325c7ebe60e9797138e388c99316573 Mon Sep 17 00:00:00 2001 From: peteriman Date: Wed, 15 Dec 2021 01:25:07 +0800 Subject: [PATCH 027/454] Creates a 1 SIGHUP handler instead I think the issue is that each file appender instance adds a SIGHUP handler, when they could all use the same handler. I'll see if I can work on a fix. _Originally posted by @nomiddlename in https://github.com/log4js-node/log4js-node/issues/852#issuecomment-496316399_ --- lib/appenders/file.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index f2c194b4..f14a716e 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -5,6 +5,14 @@ const os = require('os'); const eol = os.EOL; +let mainSighupListenerStarted = false; +const sighupListeners = new Set(); +function mainSighupHandler() { + sighupListeners.forEach((app) => { + app.sighupHandler(); + }); +} + function openTheStream(file, fileSize, numFiles, options) { const stream = new streams.RollingFileStream( file, @@ -76,14 +84,22 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset }; app.shutdown = function (complete) { - process.removeListener('SIGHUP', app.sighupHandler); + sighupListeners.delete(app); + if (sighupListeners.size === 0 && mainSighupListenerStarted) { + process.removeListener('SIGHUP', mainSighupHandler); + mainSighupListenerStarted = false; + } writer.end('', 'utf-8', complete); }; // On SIGHUP, close and reopen all files. This allows this appender to work with // logrotate. Note that if you are using logrotate, you should not set // `logSize`. - process.on('SIGHUP', app.sighupHandler); + sighupListeners.add(app); + if (!mainSighupListenerStarted) { + process.on('SIGHUP', mainSighupHandler); + mainSighupListenerStarted = true; + } return app; } From 60568bf3de4c1051a57b06b926aad705b2faa7cd Mon Sep 17 00:00:00 2001 From: peteriman Date: Tue, 28 Dec 2021 16:15:11 +0800 Subject: [PATCH 028/454] Added automated testing for file appender single SIGHUP listener --- test/tap/file-sighup-test.js | 61 +++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 3d565de9..0627532c 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -1,9 +1,68 @@ const { test } = require("tap"); +const path = require("path"); +const fs = require("fs"); const sandbox = require("@log4js-node/sandboxed-module"); +const removeFiles = async filenames => { + if (!Array.isArray(filenames)) + filenames = [filenames]; + const promises = filenames.map(filename => { + return fs.promises.unlink(filename); + }); + await Promise.allSettled(promises); +}; + +test("file appender single SIGHUP handler", t => { + const initialListeners = process.listenerCount("SIGHUP"); + + let warning; + const warningListener = error => { + if (error.type === "SIGHUP" && error.name === "MaxListenersExceededWarning") { + warning = error; + } + }; + process.on("warning", warningListener); + + const config = { + appenders: {}, + categories: { + default: { appenders: [], level: 'debug' } + } + }; + + // create 11 appenders to make nodejs warn for >10 max listeners + const numOfAppenders = 11; + for (let i = 1; i <= numOfAppenders; i++) { + config.appenders[`app${i}`] = { type: 'file', filename: path.join(__dirname, `file${i}.log`) }; + config.categories.default.appenders.push(`app${i}`); + } + + const log4js = require("../../lib/log4js"); + log4js.configure(config); + + t.teardown(async () => { + log4js.shutdown(); + + const filenames = Object.values(config.appenders).map(appender => { + return appender.filename; + }); + await removeFiles(filenames); + + process.off("warning", warningListener); + }); + + t.plan(2); + // put in a timeout 0 to allow event emitter/listener to happen + setTimeout(() => { + t.notOk(warning, "should not have MaxListenersExceededWarning for SIGHUP"); + t.equal(process.listenerCount("SIGHUP") - initialListeners, 1, "should be 1 SIGHUP listener"); + t.end(); + }, 0); +}); + // no SIGHUP signals on Windows, so don't run the tests if (process.platform !== "win32") { - + test("file appender SIGHUP", t => { let closeCalled = 0; let openCalled = 0; From adbd3691af0a1fb86bb2b9839f4f0277911f27ce Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 1 Jan 2022 00:09:21 +0800 Subject: [PATCH 029/454] Added automated testing for file descriptor leak --- test/tap/file-descriptor-leak-test.js | 84 +++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/tap/file-descriptor-leak-test.js diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js new file mode 100644 index 00000000..0a20fa54 --- /dev/null +++ b/test/tap/file-descriptor-leak-test.js @@ -0,0 +1,84 @@ +const { test } = require("tap"); +const fs = require("fs"); +const path = require("path"); +const log4js = require("../../lib/log4js"); + +const removeFiles = async filenames => { + if (!Array.isArray(filenames)) + filenames = [filenames]; + const promises = filenames.map(filename => { + return fs.promises.unlink(filename); + }); + await Promise.allSettled(promises); +}; + +// no file descriptors on Windows, so don't run the tests +if (process.platform !== "win32") { + + test("multiple log4js configure fd leak test", batch => { + const config = { + appenders: {}, + categories: { + default: { appenders: [], level: 'debug' } + } + }; + + // create 11 appenders + const numOfAppenders = 11; + for (let i = 1; i <= numOfAppenders; i++) { + config.appenders[`app${i}`] = { type: 'file', filename: path.join(__dirname, `file${i}.log`) }; + config.categories.default.appenders.push(`app${i}`); + } + + const initialFd = fs.readdirSync('/proc/self/fd').length; + let loadedFd; + + batch.test("initial log4js configure to increase file descriptor count", t => { + log4js.configure(config); + + // wait for the file system to catch up + setTimeout(() => { + loadedFd = fs.readdirSync('/proc/self/fd').length; + t.equal(loadedFd, initialFd + numOfAppenders, + `file descriptor count should increase by ${numOfAppenders} after 1st configure() call`); + t.end(); + }, 1000); + }); + + batch.test("repeated log4js configure to not increase file descriptor count", t => { + log4js.configure(config); + log4js.configure(config); + log4js.configure(config); + + // wait for the file system to catch up + setTimeout(() => { + t.equal(fs.readdirSync('/proc/self/fd').length, loadedFd, + `file descriptor count should be identical after repeated configure() calls`); + t.end(); + }, 1000); + }); + + batch.test("file descriptor count should return back to initial count", t => { + log4js.shutdown(); + + // wait for the file system to catch up + setTimeout(() => { + t.equal(fs.readdirSync('/proc/self/fd').length, initialFd, + `file descriptor count should be back to initial`); + t.end(); + }, 1000); + }); + + batch.teardown(async () => { + log4js.shutdown(); + + const filenames = Object.values(config.appenders).map(appender => { + return appender.filename; + }); + await removeFiles(filenames); + }); + + batch.end(); + }); + +} \ No newline at end of file From 1e066b9bfab007c89375d39224398949a381cd19 Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 1 Jan 2022 00:14:26 +0800 Subject: [PATCH 030/454] Patched file descriptor leak by: - subsequent log4js.configure() will run log4js.shutdown() first - log4js.shutdown() will always clear/reset existing appenders and categories --- lib/appenders/index.js | 6 +++++- lib/categories.js | 7 ++++++- lib/log4js.js | 13 ++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index e81f268e..7292aa3b 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -102,7 +102,10 @@ const setup = (config) => { }); }; -setup({ appenders: { out: { type: 'stdout' } }, categories: { default: { appenders: ['out'], level: 'trace' } } }); +const init = () => { + setup({ appenders: { out: { type: 'stdout' } }, categories: { default: { appenders: ['out'], level: 'trace' } } }); +}; +init(); configuration.addListener((config) => { configuration.throwExceptionIf( @@ -129,3 +132,4 @@ configuration.addListener((config) => { configuration.addListener(setup); module.exports = appenders; +module.exports.init = init; diff --git a/lib/categories.js b/lib/categories.js index b9bb8b1c..6bb4d8bf 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -161,7 +161,11 @@ const setup = (config) => { }); }; -setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); +const init = () => { + setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); +}; +init(); + configuration.addListener(setup); const configForCategory = (category) => { @@ -205,4 +209,5 @@ module.exports = { setLevelForCategory, getEnableCallStackForCategory, setEnableCallStackForCategory, + init, }; diff --git a/lib/log4js.js b/lib/log4js.js index fdd48c84..36cd4891 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -56,6 +56,11 @@ function loadConfigurationFile(filename) { } function configure(configurationFileOrObject) { + if (enabled) { + // eslint-disable-next-line no-use-before-define + shutdown(); + } + let configObject = configurationFileOrObject; if (typeof configObject === "string") { @@ -87,8 +92,14 @@ function shutdown(cb) { // not being able to be drained because of run-away log writes. enabled = false; - // Call each of the shutdown functions in parallel + // Clone out to maintain a reference const appendersToCheck = Array.from(appenders.values()); + + // Reset immediately to prevent leaks + appenders.init(); + categories.init(); + + // Call each of the shutdown functions in parallel const shutdownFunctions = appendersToCheck.reduceRight( (accum, next) => (next.shutdown ? accum + 1 : accum), 0 From 44bf7ce5bb58580822dde1ba7d2f51467849fefe Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 1 Jan 2022 00:29:25 +0800 Subject: [PATCH 031/454] Improved code readability for shutdown() function --- lib/log4js.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/log4js.js b/lib/log4js.js index 36cd4891..b399816c 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -104,9 +104,13 @@ function shutdown(cb) { (accum, next) => (next.shutdown ? accum + 1 : accum), 0 ); + if (shutdownFunctions === 0) { + debug("No appenders with shutdown functions found."); + return cb !== undefined && cb(); + } + let completed = 0; let error; - debug(`Found ${shutdownFunctions} appenders with shutdown functions.`); function complete(err) { error = error || err; @@ -119,12 +123,6 @@ function shutdown(cb) { } } } - - if (shutdownFunctions === 0) { - debug("No appenders with shutdown functions found."); - return cb !== undefined && cb(); - } - appendersToCheck.filter(a => a.shutdown).forEach(a => a.shutdown(complete)); return null; From 4565359448ba6121355e6326fd73e39b72f6d51b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 5 Jan 2022 20:28:27 +0800 Subject: [PATCH 032/454] Flush the buffer on 'error' --- lib/appenders/multiprocess.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 9d88d400..9c5affd3 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -128,7 +128,11 @@ function workerAppender(config) { socket.on('timeout', socket.end.bind(socket)); // don't bother listening for 'error', 'close' gets called after that anyway socket.on('close', createSocket); - socket.on('error', () => {}); + socket.on('error', (e) => { + debug('connection error', e); + canWrite = false; + emptyBuffer(); + }); } createSocket(); From 3f1ac52866df7511dd8692f310bfeaf02103a88d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 5 Jan 2022 20:28:32 +0800 Subject: [PATCH 033/454] Added trailing semi-colon --- lib/appenders/tcp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/tcp.js b/lib/appenders/tcp.js index aa41a3ea..f5ee9b52 100644 --- a/lib/appenders/tcp.js +++ b/lib/appenders/tcp.js @@ -43,7 +43,7 @@ function appender(config, layout) { debug('connection error', e); canWrite = false; emptyBuffer(); - }) + }); socket.on('close', createSocket); } From 0a2e0da5ed27e22fb4ebe424608cfc0c4651ee25 Mon Sep 17 00:00:00 2001 From: ZLundqvist Date: Fri, 7 Jan 2022 14:24:20 +0100 Subject: [PATCH 034/454] fix(types): add level parameter declaration to Logger.log function --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..f089c6b2 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -289,7 +289,7 @@ export class Logger { readonly category: string; level: string; - log(...args: any[]): void; + log(level: Level | string , ...args: any[]): void; isLevelEnabled(level?: string): boolean; From abecb0816ed30527a8f782c6a236b785afb20f80 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 10:28:39 +0800 Subject: [PATCH 035/454] fix: fileSync appender types --- types/log4js.d.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2fdc99ce..7469cac2 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -151,6 +151,9 @@ export interface SyncfileAppender { backups?: number; // defaults to basic layout layout?: Layout; + encoding?: string; + mode?: number; + flags?: string; } export interface DateFileAppender { From d5dcf974d9abe5d412b8ce4debc864f6e94ebfeb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 10:41:35 +0800 Subject: [PATCH 036/454] fix(types): union level type (Level | string) to the function getLevel --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index d852259a..e4fd535d 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -270,7 +270,7 @@ export interface Levels { FATAL: Level; OFF: Level; levels: Level[]; - getLevel(level: string, defaultLevel: Level): Level; + getLevel(level: Level | string, defaultLevel: Level): Level; addLevels(customLevels: object): void; } From b521274b0bfaf59a71129aa5fdd56ca2d442b91f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 10:46:41 +0800 Subject: [PATCH 037/454] fix(types): logger _log() types --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 74625746..9d080a36 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -302,7 +302,7 @@ export class Logger { isErrorEnabled(): boolean; isFatalEnabled(): boolean; - _log(level: string, data: any): void; + _log(level: Level, data: any): void; addContext(key: string, value: any): void; From a9dc485e71127ace7ac32649541eb144bd913f24 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 11:25:20 +0800 Subject: [PATCH 038/454] fix(types): logger level types --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 551397a2..648086d1 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -289,7 +289,7 @@ export class Logger { new(dispatch: Function, name: string): Logger; readonly category: string; - level: string; + level: Level | string; log(...args: any[]): void; From 0df5983f4b2c7b18074968e2ddcdcb7344693f49 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Mon, 10 Jan 2022 15:02:03 +1100 Subject: [PATCH 039/454] Add GH action to replace Travis CI --- .github/workflows/node.js.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/node.js.yml diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 00000000..33e45839 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,32 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + node-version: [12.x, 14.x, 16.x] + os: [ubuntu-latest, windows-latest] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm ci + - run: npm run build --if-present + - run: npm test From 54fd73e69545e45ac337607c6f10e787dfb6b767 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Jan 2022 08:03:50 +0000 Subject: [PATCH 040/454] chore(deps): bump path-parse from 1.0.6 to 1.0.7 Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 08bbcbf1..f77c9c07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2818,9 +2818,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -4232,11 +4232,6 @@ "mimic-fn": "^2.1.0" } }, - "path-parse": { - "version": "1.0.6", - "bundled": true, - "dev": true - }, "prop-types": { "version": "15.7.2", "bundled": true, From 8ddcdf1adaf826dd18194b1f9f5456edfd286669 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 10 Jan 2022 16:42:37 +0800 Subject: [PATCH 041/454] chore: update deps --- package-lock.json | 1111 +++++++++++++++++++++++++++++++++------------ package.json | 22 +- 2 files changed, 836 insertions(+), 297 deletions(-) diff --git a/package-lock.json b/package-lock.json index 99e756c6..0a63dce3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -144,10 +144,16 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "acorn": { @@ -163,9 +169,9 @@ "dev": true }, "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -251,13 +257,177 @@ "dev": true }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "asn1": { @@ -384,6 +554,16 @@ "write-file-atomic": "^2.4.2" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -521,23 +701,29 @@ } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "codecov": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", - "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz", + "integrity": "sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==", "dev": true, "requires": { "argv": "0.0.2", - "ignore-walk": "3.0.3", - "js-yaml": "3.13.1", - "teeny-request": "6.0.1", - "urlgrey": "0.4.4" + "ignore-walk": "3.0.4", + "js-yaml": "3.14.1", + "teeny-request": "7.1.1", + "urlgrey": "1.0.0" + }, + "dependencies": { + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "color-convert": { @@ -594,12 +780,6 @@ "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "conventional-commit-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz", @@ -721,11 +901,11 @@ "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "decamelize": { @@ -918,85 +1098,86 @@ } }, "eslint-config-prettier": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz", - "integrity": "sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { "get-stdin": "^6.0.0" } }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha1-WPFfuDm40FdsqYBBNHaqskcttmo=", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" + "debug": "^3.2.7", + "resolve": "^1.20.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } } } }, "eslint-module-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", - "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", "dev": true, "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" + "debug": "^3.2.7", + "find-up": "^2.1.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "eslint-plugin-import": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", - "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "contains-path": "^0.1.0", + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.11.0" + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" }, "dependencies": { "debug": { @@ -1009,13 +1190,48 @@ } }, "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "^2.0.2" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" } }, "ms": { @@ -1025,20 +1241,22 @@ "dev": true }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } } } }, "eslint-plugin-prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", - "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1190,6 +1408,23 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dev": true, + "requires": { + "punycode": "^1.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -1343,9 +1578,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flow-parser": { "version": "0.122.0", @@ -1463,6 +1698,25 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", @@ -1478,6 +1732,16 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -1546,6 +1810,12 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1558,6 +1828,23 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", @@ -1602,27 +1889,19 @@ } }, "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "agent-base": "5", + "agent-base": "6", "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - } } }, "husky": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.9.tgz", - "integrity": "sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", + "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -1676,9 +1955,9 @@ } }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -1700,14 +1979,14 @@ "dev": true }, "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", + "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, @@ -1756,9 +2035,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -1834,6 +2113,17 @@ } } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -1846,6 +2136,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1855,6 +2154,16 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", @@ -1870,6 +2179,15 @@ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", @@ -1903,12 +2221,27 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", @@ -1930,12 +2263,27 @@ "has": "^1.0.1" } }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1951,11 +2299,14 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "isexe": { "version": "2.0.0", @@ -2065,70 +2416,96 @@ } }, "jackspeak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", - "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", + "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", "dev": true, "requires": { - "cliui": "^4.1.0" + "cliui": "^7.0.4" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "ansi-regex": "^5.0.1" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } @@ -2167,10 +2544,16 @@ "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -2191,6 +2574,15 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -2200,14 +2592,14 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -2237,9 +2629,9 @@ } }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "load-json-file": { @@ -2398,6 +2790,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, "minipass": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", @@ -2439,9 +2837,9 @@ "dev": true }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { "version": "0.0.7", @@ -2468,10 +2866,13 @@ "dev": true }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "node-modules-regexp": { "version": "1.0.0", @@ -2506,12 +2907,6 @@ "path-key": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", @@ -2602,6 +2997,12 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -2633,15 +3034,89 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "es-abstract": "^1.19.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "once": { @@ -2663,9 +3138,9 @@ } }, "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, "opener": { @@ -2747,7 +3222,7 @@ "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" @@ -2865,15 +3340,6 @@ "node-modules-regexp": "^1.0.0" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -2890,9 +3356,9 @@ "dev": true }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "prettier-linter-helpers": { @@ -3005,65 +3471,6 @@ "path-type": "^3.0.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - } - } - }, "readdirp": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", @@ -3166,9 +3573,9 @@ } }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { "version": "2.6.3", @@ -3254,6 +3661,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -3410,6 +3828,26 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3452,6 +3890,12 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -4664,16 +5108,24 @@ } }, "teeny-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", - "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", + "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", "dev": true, "requires": { "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", "stream-events": "^1.0.5", - "uuid": "^3.3.2" + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, "test-exclude": { @@ -4789,6 +5241,12 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -4814,6 +5272,18 @@ "yn": "3.1.1" } }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -4860,11 +5330,31 @@ } }, "typescript": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", - "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "unicode-length": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", @@ -4907,10 +5397,13 @@ } }, "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz", + "integrity": "sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==", + "dev": true, + "requires": { + "fast-url-parser": "^1.1.3" + } }, "uuid": { "version": "3.3.2", @@ -4957,6 +5450,22 @@ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -4966,6 +5475,36 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + } + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", diff --git a/package.json b/package.json index 0307a789..d98cdabd 100644 --- a/package.json +++ b/package.json @@ -39,29 +39,29 @@ }, "dependencies": { "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", + "debug": "^4.3.3", + "flatted": "^2.0.2", + "rfdc": "^1.3.0", "streamroller": "^2.2.4" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", - "codecov": "^3.6.1", + "codecov": "^3.8.3", "deep-freeze": "0.0.1", "eslint": "^5.16.0", "eslint-config-airbnb-base": "^13.2.0", - "eslint-config-prettier": "^6.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-prettier": "^3.1.1", + "eslint-config-prettier": "^6.15.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-prettier": "^3.4.1", "fs-extra": "^8.1.0", - "husky": "^3.0.9", + "husky": "^3.1.0", "nyc": "^14.1.1", - "prettier": "^1.18.2", + "prettier": "^1.19.1", "proxyquire": "^2.1.3", "tap": "^14.10.7", - "typescript": "^3.7.2", + "typescript": "^3.9.10", "validate-commit-msg": "^2.14.0" }, "browser": { From e7f6784e88881a93edaa5b2c09e6551769a9a00c Mon Sep 17 00:00:00 2001 From: Zack Lundqvist Date: Mon, 10 Jan 2022 16:40:36 +0100 Subject: [PATCH 042/454] fix(formatting): remove spacing --- types/log4js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index f089c6b2..28985e89 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -289,7 +289,7 @@ export class Logger { readonly category: string; level: string; - log(level: Level | string , ...args: any[]): void; + log(level: Level | string, ...args: any[]): void; isLevelEnabled(level?: string): boolean; From 4688be5d7306375a16877bc578500ee803fc55c9 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Thu, 13 Jan 2022 09:22:10 +1100 Subject: [PATCH 043/454] Add CodeQL analysis --- .github/workflows/codeql-analysis.yml | 70 +++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 00000000..9ffc0339 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,70 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '15 11 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://git.io/codeql-language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 7f75045f2bbc7e07cc63384ed2c6e0a917dd6206 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Thu, 13 Jan 2022 09:33:29 +1100 Subject: [PATCH 044/454] Create SECURITY.md Fixes #1123 @peteriman do you want to add your contact details to this as well? Just in case I'm not around. --- SECURITY.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..c8f7c6b3 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Supported Versions + +We're aiming to only support the latest major version of log4js. Older than that is usually *very* old. + +| Version | Supported | +| ------- | ------------------ | +| 6.x | :white_check_mark: | +| < 6.0 | :x: | + +## Reporting a Vulnerability + +Report vulnerabilities via email to: + +* Gareth Jones + +Please put "[log4js:security]" in the subject line. We will aim to respond within a day or two. From ce12288f5591d4c86b85d230b83ab02f5e4f3140 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 13 Jan 2022 07:57:15 +0800 Subject: [PATCH 045/454] Update SECURITY.md --- SECURITY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/SECURITY.md b/SECURITY.md index c8f7c6b3..f872565b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -14,5 +14,6 @@ We're aiming to only support the latest major version of log4js. Older than that Report vulnerabilities via email to: * Gareth Jones +* Lam Wei Li Please put "[log4js:security]" in the subject line. We will aim to respond within a day or two. From a645b967ba527f577b624012bd0bc29bcd26e633 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Thu, 13 Jan 2022 16:46:06 +1100 Subject: [PATCH 046/454] Create npm publish workflow --- .github/workflows/npm-publish.yml | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/npm-publish.yml diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 00000000..0083fd92 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,38 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a milestone is closed +# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages + +name: Node.js Package + +on: + milestone: + types: [closed] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 16 + - run: npm ci + - run: npm test + + publish-npm: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 16 + registry-url: https://registry.npmjs.org/ + - run: npm ci + - run: | + git config user.name github-actions + git config user.email github-actions@github.com + - run: npm version ${{ github.event.milestone.title }} + - run: git push && git push --tags + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.npm_token}} From 7a3f2284e890c1c85e82e7f3954d5c075eb374ad Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 14 Jan 2022 02:42:47 +0800 Subject: [PATCH 047/454] test: update fakeFS.read as graceful-fs uses it graceful-fs broke it as it changed to use `Object.setPrototypeOf(read, fs$read`). https://github.com/isaacs/node-graceful-fs/commit/c55c1b8cb32510f92bd33d7c833364ecd3964dea#diff-f740ecac46b2fdaa68156b133262813aa6f66218b11d8709bab83580e76e486dR136 What this means is that, if `fakeFS.read` is `undefined`, it throws an error as `Object.setPrototypeOf` doesn't accept `undefined` in its parameters. --- test/tap/configuration-test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index 91e720a8..0b468bac 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -17,6 +17,7 @@ test("log4js configure", batch => { realpath: () => {}, // fs-extra looks for this ReadStream: realFS.ReadStream, // need to define these, because graceful-fs uses them WriteStream: realFS.WriteStream, + read: realFS.read, closeSync: () => {}, config: { appenders: { From c226cb7569a7d43742899ebb76287d3bd10c8e70 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 14 Jan 2022 21:13:13 +0800 Subject: [PATCH 048/454] test: update fakeFS.read as graceful-fs uses it `fs-extra@10.0.0` broke it as it removed the check for `fs.realpath.native`. ```diff +L064 exports.realpath.native = u(fs.realpath.native) -L126 -L127 // fs.realpath.native only available in Node v9.2+ -L128 if (typeof fs.realpath.native === 'function') { -L129 exports.realpath.native = u(fs.realpath.native) -L130 } ``` _(https://github.com/jprichardson/node-fs-extra/pull/887/files)_ When `fs.realpath` is an empty function, fs.realpath.native is `undefined`. https://github.com/log4js-node/log4js-node/blob/25c17ad9802082d7a0fcf9c228cc5b99661e3ed9/test/tap/configuration-test.js#L17 --- test/tap/configuration-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index 0b468bac..f72a4a4b 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -14,7 +14,7 @@ test("log4js configure", batch => { fileRead = 0; fakeFS = { - realpath: () => {}, // fs-extra looks for this + realpath: realFS.realpath, // fs-extra looks for this ReadStream: realFS.ReadStream, // need to define these, because graceful-fs uses them WriteStream: realFS.WriteStream, read: realFS.read, From b303b300ef84b82373bf434a497e2d93e95d7b78 Mon Sep 17 00:00:00 2001 From: peteriman Date: Fri, 14 Jan 2022 21:54:11 +0800 Subject: [PATCH 049/454] chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0 --- package-lock.json | 17 ++++------------- package.json | 2 +- test/tap/file-sighup-test.js | 8 ++------ test/tap/tcp-appender-test.js | 20 +++++++++----------- 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a63dce3..0538a17a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1098,13 +1098,10 @@ } }, "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -1717,12 +1714,6 @@ } } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", diff --git a/package.json b/package.json index d98cdabd..f99a62a4 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "deep-freeze": "0.0.1", "eslint": "^5.16.0", "eslint-config-airbnb-base": "^13.2.0", - "eslint-config-prettier": "^6.15.0", + "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", "eslint-plugin-prettier": "^3.4.1", diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 0627532c..298b5479 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -6,9 +6,7 @@ const sandbox = require("@log4js-node/sandboxed-module"); const removeFiles = async filenames => { if (!Array.isArray(filenames)) filenames = [filenames]; - const promises = filenames.map(filename => { - return fs.promises.unlink(filename); - }); + const promises = filenames.map(filename => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; @@ -43,9 +41,7 @@ test("file appender single SIGHUP handler", t => { t.teardown(async () => { log4js.shutdown(); - const filenames = Object.values(config.appenders).map(appender => { - return appender.filename; - }); + const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); process.off("warning", warningListener); diff --git a/test/tap/tcp-appender-test.js b/test/tap/tcp-appender-test.js index 0f855fda..e61255f7 100644 --- a/test/tap/tcp-appender-test.js +++ b/test/tap/tcp-appender-test.js @@ -33,7 +33,7 @@ test("TCP Appender", batch => { const serverConfig = { endMsg: "__LOG4JS__", - deserialise: (log) => { return LoggingEvent.deserialise(log); } + deserialise: (log) => LoggingEvent.deserialise(log) } server = makeServer(serverConfig); @@ -78,7 +78,7 @@ test("TCP Appender", batch => { const serverConfig = { endMsg: "\n", - deserialise: (log) => { return LoggingEvent.deserialise(log); } + deserialise: (log) => LoggingEvent.deserialise(log) } server = makeServer(serverConfig); @@ -124,18 +124,16 @@ test("TCP Appender", batch => { const serverConfig = { endMsg: "__LOG4JS__", - deserialise: (log) => { return JSON.parse(log); } + deserialise: (log) => JSON.parse(log) } server = makeServer(serverConfig); - log4js.addLayout('json', function () { - return function (logEvent) { - return JSON.stringify({ - "time": logEvent.startTime, - "message": logEvent.data[0], - "level": logEvent.level.toString() - }); - } + log4js.addLayout('json', () => function (logEvent) { + return JSON.stringify({ + "time": logEvent.startTime, + "message": logEvent.data[0], + "level": logEvent.level.toString() + }); }); server.listen(() => { From 65703f68781d601d51293bd07bf2ce34cfd67f05 Mon Sep 17 00:00:00 2001 From: peteriman Date: Fri, 14 Jan 2022 22:15:07 +0800 Subject: [PATCH 050/454] chore(deps): update deps --- package-lock.json | 298 ++++------------------------------------------ package.json | 10 +- 2 files changed, 28 insertions(+), 280 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a63dce3..ca3462ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -150,12 +150,6 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, "acorn": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", @@ -564,32 +558,6 @@ "get-intrinsic": "^1.0.2" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -641,12 +609,6 @@ "readdirp": "~3.3.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -801,36 +763,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, "coveralls": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.11.tgz", @@ -1098,13 +1030,10 @@ } }, "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -1254,9 +1183,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1717,12 +1646,6 @@ } } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -1899,125 +1822,10 @@ } }, "husky": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", - "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "ci-info": "^2.0.0", - "cosmiconfig": "^5.2.1", - "execa": "^1.0.0", - "get-stdin": "^7.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "read-pkg": "^5.2.0", - "run-node": "^1.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - } - } - } + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true }, "iconv-lite": { "version": "0.4.24", @@ -2194,12 +2002,6 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2544,12 +2346,6 @@ "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -2628,12 +2424,6 @@ "type-check": "~0.3.2" } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -3137,12 +2927,6 @@ "mimic-fn": "^1.0.0" } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", @@ -3340,15 +3124,6 @@ "node-modules-regexp": "^1.0.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -3356,9 +3131,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, "prettier-linter-helpers": { @@ -3547,15 +3322,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha1-O9qur0XMB/N1ZW39LlTtCBCxAbo=", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3595,12 +3361,6 @@ "is-promise": "^2.1.0" } }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, "rxjs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", @@ -3628,12 +3388,6 @@ "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", "dev": true }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, "semver-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", @@ -3678,12 +3432,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -4949,6 +4697,12 @@ "bundled": true, "dev": true }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, "unicode-length": { "version": "2.0.2", "bundled": true, @@ -5314,12 +5068,6 @@ "prelude-ls": "~1.1.2" } }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -5330,9 +5078,9 @@ } }, "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index d98cdabd..03c1da13 100644 --- a/package.json +++ b/package.json @@ -51,17 +51,17 @@ "deep-freeze": "0.0.1", "eslint": "^5.16.0", "eslint-config-airbnb-base": "^13.2.0", - "eslint-config-prettier": "^6.15.0", + "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", - "eslint-plugin-prettier": "^3.4.1", + "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^8.1.0", - "husky": "^3.1.0", + "husky": "^7.0.4", "nyc": "^14.1.1", - "prettier": "^1.19.1", + "prettier": "^2.5.1", "proxyquire": "^2.1.3", "tap": "^14.10.7", - "typescript": "^3.9.10", + "typescript": "^4.5.4", "validate-commit-msg": "^2.14.0" }, "browser": { From 0c4cc9fa34285951d41b4478423a92d1f842b693 Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 15 Jan 2022 00:50:01 +0800 Subject: [PATCH 051/454] chore(deps): bump date-format from 3.0.0 to 4.0.2 --- package-lock.json | 64 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca3462ec..017cf6a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -238,7 +238,7 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -502,7 +502,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -579,7 +579,7 @@ "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -691,7 +691,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -706,7 +706,7 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colors": { @@ -828,9 +828,9 @@ } }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.2.tgz", + "integrity": "sha512-QNkWGVGIMGAUci7/35ENSrLNCUKeXHvQbXSP8OYIn801rlJeGGr+Ai2fo8NFetEMsKd3iS6ph05Kz0GNKCt2sA==" }, "debug": { "version": "4.3.3", @@ -931,7 +931,7 @@ "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -1236,7 +1236,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { @@ -1293,7 +1293,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "external-editor": { @@ -1559,7 +1559,7 @@ "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -1606,7 +1606,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "function-loop": { @@ -1727,7 +1727,7 @@ "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -1830,7 +1830,7 @@ "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -2343,7 +2343,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { @@ -2355,7 +2355,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { @@ -2461,7 +2461,7 @@ "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha1-Y7lQIfBwL+36LJuwok53l9cYcdg=", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "loose-envify": { @@ -2476,7 +2476,7 @@ "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", @@ -2568,13 +2568,13 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -2778,7 +2778,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -3091,7 +3091,7 @@ "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -3148,7 +3148,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prop-types": { @@ -3346,7 +3346,7 @@ "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -3373,13 +3373,13 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "semver": { @@ -3569,7 +3569,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -4964,7 +4964,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" @@ -5133,7 +5133,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "uri-js": { "version": "4.2.2", @@ -5174,7 +5174,7 @@ "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -5217,7 +5217,7 @@ "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" diff --git a/package.json b/package.json index 03c1da13..e140db53 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^3.0.0", + "date-format": "^4.0.2", "debug": "^4.3.3", "flatted": "^2.0.2", "rfdc": "^1.3.0", From c5ee86e5ca4b9eaa0ebb7e59d80c96013f3c6662 Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 15 Jan 2022 01:18:10 +0800 Subject: [PATCH 052/454] chore(deps): bump streamroller from 2.2.4 to 3.0.1 --- package-lock.json | 53 ++++++++++++++++++++++++++++++++++++----------- package.json | 2 +- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 017cf6a0..4dfbd2c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1577,6 +1577,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -1586,7 +1587,8 @@ "graceful-fs": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true } } }, @@ -1706,7 +1708,8 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=" + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", + "dev": true }, "har-schema": { "version": "2.0.0", @@ -2383,6 +2386,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -3550,19 +3554,43 @@ } }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.1.tgz", + "integrity": "sha512-ZrxkHryA3qHTlzlM6IDoM0xgnZEHt53jTN8BcLS7znduxeZqz5+vDp3wnA3L1xZo+OOD9JiNBXJnxRjLHsBJsA==", "requires": { - "date-format": "^2.1.0", + "date-format": "^4.0.2", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, @@ -5133,7 +5161,8 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "uri-js": { "version": "4.2.2", diff --git a/package.json b/package.json index e140db53..25029b8b 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "debug": "^4.3.3", "flatted": "^2.0.2", "rfdc": "^1.3.0", - "streamroller": "^2.2.4" + "streamroller": "^3.0.1" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 1f6920ff03274a4a689990f6c9b315db105fe992 Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 15 Jan 2022 01:50:47 +0800 Subject: [PATCH 053/454] chore(deps-dev): bump fs-extra from 8.1.0 to 10.0.0 --- package-lock.json | 31 ++++++++++++++++--------------- package.json | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4dfbd2c0..63fc6d4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1574,20 +1574,20 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "dependencies": { "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true } } @@ -2383,12 +2383,13 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsprim": { @@ -5159,9 +5160,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "uri-js": { diff --git a/package.json b/package.json index 25029b8b..0eaca15a 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", "eslint-plugin-prettier": "^4.0.0", - "fs-extra": "^8.1.0", + "fs-extra": "^10.0.0", "husky": "^7.0.4", "nyc": "^14.1.1", "prettier": "^2.5.1", From 5ffac8c2299229d5aefaed94f0399ca511348abc Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 15 Jan 2022 01:55:15 +0800 Subject: [PATCH 054/454] chore(deps): bump flatted from 2.0.2 to 3.2.4 --- package-lock.json | 14 +++++++++++--- package.json | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63fc6d4e..d782c7e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1504,12 +1504,20 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "dependencies": { + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + } } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, "flow-parser": { "version": "0.122.0", diff --git a/package.json b/package.json index 0eaca15a..4d1f4c73 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dependencies": { "date-format": "^4.0.2", "debug": "^4.3.3", - "flatted": "^2.0.2", + "flatted": "^3.2.4", "rfdc": "^1.3.0", "streamroller": "^3.0.1" }, From 6fa7caf22e5bccf7b62a7bf4120a06c0483fe07d Mon Sep 17 00:00:00 2001 From: peteriman Date: Sat, 15 Jan 2022 02:01:21 +0800 Subject: [PATCH 055/454] chore(deps-dev): bump eslint from 5.16.0 to 8.6.0 --- package-lock.json | 1877 +++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 1130 insertions(+), 749 deletions(-) diff --git a/package-lock.json b/package-lock.json index d782c7e5..ea063fc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,26 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.5.0" }, "dependencies": { "source-map": { @@ -34,50 +23,63 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.16.7" } }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.16.7" } }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "@babel/types": "^7.16.7" } }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/runtime": { @@ -90,44 +92,166 @@ } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@log4js-node/sandboxed-module": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", @@ -151,15 +275,15 @@ "dev": true }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "agent-base": { @@ -183,16 +307,16 @@ "uri-js": "^4.2.2" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -439,12 +563,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, "async-hook-domain": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", @@ -530,12 +648,6 @@ "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", @@ -587,12 +699,6 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "chokidar": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", @@ -609,21 +715,6 @@ "readdirp": "~3.3.0" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -749,9 +840,9 @@ "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -797,11 +888,15 @@ "safe-buffer": "^5.0.1" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } } } }, @@ -853,9 +948,9 @@ "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-require-extensions": { @@ -919,13 +1014,13 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "once": "^1.4.0" + "ansi-colors": "^4.1.1" } }, "error-ex": { @@ -975,47 +1070,221 @@ "dev": true }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "eslint-config-airbnb-base": { @@ -1192,28 +1461,36 @@ } }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "esm": { @@ -1223,14 +1500,14 @@ "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" } }, "esprima": { @@ -1240,27 +1517,27 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -1275,38 +1552,12 @@ "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -1354,22 +1605,13 @@ } } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-keys": { @@ -1400,60 +1642,6 @@ "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } } }, "find-parent-dir": { @@ -1496,21 +1684,23 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -1656,15 +1846,6 @@ } } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1838,15 +2019,6 @@ "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1863,9 +2035,9 @@ } }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -1894,44 +2066,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -1943,12 +2077,6 @@ "side-channel": "^1.0.4" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1983,15 +2111,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -2061,12 +2180,6 @@ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", "dev": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -2164,9 +2277,9 @@ }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -2412,15 +2525,6 @@ "verror": "1.10.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", @@ -2428,13 +2532,13 @@ "dev": true }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "load-json-file": { @@ -2447,6 +2551,14 @@ "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "locate-path": { @@ -2471,6 +2583,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -2504,14 +2622,6 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } } }, "make-error": { @@ -2520,34 +2630,6 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -2578,12 +2660,6 @@ "mime-db": "1.43.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2644,12 +2720,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2684,13 +2754,13 @@ "dev": true }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -2701,15 +2771,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", @@ -2763,9 +2824,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -2931,15 +2992,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", @@ -2947,17 +2999,17 @@ "dev": true }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, "os-homedir": { @@ -2966,23 +3018,6 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "own-or": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", @@ -2998,24 +3033,6 @@ "own-or": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3083,12 +3100,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -3108,6 +3119,14 @@ "dev": true, "requires": { "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "performance-now": { @@ -3123,9 +3142,9 @@ "dev": true }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { @@ -3137,10 +3156,64 @@ "node-modules-regexp": "^1.0.0" } }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { @@ -3209,16 +3282,6 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3259,6 +3322,61 @@ "path-type": "^3.0.0" } }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, "readdirp": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", @@ -3275,9 +3393,9 @@ "dev": true }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "release-zalgo": { @@ -3335,22 +3453,23 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -3365,24 +3484,6 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3445,17 +3546,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3487,9 +3577,9 @@ } }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -3497,15 +3587,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -3513,9 +3603,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha1-gcDOjyFHR1YUi7tfO/wPNr8V124=", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "sprintf-js": { @@ -3603,16 +3693,6 @@ } } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -3634,12 +3714,12 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -3648,16 +3728,10 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "stubs": { @@ -3681,46 +3755,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "tap": { "version": "14.10.7", "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.7.tgz", @@ -4029,6 +4063,15 @@ "bundled": true, "dev": true }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, "arrify": { "version": "2.0.1", "bundled": true, @@ -4044,6 +4087,31 @@ "bundled": true, "dev": true }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, "caller-callsite": { "version": "2.0.0", "bundled": true, @@ -4106,6 +4174,68 @@ "string-width": "^4.2.0" } }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, "color-convert": { "version": "1.9.3", "bundled": true, @@ -4147,6 +4277,15 @@ "ms": "^2.1.1" } }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, "emoji-regex": { "version": "8.0.0", "bundled": true, @@ -4172,6 +4311,26 @@ "bundled": true, "dev": true }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "gensync": { "version": "1.0.0-beta.1", "bundled": true, @@ -4201,6 +4360,15 @@ "bundled": true, "dev": true }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, "import-jsx": { "version": "3.1.0", "bundled": true, @@ -4298,6 +4466,88 @@ "bundled": true, "dev": true }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "bundled": true, @@ -4316,6 +4566,16 @@ "minimist": "^1.2.5" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lodash.throttle": { "version": "4.1.1", "bundled": true, @@ -4419,6 +4679,16 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "mimic-fn": { "version": "2.1.0", "bundled": true, @@ -4449,6 +4719,47 @@ "bundled": true, "dev": true }, + "nyc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "caching-transform": "^3.0.2", + "convert-source-map": "^1.6.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.3", + "uuid": "^3.3.2", + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "object-assign": { "version": "4.1.1", "bundled": true, @@ -4462,6 +4773,51 @@ "mimic-fn": "^2.1.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, "prop-types": { "version": "15.7.2", "bundled": true, @@ -4590,6 +4946,31 @@ } } }, + "spawn-wrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", + "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "string-length": { "version": "3.1.0", "bundled": true, @@ -4663,6 +5044,18 @@ "yaml": "^1.5.0" } }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, "to-fast-properties": { "version": "2.0.0", "bundled": true, @@ -4835,6 +5228,74 @@ "@babel/runtime": "^7.8.7" } }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "yoga-layout-prebuilt": { "version": "1.9.5", "bundled": true, @@ -4929,61 +5390,6 @@ "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - } } }, "text-table": { @@ -4992,21 +5398,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -5038,12 +5429,6 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, "trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", @@ -5075,12 +5460,6 @@ "strip-bom": "^3.0.0" } }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5097,14 +5476,20 @@ "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -5197,6 +5582,12 @@ "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", "dev": true }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, "validate-commit-msg": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", @@ -5348,15 +5739,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", @@ -5369,9 +5751,9 @@ } }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -5396,22 +5778,21 @@ "dev": true }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" + "yargs-parser": "^13.1.2" }, "dependencies": { "ansi-regex": { @@ -5440,9 +5821,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" diff --git a/package.json b/package.json index 4d1f4c73..88fa1a16 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^5.16.0", + "eslint": "^8.6.0", "eslint-config-airbnb-base": "^13.2.0", "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", From a96195a556bb789d1a58e871c070baca2f7c2a3d Mon Sep 17 00:00:00 2001 From: peteriman Date: Sun, 16 Jan 2022 00:43:06 +0800 Subject: [PATCH 056/454] chore(deps-dev): bump nyc from 14.1.1 to 15.1.0 --- package-lock.json | 1114 +++++++++++++++++++++++++++----------- package.json | 2 +- test/sandbox-coverage.js | 4 +- 3 files changed, 809 insertions(+), 311 deletions(-) diff --git a/package-lock.json b/package-lock.json index ea063fc2..aead75b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,67 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, "@babel/generator": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", @@ -23,6 +84,26 @@ } } }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", @@ -61,6 +142,40 @@ "@babel/types": "^7.16.7" } }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", @@ -76,6 +191,34 @@ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", @@ -100,28 +243,6 @@ "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } } }, "@babel/traverse": { @@ -140,28 +261,6 @@ "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } } }, "@babel/types": { @@ -252,6 +351,82 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@log4js-node/sandboxed-module": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", @@ -295,6 +470,16 @@ "debug": "4" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -339,12 +524,12 @@ } }, "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "default-require-extensions": "^3.0.0" } }, "archy": { @@ -642,6 +827,19 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -649,15 +847,15 @@ "dev": true }, "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" } }, "call-bind": { @@ -682,6 +880,12 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -715,43 +919,21 @@ "readdirp": "~3.3.0" } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "codecov": { @@ -954,12 +1136,20 @@ "dev": true }, "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, "requires": { - "strip-bom": "^3.0.0" + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } } }, "define-properties": { @@ -1008,10 +1198,16 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.4.46", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", + "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", + "dev": true + }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "enquirer": { @@ -1063,6 +1259,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1634,14 +1836,14 @@ } }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-parent-dir": { @@ -1765,6 +1967,12 @@ "mime-types": "^2.1.12" } }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-exists-cached": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", @@ -1821,6 +2029,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1846,6 +2060,12 @@ } } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1889,9 +2109,9 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { @@ -1961,12 +2181,21 @@ } }, "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { - "is-stream": "^1.0.1" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, "hosted-git-info": { @@ -2050,6 +2279,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2139,9 +2374,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -2196,9 +2431,9 @@ "dev": true }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { @@ -2234,6 +2469,12 @@ "call-bind": "^1.0.2" } }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2253,29 +2494,32 @@ "dev": true }, "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "append-transform": "^1.0.0" + "append-transform": "^2.0.0" } }, "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2298,47 +2542,66 @@ } }, "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", + "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + } } }, "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", "dev": true, "requires": { - "html-escaper": "^2.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, "jackspeak": { @@ -2615,13 +2878,20 @@ } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "make-error": { @@ -2753,6 +3023,21 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2772,55 +3057,113 @@ "dev": true }, "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "p-limit": { @@ -2833,12 +3176,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -2846,6 +3189,63 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -3051,6 +3451,15 @@ "p-limit": "^1.1.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -3058,13 +3467,13 @@ "dev": true }, "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", + "hasha": "^5.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } @@ -3135,6 +3544,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -3157,31 +3572,31 @@ } }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" }, "dependencies": { "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "p-limit": { @@ -3194,12 +3609,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -3207,6 +3622,12 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, @@ -3231,6 +3652,15 @@ "fast-diff": "^1.1.2" } }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -3563,17 +3993,79 @@ } }, "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", "signal-exit": "^3.0.2", - "which": "^1.3.0" + "which": "^2.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "spdx-correct": { @@ -3693,6 +4185,17 @@ } } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -5381,15 +5884,30 @@ } }, "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "text-table": { @@ -5695,41 +6213,39 @@ "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "color-convert": "^2.0.1" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true } } }, @@ -5740,14 +6256,15 @@ "dev": true }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "y18n": { @@ -5778,46 +6295,41 @@ "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^3.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "yargs-parser": "^18.1.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "p-limit": { @@ -5830,12 +6342,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -5844,32 +6356,18 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 88fa1a16..58eb63f5 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.0.0", "husky": "^7.0.4", - "nyc": "^14.1.1", + "nyc": "^15.1.0", "prettier": "^2.5.1", "proxyquire": "^2.1.3", "tap": "^14.10.7", diff --git a/test/sandbox-coverage.js b/test/sandbox-coverage.js index f94f1be0..2d86361f 100644 --- a/test/sandbox-coverage.js +++ b/test/sandbox-coverage.js @@ -6,8 +6,8 @@ sandbox.configure({ if (this.filename.indexOf("node_modules") > -1) { return source; } - const nyc = new (require("nyc"))(); - return nyc.instrumenter().instrumentSync(source, this.filename); + const nyc = new (require("nyc"))({}); + return nyc.instrumenter().instrumentSync(source, this.filename, { registerMap: () => {} }); } } }); From 8042252861a1b65adb66931fdf702ead34fa9b76 Mon Sep 17 00:00:00 2001 From: peteriman Date: Sun, 16 Jan 2022 22:09:32 +0800 Subject: [PATCH 057/454] Changed default file modes from 0o644 to 0o600 for better security --- docs/dateFile.md | 2 +- docs/file.md | 2 +- docs/fileSync.md | 2 +- lib/appenders/dateFile.js | 4 +++- lib/appenders/file.js | 3 +++ lib/appenders/fileSync.js | 2 +- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/dateFile.md b/docs/dateFile.md index 8e4b53f8..cdca469c 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -11,7 +11,7 @@ This is a file appender that rolls log files based on a configurable time, rathe Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0o644 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a') * `compress` - `boolean` (default false) - compress the backup files during rolling (backup files will have `.gz` extension) * `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file as well as the backups. diff --git a/docs/file.md b/docs/file.md index e4fee59a..213868c1 100644 --- a/docs/file.md +++ b/docs/file.md @@ -12,7 +12,7 @@ The file appender writes log events to a file. It supports an optional maximum f Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0o644 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a') * `compress` - `boolean` (default false) - compress the backup files during rolling (backup files will have `.gz` extension) * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`) diff --git a/docs/fileSync.md b/docs/fileSync.md index ee7ae146..380982d9 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -12,7 +12,7 @@ The sync file appender writes log events to a file, the only difference to the n Any other configuration parameters will be passed to the underlying node.js core stream implementation: * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0644) +* `mode`- `integer` (default 0600) * `flags` - `string` (default 'a') ## Example diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index da50ead3..31b94f0c 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -49,7 +49,6 @@ function appender( function configure(config, layouts) { let layout = layouts.basicLayout; - if (config.layout) { layout = layouts.layout(config.layout.type, config.layout); } @@ -58,6 +57,9 @@ function configure(config, layouts) { config.alwaysIncludePattern = false; } + // security default (instead of relying on streamroller default) + config.mode = config.mode || 0o600; + return appender( config.filename, config.pattern, diff --git a/lib/appenders/file.js b/lib/appenders/file.js index f14a716e..696e04ab 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -110,6 +110,9 @@ function configure(config, layouts) { layout = layouts.layout(config.layout.type, config.layout); } + // security default (instead of relying on streamroller default) + config.mode = config.mode || 0o600; + return fileAppender( config.filename, layout, diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 237e273b..3b920eef 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -192,7 +192,7 @@ function configure(config, layouts) { const options = { flags: config.flags || 'a', encoding: config.encoding || 'utf8', - mode: config.mode || 0o644 + mode: config.mode || 0o600 }; return fileAppender( From eb3143d134bbd106c560623e089193dcf249ce95 Mon Sep 17 00:00:00 2001 From: peteriman Date: Mon, 17 Jan 2022 09:24:53 +0800 Subject: [PATCH 058/454] Added 1 more assertion for increase of SIGHUP listeners on log4js.configure() --- test/tap/file-sighup-test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 0627532c..b50ddc7d 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -127,6 +127,8 @@ if (process.platform !== "win32") { }, categories: { default: { appenders: ["file"], level: "info" } } }); + t.plan(2); + t.equal(process.listenerCount("SIGHUP"), initialListeners + 1); log4js.shutdown(() => { t.equal(process.listenerCount("SIGHUP"), initialListeners); t.end(); From 23330546a96803cc2a20e0ea38edecc87dd48cad Mon Sep 17 00:00:00 2001 From: peteriman Date: Mon, 17 Jan 2022 10:06:35 +0800 Subject: [PATCH 059/454] Added automated test to assert appenders and categories are reverted back to initial state on log4js.shutdown() --- lib/categories.js | 5 +++-- test/tap/logging-test.js | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/categories.js b/lib/categories.js index 6bb4d8bf..4e559180 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -203,11 +203,12 @@ const setEnableCallStackForCategory = (category, useCallStack) => { configForCategory(category).enableCallStack = useCallStack; }; -module.exports = { +module.exports = categories; +module.exports = Object.assign(module.exports, { appendersForCategory, getLevelForCategory, setLevelForCategory, getEnableCallStackForCategory, setEnableCallStackForCategory, init, -}; +}); diff --git a/test/tap/logging-test.js b/test/tap/logging-test.js index be12436b..be39e7f5 100644 --- a/test/tap/logging-test.js +++ b/test/tap/logging-test.js @@ -4,6 +4,52 @@ const util = require("util"); const recording = require("../../lib/appenders/recording"); test("log4js", batch => { + batch.test("shutdown should return appenders and categories back to initial state", t => { + const stringifyMap = (map) => JSON.stringify(Array.from(map)); + const deepCopyMap = (map) => new Map(JSON.parse(stringifyMap(map))); + + const log4js = require("../../lib/log4js"); + + const appenders = require("../../lib/appenders"); + const categories = require("../../lib/categories"); + const initialAppenders = deepCopyMap(appenders); + const initialCategories = deepCopyMap(categories); + + log4js.configure({ + appenders: { recorder: { type: "recording" } }, + categories: { default: { appenders: ["recorder"], level: "DEBUG" } } + }); + + const configuredAppenders = deepCopyMap(appenders); + const configuredCategories = deepCopyMap(categories); + t.notEqual( + stringifyMap(configuredAppenders), + stringifyMap(initialAppenders), + "appenders should be different from initial state" + ); + t.notEqual( + stringifyMap(configuredCategories), + stringifyMap(initialCategories), + "categories should be different from initial state" + ); + + log4js.shutdown(() => { + const finalAppenders = deepCopyMap(appenders); + const finalCategories = deepCopyMap(categories); + t.equal( + stringifyMap(finalAppenders), + stringifyMap(initialAppenders), + "appenders should revert back to initial state" + ); + t.equal( + stringifyMap(finalCategories), + stringifyMap(initialCategories), + "categories should revert back to initial state" + ); + t.end(); + }); + }); + batch.test("getLogger", t => { const log4js = require("../../lib/log4js"); log4js.configure({ From c12ac23e0793c8176689306f770c6ada86290076 Mon Sep 17 00:00:00 2001 From: peteriman Date: Mon, 17 Jan 2022 10:44:55 +0800 Subject: [PATCH 060/454] Fixed ESLint arrow-body-style error --- test/tap/file-descriptor-leak-test.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 0a20fa54..8d475b67 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -6,9 +6,7 @@ const log4js = require("../../lib/log4js"); const removeFiles = async filenames => { if (!Array.isArray(filenames)) filenames = [filenames]; - const promises = filenames.map(filename => { - return fs.promises.unlink(filename); - }); + const promises = filenames.map(filename => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; @@ -72,9 +70,7 @@ if (process.platform !== "win32") { batch.teardown(async () => { log4js.shutdown(); - const filenames = Object.values(config.appenders).map(appender => { - return appender.filename; - }); + const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); }); From 96f198b920f80c79a929e81ca78b10c0b843a7a0 Mon Sep 17 00:00:00 2001 From: peteriman Date: Tue, 18 Jan 2022 01:13:28 +0800 Subject: [PATCH 061/454] Reduced setTimeout(1000) -> setTimeout(250) for waiting for file system to catch up --- test/tap/file-descriptor-leak-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 8d475b67..7436a8e7 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -40,7 +40,7 @@ if (process.platform !== "win32") { t.equal(loadedFd, initialFd + numOfAppenders, `file descriptor count should increase by ${numOfAppenders} after 1st configure() call`); t.end(); - }, 1000); + }, 250); }); batch.test("repeated log4js configure to not increase file descriptor count", t => { @@ -53,7 +53,7 @@ if (process.platform !== "win32") { t.equal(fs.readdirSync('/proc/self/fd').length, loadedFd, `file descriptor count should be identical after repeated configure() calls`); t.end(); - }, 1000); + }, 250); }); batch.test("file descriptor count should return back to initial count", t => { @@ -64,7 +64,7 @@ if (process.platform !== "win32") { t.equal(fs.readdirSync('/proc/self/fd').length, initialFd, `file descriptor count should be back to initial`); t.end(); - }, 1000); + }, 250); }); batch.teardown(async () => { From 65e3eb8b524dbd4f79384e18fff51f6eb9caa777 Mon Sep 17 00:00:00 2001 From: peteriman Date: Tue, 18 Jan 2022 02:14:19 +0800 Subject: [PATCH 062/454] chore: changes to get tests running on windows --- test/tap/file-sighup-test.js | 127 +++++++++++++++++------------------ 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index b50ddc7d..7d70d4e4 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -60,79 +60,74 @@ test("file appender single SIGHUP handler", t => { }, 0); }); -// no SIGHUP signals on Windows, so don't run the tests -if (process.platform !== "win32") { - - test("file appender SIGHUP", t => { - let closeCalled = 0; - let openCalled = 0; - - const appender = sandbox - .require("../../lib/appenders/file", { - requires: { - streamroller: { - RollingFileStream: class RollingFileStream { - constructor() { - openCalled++; - this.ended = false; - } +test("file appender SIGHUP", t => { + let closeCalled = 0; + let openCalled = 0; + + const appender = sandbox + .require("../../lib/appenders/file", { + requires: { + streamroller: { + RollingFileStream: class RollingFileStream { + constructor() { + openCalled++; + this.ended = false; + } - on() { - this.dummy = "easier than turning off lint rule"; - } + on() { + this.dummy = "easier than turning off lint rule"; + } - end(cb) { - this.ended = true; - closeCalled++; - cb(); - } + end(cb) { + this.ended = true; + closeCalled++; + cb(); + } - write() { - if (this.ended) { - throw new Error("write after end"); - } - return true; + write() { + if (this.ended) { + throw new Error("write after end"); } + return true; } } } - }) - .configure( - { type: "file", filename: "sighup-test-file" }, - { - basicLayout() { - return "whatever"; - } + } + }) + .configure( + { type: "file", filename: "sighup-test-file" }, + { + basicLayout() { + return "whatever"; } - ); - - appender("something to log"); - process.kill(process.pid, "SIGHUP"); - - t.plan(2); - setTimeout(() => { - appender("something to log after sighup"); - t.equal(openCalled, 2, "open should be called twice"); - t.equal(closeCalled, 1, "close should be called once"); - t.end(); - }, 100); - }); + } + ); - test("file appender SIGHUP handler leak", t => { - const log4js = require("../../lib/log4js"); - const initialListeners = process.listenerCount("SIGHUP"); - log4js.configure({ - appenders: { - file: { type: "file", filename: "test.log" } - }, - categories: { default: { appenders: ["file"], level: "info" } } - }); - t.plan(2); - t.equal(process.listenerCount("SIGHUP"), initialListeners + 1); - log4js.shutdown(() => { - t.equal(process.listenerCount("SIGHUP"), initialListeners); - t.end(); - }); - }); + appender("something to log"); + process.emit("SIGHUP", "SIGHUP", 1); -} \ No newline at end of file + t.plan(2); + setTimeout(() => { + appender("something to log after sighup"); + t.equal(openCalled, 2, "open should be called twice"); + t.equal(closeCalled, 1, "close should be called once"); + t.end(); + }, 100); +}); + +test("file appender SIGHUP handler leak", t => { + const log4js = require("../../lib/log4js"); + const initialListeners = process.listenerCount("SIGHUP"); + log4js.configure({ + appenders: { + file: { type: "file", filename: "test.log" } + }, + categories: { default: { appenders: ["file"], level: "info" } } + }); + t.plan(2); + t.equal(process.listenerCount("SIGHUP"), initialListeners + 1); + log4js.shutdown(() => { + t.equal(process.listenerCount("SIGHUP"), initialListeners); + t.end(); + }); +}); \ No newline at end of file From 3caa706ee259f2f0ade560d99f94ddbef7a74704 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 00:23:07 +0800 Subject: [PATCH 063/454] chore(test): Changed default TAP test suite timeout from 30s to 45s because Windows takes a long time --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 58eb63f5..1c597aa1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "scripts": { "pretest": "eslint \"lib/**/*.js\" \"test/**/*.js\"", - "test": "tap \"test/tap/**/*.js\" --cov", + "test": "TAP_TIMEOUT=45 tap \"test/tap/**/*.js\" --cov", "typings": "tsc -p types/tsconfig.json", "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" }, From c0f95fa53a88f631f1ac8c60856a6e0612ba996f Mon Sep 17 00:00:00 2001 From: peteriman Date: Tue, 18 Jan 2022 14:44:13 +0800 Subject: [PATCH 064/454] chore(test): update teardown() for tests to remove tmp files --- test/tap/configuration-validation-test.js | 13 +++++++++- test/tap/dateFileAppender-test.js | 8 +++---- test/tap/file-sighup-test.js | 3 +++ test/tap/fileAppender-test.js | 9 +++++++ test/tap/fileSyncAppender-test.js | 24 ++++++++++++++----- test/tap/multi-file-appender-test.js | 29 +++++++++++++++++++++++ test/tap/pause-test.js | 18 ++++++++++++++ 7 files changed, 93 insertions(+), 11 deletions(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index fb965b3b..ec6bf227 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -7,6 +7,13 @@ const deepFreeze = require("deep-freeze"); const log4js = require("../../lib/log4js"); const configuration = require("../../lib/configuration"); +const removeFiles = async filenames => { + if (!Array.isArray(filenames)) + filenames = [filenames]; + const promises = filenames.map(filename => fs.promises.unlink(filename)); + await Promise.allSettled(promises); +}; + const testAppender = (label, result) => ({ configure(config, layouts, findAppender) { debug( @@ -247,13 +254,17 @@ test("log4js configuration validation", batch => { ); batch.test("should not throw error if configure object is freezed", t => { + const testFile = "test/tap/freeze-date-file-test"; + t.teardown(() => { + removeFiles(testFile); + }); t.doesNotThrow(() => log4js.configure( deepFreeze({ appenders: { dateFile: { type: "dateFile", - filename: "test/tap/freeze-date-file-test", + filename: testFile, alwaysIncludePattern: false } }, diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index db4e6f97..8baa9688 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -98,10 +98,10 @@ test("../../lib/appenders/dateFile", batch => { options.appenders.date.pattern, new Date() ); + const testFile = `date-file-test.${thisTime}`; const existingFile = path.join( - process.cwd(), - "test/tap/", - `date-file-test.${thisTime}` + __dirname, + testFile ); fs.writeFileSync(existingFile, `this is existing data${EOL}`, "utf8"); log4js.configure(options); @@ -109,7 +109,7 @@ test("../../lib/appenders/dateFile", batch => { logger.warn("this should be written to the file with the appended date"); t.teardown(() => { - removeFile(existingFile); + removeFile(testFile); }); // wait for filesystem to catch up diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 78057124..cf059b2b 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -120,6 +120,9 @@ test("file appender SIGHUP handler leak", t => { }, categories: { default: { appenders: ["file"], level: "info" } } }); + t.teardown(async () => { + await removeFiles("test.log"); + }); t.plan(2); t.equal(process.listenerCount("SIGHUP"), initialListeners + 1); log4js.shutdown(() => { diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index be1791c2..0abe3515 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -50,6 +50,11 @@ test("log4js fileAppender", batch => { const testFile = path.join(__dirname, "fa-default-test.log"); await removeFile(testFile); + t.tearDown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); + await removeFile(testFile); + }); + log4js.configure({ appenders: { test: { type: "file", filename: testFile } }, categories: { default: { appenders: ["test"], level: "trace" } } @@ -76,6 +81,7 @@ test("log4js fileAppender", batch => { const logger = log4js.getLogger("max-file-size"); t.tearDown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); @@ -116,6 +122,7 @@ test("log4js fileAppender", batch => { const logger = log4js.getLogger("max-file-size-unit"); t.tearDown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); @@ -168,6 +175,7 @@ test("log4js fileAppender", batch => { ]); t.tearDown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1`), @@ -227,6 +235,7 @@ test("log4js fileAppender", batch => { ]); t.tearDown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1.gz`), diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index d30b51f1..a69d08f1 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -42,7 +42,6 @@ test("log4js fileSyncAppender", batch => { batch.test("with a max file size and no backups", t => { const testFile = path.join(__dirname, "/fa-maxFileSize-sync-test.log"); const logger = log4js.getLogger("max-file-size"); - remove(testFile); remove(`${testFile}.1`); @@ -93,7 +92,6 @@ test("log4js fileSyncAppender", batch => { batch.test("with a max file size in unit mode and no backups", t => { const testFile = path.join(__dirname, "/fa-maxFileSize-unit-sync-test.log"); const logger = log4js.getLogger("max-file-size-unit"); - remove(testFile); remove(`${testFile}.1`); @@ -219,13 +217,20 @@ test("log4js fileSyncAppender", batch => { }); batch.test("configure with fileSyncAppender", t => { + const testFile = "tmp-sync-tests.log"; + remove(testFile); + + t.tearDown(() => { + remove(testFile); + }); + // this config defines one file appender (to ./tmp-sync-tests.log) // and sets the log level for "tests" to WARN log4js.configure({ appenders: { sync: { type: "fileSync", - filename: "tmp-sync-tests.log", + filename: testFile, layout: { type: "messagePassThrough" } } }, @@ -238,7 +243,7 @@ test("log4js fileSyncAppender", batch => { logger.info("this should not be written to the file"); logger.warn("this should be written to the file"); - fs.readFile("tmp-sync-tests.log", "utf8", (err, contents) => { + fs.readFile(testFile, "utf8", (err, contents) => { t.include(contents, `this should be written to the file${EOL}`); t.equal(contents.indexOf("this should not be written to the file"), -1); t.end(); @@ -246,12 +251,19 @@ test("log4js fileSyncAppender", batch => { }); batch.test("test options", t => { + const testFile = "tmp-options-tests.log"; + remove(testFile); + + t.tearDown(() => { + remove(testFile); + }); + // using non-standard options log4js.configure({ appenders: { sync: { type: "fileSync", - filename: "tmp-options-tests.log", + filename: testFile, layout: { type: "messagePassThrough" }, flags: "w", encoding: "ascii", @@ -265,7 +277,7 @@ test("log4js fileSyncAppender", batch => { const logger = log4js.getLogger(); logger.warn("log message"); - fs.readFile("tmp-options-tests.log", "ascii", (err, contents) => { + fs.readFile(testFile, "ascii", (err, contents) => { t.include(contents, `log message${EOL}`); t.end(); }); diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 2b04e4d8..5df3200d 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -4,10 +4,20 @@ const debug = require("debug"); const fs = require("fs"); const log4js = require("../../lib/log4js"); +const removeFiles = async filenames => { + if (!Array.isArray(filenames)) + filenames = [filenames]; + const promises = filenames.map(filename => fs.promises.unlink(filename)); + await Promise.allSettled(promises); +}; + test("multiFile appender", batch => { batch.test( "should write to multiple files based on the loggingEvent property", t => { + t.tearDown(async () => { + await removeFiles(["logs/A.log", "logs/B.log"]); + }); log4js.configure({ appenders: { multi: { @@ -34,6 +44,9 @@ test("multiFile appender", batch => { batch.test( "should write to multiple files based on loggingEvent.context properties", t => { + t.tearDown(async () => { + await removeFiles(["logs/C.log", "logs/D.log"]); + }); log4js.configure({ appenders: { multi: { @@ -60,6 +73,9 @@ test("multiFile appender", batch => { ); batch.test("should close file after timeout", t => { + t.tearDown(async () => { + await removeFiles("logs/C.log"); + }); /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ @@ -104,6 +120,9 @@ test("multiFile appender", batch => { batch.test( "should fail silently if loggingEvent property has no value", t => { + t.tearDown(async () => { + await removeFiles("logs/E.log"); + }); log4js.configure({ appenders: { multi: { @@ -133,6 +152,9 @@ test("multiFile appender", batch => { ); batch.test("should pass options to rolling file stream", t => { + t.tearDown(async () => { + await removeFiles(["logs/F.log", "logs/F.log.1", "logs/F.log.2"]); + }); log4js.configure({ appenders: { multi: { @@ -164,6 +186,9 @@ test("multiFile appender", batch => { }); batch.test("should inherit config from category hierarchy", t => { + t.tearDown(async () => { + await removeFiles("logs/test.someTest.log"); + }); log4js.configure({ appenders: { out: { type: "stdout" }, @@ -211,5 +236,9 @@ test("multiFile appender", batch => { }); }); + batch.tearDown(() => { + fs.rmdirSync("logs"); + }); + batch.end(); }); diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index 0635c615..f405d0e1 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -1,9 +1,20 @@ const tap = require("tap"); +const fs = require("fs"); const log4js = require("../../lib/log4js"); +const removeFiles = async filenames => { + if (!Array.isArray(filenames)) + filenames = [filenames]; + const promises = filenames.map(filename => fs.promises.unlink(filename)); + await Promise.allSettled(promises); +}; + tap.test("Drain event test", batch => { batch.test("Should emit pause event and resume when logging in a file with high frequency", t => { + t.tearDown(async () => { + await removeFiles("logs/drain.log"); + }); // Generate logger with 5k of highWaterMark config log4js.configure({ appenders: { @@ -36,6 +47,9 @@ tap.test("Drain event test", batch => { batch.test("Should emit pause event and resume when logging in a date file with high frequency", (t) => { + t.tearDown(async () => { + await removeFiles("logs/date-file-drain.log"); + }); // Generate date file logger with 5kb of highWaterMark config log4js.configure({ appenders: { @@ -66,5 +80,9 @@ tap.test("Drain event test", batch => { }); + batch.tearDown(() => { + fs.rmdirSync("logs"); + }); + batch.end(); }); From 43a219913736445ab8a05d1efa1ecdc766c63d41 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 01:57:25 +0800 Subject: [PATCH 065/454] chore(test): Changed default TAP test suite timeout from 30s to 45s because Windows takes a long time --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c597aa1..7dc4d71f 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "scripts": { "pretest": "eslint \"lib/**/*.js\" \"test/**/*.js\"", - "test": "TAP_TIMEOUT=45 tap \"test/tap/**/*.js\" --cov", + "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", "typings": "tsc -p types/tsconfig.json", "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" }, From a0baec23a84684d998ab4c704b1f19603550e3fa Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 09:24:55 +0800 Subject: [PATCH 066/454] chore(test): fixed teardown() causing tests to fail due to fs errors on removal --- test/tap/multi-file-appender-test.js | 10 ++++++++-- test/tap/pause-test.js | 11 ++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 5df3200d..aa93f7c5 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -236,8 +236,14 @@ test("multiFile appender", batch => { }); }); - batch.tearDown(() => { - fs.rmdirSync("logs"); + batch.tearDown(async () => { + try { + const files = fs.readdirSync("logs"); + await removeFiles(files.map(filename => `logs/${filename}`)); + fs.rmdirSync("logs"); + } catch (e) { + // doesn't matter + } }); batch.end(); diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index f405d0e1..37d12302 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -77,11 +77,16 @@ tap.test("Drain event test", batch => { logger.info("This is a test for emitting drain event in date file logger"); } t.end(); - }); - batch.tearDown(() => { - fs.rmdirSync("logs"); + batch.tearDown(async () => { + try { + const files = fs.readdirSync("logs"); + await removeFiles(files.map(filename => `logs/${filename}`)); + fs.rmdirSync("logs"); + } catch (e) { + // doesn't matter + } }); batch.end(); From 8cba85f91da6d122d4c559bf891a17b01e69b722 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 10:31:25 +0800 Subject: [PATCH 067/454] chore(test): renamed tap.teardown() to tap.tearDown() for consistency (while both works, only tap.tearDown() is documented) --- test/tap/configuration-validation-test.js | 2 +- test/tap/dateFileAppender-test.js | 8 ++++---- test/tap/file-descriptor-leak-test.js | 2 +- test/tap/file-sighup-test.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index e977c6d3..5350eac4 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -256,7 +256,7 @@ test("log4js configuration validation", batch => { batch.test("should not throw error if configure object is freezed", t => { const testFile = "test/tap/freeze-date-file-test"; - t.teardown(() => { + t.tearDown(() => { removeFiles(testFile); }); t.doesNotThrow(() => diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index 8baa9688..39649919 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -25,7 +25,7 @@ test("../../lib/appenders/dateFile", batch => { const logger = log4js.getLogger("default-settings"); logger.info("This should be in the file."); - t.teardown(() => { + t.tearDown(() => { removeFile("date-appender-default.log"); }); @@ -72,7 +72,7 @@ test("../../lib/appenders/dateFile", batch => { ); }); - t.teardown(() => { + t.tearDown(() => { removeFile("date-file-test.log"); }); }); @@ -108,7 +108,7 @@ test("../../lib/appenders/dateFile", batch => { const logger = log4js.getLogger("tests"); logger.warn("this should be written to the file with the appended date"); - t.teardown(() => { + t.tearDown(() => { removeFile(testFile); }); @@ -140,7 +140,7 @@ test("../../lib/appenders/dateFile", batch => { logger.info("1"); logger.info("2"); logger.info("3"); - t.teardown(() => { + t.tearDown(() => { removeFile("date-appender-flush.log"); }); diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 7436a8e7..55a04b35 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -67,7 +67,7 @@ if (process.platform !== "win32") { }, 250); }); - batch.teardown(async () => { + batch.tearDown(async () => { log4js.shutdown(); const filenames = Object.values(config.appenders).map(appender => appender.filename); diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index cf059b2b..c9682d91 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -38,7 +38,7 @@ test("file appender single SIGHUP handler", t => { const log4js = require("../../lib/log4js"); log4js.configure(config); - t.teardown(async () => { + t.tearDown(async () => { log4js.shutdown(); const filenames = Object.values(config.appenders).map(appender => appender.filename); @@ -120,7 +120,7 @@ test("file appender SIGHUP handler leak", t => { }, categories: { default: { appenders: ["file"], level: "info" } } }); - t.teardown(async () => { + t.tearDown(async () => { await removeFiles("test.log"); }); t.plan(2); From 4c4bbe84e858f3bbb368392425fcaa63154f6913 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 21:55:06 +0800 Subject: [PATCH 068/454] chore(refactor): using writer.writable instead of alive for checking --- lib/appenders/dateFile.js | 48 +++++++++++++++++++-------------------- lib/appenders/file.js | 17 ++++++-------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index 619396a7..3f1ffc4c 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -3,13 +3,29 @@ const os = require('os'); const eol = os.EOL; +function openTheStream(filename, pattern, options) { + const stream = new streams.DateRollingFileStream( + filename, + pattern, + options + ); + stream.on('error', (err) => { + console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); //eslint-disable-line + }); + stream.on("drain", () => { + process.emit("log4js:pause", false); + }); + return stream; +} + /** * File appender that rolls files according to a date pattern. - * @filename base filename. - * @pattern the format that will be added to the end of filename when rolling, + * @param filename base filename. + * @param pattern the format that will be added to the end of filename when rolling, * also used to check when to roll files - defaults to '.yyyy-MM-dd' - * @layout layout function for log messages - defaults to basicLayout - * @timezoneOffset optional timezone offset in minutes - defaults to system local + * @param layout layout function for log messages - defaults to basicLayout + * @param options - options to be passed to the underlying stream + * @param timezoneOffset - optional timezone offset in minutes (default system local) */ function appender( filename, @@ -22,35 +38,19 @@ function appender( // options should work for dateFile as well. options.maxSize = options.maxLogSize; - let alive = true; - - const logFile = new streams.DateRollingFileStream( - filename, - pattern, - options - ); - - logFile.on('error', (err) => { - alive = false; - console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); //eslint-disable-line - }); - logFile.on("drain", () => { - process.emit("log4js:pause", false); - }); + const writer = openTheStream(filename, pattern, options); const app = function (logEvent) { - if (!alive) { + if (!writer.writable) { return; } - if (!logFile.write(layout(logEvent, timezoneOffset) + eol, "utf8")) { + if (!writer.write(layout(logEvent, timezoneOffset) + eol, "utf8")) { process.emit("log4js:pause", true); } }; app.shutdown = function (complete) { - logFile.write('', 'utf-8', () => { - logFile.end(complete); - }); + writer.end('', 'utf-8', complete); }; return app; diff --git a/lib/appenders/file.js b/lib/appenders/file.js index cdcba18f..824a4700 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -20,6 +20,9 @@ function openTheStream(file, fileSize, numFiles, options) { numFiles, options ); + stream.on('error', (err) => { + console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); //eslint-disable-line + }); stream.on('drain', () => { process.emit("log4js:pause", false); }); @@ -55,25 +58,19 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset timezoneOffset, ')' ); - let alive = true; - let writer = openTheStream(file, logSize, numBackups, options); - writer.on('error', (err) => { - alive = false; - console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); //eslint-disable-line - }); const app = function (loggingEvent) { - if (!alive) { + if (!writer.writable) { return; } if (options.removeColor === true) { // eslint-disable-next-line no-control-regex const regex = /\x1b[[0-9;]*m/g; loggingEvent.data = loggingEvent.data.map(d => { - if (typeof d === 'string') return d.replace(regex, '') - return d - }) + if (typeof d === 'string') return d.replace(regex, ''); + return d; + }); } if (!writer.write(layout(loggingEvent, timezoneOffset) + eol, "utf8")) { process.emit('log4js:pause', true); From 85ac31ecbc353511a2d9fd721a080f8c0ba326ea Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 22:08:14 +0800 Subject: [PATCH 069/454] chore(deps-dev): bump eslint from from 8.6.0 to 8.7.0 --- package-lock.json | 76 +++++++++++------------------------------------ package.json | 2 +- 2 files changed, 18 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index aead75b6..062b0c71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -323,6 +323,12 @@ "type-fest": "^0.20.2" } }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -492,12 +498,6 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1210,15 +1210,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1272,9 +1263,9 @@ "dev": true }, "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -1284,11 +1275,10 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", + "eslint-visitor-keys": "^3.2.0", "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", @@ -1297,7 +1287,7 @@ "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", @@ -1308,9 +1298,7 @@ "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", "regexpp": "^3.2.0", - "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", @@ -1424,30 +1412,12 @@ "argparse": "^2.0.1" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1480,12 +1450,6 @@ "requires": { "isexe": "^2.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -1690,9 +1654,9 @@ } }, "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, "esm": { @@ -2249,9 +2213,9 @@ "dev": true }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-walk": { @@ -3661,12 +3625,6 @@ "fromentries": "^1.2.0" } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", diff --git a/package.json b/package.json index 7dc4d71f..6de44601 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.6.0", + "eslint": "^8.7.0", "eslint-config-airbnb-base": "^13.2.0", "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", From 0f398597763499d3b7aaf194e9c7955f8d524a3b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 22:12:36 +0800 Subject: [PATCH 070/454] chore(deps): bump date-format from 4.0.2 to 4.0.3 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 062b0c71..a8a59eef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1105,9 +1105,9 @@ } }, "date-format": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.2.tgz", - "integrity": "sha512-QNkWGVGIMGAUci7/35ENSrLNCUKeXHvQbXSP8OYIn801rlJeGGr+Ai2fo8NFetEMsKd3iS6ph05Kz0GNKCt2sA==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==" }, "debug": { "version": "4.3.3", diff --git a/package.json b/package.json index 6de44601..1dc6efb2 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.2", + "date-format": "^4.0.3", "debug": "^4.3.3", "flatted": "^3.2.4", "rfdc": "^1.3.0", From 6cc0035fcc1af54efdb0c0d3c688b9387af696e0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 22:14:04 +0800 Subject: [PATCH 071/454] chore(deps): bump streamroller from 3.0.1 to 3.0.2 --- package-lock.json | 50 +++++++---------------------------------------- package.json | 2 +- 2 files changed, 8 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8a59eef..d6f22662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1947,7 +1947,6 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -1957,8 +1956,7 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" } } }, @@ -2081,8 +2079,7 @@ "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", - "dev": true + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=" }, "har-schema": { "version": "2.0.0", @@ -2734,7 +2731,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -4103,44 +4099,13 @@ } }, "streamroller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.1.tgz", - "integrity": "sha512-ZrxkHryA3qHTlzlM6IDoM0xgnZEHt53jTN8BcLS7znduxeZqz5+vDp3wnA3L1xZo+OOD9JiNBXJnxRjLHsBJsA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "requires": { - "date-format": "^4.0.2", + "date-format": "^4.0.3", "debug": "^4.1.1", "fs-extra": "^10.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } } }, "string-width": { @@ -6031,8 +5996,7 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { "version": "4.2.2", diff --git a/package.json b/package.json index 1dc6efb2..803567a3 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "debug": "^4.3.3", "flatted": "^3.2.4", "rfdc": "^1.3.0", - "streamroller": "^3.0.1" + "streamroller": "^3.0.2" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From d4617a730da73136be2e887e6a5ec28aacabd899 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 23:21:21 +0800 Subject: [PATCH 072/454] chore(deps): migrated from daysToKeep to numBackups due to streamroller@^3.0.0 --- docs/dateFile.md | 2 +- examples/date-file-rolling.js | 2 +- types/log4js.d.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dateFile.md b/docs/dateFile.md index 8e4b53f8..b0f6e7b3 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -15,7 +15,7 @@ Any other configuration parameters will be passed to the underlying [streamrolle * `flags` - `string` (default 'a') * `compress` - `boolean` (default false) - compress the backup files during rolling (backup files will have `.gz` extension) * `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file as well as the backups. -* `daysToKeep` - `integer` (default 0) - if this value is greater than zero, then files older than that many days will be deleted during log rolling. +* `numBackups` - `integer` (default 0) - if this value is greater than zero, then files older than that many days will be deleted during log rolling. * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). The `pattern` is used to determine when the current log file should be renamed and a new log file created. For example, with a filename of 'cheese.log', and the default pattern of `.yyyy-MM-dd` - on startup this will result in a file called `cheese.log` being created and written to until the next write after midnight. When this happens, `cheese.log` will be renamed to `cheese.log.2017-04-30` and a new `cheese.log` file created. The appender uses the [date-format](https://github.com/nomiddlename/date-format) library to parse the `pattern`, and any of the valid formats can be used. Also note that there is no timer controlling the log rolling - changes in the pattern are determined on every log write. If no writes occur, then no log rolling will happen. If your application logs infrequently this could result in no log file being written for a particular time period. diff --git a/examples/date-file-rolling.js b/examples/date-file-rolling.js index bb69bcdb..04f90e9b 100644 --- a/examples/date-file-rolling.js +++ b/examples/date-file-rolling.js @@ -5,7 +5,7 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { file: { - type: 'dateFile', filename: 'thing.log', daysToKeep: 3, pattern: '.mm' + type: 'dateFile', filename: 'thing.log', numBackups: 3, pattern: '.mm' } }, categories: { diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2a84e6e3..b6e55c5a 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -187,7 +187,7 @@ export interface DateFileAppender { // keep the file extension when rotating logs keepFileExt?: boolean; // if this value is greater than zero, then files older than that many days will be deleted during log rolling.(default 0) - daysToKeep?: number; + numBackups?: number; } export interface LogLevelFilterAppender { From d6b017e72041913a18fefa0194459cebd63ba440 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 23:18:27 +0800 Subject: [PATCH 073/454] chore(docs): updated fileSync.md and misc comments --- docs/fileSync.md | 2 +- types/log4js.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fileSync.md b/docs/fileSync.md index 380982d9..da5d9063 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -12,7 +12,7 @@ The sync file appender writes log events to a file, the only difference to the n Any other configuration parameters will be passed to the underlying node.js core stream implementation: * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0600) +* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a') ## Example diff --git a/types/log4js.d.ts b/types/log4js.d.ts index b7946da2..51873b4c 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -178,7 +178,7 @@ export interface DateFileAppender { pattern?: string; // default “utf-8” encoding?: string; - // default 0644 + // default 0600 mode?: number; // default ‘a’ flags?: string; From ac599e42c6762cd0cc6ee3a34873c6f839dd196f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 20 Jan 2022 01:37:12 +0800 Subject: [PATCH 074/454] allow for zero backup - in sync with https://github.com/log4js-node/streamroller/pull/74 **Important** It is also to note the file does not roll within itself (truncate its older entry for newer entry). It truncates all and appends only the new entry. ```javascript var rollers = require('streamroller'); var stream = new rollers.RollingFileStream('myfile', 6, 0); stream.write("abc"); // add as first row stream.write("def"); // add as second row stream.write("ghi"); // truncate all and add as first row stream.end(); ``` Output: ``` myfile - ghi ``` --- lib/appenders/file.js | 4 +--- lib/appenders/fileSync.js | 10 +++++----- test/tap/fileAppender-test.js | 8 ++++---- test/tap/fileSyncAppender-test.js | 10 ++++------ 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 824a4700..e976a29f 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -45,9 +45,7 @@ function openTheStream(file, fileSize, numFiles, options) { */ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { file = path.normalize(file); - numBackups = numBackups === undefined ? 5 : numBackups; - // there has to be at least one backup if logSize has been specified - numBackups = numBackups === 0 ? 1 : numBackups; + numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; debug( 'Creating file appender (', diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 3b920eef..4b6109c1 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -30,7 +30,7 @@ class RollingFileSync { this.filename = filename; this.size = size; - this.backups = backups || 1; + this.backups = backups; this.options = options; this.currentSize = 0; @@ -80,7 +80,9 @@ class RollingFileSync { function increaseFileIndex(fileToRename) { const idx = index(fileToRename); debug(`Index of ${fileToRename} is ${idx}`); - if (idx < that.backups) { + if (that.backups === 0) { + fs.truncateSync(filename, 0); + } else if (idx < that.backups) { // on windows, you can get a EEXIST error if you rename a file to an existing file // so, we'll try to delete the file we're renaming to first try { @@ -146,9 +148,7 @@ class RollingFileSync { function fileAppender(file, layout, logSize, numBackups, timezoneOffset, options) { debug('fileSync appender created'); file = path.normalize(file); - numBackups = numBackups === undefined ? 5 : numBackups; - // there has to be at least one backup if logSize has been specified - numBackups = numBackups === 0 ? 1 : numBackups; + numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; function openTheStream(filePath, fileSize, numFiles) { let stream; diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 0abe3515..44d48b22 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -82,9 +82,9 @@ test("log4js fileAppender", batch => { t.tearDown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); - await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); + await removeFile(testFile); }); - await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); + await removeFile(testFile); // log file of 100 bytes maximum, no backups log4js.configure({ @@ -113,7 +113,7 @@ test("log4js fileAppender", batch => { const logFiles = files.filter(file => file.includes("fa-maxFileSize-test.log") ); - t.equal(logFiles.length, 2, "should be 2 files"); + t.equal(logFiles.length, 1, "should be 1 file"); t.end(); }); @@ -158,7 +158,7 @@ test("log4js fileAppender", batch => { const logFiles = files.filter(file => file.includes("fa-maxFileSize-unit-test.log") ); - t.equal(logFiles.length, 2, "should be 2 files"); + t.equal(logFiles.length, 1, "should be 1 file"); t.end(); }); diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index a69d08f1..b1c01886 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -43,11 +43,9 @@ test("log4js fileSyncAppender", batch => { const testFile = path.join(__dirname, "/fa-maxFileSize-sync-test.log"); const logger = log4js.getLogger("max-file-size"); remove(testFile); - remove(`${testFile}.1`); t.tearDown(() => { remove(testFile); - remove(`${testFile}.1`); }); // log file of 100 bytes maximum, no backups @@ -77,12 +75,12 @@ test("log4js fileSyncAppender", batch => { }); }); - t.test("there should be two test files", assert => { + t.test("there should be one test files", assert => { fs.readdir(__dirname, (err, files) => { const logFiles = files.filter(file => file.includes("fa-maxFileSize-sync-test.log") ); - assert.equal(logFiles.length, 2); + assert.equal(logFiles.length, 1); assert.end(); }); }); @@ -128,12 +126,12 @@ test("log4js fileSyncAppender", batch => { }); }); - t.test("there should be two test files", assert => { + t.test("there should be one test file", assert => { fs.readdir(__dirname, (err, files) => { const logFiles = files.filter(file => file.includes("fa-maxFileSize-unit-sync-test.log") ); - assert.equal(logFiles.length, 2); + assert.equal(logFiles.length, 1); assert.end(); }); }); From 7fdb141135e930960d44597d969a1aff14627346 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 20 Jan 2022 00:55:58 +0800 Subject: [PATCH 075/454] chore: updated changelog for 6.4.0 --- CHANGELOG.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94f4252d..3c0ac155 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,70 @@ # log4js-node changelog +## 6.4.0 + +- [security: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) + - [chore(docs): updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) +- [feat: Added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) +- [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) +- [bug: Fixed file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@peteriman](https://github.com/peteriman) +- [bug: Fixed MaxListenersExceededWarning from NodeJS](https://github.com/log4js-node/log4js-node/pull/1110) - thanks [@peteriman](https://github.com/peteriman) + - [test: added assertion for increase of SIGHUP listeners on log4js.configure()](https://github.com/log4js-node/log4js-node/pull/1142) - thanks [@peteriman](https://github.com/peteriman) +- [bug: Fixed missing TCP appender with Webpack and Typescript](https://github.com/log4js-node/log4js-node/pull/1028) - thanks [@techmunk](https://github.com/techmunk) +- [bug: Fixed dateFile appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1097) - thanks [@4eb0da](https://github.com/4eb0da) + - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@peteriman](https://github.com/peteriman) +- [bug: Fixed TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) +- [bug: Fixed Multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) +- [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@peteriman](https://github.com/peteriman) +- [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@peteriman](https://github.com/peteriman) +- test: added tap.tearDown() to clean up test files + - [#1143](https://github.com/log4js-node/log4js-node/pull/1143) - thanks [@peteriman](https://github.com/peteriman) + - [#1022](https://github.com/log4js-node/log4js-node/pull/1022) - thanks [@abetomo](https://github.com/abetomo) +- [type: improved @types for AppenderModule](https://github.com/log4js-node/log4js-node/pull/1079) - thanks [@nicobao](https://github.com/nicobao) +- [type: Updated fileSync appender types](https://github.com/log4js-node/log4js-node/pull/1116) - thanks [@peteriman](https://github.com/peteriman) +- [type: Removed erroneous type in file appender](https://github.com/log4js-node/log4js-node/pull/1031) - thanks [@vdmtrv](https://github.com/vdmtrv) +- [type: Updated Logger.log type](https://github.com/log4js-node/log4js-node/pull/1115) - thanks [@ZLundqvist](https://github.com/ZLundqvist) +- [type: Updated Logger.\_log type](https://github.com/log4js-node/log4js-node/pull/1117) - thanks [@peteriman](https://github.com/peteriman) +- [type: Updated Logger.level type](https://github.com/log4js-node/log4js-node/pull/1118) - thanks [@peteriman](https://github.com/peteriman) +- [type: Updated Levels.getLevel type](https://github.com/log4js-node/log4js-node/pull/1072) - thanks [@saulzhong](https://github.com/saulzhong) +- [chore(deps): bump streamroller from 3.0.1 to 3.0.2](https://github.com/log4js-node/log4js-node/pull/1147) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): bump date-format from 4.0.2 to 4.0.3](https://github.com/log4js-node/log4js-node/pull/1146) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump eslint from from 8.6.0 to 8.7.0](https://github.com/log4js-node/log4js-node/pull/1145) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump nyc from 14.1.1 to 15.1.0](https://github.com/log4js-node/log4js-node/pull/1140) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump eslint from 5.16.0 to 8.6.0](https://github.com/log4js-node/log4js-node/pull/1138) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): bump flatted from 2.0.2 to 3.2.4](https://github.com/log4js-node/log4js-node/pull/1137) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump fs-extra from 8.1.0 to 10.0.0](https://github.com/log4js-node/log4js-node/pull/1136) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): bump streamroller from 2.2.4 to 3.0.1](https://github.com/log4js-node/log4js-node/pull/1135) - thanks [@peteriman](https://github.com/peteriman) + - [feat: allows for zero backups](https://github.com/log4js-node/log4js-node/pull/1151) - thanks [@peteriman](https://github.com/peteriman) + - [api: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@peteriman](https://github.com/peteriman) + - [bug: compressed file ignores dateFile appender "mode"](https://github.com/log4js-node/streamroller/pull/65) - thanks [@rnd-debug](https://github.com/rnd-debug) + - issue: addresses additional separator in filename ([#1039](https://github.com/log4js-node/log4js-node/issues/1039)) - details: [streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) + - issue: addresses daysToKeep naming confusion ([#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080)) - details: [streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) +- [chore(deps): bump date-format from 3.0.0 to 4.0.2](https://github.com/log4js-node/log4js-node/pull/1134) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): Updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@peteriman](https://github.com/peteriman) + - eslint-config-prettier from 6.15.0 to 8.3.0 + - eslint-plugin-prettier from 3.4.1 to 4.0.0 + - husky from 3.1.0 to 7.0.4 + - prettier from 1.19.0 to 2.5.1 + - typescript from 3.9.10 to 4.5.4 +- [chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0](https://github.com/log4js-node/log4js-node/pull/1129) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): Updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@peteriman](https://github.com/peteriman) + - codecov from 3.6.1 to 3.8.3 + - eslint-config-prettier from 6.5.0 to 6.15.0 + - eslint-import-resolver-node from 0.3.2 to 0.3.6 + - eslint-plugin-import" from 2.18.2 to 2.25.4 + - eslint-plugin-prettier from 3.1.1 to 3.4.1 + - husky from 3.0.9 to 3.1.0 + - prettier from 1.18.2 to 1.19.1 + - typescript from 3.7.2 to 3.9.10 +- [chore(deps): bump path-parse from 1.0.6 to 1.0.7](https://github.com/log4js-node/log4js-node/pull/1120) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump glob-parent from 5.1.1 to 5.1.2](https://github.com/log4js-node/log4js-node/pull/1084) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump hosted-git-info from 2.7.1 to 2.8.9](https://github.com/log4js-node/log4js-node/pull/1076) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump lodash from 4.17.14 to 4.17.21](https://github.com/log4js-node/log4js-node/pull/1075) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump y18n from 4.0.0 to 4.0.1](https://github.com/log4js-node/log4js-node/pull/1070) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump node-fetch from 2.6.0 to 2.6.1](https://github.com/log4js-node/log4js-node/pull/1047) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps): bump yargs-parser from 13.1.1 to 13.1.2](https://github.com/log4js-node/log4js-node/pull/1045) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps-dev): bump codecov from 3.6.5 to 3.7.1](https://github.com/log4js-node/log4js-node/pull/1033) - thanks [@Dependabot](https://github.com/dependabot) + ## 6.3.0 - [Add option to file appender to remove ANSI colours](https://github.com/log4js-node/log4js-node/pull/1001) - thanks [@BlueCocoa](https://github.com/BlueCocoa) From 9fdbed5ad45d1b09b35c1ef5355ba726b60cb702 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 19 Jan 2022 17:59:53 +0000 Subject: [PATCH 076/454] 6.4.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index d6f22662..2d6e61a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.3.0", + "version": "6.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 803567a3..8370fa64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.3.0", + "version": "6.4.0", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From d4fe5276a7855ba4ae18577923132a5e56002e60 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 20 Jan 2022 13:37:50 +0800 Subject: [PATCH 077/454] chore(docs): changed author to contributors in package.json --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8370fa64..60e24a17 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "license": "Apache-2.0", "main": "./lib/log4js", "types": "./types/log4js.d.ts", - "author": "Gareth Jones ", + "contributors": [ + "Gareth Jones ", + "Lam Wei Li " + ], "repository": { "type": "git", "url": "https://github.com/log4js-node/log4js-node.git" From 58234af1f6c8b6b11dc27ee84b91cccb0c9845c6 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Fri, 21 Jan 2022 10:50:55 -0800 Subject: [PATCH 078/454] Make typings match code better Fixes v6.4.0 regressions. There is an npm script `npm run typings` which actually failed before this commit. This seems to have been a combination of incorrect typings (a mandatory argument to `getLevel` that should be optional, the idea that for custom appenders `configure` should return an intermediate "generator" function before the appender function itself) as well as mistakes in the test file (which had an appender module which had one level of function nesting too few). Specifically, for the `configure` function on appenders, I believe there should be two levels of function: an outer function taking one-time configuration, and an inner function taking an individual log messages. The typings file wanted there to be three layers, and the test file wanted there to be one layer. Fixes #1155. --- types/log4js.d.ts | 9 ++------- types/test.ts | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 7d651c2c..ec26cc1e 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -263,14 +263,9 @@ export interface CustomAppender { } export interface AppenderModule { - configure: (config: Config, layouts: LayoutsParam) => AppenderGenerator; + configure: (config: Config, layouts: LayoutsParam) => AppenderFunction; } -export type AppenderGenerator = ( - layout: LayoutFunction, - timezoneOffset?: string -) => AppenderFunction; - export type AppenderFunction = (loggingEvent: LoggingEvent) => void; // TODO: Actually add types here... @@ -321,7 +316,7 @@ export interface Levels { FATAL: Level; OFF: Level; levels: Level[]; - getLevel(level: Level | string, defaultLevel: Level): Level; + getLevel(level: Level | string, defaultLevel?: Level): Level; addLevels(customLevels: object): void; } diff --git a/types/test.ts b/types/test.ts index a2f0fafc..b0c8d4ed 100644 --- a/types/test.ts +++ b/types/test.ts @@ -133,7 +133,7 @@ log4js.connectLogger(logger2, { //support for passing in an appender module log4js.configure({ - appenders: { thing: { type: { configure: () => {} }}}, + appenders: { thing: { type: { configure: () => () => {} }}}, categories: { default: { appenders: ['thing'], level: 'debug'}} }); From c3966b5b16ec54f2d60dda9030f8b6431a41b0fb Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sat, 22 Jan 2022 08:52:20 +1100 Subject: [PATCH 079/454] Add step to run typescript tests This adds the `typings` step to the build, so that we will know if a typescript change breaks things. --- .github/workflows/node.js.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 33e45839..a6d1f24c 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -30,3 +30,5 @@ jobs: - run: npm ci - run: npm run build --if-present - run: npm test + - run: npm run typings + From 528ce0f07fdf0ad83cabfda5628ab5c0c0491287 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sat, 22 Jan 2022 09:04:57 +1100 Subject: [PATCH 080/454] Add types check to publish workflow To avoid accidentally publishing broken typescript definitions to NPM in future. --- .github/workflows/npm-publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 0083fd92..e4e4922c 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -17,6 +17,7 @@ jobs: node-version: 16 - run: npm ci - run: npm test + - run: npm run typings publish-npm: needs: build From f127382fa870db7293daf15b0fc800a098aead9d Mon Sep 17 00:00:00 2001 From: Nico Jansen Date: Sun, 23 Jan 2022 00:20:19 +0100 Subject: [PATCH 081/454] fix(multiprocess): startup multiprocess even when no direct appenders attached Fixes #1161 --- lib/appenders/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index ab9bde93..efe23981 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -95,9 +95,9 @@ const setup = (config) => { usedAppenders.push(...category.appenders) }); Object.keys(config.appenders).forEach((name) => { - // dodgy hard-coding of special case for tcp-server which may not have + // dodgy hard-coding of special case for tcp-server and multiprocess which may not have // any categories associated with it, but needs to be started up anyway - if (usedAppenders.includes(name) || config.appenders[name].type === 'tcp-server') { + if (usedAppenders.includes(name) || config.appenders[name].type === 'tcp-server' || config.appenders[name].type === 'multiprocess') { getAppender(name, config); } }); From bedbc4152f984a2ad214b97f6cb809a0dd177e15 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 20:34:05 +0800 Subject: [PATCH 082/454] refactor date pattern names for clarity (when %date actually means %datetime) --- docs/layouts.md | 2 +- lib/layouts.js | 30 +++++++++++++++++------- test/tap/layouts-test.js | 50 +++++++++++++++++++++++++++++----------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/docs/layouts.md b/docs/layouts.md index de967443..b2d2e456 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -116,7 +116,7 @@ Fields can be any of: * `%c` log category * `%h` hostname * `%m` log data -* `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTE`, `DATE`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATE}`, `%d{yyyy/MM/dd-hh.mm.ss}` +* `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTETIME`, `DATETIME`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATETIME}`, `%d{yyyy/MM/dd-hh.mm.ss}` * `%%` % - for when you want a literal `%` in your output * `%n` newline * `%z` process id (from `process.pid`) diff --git a/lib/layouts.js b/lib/layouts.js index ab203e53..6cf412d1 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -2,6 +2,7 @@ const dateFormat = require('date-format'); const os = require('os'); const util = require('util'); const path = require('path'); +const debug = require('debug')('log4js:layouts'); const styles = { // styles @@ -144,14 +145,27 @@ function patternLayout(pattern, tokens) { if (specifier) { format = specifier; // Pick up special cases - if (format === 'ISO8601') { - format = dateFormat.ISO8601_FORMAT; - } else if (format === 'ISO8601_WITH_TZ_OFFSET') { - format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; - } else if (format === 'ABSOLUTE') { - format = dateFormat.ABSOLUTETIME_FORMAT; - } else if (format === 'DATE') { - format = dateFormat.DATETIME_FORMAT; + switch (format) { + case 'ISO8601': + case 'ISO8601_FORMAT': + format = dateFormat.ISO8601_FORMAT; + break; + case 'ISO8601_WITH_TZ_OFFSET': + case 'ISO8601_WITH_TZ_OFFSET_FORMAT': + format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; + break; + case 'ABSOLUTE': + debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); + case 'ABSOLUTETIME': + case 'ABSOLUTETIME_FORMAT': + format = dateFormat.ABSOLUTETIME_FORMAT; + break; + case 'DATE': + debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); + case 'DATETIME': + case 'DATETIME_FORMAT': + format = dateFormat.DATETIME_FORMAT; + break; } } // Format the date diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index 70b8ba8d..f2f18433 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -412,23 +412,21 @@ test("log4js layouts", batch => { "2010-12-05T14:18:30.045" ); - // Commenting this test out, because it does not work in travis - // for reasons I do not understand. - // testPattern( - // assert, - // layout, - // event, - // tokens, - // "%d{ISO8601_WITH_TZ_OFFSET}", - // "2010-12-05T03:18:30.045+1000" - // ); + testPattern( + assert, + layout, + event, + tokens, + "%d{ISO8601_WITH_TZ_OFFSET}", + "2010-12-05T14:18:30.045+10:00" + ); testPattern( assert, layout, event, tokens, - "%d{ABSOLUTE}", + "%d{ABSOLUTE}", // deprecated "14:18:30.045" ); testPattern( @@ -436,9 +434,27 @@ test("log4js layouts", batch => { layout, event, tokens, - "%d{DATE}", + "%d{ABSOLUTETIME}", + "14:18:30.045" + ); + + testPattern( + assert, + layout, + event, + tokens, + "%d{DATE}", // deprecated "05 12 2010 14:18:30.045" ); + testPattern( + assert, + layout, + event, + tokens, + "%d{DATETIME}", + "05 12 2010 14:18:30.045" + ); + testPattern( assert, layout, @@ -617,7 +633,15 @@ test("log4js layouts", batch => { layout, event, tokens, - "%m%n %c{2} at %d{ABSOLUTE} cheese %p%n", + "%m%n %c{2} at %d{ABSOLUTE} cheese %p%n", // deprecated + `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` + ); + testPattern( + assert, + layout, + event, + tokens, + "%m%n %c{2} at %d{ABSOLUTETIME} cheese %p%n", `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` ); assert.end(); From 26ed377d6cd80882ba74fb0793d780a1a795bae4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 21:09:32 +0800 Subject: [PATCH 083/454] fixed eslint --- lib/layouts.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/layouts.js b/lib/layouts.js index 6cf412d1..76231faf 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -156,16 +156,19 @@ function patternLayout(pattern, tokens) { break; case 'ABSOLUTE': debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); + // falls through case 'ABSOLUTETIME': case 'ABSOLUTETIME_FORMAT': format = dateFormat.ABSOLUTETIME_FORMAT; break; case 'DATE': debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); + // falls through case 'DATETIME': case 'DATETIME_FORMAT': format = dateFormat.DATETIME_FORMAT; break; + // no default } } // Format the date From 3226b3de40da493c3a034ffa7694caa2aab1ef38 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 21:19:30 +0800 Subject: [PATCH 084/454] emit deprecation --- lib/appenders/index.js | 8 ++++++++ lib/layouts.js | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index efe23981..f5956b39 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -68,9 +68,17 @@ const createAppender = (name, config) => { `appender "${name}" is not valid (type "${appenderConfig.type}" could not be found)` ); if (appenderModule.appender) { + process.emitWarning( + `Appender ${appenderConfig.type} exports an appender function.`, + "DeprecationWarning", "log4js-node-DEP0001" + ); debug(`DEPRECATION: Appender ${appenderConfig.type} exports an appender function.`); } if (appenderModule.shutdown) { + process.emitWarning( + `Appender ${appenderConfig.type} exports a shutdown function.`, + "DeprecationWarning", "log4js-node-DEP0002" + ); debug(`DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.`); } diff --git a/lib/layouts.js b/lib/layouts.js index 76231faf..dad27972 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -155,6 +155,11 @@ function patternLayout(pattern, tokens) { format = dateFormat.ISO8601_WITH_TZ_OFFSET_FORMAT; break; case 'ABSOLUTE': + process.emitWarning( + "Pattern %d{ABSOLUTE} is deprecated in favor of %d{ABSOLUTETIME}. " + + "Please use %d{ABSOLUTETIME} instead.", + "DeprecationWarning", "log4js-node-DEP0003" + ); debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); // falls through case 'ABSOLUTETIME': @@ -162,6 +167,11 @@ function patternLayout(pattern, tokens) { format = dateFormat.ABSOLUTETIME_FORMAT; break; case 'DATE': + process.emitWarning( + "Pattern %d{DATE} is deprecated due to the confusion it causes when used. " + + "Please use %d{DATETIME} instead.", + "DeprecationWarning", "log4js-node-DEP0004" + ); debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); // falls through case 'DATETIME': From bf2b326e518b423a89a20076af78e5154d7c525c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 21:33:50 +0800 Subject: [PATCH 085/454] fixed eslint --- lib/appenders/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index efe23981..dc682f0a 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -92,12 +92,13 @@ const setup = (config) => { appendersLoading.clear(); const usedAppenders = []; Object.values(config.categories).forEach(category => { - usedAppenders.push(...category.appenders) + usedAppenders.push(...category.appenders); }); Object.keys(config.appenders).forEach((name) => { // dodgy hard-coding of special case for tcp-server and multiprocess which may not have // any categories associated with it, but needs to be started up anyway - if (usedAppenders.includes(name) || config.appenders[name].type === 'tcp-server' || config.appenders[name].type === 'multiprocess') { + if (usedAppenders.includes(name) || config.appenders[name].type === 'tcp-server' + || config.appenders[name].type === 'multiprocess') { getAppender(name, config); } }); From a7ec9bad90c890043d18abf1cdd1560340d73f3d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 21:53:02 +0800 Subject: [PATCH 086/454] chore(deps-dev): bump typescript from 4.5.4 to 4.5.5 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d6e61a6..cdd68144 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5941,9 +5941,9 @@ } }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index 60e24a17..ef91ab91 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "prettier": "^2.5.1", "proxyquire": "^2.1.3", "tap": "^14.10.7", - "typescript": "^4.5.4", + "typescript": "^4.5.5", "validate-commit-msg": "^2.14.0" }, "browser": { From 1dd2f173acf168eeabef91fda58bad7765d7caf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 23 Jan 2022 14:06:37 +0000 Subject: [PATCH 087/454] chore(deps): bump node-fetch from 2.6.6 to 2.6.7 Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.6 to 2.6.7. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/main/docs/CHANGELOG.md) - [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.6...v2.6.7) --- updated-dependencies: - dependency-name: node-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdd68144..8af11385 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2969,9 +2969,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { "whatwg-url": "^5.0.0" From 1fdc562430e54cd81d6948404398b7fc37370f62 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 22:17:49 +0800 Subject: [PATCH 088/454] chore: updated changelog for 6.4.1 --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c0ac155..bb7e16f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # log4js-node changelog +## 6.4.1 + +- [bug: Fixed to startup multiprocess even when no direct appenders](https://github.com/log4js-node/log4js-node/pull/1162) - thanks [@nicojs](https://github.com/nicojs) + - [refactor: fixed eslint warnings](https://github.com/log4js-node/log4js-node/pull/1165) - thanks [@peteriman](https://github.com/peteriman) +- [improvement: additional alias for date patterns](https://github.com/log4js-node/log4js-node/pull/1163) - thanks [@peteriman](https://github.com/peteriman) +- [improvement: added emitWarning for deprecation](https://github.com/log4js-node/log4js-node/pull/1164) - thanks [@peteriman](https://github.com/peteriman) +- [type: Fixed wrong types from 6.4.0 regression](https://github.com/log4js-node/log4js-node/pull/1158) - thanks [@glasser](https://github.com/glasser) +- [chore(docs): changed author to contributors in package.json](https://github.com/log4js-node/log4js-node/pull/1153) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): bump node-fetch from 2.6.6 to 2.6.7](https://github.com/log4js-node/log4js-node/pull/1167) - thanks [@Dependabot](https://github.com/dependabot) +- [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@peteriman](https://github.com/peteriman) + ## 6.4.0 - [security: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) From 060da55fe84b617a510e3766674ebac1cdb50174 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 23 Jan 2022 22:32:47 +0800 Subject: [PATCH 089/454] Updated package.json to npm publish CHANGELOG.md and SECURITY.md --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ef91ab91..739c2761 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ "lib", - "types" + "types", + "CHANGELOG.md", + "SECURITY.md" ], "keywords": [ "logging", From 909a522c2789a5c404ae0720e581837ec4476753 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 23 Jan 2022 14:42:50 +0000 Subject: [PATCH 090/454] 6.4.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8af11385..93c56a8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.0", + "version": "6.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 739c2761..101b8650 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.0", + "version": "6.4.1", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From ae4e44081310053067ae444533a1524c530456d6 Mon Sep 17 00:00:00 2001 From: Nico Jansen Date: Tue, 25 Jan 2022 13:42:02 +0100 Subject: [PATCH 091/454] test(multiprogress): add e2e test Prevent regression for the multiprocess appender. --- test/multiprocess-worker.js | 6 ++++-- test/tap/multiprocess-test.js | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/test/multiprocess-worker.js b/test/multiprocess-worker.js index 804c4c9f..2a018753 100644 --- a/test/multiprocess-worker.js +++ b/test/multiprocess-worker.js @@ -3,10 +3,12 @@ if (process.argv.indexOf('start-multiprocess-worker') >= 0) { const port = parseInt(process.argv[process.argv.length - 1], 10); log4js.configure({ appenders: { - multi: { type: 'multiprocess', mode: 'worker', loggerPort: port } + multi: { type: 'multiprocess', mode: 'worker', loggerPort: port }, }, categories: { default: { appenders: ['multi'], level: 'debug' } } }); log4js.getLogger('worker').info('Logging from worker'); - process.send('worker is done'); + log4js.shutdown(() => { + process.send('worker is done'); + }); } diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index b6dc663f..a85cc779 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -1,3 +1,4 @@ +const childProcess = require("child_process"); const { test } = require("tap"); const flatted = require("flatted"); const sandbox = require("@log4js-node/sandboxed-module"); @@ -49,7 +50,7 @@ function makeFakeNet() { }; } -test("Multiprocess Appender", batch => { +test("Multiprocess Appender", async batch => { batch.beforeEach(done => { recording.erase(); done(); @@ -370,5 +371,36 @@ test("Multiprocess Appender", batch => { t.end(); }); + await batch.test('e2e test', async (assert) => { + const log4js = sandbox.require('../../lib/log4js', { + requires: { + './appenders/recording': recording, + }, + }); + log4js.configure({ + appenders: { + recording: { type: 'recording' }, + master: { type: 'multiprocess', mode: 'master', appender: 'recording', loggerPort: 5001 }, + }, + categories: { default: { appenders: ['recording'], level: 'trace' } }, + }); + const child = childProcess.fork( + require.resolve('../multiprocess-worker.js'), + ['start-multiprocess-worker', '5001'], + { stdio: 'inherit' } + ); + const actualMsg = await new Promise((res, rej) => { + child.on('message', res); + child.on('error', rej); + }); + + const logEvents = recording.replay(); + assert.equal(actualMsg, 'worker is done'); + assert.equal(logEvents.length, 1); + assert.equal(logEvents[0].data[0], 'Logging from worker'); + assert.end(); + }); + + batch.end(); }); From 166f2252f7236c602379bf348082156bbd6d05fb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 25 Jan 2022 16:12:40 +0800 Subject: [PATCH 092/454] refactor(test): replaced `tap.tearDown()` (deprecated) to `tap.teardown()` (backward-compatible) in preparation for tap v15 https://github.com/tapjs/node-tap/pull/649/files --- test/tap/configuration-validation-test.js | 2 +- test/tap/dateFileAppender-test.js | 8 ++++---- test/tap/file-descriptor-leak-test.js | 2 +- test/tap/file-sighup-test.js | 4 ++-- test/tap/fileAppender-test.js | 14 +++++++------- test/tap/fileSyncAppender-test.js | 12 ++++++------ test/tap/logLevelFilter-test.js | 2 +- test/tap/multi-file-appender-test.js | 14 +++++++------- test/tap/pause-test.js | 6 +++--- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index 5350eac4..e977c6d3 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -256,7 +256,7 @@ test("log4js configuration validation", batch => { batch.test("should not throw error if configure object is freezed", t => { const testFile = "test/tap/freeze-date-file-test"; - t.tearDown(() => { + t.teardown(() => { removeFiles(testFile); }); t.doesNotThrow(() => diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index 39649919..8baa9688 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -25,7 +25,7 @@ test("../../lib/appenders/dateFile", batch => { const logger = log4js.getLogger("default-settings"); logger.info("This should be in the file."); - t.tearDown(() => { + t.teardown(() => { removeFile("date-appender-default.log"); }); @@ -72,7 +72,7 @@ test("../../lib/appenders/dateFile", batch => { ); }); - t.tearDown(() => { + t.teardown(() => { removeFile("date-file-test.log"); }); }); @@ -108,7 +108,7 @@ test("../../lib/appenders/dateFile", batch => { const logger = log4js.getLogger("tests"); logger.warn("this should be written to the file with the appended date"); - t.tearDown(() => { + t.teardown(() => { removeFile(testFile); }); @@ -140,7 +140,7 @@ test("../../lib/appenders/dateFile", batch => { logger.info("1"); logger.info("2"); logger.info("3"); - t.tearDown(() => { + t.teardown(() => { removeFile("date-appender-flush.log"); }); diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 55a04b35..7436a8e7 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -67,7 +67,7 @@ if (process.platform !== "win32") { }, 250); }); - batch.tearDown(async () => { + batch.teardown(async () => { log4js.shutdown(); const filenames = Object.values(config.appenders).map(appender => appender.filename); diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index c9682d91..cf059b2b 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -38,7 +38,7 @@ test("file appender single SIGHUP handler", t => { const log4js = require("../../lib/log4js"); log4js.configure(config); - t.tearDown(async () => { + t.teardown(async () => { log4js.shutdown(); const filenames = Object.values(config.appenders).map(appender => appender.filename); @@ -120,7 +120,7 @@ test("file appender SIGHUP handler leak", t => { }, categories: { default: { appenders: ["file"], level: "info" } } }); - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("test.log"); }); t.plan(2); diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 44d48b22..02eaca67 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -24,7 +24,7 @@ test("log4js fileAppender", batch => { const logger = log4js.getLogger("default-settings"); await removeFile(testFile); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await removeFile(testFile); }); @@ -50,7 +50,7 @@ test("log4js fileAppender", batch => { const testFile = path.join(__dirname, "fa-default-test.log"); await removeFile(testFile); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await removeFile(testFile); }); @@ -80,7 +80,7 @@ test("log4js fileAppender", batch => { const testFile = path.join(__dirname, "fa-maxFileSize-test.log"); const logger = log4js.getLogger("max-file-size"); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await removeFile(testFile); }); @@ -121,7 +121,7 @@ test("log4js fileAppender", batch => { const testFile = path.join(__dirname, "fa-maxFileSize-unit-test.log"); const logger = log4js.getLogger("max-file-size-unit"); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); @@ -174,7 +174,7 @@ test("log4js fileAppender", batch => { removeFile(`${testFile}.2`) ]); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([ removeFile(testFile), @@ -234,7 +234,7 @@ test("log4js fileAppender", batch => { removeFile(`${testFile}.2.gz`) ]); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([ removeFile(testFile), @@ -350,7 +350,7 @@ test("log4js fileAppender", batch => { await removeFile(testFilePlain); await removeFile(testFileAsIs); - t.tearDown(async () => { + t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await removeFile(testFilePlain); await removeFile(testFileAsIs); diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index b1c01886..bb068adf 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -18,7 +18,7 @@ test("log4js fileSyncAppender", batch => { const logger = log4js.getLogger("default-settings"); remove(testFile); - t.tearDown(() => { + t.teardown(() => { remove(testFile); }); @@ -44,7 +44,7 @@ test("log4js fileSyncAppender", batch => { const logger = log4js.getLogger("max-file-size"); remove(testFile); - t.tearDown(() => { + t.teardown(() => { remove(testFile); }); @@ -93,7 +93,7 @@ test("log4js fileSyncAppender", batch => { remove(testFile); remove(`${testFile}.1`); - t.tearDown(() => { + t.teardown(() => { remove(testFile); remove(`${testFile}.1`); }); @@ -148,7 +148,7 @@ test("log4js fileSyncAppender", batch => { remove(`${testFile}.1`); remove(`${testFile}.2`); - t.tearDown(() => { + t.teardown(() => { remove(testFile); remove(`${testFile}.1`); remove(`${testFile}.2`); @@ -218,7 +218,7 @@ test("log4js fileSyncAppender", batch => { const testFile = "tmp-sync-tests.log"; remove(testFile); - t.tearDown(() => { + t.teardown(() => { remove(testFile); }); @@ -252,7 +252,7 @@ test("log4js fileSyncAppender", batch => { const testFile = "tmp-options-tests.log"; remove(testFile); - t.tearDown(() => { + t.teardown(() => { remove(testFile); }); diff --git a/test/tap/logLevelFilter-test.js b/test/tap/logLevelFilter-test.js index c079e133..27e31f0b 100644 --- a/test/tap/logLevelFilter-test.js +++ b/test/tap/logLevelFilter-test.js @@ -58,7 +58,7 @@ test("log4js logLevelFilter", batch => { remove(`${__dirname}/logLevelFilter-warnings.log`); remove(`${__dirname}/logLevelFilter-debugs.log`); - t.tearDown(() => { + t.teardown(() => { remove(`${__dirname}/logLevelFilter.log`); remove(`${__dirname}/logLevelFilter-warnings.log`); remove(`${__dirname}/logLevelFilter-debugs.log`); diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index aa93f7c5..14cd42e5 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -15,7 +15,7 @@ test("multiFile appender", batch => { batch.test( "should write to multiple files based on the loggingEvent property", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles(["logs/A.log", "logs/B.log"]); }); log4js.configure({ @@ -44,7 +44,7 @@ test("multiFile appender", batch => { batch.test( "should write to multiple files based on loggingEvent.context properties", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles(["logs/C.log", "logs/D.log"]); }); log4js.configure({ @@ -73,7 +73,7 @@ test("multiFile appender", batch => { ); batch.test("should close file after timeout", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("logs/C.log"); }); /* checking that the file is closed after a timeout is done by looking at the debug logs @@ -120,7 +120,7 @@ test("multiFile appender", batch => { batch.test( "should fail silently if loggingEvent property has no value", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("logs/E.log"); }); log4js.configure({ @@ -152,7 +152,7 @@ test("multiFile appender", batch => { ); batch.test("should pass options to rolling file stream", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles(["logs/F.log", "logs/F.log.1", "logs/F.log.2"]); }); log4js.configure({ @@ -186,7 +186,7 @@ test("multiFile appender", batch => { }); batch.test("should inherit config from category hierarchy", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("logs/test.someTest.log"); }); log4js.configure({ @@ -236,7 +236,7 @@ test("multiFile appender", batch => { }); }); - batch.tearDown(async () => { + batch.teardown(async () => { try { const files = fs.readdirSync("logs"); await removeFiles(files.map(filename => `logs/${filename}`)); diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index 37d12302..fc8ef6cf 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -12,7 +12,7 @@ const removeFiles = async filenames => { tap.test("Drain event test", batch => { batch.test("Should emit pause event and resume when logging in a file with high frequency", t => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("logs/drain.log"); }); // Generate logger with 5k of highWaterMark config @@ -47,7 +47,7 @@ tap.test("Drain event test", batch => { batch.test("Should emit pause event and resume when logging in a date file with high frequency", (t) => { - t.tearDown(async () => { + t.teardown(async () => { await removeFiles("logs/date-file-drain.log"); }); // Generate date file logger with 5kb of highWaterMark config @@ -79,7 +79,7 @@ tap.test("Drain event test", batch => { t.end(); }); - batch.tearDown(async () => { + batch.teardown(async () => { try { const files = fs.readdirSync("logs"); await removeFiles(files.map(filename => `logs/${filename}`)); From 7376c40ad6f4e37f4344d945e78914cfa1259d89 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 25 Jan 2022 18:16:39 +0800 Subject: [PATCH 093/454] refactor(test): replaced deprecated synonyms (backward-compatible) in preparation for tap v15 https://github.com/tapjs/node-tap/pull/649/files https://github.com/coreyfarrell/node-tap/blob/6d9f5798a9700be6773b6fe8c1339796bdf6928b/lib/synonyms.js --- test/tap/configuration-inheritance-test.js | 34 +++++++++++----------- test/tap/logLevelFilter-test.js | 4 +-- test/tap/logging-test.js | 4 +-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/test/tap/configuration-inheritance-test.js b/test/tap/configuration-inheritance-test.js index b9753d98..9c2b9a47 100644 --- a/test/tap/configuration-inheritance-test.js +++ b/test/tap/configuration-inheritance-test.js @@ -23,10 +23,10 @@ test("log4js category inherit all appenders from direct parent", batch => { const childLevel = categories.getLevelForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 2, "inherited 2 appenders"); + t.equal(childAppenders.length, 2, "inherited 2 appenders"); t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); t.ok(childAppenders.some(a => a.label === "stdout2"), "inherited stdout2"); - t.isEqual(childLevel.levelStr, "DEBUG", "child level overrides parent"); + t.equal(childLevel.levelStr, "DEBUG", "child level overrides parent"); t.end(); }); @@ -54,12 +54,12 @@ test("log4js category inherit all appenders from direct parent", batch => { ); const child1Level = categories.getLevelForCategory(child1CategoryName); - t.isEqual(child1Appenders.length, 1, "inherited 1 appender"); + t.equal(child1Appenders.length, 1, "inherited 1 appender"); t.ok( child1Appenders.some(a => a.label === "stdout1"), "inherited stdout1" ); - t.isEqual(child1Level.levelStr, "DEBUG", "child level overrides parent"); + t.equal(child1Level.levelStr, "DEBUG", "child level overrides parent"); const child2CategoryName = "catA.catB.cat2"; const child2Appenders = categories.appendersForCategory( @@ -68,7 +68,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const child2Level = categories.getLevelForCategory(child2CategoryName); t.ok(child2Appenders); - t.isEqual( + t.equal( child2Appenders.length, 2, "inherited 1 appenders, plus its original" @@ -78,7 +78,7 @@ test("log4js category inherit all appenders from direct parent", batch => { "inherited stdout1" ); t.ok(child2Appenders.some(a => a.label === "stdout2"), "kept stdout2"); - t.isEqual(child2Level.levelStr, "INFO", "inherited parent level"); + t.equal(child2Level.levelStr, "INFO", "inherited parent level"); t.end(); } @@ -104,7 +104,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 2, "inherited 2 appenders"); + t.equal(childAppenders.length, 2, "inherited 2 appenders"); t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); @@ -114,7 +114,7 @@ test("log4js category inherit all appenders from direct parent", batch => { ); t.ok(firstParentAppenders); - t.isEqual(firstParentAppenders.length, 2, "ended up with 2 appenders"); + t.equal(firstParentAppenders.length, 2, "ended up with 2 appenders"); t.ok( firstParentAppenders.some(a => a.label === "stdout1"), "inherited stdout1" @@ -146,7 +146,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 1, "inherited 1 appenders"); + t.equal(childAppenders.length, 1, "inherited 1 appenders"); t.ok( childAppenders.some(a => a.label === "stdout1"), "inherited stdout1" @@ -158,7 +158,7 @@ test("log4js category inherit all appenders from direct parent", batch => { ); t.ok(firstParentAppenders, "catA.catB got created implicitily"); - t.isEqual( + t.equal( firstParentAppenders.length, 1, "created with 1 inherited appender" @@ -191,7 +191,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 1); + t.equal(childAppenders.length, 1); t.ok(childAppenders.some(a => a.label === "stdout2")); t.end(); @@ -218,7 +218,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 2, "inherited 1 appender"); + t.equal(childAppenders.length, 2, "inherited 1 appender"); t.ok( childAppenders.some(a => a.label === "stdout1"), "still have stdout1" @@ -250,7 +250,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 1, "inherited no appender"); + t.equal(childAppenders.length, 1, "inherited no appender"); t.ok(childAppenders.some(a => a.label === "stdout2"), "kept stdout2"); t.end(); @@ -276,7 +276,7 @@ test("log4js category inherit all appenders from direct parent", batch => { const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.isEqual(childAppenders.length, 1, "inherited 1 appender"); + t.equal(childAppenders.length, 1, "inherited 1 appender"); t.ok(childAppenders.some(a => a.label === "stdout2"), "inherited stdout2"); const firstParentCategoryName = "catA.catB"; @@ -285,7 +285,7 @@ test("log4js category inherit all appenders from direct parent", batch => { ); t.ok(firstParentAppenders); - t.isEqual(firstParentAppenders.length, 1, "did not inherit new appenders"); + t.equal(firstParentAppenders.length, 1, "did not inherit new appenders"); t.ok(firstParentAppenders.some(a => a.label === "stdout2"), "kept stdout2"); t.end(); @@ -310,14 +310,14 @@ test("log4js category inherit all appenders from direct parent", batch => { const childCategoryName = "catA.catB.catC"; const childLevel = categories.getLevelForCategory(childCategoryName); - t.isEqual(childLevel.levelStr, "INFO", "inherited level"); + t.equal(childLevel.levelStr, "INFO", "inherited level"); const firstParentCategoryName = "catA.catB"; const firstParentLevel = categories.getLevelForCategory( firstParentCategoryName ); - t.isEqual( + t.equal( firstParentLevel.levelStr, "INFO", "generate parent inherited level from base" diff --git a/test/tap/logLevelFilter-test.js b/test/tap/logLevelFilter-test.js index 27e31f0b..de022d95 100644 --- a/test/tap/logLevelFilter-test.js +++ b/test/tap/logLevelFilter-test.js @@ -134,7 +134,7 @@ test("log4js logLevelFilter", batch => { "utf8", (err, contents) => { const messages = contents.trim().split(EOL); - assert.deepEqual(messages, ["error", "warn"]); + assert.same(messages, ["error", "warn"]); assert.end(); } ); @@ -148,7 +148,7 @@ test("log4js logLevelFilter", batch => { "utf8", (err, contents) => { const messages = contents.trim().split(EOL); - assert.deepEqual(messages, ["debug", "debug", "trace"]); + assert.same(messages, ["debug", "debug", "trace"]); assert.end(); } ); diff --git a/test/tap/logging-test.js b/test/tap/logging-test.js index be39e7f5..7943f0c1 100644 --- a/test/tap/logging-test.js +++ b/test/tap/logging-test.js @@ -22,12 +22,12 @@ test("log4js", batch => { const configuredAppenders = deepCopyMap(appenders); const configuredCategories = deepCopyMap(categories); - t.notEqual( + t.not( stringifyMap(configuredAppenders), stringifyMap(initialAppenders), "appenders should be different from initial state" ); - t.notEqual( + t.not( stringifyMap(configuredCategories), stringifyMap(initialCategories), "categories should be different from initial state" From 008f5b6e6677c3f740678e92e94346edb47a65d6 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 26 Jan 2022 20:00:48 +0800 Subject: [PATCH 094/454] chore(dep): bump tap from 14.10.7 to 15.1.6 --- package-lock.json | 2159 +++++++++++++++------------------------------ package.json | 2 +- 2 files changed, 705 insertions(+), 1456 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93c56a8d..0ff6c117 100644 --- a/package-lock.json +++ b/package-lock.json @@ -225,15 +225,6 @@ "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, "@babel/template": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", @@ -514,9 +505,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -538,12 +529,6 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -734,9 +719,9 @@ } }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -749,13 +734,10 @@ "dev": true }, "async-hook-domain": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", - "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", - "dev": true, - "requires": { - "source-map-support": "^0.5.11" - } + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", + "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", + "dev": true }, "asynckit": { "version": "0.4.0", @@ -770,9 +752,9 @@ "dev": true }, "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "balanced-match": { @@ -791,15 +773,15 @@ } }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha1-AXgUDb57e7Z9x0iSrOWbwCR/BvA=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", + "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", "dev": true }, "brace-expansion": { @@ -821,12 +803,6 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserslist": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", @@ -841,9 +817,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "caching-transform": { @@ -904,19 +880,19 @@ } }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "~3.6.0" } }, "clean-stack": { @@ -1037,62 +1013,27 @@ "dev": true }, "coveralls": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.11.tgz", - "integrity": "sha512-LZPWPR2NyGKyaABnc49dR0fpeP6UqhvGq4B5nUrTQ1UBy55z96+ga7r+/ChMdMJUwBgyJDXBi88UBgz2rs9IiQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", - "request": "^2.88.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - } + "request": "^2.88.2" } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "dashdash": { @@ -1173,12 +1114,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "diff-frag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz", - "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==", - "dev": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1210,15 +1145,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -1659,12 +1585,6 @@ "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, "espree": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", @@ -1875,43 +1795,14 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" }, - "flow-parser": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.122.0.tgz", - "integrity": "sha512-rb4pLIb7JAWn4dnO+fB9YLTUOM0SvY1ZN2yeu2NOyL7f2JeXBp9Nevqf+h4OluQcdI+9CnGa/if/HUy1YOX0dA==", - "dev": true - }, - "flow-remove-types": { - "version": "2.122.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.122.0.tgz", - "integrity": "sha512-48cyUF9nyqwlQGRnncNWJNFSIN+sMpeHhqtATwnUZE3bDG8QXH2YS8mL68Xzxs9BVRzcUI+r9ib7d9E/rqUpuQ==", - "dev": true, - "requires": { - "flow-parser": "^0.122.0", - "pirates": "^3.0.2", - "vlq": "^0.2.1" - } - }, "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" } }, "forever-agent": { @@ -1967,9 +1858,9 @@ "dev": true }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -1980,9 +1871,9 @@ "dev": true }, "function-loop": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", - "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", + "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", "dev": true }, "functional-red-black-tree": { @@ -2088,13 +1979,33 @@ "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + } } }, "has": { @@ -2159,12 +2070,6 @@ } } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2273,12 +2178,6 @@ "side-channel": "^1.0.4" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2449,9 +2348,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-hook": { @@ -2490,16 +2389,18 @@ } }, "istanbul-lib-processinfo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", - "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", "dev": true, "requires": { "archy": "^1.0.0", - "cross-spawn": "^6.0.5", - "istanbul-lib-coverage": "^2.0.3", - "rimraf": "^2.6.3", - "uuid": "^3.3.2" + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" } }, "istanbul-lib-report": { @@ -2574,12 +2475,6 @@ "cliui": "^7.0.4" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2615,38 +2510,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2688,12 +2551,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -2764,22 +2621,32 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "libtap": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.1.4.tgz", + "integrity": "sha512-jM+QyAeRdVs1bJrNpjlu+l8gRdDkAehqls31AwSnqXghVLUP6nbYeU2Xfs2svYS7ZdksvnHvrxCKRBFEz/BCjA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "async-hook-domain": "^2.0.4", + "bind-obj-methods": "^3.0.0", + "diff": "^4.0.2", + "function-loop": "^2.0.1", + "minipass": "^3.1.5", + "own-or": "^1.0.0", + "own-or-env": "^1.0.2", + "signal-exit": "^3.0.4", + "stack-utils": "^2.0.4", + "tap-parser": "^10.0.1", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.6", + "trivial-deferred": "^1.0.1", + "yapool": "^1.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true } } @@ -2794,12 +2661,6 @@ "path-exists": "^3.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -2818,25 +2679,6 @@ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -2854,40 +2696,25 @@ } } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.43.0" + "mime-db": "1.51.0" } }, "minimatch": { @@ -2906,38 +2733,19 @@ "dev": true }, "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "module-not-found-error": { "version": "1.0.1", @@ -2956,18 +2764,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -2977,12 +2773,6 @@ "whatwg-url": "^5.0.0" } }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -2998,18 +2788,6 @@ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3215,12 +2993,6 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", @@ -3353,9 +3125,9 @@ } }, "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { @@ -3372,12 +3144,6 @@ "word-wrap": "^1.2.3" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "own-or": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", @@ -3385,9 +3151,9 @@ "dev": true }, "own-or-env": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha1-VM5gHTv3gjbFxlYzqhyOwD+AB+Q=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", + "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", "dev": true, "requires": { "own-or": "^1.0.0" @@ -3447,16 +3213,6 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -3470,9 +3226,9 @@ "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -3481,23 +3237,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3511,26 +3250,11 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pirates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", - "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -3621,17 +3345,6 @@ "fromentries": "^1.2.0" } }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, "proxyquire": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", @@ -3654,12 +3367,6 @@ } } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -3673,128 +3380,39 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "picomatch": "^2.2.1" } }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "es6-error": "^4.0.1" } }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -3837,17 +3455,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3860,9 +3467,9 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -3880,12 +3487,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", - "dev": true - }, "semver-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", @@ -3899,18 +3500,18 @@ "dev": true }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "side-channel": { @@ -3937,9 +3538,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -4022,38 +3623,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -4061,9 +3630,9 @@ "dev": true }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -4084,10 +3653,21 @@ "dev": true }, "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g=", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } }, "stream-events": { "version": "1.0.5", @@ -4182,191 +3762,254 @@ "dev": true }, "tap": { - "version": "14.10.7", - "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.7.tgz", - "integrity": "sha512-DVx00lfiMxFhofwFDP77pitRCruVQJn8Dcj/6auIU3dErJQWsKT94oG6Yj0MQRuYANhSec8ruIPyUjH/RI9Hrw==", + "version": "15.1.6", + "resolved": "https://registry.npmjs.org/tap/-/tap-15.1.6.tgz", + "integrity": "sha512-TN7xH6Q2tUPTd6qwmkhuFJcx1vUR8e4dDUpBKc61G0krOzne7Ia6aKIFb8O/0kVazachSSuVME1V8nQ2xwWL8w==", "dev": true, "requires": { - "@types/react": "^16.9.16", - "async-hook-domain": "^1.1.3", - "bind-obj-methods": "^2.0.0", - "browser-process-hrtime": "^1.0.0", + "@isaacs/import-jsx": "^4.0.1", + "@types/react": "^17", "chokidar": "^3.3.0", - "color-support": "^1.1.0", - "coveralls": "^3.0.8", - "diff": "^4.0.1", - "esm": "^3.2.25", + "coveralls": "^3.0.11", "findit": "^2.0.0", - "flow-remove-types": "^2.112.0", - "foreground-child": "^1.3.3", + "foreground-child": "^2.0.0", "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.2", "glob": "^7.1.6", - "import-jsx": "^3.1.0", - "ink": "^2.6.0", + "ink": "^3.2.0", "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^1.0.0", - "jackspeak": "^1.4.0", + "istanbul-lib-processinfo": "^2.0.2", + "jackspeak": "^1.4.1", + "libtap": "^1.1.4", "minipass": "^3.1.1", - "mkdirp": "^0.5.1", - "nyc": "^14.1.1", + "mkdirp": "^1.0.4", + "nyc": "^15.1.0", "opener": "^1.5.1", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "react": "^16.12.0", - "rimraf": "^2.7.1", - "signal-exit": "^3.0.0", + "react": "^17.0.2", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.6", "source-map-support": "^0.5.16", - "stack-utils": "^1.0.2", "tap-mocha-reporter": "^5.0.0", "tap-parser": "^10.0.1", "tap-yaml": "^1.0.0", - "tcompare": "^3.0.0", - "treport": "^1.0.2", - "trivial-deferred": "^1.0.1", - "ts-node": "^8.5.2", - "typescript": "^3.7.2", - "which": "^2.0.2", - "write-file-atomic": "^3.0.1", - "yaml": "^1.7.2", - "yapool": "^1.0.0" + "tcompare": "^5.0.7", + "treport": "^3.0.2", + "which": "^2.0.2" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.16.0" } }, + "@babel/compat-data": { + "version": "7.16.0", + "bundled": true, + "dev": true + }, "@babel/core": { - "version": "7.8.7", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } } }, "@babel/generator": { - "version": "7.8.8", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - } } }, - "@babel/helper-builder-react-jsx": { - "version": "7.8.3", + "@babel/helper-annotate-as-pure": { + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.8.3", - "esutils": "^2.0.0" + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "bundled": true, + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { - "version": "7.8.3", + "version": "7.14.5", "bundled": true, "dev": true }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.16.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "bundled": true, + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "bundled": true, + "dev": true + }, "@babel/helpers": { - "version": "7.8.4", + "version": "7.16.3", "bundled": true, "dev": true, "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.8", + "version": "7.16.3", "bundled": true, "dev": true }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.8.3", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -4378,101 +4021,149 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.8", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/plugin-transform-react-jsx": { - "version": "7.8.3", + "@babel/plugin-transform-parameters": { + "version": "7.16.3", "bundled": true, "dev": true, "requires": { - "@babel/helper-builder-react-jsx": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/runtime": { - "version": "7.8.7", + "@babel/plugin-transform-react-jsx": { + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/template": { - "version": "7.8.6", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/traverse": { - "version": "7.8.6", + "version": "7.16.3", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.8.7", + "version": "7.16.0", "bundled": true, "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, - "@types/color-name": { - "version": "1.1.1", + "@isaacs/import-jsx": { + "version": "4.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + }, + "dependencies": { + "caller-callsite": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "callsites": "^3.1.0" + } + }, + "caller-path": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "caller-callsite": "^4.1.0" + } + }, + "callsites": { + "version": "3.1.0", + "bundled": true, + "dev": true + } + } }, "@types/prop-types": { - "version": "15.7.3", + "version": "15.7.4", "bundled": true, "dev": true }, "@types/react": { - "version": "16.9.23", + "version": "17.0.34", "bundled": true, "dev": true, "requires": { "@types/prop-types": "*", - "csstype": "^2.2.0" + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, + "@types/scheduler": { + "version": "0.16.2", + "bundled": true, + "dev": true + }, "@types/yoga-layout": { - "version": "1.9.1", + "version": "1.9.2", "bundled": true, "dev": true }, "ansi-escapes": { - "version": "4.3.1", + "version": "4.3.2", "bundled": true, "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "bundled": true, + "dev": true + } } }, "ansi-regex": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, "dev": true }, @@ -4489,20 +4180,6 @@ "bundled": true, "dev": true }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "arrify": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, "astral-regex": { "version": "2.0.0", "bundled": true, @@ -4513,49 +4190,34 @@ "bundled": true, "dev": true }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "dev": true }, - "caller-callsite": { - "version": "2.0.0", + "brace-expansion": { + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "callsites": "^2.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "caller-path": { - "version": "2.0.0", + "browserslist": { + "version": "4.17.6", "bundled": true, "dev": true, "requires": { - "caller-callsite": "^2.0.0" + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, - "callsites": { - "version": "2.0.0", + "caniuse-lite": { + "version": "1.0.30001279", "bundled": true, "dev": true }, @@ -4583,6 +4245,11 @@ "bundled": true, "dev": true }, + "cli-boxes": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, "cli-cursor": { "version": "3.1.0", "bundled": true, @@ -4600,66 +4267,12 @@ "string-width": "^4.2.0" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "code-excerpt": { + "version": "3.0.0", + "bundled": true, "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } + "convert-to-spaces": "^1.0.1" } }, "color-convert": { @@ -4675,48 +4288,57 @@ "bundled": true, "dev": true }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, "convert-source-map": { - "version": "1.7.0", + "version": "1.8.0", "bundled": true, "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - } } }, + "convert-to-spaces": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, "csstype": { - "version": "2.6.9", + "version": "3.0.9", "bundled": true, "dev": true }, "debug": { - "version": "4.1.1", + "version": "4.3.2", "bundled": true, "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } + "electron-to-chromium": { + "version": "1.3.893", + "bundled": true, + "dev": true }, "emoji-regex": { "version": "8.0.0", "bundled": true, "dev": true }, + "escalade": { + "version": "3.1.1", + "bundled": true, + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "bundled": true, @@ -4727,45 +4349,43 @@ "bundled": true, "dev": true }, - "esutils": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, "events-to-array": { "version": "1.1.2", "bundled": true, "dev": true }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.2", + "bundled": true, "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "bundled": true, "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "gensync": { - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "bundled": true, "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "bundled": true, "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4786,64 +4406,65 @@ "bundled": true, "dev": true }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } + "indent-string": { + "version": "4.0.0", + "bundled": true, + "dev": true }, - "import-jsx": { - "version": "3.1.0", + "inflight": { + "version": "1.0.6", "bundled": true, "dev": true, "requires": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, "ink": { - "version": "2.7.1", + "version": "3.2.0", "bundled": true, "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "arrify": "^2.0.1", - "auto-bind": "^4.0.0", - "chalk": "^3.0.0", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", "cli-cursor": "^3.1.0", "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", "is-ci": "^2.0.0", - "lodash.throttle": "^4.1.1", - "log-update": "^3.0.0", - "prop-types": "^15.6.2", - "react-reconciler": "^0.24.0", - "scheduler": "^0.18.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", "signal-exit": "^3.0.2", "slice-ansi": "^3.0.0", - "string-length": "^3.1.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", "widest-line": "^3.1.0", "wrap-ansi": "^6.2.0", - "yoga-layout-prebuilt": "^1.9.3" + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" }, "dependencies": { "ansi-styles": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { - "version": "3.0.0", + "version": "4.1.2", "bundled": true, "dev": true, "requires": { @@ -4870,7 +4491,7 @@ "dev": true }, "supports-color": { - "version": "7.1.0", + "version": "7.2.0", "bundled": true, "dev": true, "requires": { @@ -4887,216 +4508,42 @@ "ci-info": "^2.0.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "bundled": true, - "dev": true - }, - "json5": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash.throttle": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "log-update": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "onetime": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "bundled": true, + "dev": true + }, + "json5": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "locate-path": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^4.1.0" } }, + "lodash": { + "version": "4.17.21", + "bundled": true, + "dev": true + }, "loose-envify": { "version": "1.4.0", "bundled": true, @@ -5106,13 +4553,11 @@ } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "bundled": true, "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" } }, "mimic-fn": { @@ -5120,24 +4565,25 @@ "bundled": true, "dev": true }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "minimist": { "version": "1.2.5", "bundled": true, "dev": true }, "minipass": { - "version": "3.1.1", + "version": "3.1.5", "bundled": true, "dev": true, "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } } }, "ms": { @@ -5145,54 +4591,26 @@ "bundled": true, "dev": true }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } + "node-releases": { + "version": "2.0.1", + "bundled": true, + "dev": true }, "object-assign": { "version": "4.1.1", "bundled": true, "dev": true }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, "onetime": { - "version": "5.1.0", + "version": "5.1.2", "bundled": true, "dev": true, "requires": { @@ -5201,57 +4619,51 @@ }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "bundled": true, "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "bundled": true, "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "bundled": true, "dev": true }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } + "patch-console": { + "version": "1.0.0", + "bundled": true, + "dev": true }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } + "path-exists": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true }, - "prop-types": { - "version": "15.7.2", + "picocolors": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", "bundled": true, "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "find-up": "^4.0.0" } }, "punycode": { @@ -5259,41 +4671,40 @@ "bundled": true, "dev": true }, - "react-is": { - "version": "16.13.1", - "bundled": true, - "dev": true - }, - "react-reconciler": { - "version": "0.24.0", + "react": { + "version": "17.0.2", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.18.0" + "object-assign": "^4.1.1" } }, - "redeyed": { - "version": "2.1.1", + "react-devtools-core": { + "version": "4.21.0", "bundled": true, "dev": true, "requires": { - "esprima": "~4.0.0" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "regenerator-runtime": { - "version": "0.13.5", + "react-reconciler": { + "version": "0.26.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } }, - "resolve": { - "version": "1.15.1", + "redeyed": { + "version": "2.1.1", "bundled": true, "dev": true, "requires": { - "path-parse": "^1.0.6" + "esprima": "~4.0.0" } }, "resolve-from": { @@ -5311,16 +4722,20 @@ } }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "bundled": true, "dev": true, "requires": { "glob": "^7.1.3" } }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, "scheduler": { - "version": "0.18.0", + "version": "0.20.2", "bundled": true, "dev": true, "requires": { @@ -5329,12 +4744,17 @@ } }, "semver": { - "version": "5.7.1", + "version": "6.3.0", + "bundled": true, + "dev": true + }, + "shell-quote": { + "version": "1.7.3", "bundled": true, "dev": true }, "signal-exit": { - "version": "3.0.2", + "version": "3.0.6", "bundled": true, "dev": true }, @@ -5349,11 +4769,10 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -5372,76 +4791,42 @@ } } }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true }, - "string-length": { - "version": "3.1.0", + "stack-utils": { + "version": "2.0.5", "bundled": true, "dev": true, "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" + "escape-string-regexp": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "1.0.0", + "escape-string-regexp": { + "version": "2.0.0", "bundled": true, "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, "string-width": { - "version": "4.2.0", + "version": "4.2.3", "bundled": true, "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -5453,7 +4838,7 @@ } }, "tap-parser": { - "version": "10.0.1", + "version": "10.1.0", "bundled": true, "dev": true, "requires": { @@ -5470,44 +4855,30 @@ "yaml": "^1.5.0" } }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, "to-fast-properties": { "version": "2.0.0", "bundled": true, "dev": true }, "treport": { - "version": "1.0.2", + "version": "3.0.2", "bundled": true, "dev": true, "requires": { + "@isaacs/import-jsx": "^4.0.1", "cardinal": "^2.1.1", "chalk": "^3.0.0", - "import-jsx": "^3.1.0", - "ink": "^2.6.0", + "ink": "^3.2.0", "ms": "^2.1.2", - "string-length": "^3.1.0", "tap-parser": "^10.0.1", "unicode-length": "^2.0.2" }, "dependencies": { "ansi-styles": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -5539,7 +4910,7 @@ "dev": true }, "supports-color": { - "version": "7.1.0", + "version": "7.2.0", "bundled": true, "dev": true, "requires": { @@ -5549,16 +4920,10 @@ } }, "type-fest": { - "version": "0.11.0", + "version": "0.12.0", "bundled": true, "dev": true }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - }, "unicode-length": { "version": "2.0.2", "bundled": true, @@ -5583,15 +4948,6 @@ } } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "widest-line": { "version": "3.1.0", "bundled": true, @@ -5611,11 +4967,10 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", + "version": "4.3.0", "bundled": true, "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -5634,100 +4989,32 @@ } } }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true }, - "yaml": { - "version": "1.8.2", + "ws": { + "version": "7.5.5", "bundled": true, - "dev": true, - "requires": { - "@babel/runtime": "^7.8.7" - } + "dev": true }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "yaml": { + "version": "1.10.2", + "bundled": true, + "dev": true }, "yoga-layout-prebuilt": { - "version": "1.9.5", + "version": "1.10.0", "bundled": true, "dev": true, "requires": { - "@types/yoga-layout": "1.9.1" + "@types/yoga-layout": "1.9.2" } } } @@ -5757,9 +5044,9 @@ } }, "tap-parser": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz", - "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.1.0.tgz", + "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==", "dev": true, "requires": { "events-to-array": "^1.0.1", @@ -5777,12 +5064,12 @@ } }, "tcompare": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz", - "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", + "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", "dev": true, "requires": { - "diff-frag": "^1.0.1" + "diff": "^4.0.2" } }, "teeny-request": { @@ -5876,19 +5163,6 @@ "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, - "ts-node": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.2.tgz", - "integrity": "sha512-duVj6BpSpUpD/oM4MfhO98ozgkp3Gt9qIp3jGxwU2DFvl/3IRaEAvbLa8G60uS7C77457e/m5TMowjedeRxI1Q==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "3.1.1" - } - }, "tsconfig-paths": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", @@ -6017,9 +5291,9 @@ } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { @@ -6040,16 +5314,6 @@ "semver-regex": "1.0.0" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6061,12 +5325,6 @@ "extsprintf": "^1.2.0" } }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -6084,9 +5342,9 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -6196,19 +5454,16 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.7" - } + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yapool": { "version": "1.0.0", @@ -6295,12 +5550,6 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true } } } diff --git a/package.json b/package.json index 101b8650..03a84fb2 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "nyc": "^15.1.0", "prettier": "^2.5.1", "proxyquire": "^2.1.3", - "tap": "^14.10.7", + "tap": "^15.1.6", "typescript": "^4.5.5", "validate-commit-msg": "^2.14.0" }, From c7c72cc87903e4713b23fbed886e989ddb7f4f9e Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 25 Jan 2022 18:21:31 +0800 Subject: [PATCH 095/454] refactor(test): tap v15 - removed `callback` from beforeEach() and afterEach() https://github.com/tapjs/node-tap/commit/c363aebf69d22363f8faab22c2b48b427c31ff4d --- test/tap/appender-dependencies-test.js | 6 ++---- test/tap/categoryFilter-test.js | 3 +-- test/tap/configuration-test.js | 4 +--- test/tap/connect-context-test.js | 6 ++---- test/tap/connect-nolog-test.js | 15 +++++---------- test/tap/logger-test.js | 3 +-- test/tap/multiprocess-test.js | 3 +-- test/tap/newLevel-test.js | 3 +-- test/tap/noLogFilter-test.js | 3 +-- 9 files changed, 15 insertions(+), 31 deletions(-) diff --git a/test/tap/appender-dependencies-test.js b/test/tap/appender-dependencies-test.js index 0bd06f81..75265a90 100644 --- a/test/tap/appender-dependencies-test.js +++ b/test/tap/appender-dependencies-test.js @@ -8,14 +8,12 @@ let log4js; let recording; test("log4js appender dependencies", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { log4js = require("../../lib/log4js"); recording = require("../../lib/appenders/recording"); - done(); }); - batch.afterEach(done => { + batch.afterEach(() => { recording.erase(); - done(); }); batch.test("in order", t => { const config = { diff --git a/test/tap/categoryFilter-test.js b/test/tap/categoryFilter-test.js index ae07a488..b0e153a9 100644 --- a/test/tap/categoryFilter-test.js +++ b/test/tap/categoryFilter-test.js @@ -3,9 +3,8 @@ const log4js = require("../../lib/log4js"); const recording = require("../../lib/appenders/recording"); test("log4js categoryFilter", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { recording.reset(); - done(); }); batch.test("appender should exclude categories", t => { diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index f72a4a4b..e54fcbc4 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -10,7 +10,7 @@ let dependencies; let fileRead; test("log4js configure", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { fileRead = 0; fakeFS = { @@ -55,8 +55,6 @@ test("log4js configure", batch => { fs: fakeFS } }; - - done(); }); batch.test( diff --git a/test/tap/connect-context-test.js b/test/tap/connect-context-test.js index 0458e807..97bcad22 100644 --- a/test/tap/connect-context-test.js +++ b/test/tap/connect-context-test.js @@ -66,9 +66,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { context: true }); - t.beforeEach(done => { + t.beforeEach(() => { ml.contexts = []; - done(); }); t.test("response should be included in context", assert => { @@ -95,9 +94,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, {}); - t.beforeEach(done => { + t.beforeEach(() => { ml.contexts = []; - done(); }); t.test("response should not be included in context", assert => { diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 7378f3ce..6edba66a 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -57,9 +57,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { nolog: "\\.gif" }); - t.beforeEach(done => { + t.beforeEach(() => { ml.messages = []; - done(); }); t.test("check unmatch url request", assert => { @@ -105,9 +104,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { nolog: "\\.gif|\\.jpe?g" }); - t.beforeEach(done => { + t.beforeEach(() => { ml.messages = []; - done(); }); t.test("check unmatch url request (png)", assert => { @@ -167,9 +165,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { nolog: ["\\.gif", "\\.jpe?g"] }); - t.beforeEach(done => { + t.beforeEach(() => { ml.messages = []; - done(); }); t.test("check unmatch url request (png)", assert => { @@ -229,9 +226,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { nolog: /\.gif|\.jpe?g/ }); - t.beforeEach(done => { + t.beforeEach(() => { ml.messages = []; - done(); }); t.test("check unmatch url request (png)", assert => { @@ -291,9 +287,8 @@ test("log4js connect logger", batch => { const ml = new MockLogger(); const cl = clm(ml, { nolog: [/\.gif/, /\.jpe?g/] }); - t.beforeEach(done => { + t.beforeEach(() => { ml.messages = []; - done(); }); t.test("check unmatch url request (png)", assert => { diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index a55b6dbb..476f965a 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -24,10 +24,9 @@ const testConfig = { }; test("../../lib/logger", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { events.length = 0; testConfig.level = levels.TRACE; - done(); }); batch.test("constructor with no parameters", t => { diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index a85cc779..dd22f4d5 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -51,9 +51,8 @@ function makeFakeNet() { } test("Multiprocess Appender", async batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { recording.erase(); - done(); }); batch.test("worker", t => { diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index 2419ff64..1422ab30 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -3,9 +3,8 @@ const log4js = require("../../lib/log4js"); const recording = require("../../lib/appenders/recording"); test("../../lib/logger", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { recording.reset(); - done(); }); batch.test("creating a new log level", t => { diff --git a/test/tap/noLogFilter-test.js b/test/tap/noLogFilter-test.js index 862dc5b3..8f14ab46 100644 --- a/test/tap/noLogFilter-test.js +++ b/test/tap/noLogFilter-test.js @@ -6,9 +6,8 @@ const recording = require("../../lib/appenders/recording"); * test a simple regexp */ test("log4js noLogFilter", batch => { - batch.beforeEach(done => { + batch.beforeEach(() => { recording.reset(); - done(); }); batch.test( From d3872208c904a6014e7ed84c06793bca9f633e81 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 25 Jan 2022 18:25:11 +0800 Subject: [PATCH 096/454] refactor(test): tap v15 - replaced deprecated synonyms, separated tap.has() and tap.match() https://github.com/tapjs/node-tap/pull/649/files https://github.com/coreyfarrell/node-tap/blob/6d9f5798a9700be6773b6fe8c1339796bdf6928b/lib/synonyms.js https://github.com/tapjs/node-tap/commit/2c15bd87796df89a1112cd457579f440ee0b3e94 --- test/tap/cluster-test.js | 4 +-- test/tap/connect-logger-test.js | 8 +++--- test/tap/connect-nolog-test.js | 40 ++++++++++++++-------------- test/tap/dateFileAppender-test.js | 8 +++--- test/tap/disable-cluster-test.js | 2 +- test/tap/fileAppender-test.js | 20 +++++++------- test/tap/fileSyncAppender-test.js | 14 +++++----- test/tap/multi-file-appender-test.js | 20 +++++++------- test/tap/multiprocess-test.js | 20 +++++++------- 9 files changed, 68 insertions(+), 68 deletions(-) diff --git a/test/tap/cluster-test.js b/test/tap/cluster-test.js index b42703a0..f25eb28d 100644 --- a/test/tap/cluster-test.js +++ b/test/tap/cluster-test.js @@ -42,13 +42,13 @@ if (cluster.isMaster) { t.equal(logEvents[1].pid, workerPid); // serialising errors with stacks intact t.type(logEvents[1].data[1], "Error"); - t.contains(logEvents[1].data[1].stack, "Error: oh dear"); + t.match(logEvents[1].data[1].stack, "Error: oh dear"); // serialising circular references in objects t.type(logEvents[1].data[2], "object"); t.type(logEvents[1].data[2].me, "object"); // serialising errors with custom properties t.type(logEvents[1].data[3], "Error"); - t.contains(logEvents[1].data[3].stack, "Error: wtf"); + t.match(logEvents[1].data[3].stack, "Error: wtf"); t.equal(logEvents[1].data[3].alert, "chartreuse"); // serialising things that are not errors, but look a bit like them t.type(logEvents[1].data[4], "object"); diff --git a/test/tap/connect-logger-test.js b/test/tap/connect-logger-test.js index 944b3cc6..6ee278ee 100644 --- a/test/tap/connect-logger-test.js +++ b/test/tap/connect-logger-test.js @@ -114,10 +114,10 @@ test("log4js connect logger", batch => { assert.type(messages, "Array"); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 6edba66a..1e339480 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -75,10 +75,10 @@ test("log4js connect logger", batch => { assert.type(messages, "Array"); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); @@ -121,10 +121,10 @@ test("log4js connect logger", batch => { assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); @@ -182,10 +182,10 @@ test("log4js connect logger", batch => { assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); @@ -243,10 +243,10 @@ test("log4js connect logger", batch => { assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); @@ -304,10 +304,10 @@ test("log4js connect logger", batch => { assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.include(messages[0].message, "GET"); - assert.include(messages[0].message, "http://url"); - assert.include(messages[0].message, "my.remote.addr"); - assert.include(messages[0].message, "200"); + assert.match(messages[0].message, "GET"); + assert.match(messages[0].message, "http://url"); + assert.match(messages[0].message, "my.remote.addr"); + assert.match(messages[0].message, "200"); assert.end(); }); diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index 8baa9688..c224a96e 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -31,7 +31,7 @@ test("../../lib/appenders/dateFile", batch => { setTimeout(() => { fs.readFile(testFile, "utf8", (err, contents) => { - t.include(contents, "This should be in the file"); + t.match(contents, "This should be in the file"); t.match( contents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / @@ -62,7 +62,7 @@ test("../../lib/appenders/dateFile", batch => { path.join(__dirname, "date-file-test.log"), "utf8", (err, contents) => { - t.include(contents, `this should be written to the file${EOL}`); + t.match(contents, `this should be written to the file${EOL}`); t.equal( contents.indexOf("this should not be written to the file"), -1 @@ -115,12 +115,12 @@ test("../../lib/appenders/dateFile", batch => { // wait for filesystem to catch up log4js.shutdown(() => { fs.readFile(existingFile, "utf8", (err, contents) => { - t.include( + t.match( contents, "this is existing data", "should not overwrite the file on open (issue #132)" ); - t.include( + t.match( contents, "this should be written to the file with the appended date" ); diff --git a/test/tap/disable-cluster-test.js b/test/tap/disable-cluster-test.js index 4cec1933..4d3ed741 100644 --- a/test/tap/disable-cluster-test.js +++ b/test/tap/disable-cluster-test.js @@ -46,7 +46,7 @@ if (cluster.isMaster) { t.equal(workerEvents[0].categoryName, "worker"); t.equal(workerEvents[0].data[0], "this is worker"); t.type(workerEvents[0].data[1], "Error"); - t.contains(workerEvents[0].data[1].stack, "Error: oh dear"); + t.match(workerEvents[0].data[1].stack, "Error: oh dear"); t.end(); }); batch.end(); diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 02eaca67..f325a50e 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -38,7 +38,7 @@ test("log4js fileAppender", batch => { await sleep(100); const fileContents = await fs.readFile(testFile, "utf8"); - t.include(fileContents, `This should be in the file.${EOL}`); + t.match(fileContents, `This should be in the file.${EOL}`); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / @@ -107,7 +107,7 @@ test("log4js fileAppender", batch => { // wait for the file system to catch up await sleep(100); const fileContents = await fs.readFile(testFile, "utf8"); - t.include(fileContents, "This is the second log message."); + t.match(fileContents, "This is the second log message."); t.equal(fileContents.indexOf("This is the first log message."), -1); const files = await fs.readdir(__dirname); const logFiles = files.filter(file => @@ -213,11 +213,11 @@ test("log4js fileAppender", batch => { "fa-maxFileSize-with-backups-test.log.2" ]); let contents = await fs.readFile(path.join(__dirname, logFiles[0]), "utf8"); - t.include(contents, "This is the fourth log message."); + t.match(contents, "This is the fourth log message."); contents = await fs.readFile(path.join(__dirname, logFiles[1]), "utf8"); - t.include(contents, "This is the third log message."); + t.match(contents, "This is the third log message."); contents = await fs.readFile(path.join(__dirname, logFiles[2]), "utf8"); - t.include(contents, "This is the second log message."); + t.match(contents, "This is the second log message."); t.end(); }); @@ -275,16 +275,16 @@ test("log4js fileAppender", batch => { "fa-maxFileSize-with-backups-compressed-test.log.2.gz" ]); let contents = await fs.readFile(path.join(__dirname, logFiles[0]), "utf8"); - t.include(contents, "This is the fourth log message."); + t.match(contents, "This is the fourth log message."); contents = await gunzip( await fs.readFile(path.join(__dirname, logFiles[1])) ); - t.include(contents.toString("utf8"), "This is the third log message."); + t.match(contents.toString("utf8"), "This is the third log message."); contents = await gunzip( await fs.readFile(path.join(__dirname, logFiles[2])) ); - t.include(contents.toString("utf8"), "This is the second log message."); + t.match(contents.toString("utf8"), "This is the second log message."); t.end(); }); @@ -369,14 +369,14 @@ test("log4js fileAppender", batch => { await sleep(100); let fileContents = await fs.readFile(testFilePlain, "utf8"); - t.include(fileContents, `This should be in the file. Color should be plain.${EOL}`); + t.match(fileContents, `This should be in the file. Color should be plain.${EOL}`); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / ); fileContents = await fs.readFile(testFileAsIs, "utf8"); - t.include(fileContents, "This should be in the file.", + t.match(fileContents, "This should be in the file.", `\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m.${EOL}`); t.match( fileContents, diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index bb068adf..d7bd8103 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -30,7 +30,7 @@ test("log4js fileSyncAppender", batch => { logger.info("This should be in the file."); fs.readFile(testFile, "utf8", (err, fileContents) => { - t.include(fileContents, `This should be in the file.${EOL}`); + t.match(fileContents, `This should be in the file.${EOL}`); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / @@ -66,7 +66,7 @@ test("log4js fileSyncAppender", batch => { t.test("log file should only contain the second message", assert => { fs.readFile(testFile, "utf8", (err, fileContents) => { - assert.include(fileContents, `This is the second log message.${EOL}`); + assert.match(fileContents, `This is the second log message.${EOL}`); assert.equal( fileContents.indexOf("This is the first log message."), -1 @@ -192,21 +192,21 @@ test("log4js fileSyncAppender", batch => { path.join(__dirname, logFiles[0]), "utf8", (e, contents) => { - assert.include(contents, "This is the fourth log message."); + assert.match(contents, "This is the fourth log message."); } ); fs.readFile( path.join(__dirname, logFiles[1]), "utf8", (e, contents) => { - assert.include(contents, "This is the third log message."); + assert.match(contents, "This is the third log message."); } ); fs.readFile( path.join(__dirname, logFiles[2]), "utf8", (e, contents) => { - assert.include(contents, "This is the second log message."); + assert.match(contents, "This is the second log message."); } ); }); @@ -242,7 +242,7 @@ test("log4js fileSyncAppender", batch => { logger.warn("this should be written to the file"); fs.readFile(testFile, "utf8", (err, contents) => { - t.include(contents, `this should be written to the file${EOL}`); + t.match(contents, `this should be written to the file${EOL}`); t.equal(contents.indexOf("this should not be written to the file"), -1); t.end(); }); @@ -276,7 +276,7 @@ test("log4js fileSyncAppender", batch => { logger.warn("log message"); fs.readFile(testFile, "ascii", (err, contents) => { - t.include(contents, `log message${EOL}`); + t.match(contents, `log message${EOL}`); t.end(); }); }); diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 14cd42e5..0d69a05f 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -34,8 +34,8 @@ test("multiFile appender", batch => { loggerA.info("I am in logger A"); loggerB.info("I am in logger B"); log4js.shutdown(() => { - t.contains(fs.readFileSync("logs/A.log", "utf-8"), "I am in logger A"); - t.contains(fs.readFileSync("logs/B.log", "utf-8"), "I am in logger B"); + t.match(fs.readFileSync("logs/A.log", "utf-8"), "I am in logger A"); + t.match(fs.readFileSync("logs/B.log", "utf-8"), "I am in logger B"); t.end(); }); } @@ -65,8 +65,8 @@ test("multiFile appender", batch => { loggerC.info("I am in logger C"); loggerD.info("I am in logger D"); log4js.shutdown(() => { - t.contains(fs.readFileSync("logs/C.log", "utf-8"), "I am in logger C"); - t.contains(fs.readFileSync("logs/D.log", "utf-8"), "I am in logger D"); + t.match(fs.readFileSync("logs/C.log", "utf-8"), "I am in logger C"); + t.match(fs.readFileSync("logs/D.log", "utf-8"), "I am in logger D"); t.end(); }); } @@ -105,7 +105,7 @@ test("multiFile appender", batch => { loggerC.addContext("label", "C"); loggerC.info("I am in logger C"); setTimeout(() => { - t.contains( + t.match( debugLogs[debugLogs.length - 1], "C not used for > 20 ms => close" ); @@ -143,7 +143,7 @@ test("multiFile appender", batch => { loggerE.info("I am also not in logger E"); log4js.shutdown(() => { const contents = fs.readFileSync("logs/E.log", "utf-8"); - t.contains(contents, "I am in logger E"); + t.match(contents, "I am in logger E"); t.notMatch(contents, "I am not in logger E"); t.notMatch(contents, "I am also not in logger E"); t.end(); @@ -176,11 +176,11 @@ test("multiFile appender", batch => { loggerF.info("I am in logger F"); log4js.shutdown(() => { let contents = fs.readFileSync("logs/F.log", "utf-8"); - t.contains(contents, "I am in logger F"); + t.match(contents, "I am in logger F"); contents = fs.readFileSync("logs/F.log.1", "utf-8"); - t.contains(contents, "I am also in logger F"); + t.match(contents, "I am also in logger F"); contents = fs.readFileSync("logs/F.log.2", "utf-8"); - t.contains(contents, "Being in logger F is the best"); + t.match(contents, "Being in logger F is the best"); t.end(); }); }); @@ -209,7 +209,7 @@ test("multiFile appender", batch => { testLogger.debug("This should go to the file"); log4js.shutdown(() => { const contents = fs.readFileSync("logs/test.someTest.log", "utf-8"); - t.contains(contents, "This should go to the file"); + t.match(contents, "This should go to the file"); t.end(); }); }); diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index dd22f4d5..69019393 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -95,7 +95,7 @@ test("Multiprocess Appender", async batch => { t.test( "should buffer messages written before socket is connected", assert => { - assert.include(net.data[0], "before connect"); + assert.match(net.data[0], "before connect"); assert.end(); } ); @@ -103,9 +103,9 @@ test("Multiprocess Appender", async batch => { t.test( "should write log messages to socket as flatted strings with a terminator string", assert => { - assert.include(net.data[0], "before connect"); + assert.match(net.data[0], "before connect"); assert.equal(net.data[1], "__LOG4JS__"); - assert.include(net.data[2], "after connect"); + assert.match(net.data[2], "after connect"); assert.equal(net.data[3], "__LOG4JS__"); assert.equal(net.encoding, "utf8"); assert.end(); @@ -113,9 +113,9 @@ test("Multiprocess Appender", async batch => { ); t.test("should attempt to re-open the socket on error", assert => { - assert.include(net.data[4], "after error, before connect"); + assert.match(net.data[4], "after error, before connect"); assert.equal(net.data[5], "__LOG4JS__"); - assert.include(net.data[6], "after error, after connect"); + assert.match(net.data[6], "after error, after connect"); assert.equal(net.data[7], "__LOG4JS__"); assert.equal(net.createConnectionCalled, 2); assert.end(); @@ -162,11 +162,11 @@ test("Multiprocess Appender", async batch => { t.test("should attempt to re-open the socket", assert => { // skipping the __LOG4JS__ separators - assert.include(net.data[0], "before connect"); - assert.include(net.data[2], "after connect"); - assert.include(net.data[4], "after timeout, before close"); - assert.include(net.data[6], "after close, before connect"); - assert.include(net.data[8], "after close, after connect"); + assert.match(net.data[0], "before connect"); + assert.match(net.data[2], "after connect"); + assert.match(net.data[4], "after timeout, before close"); + assert.match(net.data[6], "after close, before connect"); + assert.match(net.data[8], "after close, after connect"); assert.equal(net.createConnectionCalled, 2); assert.end(); }); From 935e97ae3cecc7ada6aa86c37592b110172c6ae9 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 26 Jan 2022 19:01:47 +0800 Subject: [PATCH 097/454] refactor(test): regression from tap v15 --- package.json | 3 +++ test/tap/configuration-validation-test.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/package.json b/package.json index 03a84fb2..ff703743 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,9 @@ "helpMessage": "\n# allowed type: feat, fix, docs, style, refactor, example, perf, test, chore, revert\n# subject no more than 50 chars\n# a body line no more than 72 chars" } }, + "tap": { + "check-coverage": false + }, "nyc": { "all": true, "include": [ diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index e977c6d3..b560146b 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -316,6 +316,10 @@ test("log4js configuration validation", batch => { sandboxConfig.requires[ `${path.join(mainPath, "../../node_modules/nyc/bin/cheese")}` ] = testAppender("correct", result); + // in tap v15, the main path is at root of log4js (run `DEBUG=log4js:appenders npm test > /dev/null` to check) + sandboxConfig.requires[ + `${path.join(mainPath, "../../cheese")}` + ] = testAppender("correct", result); // in node v6, there's an extra layer of node modules for some reason, so add this one to work around it sandboxConfig.requires[ `${path.join( From 0cb065a79de78a522e87a5363075b8feff00defb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 26 Jan 2022 23:18:34 +0800 Subject: [PATCH 098/454] chore(deps): updated package-lock.json --- package-lock.json | 1378 +++++++++++---------------------------------- 1 file changed, 333 insertions(+), 1045 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ff6c117..8cd7c3f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,20 +20,20 @@ "dev": true }, "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", + "@babel/parser": "^7.16.12", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -50,18 +50,6 @@ "requires": { "minimist": "^1.2.5" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true } } }, @@ -74,14 +62,6 @@ "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } } }, "@babel/helper-compilation-targets": { @@ -94,14 +74,6 @@ "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/helper-environment-visitor": { @@ -209,20 +181,78 @@ } }, "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", "dev": true }, "@babel/template": { @@ -237,9 +267,9 @@ } }, "@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", @@ -248,10 +278,18 @@ "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", + "@babel/parser": "^7.16.10", "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, "@babel/types": { @@ -281,39 +319,12 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -478,12 +489,12 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -496,12 +507,12 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { @@ -555,81 +566,6 @@ "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" - }, - "dependencies": { - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } } }, "array.prototype.flat": { @@ -641,81 +577,6 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } } }, "asn1": { @@ -758,9 +619,9 @@ "dev": true }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "bcrypt-pbkdf": { @@ -857,9 +718,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001299", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", - "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "version": "1.0.30001302", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", + "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", "dev": true }, "caseless": { @@ -869,14 +730,13 @@ "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "chokidar": { @@ -893,6 +753,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "clean-stack": { @@ -923,33 +794,21 @@ "js-yaml": "3.14.1", "teeny-request": "7.1.1", "urlgrey": "1.0.0" - }, - "dependencies": { - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "color-support": { @@ -973,6 +832,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -986,15 +851,15 @@ "dev": true }, "confusing-browser-globals": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz", - "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "conventional-commit-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz", - "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", + "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", "dev": true }, "convert-source-map": { @@ -1134,9 +999,9 @@ } }, "electron-to-chromium": { - "version": "1.4.46", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", - "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", + "version": "1.4.53", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", + "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", "dev": true }, "emoji-regex": { @@ -1146,23 +1011,37 @@ "dev": true }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -1183,9 +1062,9 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { @@ -1231,104 +1110,12 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - }, - "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1337,45 +1124,6 @@ "requires": { "argparse": "^2.0.1" } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -1414,17 +1162,6 @@ "requires": { "ms": "^2.1.1" } - }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } } } }, @@ -1488,58 +1225,11 @@ "esutils": "^2.0.2" } }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } } } }, @@ -1627,9 +1317,9 @@ "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "events-to-array": { @@ -1651,9 +1341,9 @@ "dev": true }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-diff": { @@ -1663,9 +1353,9 @@ "dev": true }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { @@ -1681,14 +1371,6 @@ "dev": true, "requires": { "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } } }, "file-entry-cache": { @@ -1731,9 +1413,9 @@ } }, "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", + "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", "dev": true }, "find-up": { @@ -1759,14 +1441,6 @@ "requires": { "colors": "~0.6.0-1", "commander": "~2.1.0" - }, - "dependencies": { - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", - "dev": true - } } }, "flat-cache": { @@ -1777,17 +1451,6 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { @@ -1842,13 +1505,6 @@ "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - } } }, "fs.realpath": { @@ -1903,14 +1559,6 @@ "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } } }, "get-package-type": { @@ -1939,9 +1587,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1953,24 +1601,27 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "har-schema": { "version": "2.0.0", @@ -1986,26 +1637,6 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } } }, "has": { @@ -2024,15 +1655,15 @@ "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { @@ -2042,14 +1673,6 @@ "dev": true, "requires": { "has-symbols": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } } }, "hasha": { @@ -2162,9 +1785,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "internal-slot": { @@ -2207,9 +1830,9 @@ } }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { @@ -2222,10 +1845,13 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-extglob": { "version": "2.1.1", @@ -2240,9 +1866,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -2270,18 +1896,19 @@ } }, "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-shared-array-buffer": { @@ -2306,12 +1933,12 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -2372,20 +1999,6 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "istanbul-lib-processinfo": { @@ -2401,42 +2014,27 @@ "p-map": "^3.0.0", "rimraf": "^3.0.0", "uuid": "^3.3.3" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, "istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -2448,10 +2046,10 @@ "source-map": "^0.6.1" }, "dependencies": { - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -2475,15 +2073,6 @@ "cliui": "^7.0.4" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2495,21 +2084,6 @@ "wrap-ansi": "^7.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -2530,9 +2104,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -2641,14 +2215,6 @@ "tcompare": "^5.0.6", "trivial-deferred": "^1.0.1", "yapool": "^1.0.0" - }, - "dependencies": { - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - } } }, "locate-path": { @@ -2686,14 +2252,6 @@ "dev": true, "requires": { "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "merge-descriptors": { @@ -2829,17 +2387,6 @@ "yargs": "^15.0.2" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2850,51 +2397,6 @@ "path-exists": "^4.0.0" } }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2934,56 +2436,11 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, @@ -3006,27 +2463,26 @@ "dev": true }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, "object.values": { @@ -3038,81 +2494,6 @@ "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } } }, "once": { @@ -3354,17 +2735,6 @@ "fill-keys": "^1.0.2", "module-not-found-error": "^1.0.1", "resolve": "^1.11.1" - }, - "dependencies": { - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "psl": { @@ -3374,9 +2744,9 @@ "dev": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "qs": { @@ -3435,6 +2805,14 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "require-directory": { @@ -3455,6 +2833,17 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3487,6 +2876,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "semver-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", @@ -3526,15 +2921,15 @@ } }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-support": { @@ -3545,6 +2940,14 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "spawn-wrap": { @@ -3559,68 +2962,6 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "which": "^2.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "sprintf-js": { @@ -3747,12 +3088,12 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "supports-preserve-symlinks-flag": { @@ -5083,14 +4424,6 @@ "node-fetch": "^2.6.1", "stream-events": "^1.0.5", "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } } }, "test-exclude": { @@ -5102,22 +4435,6 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } } }, "text-table": { @@ -5149,6 +4466,14 @@ "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } } }, "tr46": { @@ -5230,14 +4555,6 @@ "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } } }, "unicode-length": { @@ -5256,6 +4573,12 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -5273,12 +4596,20 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } } }, "urlgrey": { @@ -5291,9 +4622,9 @@ } }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-compile-cache": { @@ -5361,23 +4692,6 @@ "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - } } }, "which-module": { @@ -5401,32 +4715,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "wrappy": { From 9e896aedce7efae16d271e067b5c35892f399f39 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 27 Jan 2022 22:40:58 +0800 Subject: [PATCH 099/454] fix(types): Logger constructor --- types/log4js.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index ec26cc1e..ca9cd8e7 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -338,10 +338,10 @@ export interface Recording { } export class Logger { - new(dispatch: Function, name: string): Logger; + constructor(name: string); - readonly category: string; - level: Level | string; + readonly category: string; + level: Level | string; log(level: Level | string, ...args: any[]): void; From 2603c975c6d95731b9460dceede224faaa46d8bd Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 27 Jan 2022 23:57:19 +0800 Subject: [PATCH 100/454] fix: connectLogger not logging on close --- lib/connect-logger.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/connect-logger.js b/lib/connect-logger.js index a7c255f9..ed6c3131 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -273,7 +273,12 @@ module.exports = function getLogger(logger4js, options) { }; // hook on end request to emit the log entry of the HTTP request. - res.on("finish", () => { + let finished = false; + const handler = () => { + if (finished) { + return; + } + finished = true; res.responseTime = new Date() - start; // status code response level handling if (res.statusCode && options.level === "auto") { @@ -293,7 +298,11 @@ module.exports = function getLogger(logger4js, options) { thisLogger.log(level, format(fmt, combinedTokens)); } if (options.context) thisLogger.removeContext("res"); - }); + }; + res.on("end", handler); + res.on("finish", handler); + res.on("error", handler); + res.on("close", handler); } // ensure next gets always called From 313eb22dc59f4c2003f872db25ea3b74f83bf186 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 28 Jan 2022 16:32:20 +0800 Subject: [PATCH 101/454] chore(docs): corrected typo in sample code for multiFile appender --- docs/multiFile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/multiFile.md b/docs/multiFile.md index 1c4831c9..17ef00de 100644 --- a/docs/multiFile.md +++ b/docs/multiFile.md @@ -27,7 +27,7 @@ log4js.configure({ const logger = log4js.getLogger(); logger.debug('I will be logged in logs/default.log'); const otherLogger = log4js.getLogger('cheese'); -logger.info('Cheese is cheddar - this will be logged in logs/cheese.log'); +otherLogger.info('Cheese is cheddar - this will be logged in logs/cheese.log'); ``` This example will result in two log files (`logs/default.log` and `logs/cheese.log`) containing the log messages. From 28388888c5f3996f0e6056d8ad609bf2a0dc18af Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:21:52 +0800 Subject: [PATCH 102/454] chore(docs) - updated dateFile appender docs --- docs/dateFile.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/dateFile.md b/docs/dateFile.md index 4ba9482b..40439420 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -6,18 +6,18 @@ This is a file appender that rolls log files based on a configurable time, rathe * `type` - `"dateFile"` * `filename` - `string` - the path of the file where you want your logs written. -* `pattern` - `string` (optional, defaults to `.yyyy-MM-dd`) - the pattern to use to determine when to roll the logs. +* `pattern` - `string` (optional, defaults to `yyyy-MM-dd`) - the pattern to use to determine when to roll the logs. * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") * `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) -* `flags` - `string` (default 'a') -* `compress` - `boolean` (default false) - compress the backup files during rolling (backup files will have `.gz` extension) -* `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file as well as the backups. -* `numBackups` - `integer` (default 0) - if this value is greater than zero, then files older than that many days will be deleted during log rolling. +* `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) +* `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) +* `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file. +* `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). - +* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) The `pattern` is used to determine when the current log file should be renamed and a new log file created. For example, with a filename of 'cheese.log', and the default pattern of `.yyyy-MM-dd` - on startup this will result in a file called `cheese.log` being created and written to until the next write after midnight. When this happens, `cheese.log` will be renamed to `cheese.log.2017-04-30` and a new `cheese.log` file created. The appender uses the [date-format](https://github.com/nomiddlename/date-format) library to parse the `pattern`, and any of the valid formats can be used. Also note that there is no timer controlling the log rolling - changes in the pattern are determined on every log write. If no writes occur, then no log rolling will happen. If your application logs infrequently this could result in no log file being written for a particular time period. Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [file appender](file.md) as well. So you could roll files by both date and size. @@ -42,7 +42,7 @@ This example will result in files being rolled every day. The initial file will ```javascript log4js.configure({ appenders: { - everything: { type: 'dateFile', filename: 'all-the-logs.log', pattern: '.yyyy-MM-dd-hh', compress: true } + everything: { type: 'dateFile', filename: 'all-the-logs.log', pattern: 'yyyy-MM-dd-hh', compress: true } }, categories: { default: { appenders: [ 'everything' ], level: 'debug'} From eeb4e94cd38d381defa7a4b13773053c2e5ba324 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:27:16 +0800 Subject: [PATCH 103/454] chore(docs) - updated file appender doc --- docs/file.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/file.md b/docs/file.md index 213868c1..9cfe843f 100644 --- a/docs/file.md +++ b/docs/file.md @@ -7,15 +7,16 @@ The file appender writes log events to a file. It supports an optional maximum f * `type` - `"file"` * `filename` - `string` - the path of the file where you want your logs written. * `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. -* `backups` - `integer` (optional, default value = 5) - the number of old log files to keep during log rolling. +* `backups` - `integer` (optional, default to 5) - the number of old log files to keep during log rolling. * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") * `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) -* `flags` - `string` (default 'a') -* `compress` - `boolean` (default false) - compress the backup files during rolling (backup files will have `.gz` extension) -* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`) +* `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) +* `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) +* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). +* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [dateFile appender](dateFile.md) as well. So you could roll files by both date and size. From 98c9c3513ffd85ee54e797d8241d79422ddc2cb8 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:34:42 +0800 Subject: [PATCH 104/454] Update dateFile.md --- docs/dateFile.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/dateFile.md b/docs/dateFile.md index 40439420..c4c8a7dc 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -18,6 +18,7 @@ Any other configuration parameters will be passed to the underlying [streamrolle * `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). * `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) + The `pattern` is used to determine when the current log file should be renamed and a new log file created. For example, with a filename of 'cheese.log', and the default pattern of `.yyyy-MM-dd` - on startup this will result in a file called `cheese.log` being created and written to until the next write after midnight. When this happens, `cheese.log` will be renamed to `cheese.log.2017-04-30` and a new `cheese.log` file created. The appender uses the [date-format](https://github.com/nomiddlename/date-format) library to parse the `pattern`, and any of the valid formats can be used. Also note that there is no timer controlling the log rolling - changes in the pattern are determined on every log write. If no writes occur, then no log rolling will happen. If your application logs infrequently this could result in no log file being written for a particular time period. Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [file appender](file.md) as well. So you could roll files by both date and size. From e2947474c719d891b282858a4509fa8292f7ac22 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:39:37 +0800 Subject: [PATCH 105/454] Update file.md --- docs/file.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/file.md b/docs/file.md index 9cfe843f..0be045cb 100644 --- a/docs/file.md +++ b/docs/file.md @@ -15,8 +15,8 @@ Any other configuration parameters will be passed to the underlying [streamrolle * `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) * `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) -* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). -* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) +* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). +* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`1 or abc`.`1.log (keepFileExt) Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [dateFile appender](dateFile.md) as well. So you could roll files by both date and size. From 110a008ae64b17bf5500e5721517d60835de4d31 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:40:34 +0800 Subject: [PATCH 106/454] Update dateFile.md --- docs/dateFile.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/dateFile.md b/docs/dateFile.md index c4c8a7dc..b90fbd34 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -14,10 +14,10 @@ Any other configuration parameters will be passed to the underlying [streamrolle * `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) * `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) -* `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file. -* `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). * `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) +* `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file. +* `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). The `pattern` is used to determine when the current log file should be renamed and a new log file created. For example, with a filename of 'cheese.log', and the default pattern of `.yyyy-MM-dd` - on startup this will result in a file called `cheese.log` being created and written to until the next write after midnight. When this happens, `cheese.log` will be renamed to `cheese.log.2017-04-30` and a new `cheese.log` file created. The appender uses the [date-format](https://github.com/nomiddlename/date-format) library to parse the `pattern`, and any of the valid formats can be used. Also note that there is no timer controlling the log rolling - changes in the pattern are determined on every log write. If no writes occur, then no log rolling will happen. If your application logs infrequently this could result in no log file being written for a particular time period. From 163c7a1eeb08f237eff2b6f248a47a487bae8223 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 29 Jan 2022 00:42:21 +0800 Subject: [PATCH 107/454] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff703743..8cf7640c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "scripts": { "pretest": "eslint \"lib/**/*.js\" \"test/**/*.js\"", - "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", + "test": "tap \"test/tap/**/*.js\" --cov", "typings": "tsc -p types/tsconfig.json", "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" }, From 8b442994545b2fef1f03a08519bcf6de533ddd7f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 2 Feb 2022 03:05:42 +0800 Subject: [PATCH 108/454] Fixes #1086 --- lib/appenders/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index db6a8b0b..c31f4709 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -39,7 +39,7 @@ const tryLoading = (modulePath, config) => { const loadAppenderModule = (type, config) => coreAppenders.get(type) || tryLoading(`./${type}`, config) || tryLoading(type, config) - || (require.main && tryLoading(path.join(path.dirname(require.main.filename), type), config)) + || (require.main && require.main.filename && tryLoading(path.join(path.dirname(require.main.filename), type), config)) || tryLoading(path.join(process.cwd(), type), config); const appendersLoading = new Set(); From 57c90259132c27604b030b0c10aa3dda8f99af97 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 2 Feb 2022 03:06:07 +0800 Subject: [PATCH 109/454] Fixes #1029 --- lib/appenders/logLevelFilter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/logLevelFilter.js b/lib/appenders/logLevelFilter.js index 7c9012c7..253fedd7 100644 --- a/lib/appenders/logLevelFilter.js +++ b/lib/appenders/logLevelFilter.js @@ -3,7 +3,7 @@ function logLevelFilter(minLevelString, maxLevelString, appender, levels) { const maxLevel = levels.getLevel(maxLevelString, levels.FATAL); return (logEvent) => { const eventLevel = logEvent.level; - if (eventLevel.isGreaterThanOrEqualTo(minLevel) && eventLevel.isLessThanOrEqualTo(maxLevel)) { + if (minLevel.isLessThanOrEqualTo(eventLevel) && maxLevel.isGreaterThanOrEqualTo(eventLevel)) { appender(logEvent); } }; From eb9c923b04c899fa28e85ae6f1807f3e7fdaa536 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 2 Feb 2022 03:06:22 +0800 Subject: [PATCH 110/454] Misc formatting --- lib/appenders/dateFile.js | 2 +- lib/appenders/file.js | 2 +- lib/appenders/index.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index 3f1ffc4c..8999c740 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -10,7 +10,7 @@ function openTheStream(filename, pattern, options) { options ); stream.on('error', (err) => { - console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); //eslint-disable-line + console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); // eslint-disable-line }); stream.on("drain", () => { process.emit("log4js:pause", false); diff --git a/lib/appenders/file.js b/lib/appenders/file.js index e976a29f..aeccddb7 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -21,7 +21,7 @@ function openTheStream(file, fileSize, numFiles, options) { options ); stream.on('error', (err) => { - console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); //eslint-disable-line + console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); // eslint-disable-line }); stream.on('drain', () => { process.emit("log4js:pause", false); diff --git a/lib/appenders/index.js b/lib/appenders/index.js index c31f4709..58b10c12 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -24,7 +24,7 @@ const appenders = new Map(); const tryLoading = (modulePath, config) => { debug('Loading module from ', modulePath); try { - return require(modulePath); //eslint-disable-line + return require(modulePath); // eslint-disable-line } catch (e) { // if the module was found, and we still got an error, then raise it configuration.throwExceptionIf( From c1461bdfb0cf87aac8e463e389a2994c62a58a32 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Feb 2022 01:28:54 +0800 Subject: [PATCH 111/454] chore(deps): updated package-lock.json --- package-lock.json | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8cd7c3f2..ccca019b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -343,9 +343,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -718,9 +718,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", + "version": "1.0.30001305", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz", + "integrity": "sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA==", "dev": true }, "caseless": { @@ -999,9 +999,9 @@ } }, "electron-to-chromium": { - "version": "1.4.53", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", - "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", + "version": "1.4.61", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz", + "integrity": "sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw==", "dev": true }, "emoji-regex": { @@ -1068,9 +1068,9 @@ "dev": true }, "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.5", @@ -1166,9 +1166,9 @@ } }, "eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "requires": { "debug": "^3.2.7", @@ -1454,9 +1454,9 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "foreground-child": { "version": "2.0.0", @@ -1610,9 +1610,9 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" From 654710bd84227b79989353c57c1986fe7d9d029a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Feb 2022 17:06:22 +0800 Subject: [PATCH 112/454] chore(test): improve test (branch) coverage for categoryFilter appenders/categoryFilter.js - Line 4 - if (typeof excludes === 'string') excludes = [excludes]; --- test/tap/categoryFilter-test.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/test/tap/categoryFilter-test.js b/test/tap/categoryFilter-test.js index b0e153a9..4ec52a84 100644 --- a/test/tap/categoryFilter-test.js +++ b/test/tap/categoryFilter-test.js @@ -40,6 +40,38 @@ test("log4js categoryFilter", batch => { t.end(); }); + batch.test("appender should exclude categories", t => { + log4js.configure({ + appenders: { + recorder: { type: "recording" }, + filtered: { + type: "categoryFilter", + exclude: ["app", "web"], + appender: "recorder" + } + }, + categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + }); + + const webLogger = log4js.getLogger("web"); + const appLogger = log4js.getLogger("app"); + + webLogger.debug("This should not get logged"); + appLogger.debug("This should get logged"); + webLogger.debug("Hello again"); + log4js + .getLogger("db") + .debug("This should be included by the appender anyway"); + + const logEvents = recording.replay(); + t.equal(logEvents.length, 1); + t.equal( + logEvents[0].data[0], + "This should be included by the appender anyway" + ); + t.end(); + }); + batch.test("should not really need a category filter any more", t => { log4js.configure({ appenders: { recorder: { type: "recording" } }, From 42eb04e266afaad1bdba9975539b1bba82eb9b4c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Feb 2022 17:07:36 +0800 Subject: [PATCH 113/454] chore(test): improve test coverage for adapters appenders/adapters.js - Line 16 - throw Error(`maxLogSize: "${maxLogSize}" is invalid`); --- test/tap/fileAppender-test.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index f325a50e..8a11f2e6 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -117,6 +117,27 @@ test("log4js fileAppender", batch => { t.end(); }); + batch.test("with a max file size in wrong unit mode", async t => { + const invalidUnit = "1Z"; + const expectedError = new Error(`maxLogSize: "${invalidUnit}" is invalid`); + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "file", + maxLogSize: invalidUnit + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + expectedError + ); + t.end(); + }); + batch.test("with a max file size in unit mode and no backups", async t => { const testFile = path.join(__dirname, "fa-maxFileSize-unit-test.log"); const logger = log4js.getLogger("max-file-size-unit"); From d94284aeb81c0c63df4ed0db6fef9a051edd7cb1 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Feb 2022 17:43:37 +0800 Subject: [PATCH 114/454] chore(test): improve test coverage for fileAppender appenders/file.js - Line 70 - return d; --- test/tap/fileAppender-test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 8a11f2e6..95ee8a4c 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -386,19 +386,19 @@ test("log4js fileAppender", batch => { }); logger.info("This should be in the file.", - "\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m."); + "\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m.", {}, []); await sleep(100); let fileContents = await fs.readFile(testFilePlain, "utf8"); - t.match(fileContents, `This should be in the file. Color should be plain.${EOL}`); + t.match(fileContents, `This should be in the file. Color should be plain. {} []${EOL}`); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / ); - + fileContents = await fs.readFile(testFileAsIs, "utf8"); t.match(fileContents, "This should be in the file.", - `\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m.${EOL}`); + `\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m. {} []${EOL}`); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / From d6f500c5dce3b456c2b2fa7f3acd2f17319ef4cb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Feb 2022 17:54:35 +0800 Subject: [PATCH 115/454] chore(refactor): removed comments --- lib/appenders/multiprocess.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index e1deae9f..0007829f 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -119,13 +119,12 @@ function workerAppender(config) { canWrite = true; }); socket.on('timeout', socket.end.bind(socket)); - // don't bother listening for 'error', 'close' gets called after that anyway - socket.on('close', createSocket); socket.on('error', (e) => { debug('connection error', e); canWrite = false; emptyBuffer(); }); + socket.on('close', createSocket); } createSocket(); From 89e70e7fb8f9ca2cf3bb49bd05e5b1d08c03cfbc Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 5 Feb 2022 16:01:44 +0800 Subject: [PATCH 116/454] chore(test): improve test coverage for multiFileAppender appenders/multiFile.js - Line 53 - timers.get(fileKey).lastUsed = Date.now(); appenders/multiFile.js - Line 70 - clearInterval(timer.interval); --- lib/appenders/multiFile.js | 4 +- test/tap/multi-file-appender-test.js | 124 ++++++++++++++++++++++++++- 2 files changed, 124 insertions(+), 4 deletions(-) diff --git a/lib/appenders/multiFile.js b/lib/appenders/multiFile.js index f15722ba..2fd47b88 100644 --- a/lib/appenders/multiFile.js +++ b/lib/appenders/multiFile.js @@ -49,6 +49,7 @@ module.exports.configure = (config, layouts) => { }); } } else if (config.timeout) { + debug('%s extending activity', fileKey); timers.get(fileKey).lastUsed = Date.now(); } @@ -64,7 +65,8 @@ module.exports.configure = (config, layouts) => { cb(); } let error; - timers.forEach((timer) => { + timers.forEach((timer, fileKey) => { + debug('clearing timer for ', fileKey); clearInterval(timer.interval); }); files.forEach((app, fileKey) => { diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 0d69a05f..691c6f01 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -89,6 +89,7 @@ test("multiFile appender", batch => { } }; debug.enable("log4js:multiFile"); + const timeoutMs = 20; log4js.configure({ appenders: { multi: { @@ -96,7 +97,7 @@ test("multiFile appender", batch => { base: "logs/", property: "label", extension: ".log", - timeout: 20 + timeout: timeoutMs } }, categories: { default: { appenders: ["multi"], level: "info" } } @@ -107,14 +108,131 @@ test("multiFile appender", batch => { setTimeout(() => { t.match( debugLogs[debugLogs.length - 1], - "C not used for > 20 ms => close" + `C not used for > ${timeoutMs} ms => close`, + "(timeout1) should have closed" ); if (!debugWasEnabled) { debug.disable("log4js:multiFile"); } process.stderr.write = originalWrite; t.end(); - }, 50); + }, timeoutMs*1 + 30); // add a 30 ms delay + }); + + batch.test("should close file after extended timeout", t => { + t.teardown(async () => { + await removeFiles("logs/D.log"); + }); + /* checking that the file is closed after a timeout is done by looking at the debug logs + since detecting file locks with node.js is platform specific. + */ + const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugLogs = []; + const originalWrite = process.stderr.write; + process.stderr.write = (string, encoding, fd) => { + debugLogs.push(string); + if (debugWasEnabled) { + originalWrite.apply(process.stderr, [string, encoding, fd]); + } + }; + debug.enable("log4js:multiFile"); + const timeoutMs = 100; + log4js.configure({ + appenders: { + multi: { + type: "multiFile", + base: "logs/", + property: "label", + extension: ".log", + timeout: timeoutMs + } + }, + categories: { default: { appenders: ["multi"], level: "info" } } + }); + const loggerD = log4js.getLogger("cheese"); + loggerD.addContext("label", "D"); + loggerD.info("I am in logger D"); + setTimeout(() => { + loggerD.info("extending activity!"); + t.match( + debugLogs[debugLogs.length - 1], + "D extending activity", + "should have extended" + ); + }, timeoutMs/2); + setTimeout(() => { + t.notOk( + debugLogs.some(s => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1), + "(timeout1) should not have closed" + ); + }, timeoutMs*1 + 30); // add a 30 ms delay + setTimeout(() => { + t.match( + debugLogs[debugLogs.length - 1], + `D not used for > ${timeoutMs} ms => close`, + "(timeout2) should have closed" + ); + if (!debugWasEnabled) { + debug.disable("log4js:multiFile"); + } + process.stderr.write = originalWrite; + t.end(); + }, timeoutMs*2 + 30); // add a 30 ms delay + }); + + batch.test("should clear interval for active timers on shutdown", t => { + t.teardown(async () => { + await removeFiles("logs/D.log"); + }); + /* checking that the file is closed after a timeout is done by looking at the debug logs + since detecting file locks with node.js is platform specific. + */ + const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugLogs = []; + const originalWrite = process.stderr.write; + process.stderr.write = (string, encoding, fd) => { + debugLogs.push(string); + if (debugWasEnabled) { + originalWrite.apply(process.stderr, [string, encoding, fd]); + } + }; + debug.enable("log4js:multiFile"); + const timeoutMs = 100; + log4js.configure({ + appenders: { + multi: { + type: "multiFile", + base: "logs/", + property: "label", + extension: ".log", + timeout: timeoutMs + } + }, + categories: { default: { appenders: ["multi"], level: "info" } } + }); + const loggerD = log4js.getLogger("cheese"); + loggerD.addContext("label", "D"); + loggerD.info("I am in logger D"); + log4js.shutdown(() => { + t.notOk( + debugLogs.some(s => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1), + "should not have closed" + ); + t.ok( + debugLogs.some(s => s.indexOf("clearing timer for D") !== -1), + "should have cleared timers" + ); + t.match( + debugLogs[debugLogs.length - 1], + "calling shutdown for D", + "should have called shutdown" + ); + if (!debugWasEnabled) { + debug.disable("log4js:multiFile"); + } + process.stderr.write = originalWrite; + t.end(); + }); }); batch.test( From 4a0f6e4e2027f5f4d3698c9e2a2b63c6658b769d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 19 Jan 2022 01:57:25 +0800 Subject: [PATCH 117/454] chore(test): Changed default TAP test suite timeout from 30s to 45s because Windows takes a long time --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8cf7640c..ff703743 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "scripts": { "pretest": "eslint \"lib/**/*.js\" \"test/**/*.js\"", - "test": "tap \"test/tap/**/*.js\" --cov", + "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", "typings": "tsc -p types/tsconfig.json", "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" }, From b01efef796cbcf55af378ac97c4ebfe779ac120a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Feb 2022 15:21:40 +0800 Subject: [PATCH 118/454] chore(deps): updated package-lock.json --- package-lock.json | 129 ++++++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index ccca019b..0583d63f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", + "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", @@ -14,32 +23,32 @@ } }, "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true }, "@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", "dev": true, "requires": { + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.3.0" }, "dependencies": { "json5": { @@ -54,12 +63,12 @@ } }, "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", "dev": true, "requires": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -170,14 +179,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { @@ -250,9 +259,9 @@ } }, "@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true }, "@babel/template": { @@ -267,19 +276,19 @@ } }, "@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -293,9 +302,9 @@ } }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -435,6 +444,28 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", + "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@log4js-node/sandboxed-module": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", @@ -718,9 +749,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001305", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz", - "integrity": "sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA==", + "version": "1.0.30001309", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001309.tgz", + "integrity": "sha512-Pl8vfigmBXXq+/yUz1jUwULeq9xhMJznzdc/xwl4WclDAuebcTHVefpz8lE/bMI+UN7TOkSSe7B7RnZd6+dzjA==", "dev": true }, "caseless": { @@ -999,9 +1030,9 @@ } }, "electron-to-chromium": { - "version": "1.4.61", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz", - "integrity": "sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw==", + "version": "1.4.66", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.66.tgz", + "integrity": "sha512-f1RXFMsvwufWLwYUxTiP7HmjprKXrqEWHiQkjAYa9DJeVIlZk5v8gBGcaV+FhtXLly6C1OTVzQY+2UQrACiLlg==", "dev": true }, "emoji-regex": { @@ -2055,9 +2086,9 @@ } }, "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -2276,9 +2307,9 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -2921,9 +2952,9 @@ } }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "source-map": { From df3c492644b29a3a0de9f806a33f3d36bece1e03 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Feb 2022 17:43:47 +0800 Subject: [PATCH 119/454] chore(deps): bump flatted from 3.2.4 to 3.2.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff703743..48626977 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "dependencies": { "date-format": "^4.0.3", "debug": "^4.3.3", - "flatted": "^3.2.4", + "flatted": "^3.2.5", "rfdc": "^1.3.0", "streamroller": "^3.0.2" }, From 09d1dd06209842840e48a59e7264e88d261969e4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Feb 2022 17:44:18 +0800 Subject: [PATCH 120/454] chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 48626977..f7eb74d0 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.7.0", + "eslint": "^8.8.0", "eslint-config-airbnb-base": "^13.2.0", "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", From ceb06bed61010b9f71b1fc0bf76ba239f5f0b129 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Feb 2022 16:27:22 +0800 Subject: [PATCH 121/454] Fixed serialise() for NaN, Infinity, -Infinity and undefined --- lib/LoggingEvent.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index 60ce832f..5732a27c 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -35,9 +35,20 @@ class LoggingEvent { const logData = this.data.map((e) => { // JSON.stringify(new Error('test')) returns {}, which is not really useful for us. // The following allows us to serialize errors correctly. + // duck-typing for Error object if (e && e.message && e.stack) { e = Object.assign({ message: e.message, stack: e.stack }, e); } + // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. + // The following allows us to serialize to NaN, Infinity and -Infinity correctly. + else if (typeof e === 'number' && (isNaN(e) || !isFinite(e))) { + e = e.toString(); + } + // JSON.stringify([undefined]) returns [null]. + // The following allows us to serialize to undefined correctly. + else if (typeof e === 'undefined') { + e = typeof e; + } return e; }); this.data = logData; From 4fc8634fa9ff3aee78399ba6b93c55f98caef227 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 21 Feb 2022 01:20:01 +0800 Subject: [PATCH 122/454] Fixed serialise() for NaN, Infinity, -Infinity and undefined recursively --- lib/LoggingEvent.js | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index 5732a27c..b96ed363 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -32,40 +32,37 @@ class LoggingEvent { } serialise() { - const logData = this.data.map((e) => { + return flatted.stringify(this, (key, value) => { // JSON.stringify(new Error('test')) returns {}, which is not really useful for us. // The following allows us to serialize errors correctly. // duck-typing for Error object - if (e && e.message && e.stack) { - e = Object.assign({ message: e.message, stack: e.stack }, e); + if (value && value.message && value.stack) { + value = Object.assign({message: value.message, stack: value.stack}, value); } // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. // The following allows us to serialize to NaN, Infinity and -Infinity correctly. - else if (typeof e === 'number' && (isNaN(e) || !isFinite(e))) { - e = e.toString(); + else if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) { + value = value.toString(); } // JSON.stringify([undefined]) returns [null]. // The following allows us to serialize to undefined correctly. - else if (typeof e === 'undefined') { - e = typeof e; + else if (typeof value === 'undefined') { + value = typeof value; } - return e; + return value; }); - this.data = logData; - return flatted.stringify(this); } static deserialise(serialised) { let event; try { - const rehydratedEvent = flatted.parse(serialised); - rehydratedEvent.data = rehydratedEvent.data.map((e) => { - if (e && e.message && e.stack) { - const fakeError = new Error(e); - Object.keys(e).forEach((key) => { fakeError[key] = e[key]; }); - e = fakeError; + const rehydratedEvent = flatted.parse(serialised, (key, value) => { + if (value && value.message && value.stack) { + const fakeError = new Error(value); + Object.keys(value).forEach((k) => { fakeError[k] = value[k]; }); + value = fakeError; } - return e; + return value; }); event = new LoggingEvent( rehydratedEvent.categoryName, From 0f13656cf27f6e51f0cf0ce526431740669a64cd Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 21 Feb 2022 01:38:49 +0800 Subject: [PATCH 123/454] Added test cases --- test/tap/LoggingEvent-test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/tap/LoggingEvent-test.js b/test/tap/LoggingEvent-test.js index 2a3d6563..174f3a9b 100644 --- a/test/tap/LoggingEvent-test.js +++ b/test/tap/LoggingEvent-test.js @@ -5,7 +5,7 @@ const levels = require("../../lib/levels"); test("LoggingEvent", batch => { batch.test("should serialise to flatted", t => { - const event = new LoggingEvent("cheese", levels.DEBUG, ["log message"], { + const event = new LoggingEvent("cheese", levels.DEBUG, ["log message", parseInt("abc"), 1/0, -1/0, undefined], { user: "bob" }); // set the event date to a known value @@ -14,8 +14,12 @@ test("LoggingEvent", batch => { t.equal(rehydratedEvent.startTime, "2018-02-04T18:30:23.010Z"); t.equal(rehydratedEvent.categoryName, "cheese"); t.equal(rehydratedEvent.level.levelStr, "DEBUG"); - t.equal(rehydratedEvent.data.length, 1); + t.equal(rehydratedEvent.data.length, 5); t.equal(rehydratedEvent.data[0], "log message"); + t.equal(rehydratedEvent.data[1], "NaN"); + t.equal(rehydratedEvent.data[2], "Infinity"); + t.equal(rehydratedEvent.data[3], "-Infinity"); + t.equal(rehydratedEvent.data[4], "undefined"); t.equal(rehydratedEvent.context.user, "bob"); t.end(); }); From 1481ec6f62748a4403941804765c14968d58867b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 21 Feb 2022 01:30:21 +0800 Subject: [PATCH 124/454] Fixed ESLint no-restricted-globals error --- lib/LoggingEvent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index b96ed363..42a26561 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -41,7 +41,7 @@ class LoggingEvent { } // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. // The following allows us to serialize to NaN, Infinity and -Infinity correctly. - else if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) { + else if (typeof value === 'number' && (Number.isNaN(value) || !Number.isFinite(value))) { value = value.toString(); } // JSON.stringify([undefined]) returns [null]. From a3f172f1cb22ab048b963b01ffb652823ce7cc12 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 21 Feb 2022 01:39:14 +0800 Subject: [PATCH 125/454] Fixed ESLint radix error --- test/tap/LoggingEvent-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tap/LoggingEvent-test.js b/test/tap/LoggingEvent-test.js index 174f3a9b..c6af0157 100644 --- a/test/tap/LoggingEvent-test.js +++ b/test/tap/LoggingEvent-test.js @@ -5,7 +5,7 @@ const levels = require("../../lib/levels"); test("LoggingEvent", batch => { batch.test("should serialise to flatted", t => { - const event = new LoggingEvent("cheese", levels.DEBUG, ["log message", parseInt("abc"), 1/0, -1/0, undefined], { + const event = new LoggingEvent("cheese", levels.DEBUG, ["log message", parseInt("abc", 10), 1/0, -1/0, undefined], { user: "bob" }); // set the event date to a known value From 287c3eb83667f686b5958268bc11026336eb06e0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 1 Mar 2022 01:39:38 +0800 Subject: [PATCH 126/454] Fixed fileSync appender to create directory recursively --- lib/appenders/fileSync.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 4b6109c1..b587dbe2 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -11,6 +11,40 @@ function touchFile(file, options) { return; } + // attempt to create the directory + const mkdir = (dir) => { + try { + return fs.mkdirSync(dir, {recursive: true}); + } + // backward-compatible fs.mkdirSync for nodejs pre-10.12.0 (without recursive option) + catch (e) { + // recursive creation of parent first + if (e.code === 'ENOENT') { + mkdir(path.dirname(dir)); + return mkdir(dir); + } + + // throw error for all except EEXIST and EROFS (read-only filesystem) + if (e.code !== 'EEXIST' && e.code !== 'EROFS') { + throw e; + } + + // EEXIST: throw if file and not directory + // EROFS : throw if directory not found + else { + try { + if (fs.statSync(dir).isDirectory()) { + return dir; + } + throw e; + } catch (err) { + throw e; + } + } + } + }; + mkdir(path.dirname(file)); + // touch the file to apply flags (like w to truncate the file) const id = fs.openSync(file, options.flags, options.mode); fs.closeSync(id); From e99d5857cb9b59aaad6f46c3dec9b005e2c31b8c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 2 Mar 2022 18:10:23 +0800 Subject: [PATCH 127/454] Added test cases --- test/tap/fileSyncAppender-test.js | 192 ++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index d7bd8103..ff4d60cc 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -2,6 +2,7 @@ const { test } = require("tap"); const fs = require("fs"); const path = require("path"); const EOL = require("os").EOL || "\n"; +const sandbox = require("@log4js-node/sandboxed-module"); const log4js = require("../../lib/log4js"); function remove(filename) { @@ -248,6 +249,197 @@ test("log4js fileSyncAppender", batch => { }); }); + batch.test("configure with non-existent multi-directory (recursive, nodejs >= 10.12.0)", t => { + const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-recursive.log"; + remove(testFile); + + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync("tmpA/tmpB/tmpC"); + fs.rmdirSync("tmpA/tmpB"); + fs.rmdirSync("tmpA"); + } catch (e) { + // doesn't matter + } + }); + + log4js.configure({ + appenders: { + sync: { + type: "fileSync", + filename: testFile, + layout: { type: "messagePassThrough" } + } + }, + categories: { + default: { appenders: ["sync"], level: "debug" } + } + }); + const logger = log4js.getLogger(); + logger.info("this should be written to the file"); + + fs.readFile(testFile, "utf8", (err, contents) => { + t.match(contents, `this should be written to the file${EOL}`); + t.end(); + }); + }); + + batch.test("configure with non-existent multi-directory (non-recursive, nodejs < 10.12.0)", t => { + const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-non-recursive.log"; + remove(testFile); + + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync("tmpA/tmpB/tmpC"); + fs.rmdirSync("tmpA/tmpB"); + fs.rmdirSync("tmpA"); + } catch (e) { + // doesn't matter + } + }); + + const sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + fs: { + ...fs, + mkdirSync(dirPath, options) { + return fs.mkdirSync(dirPath, { ...options, ...{ recursive: false } }); + } + } + } + }); + sandboxedLog4js.configure({ + appenders: { + sync: { + type: "fileSync", + filename: testFile, + layout: { type: "messagePassThrough" } + } + }, + categories: { + default: { appenders: ["sync"], level: "debug" } + } + }); + const logger = sandboxedLog4js.getLogger(); + logger.info("this should be written to the file"); + + fs.readFile(testFile, "utf8", (err, contents) => { + t.match(contents, `this should be written to the file${EOL}`); + t.end(); + }); + }); + + batch.test("configure with non-existent multi-directory (error handling)", t => { + const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-error-handling.log"; + remove(testFile); + + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync("tmpA/tmpB/tmpC"); + fs.rmdirSync("tmpA/tmpB"); + fs.rmdirSync("tmpA"); + } catch (e) { + // doesn't matter + } + }); + + const errorEPERM = new Error("EPERM"); + errorEPERM.code = "EPERM"; + + let sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEPERM ; + } + } + } + }); + t.throws( + () => + sandboxedLog4js.configure({ + appenders: { + sync: { + type: "fileSync", + filename: testFile, + layout: { type: "messagePassThrough" } + } + }, + categories: { + default: { appenders: ["sync"], level: "debug" } + } + }), + errorEPERM + ); + + const errorEROFS = new Error("EROFS"); + errorEROFS.code = "EROFS"; + + sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEROFS; + }, + statSync() { + return { isDirectory() { return false; } }; + } + } + } + }); + t.throws( + () => + sandboxedLog4js.configure({ + appenders: { + sync: { + type: "fileSync", + filename: testFile, + layout: { type: "messagePassThrough" } + } + }, + categories: { + default: { appenders: ["sync"], level: "debug" } + } + }), + errorEROFS + ); + + fs.mkdirSync("tmpA/tmpB/tmpC", { recursive: true }); + + sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEROFS; + } + } + } + }); + t.doesNotThrow( + () => + sandboxedLog4js.configure({ + appenders: { + sync: { + type: "fileSync", + filename: testFile, + layout: { type: "messagePassThrough" } + } + }, + categories: { + default: { appenders: ["sync"], level: "debug" } + } + }) + ); + + t.end(); + }); + batch.test("test options", t => { const testFile = "tmp-options-tests.log"; remove(testFile); From 929afca39aa3adb46df55edeb1408435ec32a577 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:05:56 +0800 Subject: [PATCH 128/454] chore(deps): updated package-lock.json --- package-lock.json | 210 +++++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0583d63f..625e0093 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@ampproject/remapping": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", - "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.0" @@ -29,20 +29,20 @@ "dev": true }, "@babel/core": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.0.0", + "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", @@ -63,9 +63,9 @@ } }, "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -133,9 +133,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", + "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", @@ -144,8 +144,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-simple-access": { @@ -179,9 +179,9 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, "requires": { "@babel/template": "^7.16.7", @@ -259,9 +259,9 @@ } }, "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", "dev": true }, "@babel/template": { @@ -276,18 +276,18 @@ } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", + "@babel/parser": "^7.17.3", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -312,14 +312,14 @@ } }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", + "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -352,9 +352,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -445,21 +445,21 @@ "dev": true }, "@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.2.tgz", - "integrity": "sha512-9KzzH4kMjA2XmBRHfqG2/Vtl7s92l6uNDd0wW7frDE+EUvQFGqNXhWp0UGJjSkt3v2AYjzOZn1QO9XaTNJIt1Q==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -696,15 +696,15 @@ } }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", + "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001312", + "electron-to-chromium": "^1.4.71", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -749,9 +749,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001309", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001309.tgz", - "integrity": "sha512-Pl8vfigmBXXq+/yUz1jUwULeq9xhMJznzdc/xwl4WclDAuebcTHVefpz8lE/bMI+UN7TOkSSe7B7RnZd6+dzjA==", + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", "dev": true }, "caseless": { @@ -942,9 +942,9 @@ } }, "date-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", - "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.4.tgz", + "integrity": "sha512-/jyf4rhB17ge328HJuJjAcmRtCsGd+NDeAtahRBTaK6vSPR6MO5HlrAit3Nn7dVjaa6sowW0WXt8yQtLyZQFRg==" }, "debug": { "version": "4.3.3", @@ -1030,9 +1030,9 @@ } }, "electron-to-chromium": { - "version": "1.4.66", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.66.tgz", - "integrity": "sha512-f1RXFMsvwufWLwYUxTiP7HmjprKXrqEWHiQkjAYa9DJeVIlZk5v8gBGcaV+FhtXLly6C1OTVzQY+2UQrACiLlg==", + "version": "1.4.75", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", + "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", "dev": true }, "emoji-regex": { @@ -1099,12 +1099,12 @@ "dev": true }, "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", + "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1112,10 +1112,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1170,9 +1170,9 @@ } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", + "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", "dev": true }, "eslint-import-resolver-node": { @@ -1274,9 +1274,9 @@ } }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -1301,20 +1301,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -1529,9 +1529,9 @@ "dev": true }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -1692,9 +1692,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { @@ -2307,9 +2307,9 @@ } }, "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -2372,9 +2372,9 @@ } }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "normalize-path": { @@ -3051,13 +3051,13 @@ } }, "streamroller": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", - "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.4.tgz", + "integrity": "sha512-GI9NzeD+D88UFuIlJkKNDH/IsuR+qIN7Qh8EsmhoRZr9bQoehTraRgwtLUkZbpcAw+hLPfHOypmppz8YyGK68w==", "requires": { - "date-format": "^4.0.3", - "debug": "^4.1.1", - "fs-extra": "^10.0.0" + "date-format": "^4.0.4", + "debug": "^4.3.3", + "fs-extra": "^10.0.1" } }, "string-width": { @@ -4392,9 +4392,9 @@ } }, "tap-mocha-reporter": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.1.tgz", - "integrity": "sha512-1knFWOwd4khx/7uSEnUeaP9IPW3w+sqTgJMhrwah6t46nZ8P25atOKAjSvVDsT67lOPu0nfdOqUwoyKn+3E5pA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.2.tgz", + "integrity": "sha512-VdNiCbPLPmbLaAMfPMQs9nQ22BYjYjXa3+m8VImB/l5uCP5afV9/W30F7DNCJWi2QXWjbFnU1JaP+3iUS/kVLw==", "dev": true, "requires": { "color-support": "^1.1.0", @@ -4571,9 +4571,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true }, "unbox-primitive": { From c656445a12642f0da025bc9a5969df449e98d1a1 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:10:50 +0800 Subject: [PATCH 129/454] chore(deps): bump date-format from 4.0.3 to 4.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7eb74d0..8fa94366 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.3", + "date-format": "^4.0.4", "debug": "^4.3.3", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 9a5f2803f94eeeeaf2ee2d825ec23c2c6da5020b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:11:26 +0800 Subject: [PATCH 130/454] chore(deps): bump streamroller from 3.0.2 to 3.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8fa94366..dfe73c2b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.3", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.2" + "streamroller": "^3.0.4" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 22c656a6dbadab0d08846b19b25b58bd08fd9a63 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:12:05 +0800 Subject: [PATCH 131/454] chore(deps-dev): bump eslint from 8.8.0 to 8.10.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dfe73c2b..46e5e7a6 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.8.0", + "eslint": "^8.10.0", "eslint-config-airbnb-base": "^13.2.0", "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-node": "^0.3.6", From d9eb935996d172e778d819779120e2382f7f1507 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:12:28 +0800 Subject: [PATCH 132/454] chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46e5e7a6..c4661bb8 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "deep-freeze": "0.0.1", "eslint": "^8.10.0", "eslint-config-airbnb-base": "^13.2.0", - "eslint-config-prettier": "^8.3.0", + "eslint-config-prettier": "^8.4.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", "eslint-plugin-prettier": "^4.0.0", From fc2146f6c99ccbbb786631bc9ac7a21c127fb43d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:12:58 +0800 Subject: [PATCH 133/454] chore(deps-dev): bump fs-extra from 10.0.0 to 10.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4661bb8..0b32ff18 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", "eslint-plugin-prettier": "^4.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^10.0.1", "husky": "^7.0.4", "nyc": "^15.1.0", "prettier": "^2.5.1", From 9fea9ecca2c7c64a5d37b78f15353b52d5a9e5ed Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 02:13:18 +0800 Subject: [PATCH 134/454] chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b32ff18..70655bd2 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "prettier": "^2.5.1", "proxyquire": "^2.1.3", "tap": "^15.1.6", - "typescript": "^4.5.5", + "typescript": "^4.6.2", "validate-commit-msg": "^2.14.0" }, "browser": { From 061be2290883f657832490562403abd7fa801b99 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 03:07:25 +0800 Subject: [PATCH 135/454] chore: updated changelog for 6.4.2 --- CHANGELOG.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb7e16f3..76975048 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # log4js-node changelog +## 6.4.2 + +- [bug: fixed fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@peteriman](https://github.com/peteriman) +- [bug: fixed serialise() for NaN, Infinity, -Infinity and undefined](https://github.com/log4js-node/log4js-node/pull/1188) - thanks [@peteriman](https://github.com/peteriman) +- [bug: fixed connectLogger not logging on close](https://github.com/log4js-node/log4js-node/pull/1179) - thanks [@peteriman](https://github.com/peteriman) +- [improvement: defensive coding](https://github.com/log4js-node/log4js-node/pull/1183) - thanks [@peteriman](https://github.com/peteriman) +- [type: fixed Logger constructor](https://github.com/log4js-node/log4js-node/pull/1177) - thanks [@peteriman](https://github.com/peteriman) +- [test: improve test coverage](https://github.com/log4js-node/log4js-node/pull/1184) - thanks [@peteriman](https://github.com/peteriman) +- [test: refactor and replaced tap deprecation in preparation for tap v15](https://github.com/log4js-node/log4js-node/pull/1172) - thanks [@peteriman](https://github.com/peteriman) +- [test: added e2e test for multiprocess Appender](https://github.com/log4js-node/log4js-node/pull/1170) - thanks [@nicojs](https://github.com/nicojs) +- [chore(docs): updated file appender docs](https://github.com/log4js-node/log4js-node/pull/1182) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated dateFile appender docs](https://github.com/log4js-node/log4js-node/pull/1181) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): corrected typo in sample code for multiFile appender](https://github.com/log4js-node/log4js-node/pull/1180) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1194) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump date-format from 4.0.3 to 4.0.4 + - chore(deps): bump streamroller from 3.0.2 to 3.0.4 + - issue: addresses compatibility issue with directory creation for NodeJS < 10.12.0 ([#1189](https://github.com/log4js-node/log4js-node/issues/1189)) - details: [streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) + - chore(deps-dev): bump eslint from 8.8.0 to 8.10.0 + - chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 + - chore(deps-dev): bump fs-extra from 10.0.0 to 10.0.1 + - chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 +- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1185) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump flatted from 3.2.4 to 3.2.5 + - chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 +- [chore(deps): updated package-lock.json](https://github.com/log4js-node/log4js-node/pull/1174) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump tap from 14.10.7 to 15.1.6](https://github.com/log4js-node/log4js-node/pull/1173) - thanks [@peteriman](https://github.com/peteriman) + ## 6.4.1 - [bug: Fixed to startup multiprocess even when no direct appenders](https://github.com/log4js-node/log4js-node/pull/1162) - thanks [@nicojs](https://github.com/nicojs) @@ -24,7 +51,7 @@ - [bug: Fixed dateFile appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1097) - thanks [@4eb0da](https://github.com/4eb0da) - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@peteriman](https://github.com/peteriman) - [bug: Fixed TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) -- [bug: Fixed Multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) +- [bug: Fixed multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) - [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@peteriman](https://github.com/peteriman) - [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@peteriman](https://github.com/peteriman) - test: added tap.tearDown() to clean up test files From 3dfa03e36bd81e36fc2860245d26789dc6d63528 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 2 Mar 2022 19:13:51 +0000 Subject: [PATCH 136/454] 6.4.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 625e0093..decf542b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.1", + "version": "6.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 70655bd2..6aeb4068 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.1", + "version": "6.4.2", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From b705fa57c74be2f277d5e8f5ea9b1da43a016431 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 3 Mar 2022 21:33:18 +0800 Subject: [PATCH 137/454] Removed redundant logic in multiprocessAppender --- lib/appenders/multiprocess.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 0007829f..50810a34 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -32,10 +32,8 @@ function logServer(config, actualAppender, levels) { let logMessage = ''; function logTheMessage(msg) { - if (logMessage.length > 0) { - debug('(master) deserialising log event and sending to actual appender'); - actualAppender(deserializeLoggingEvent(clientSocket, msg)); - } + debug('(master) deserialising log event and sending to actual appender'); + actualAppender(deserializeLoggingEvent(clientSocket, msg)); } function chunkReceived(chunk) { From 6b2344f2f9a73af9950420b17932adf49779f90b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Mar 2022 21:39:36 +0800 Subject: [PATCH 138/454] Removed redundant logic in tcp-serverAppender --- lib/appenders/tcp-server.js | 63 +++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/lib/appenders/tcp-server.js b/lib/appenders/tcp-server.js index 83553cbd..222fe5ce 100644 --- a/lib/appenders/tcp-server.js +++ b/lib/appenders/tcp-server.js @@ -7,46 +7,41 @@ const DELIMITER = '__LOG4JS__'; exports.configure = (config) => { debug('configure called with ', config); - // dummy shutdown if we're not master - let shutdown = (cb) => { cb(); }; - clustering.onlyOnMaster(() => { - const server = net.createServer((socket) => { - let dataSoFar = ''; - const send = (data) => { - if (data) { - dataSoFar += data; - if (dataSoFar.indexOf(DELIMITER)) { - const events = dataSoFar.split(DELIMITER); - if (!dataSoFar.endsWith(DELIMITER)) { - dataSoFar = events.pop(); - } else { - dataSoFar = ''; - } - events.filter(e => e.length).forEach((e) => { - clustering.send(LoggingEvent.deserialise(e)); - }); + const server = net.createServer((socket) => { + let dataSoFar = ''; + const send = (data) => { + if (data) { + dataSoFar += data; + if (dataSoFar.indexOf(DELIMITER)) { + const events = dataSoFar.split(DELIMITER); + if (!dataSoFar.endsWith(DELIMITER)) { + dataSoFar = events.pop(); + } else { + dataSoFar = ''; } + events.filter(e => e.length).forEach((e) => { + clustering.send(LoggingEvent.deserialise(e)); + }); + } else { + dataSoFar = ''; } - }; - - socket.setEncoding('utf8'); - socket.on('data', send); - socket.on('end', send); - }); - - server.listen(config.port || 5000, config.host || 'localhost', () => { - debug(`listening on ${config.host || 'localhost'}:${config.port || 5000}`); - server.unref(); - }); - - shutdown = (cb) => { - debug('shutdown called.'); - server.close(cb); + } }; + socket.setEncoding('utf8'); + socket.on('data', send); + socket.on('end', send); + }); + + server.listen(config.port || 5000, config.host || 'localhost', () => { + debug(`listening on ${config.host || 'localhost'}:${config.port || 5000}`); + server.unref(); }); return { - shutdown + shutdown: (cb) => { + debug('shutdown called.'); + server.close(cb); + } }; }; From 90385ac9072f7f8f3096542f4cecd44b311d6e1c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Mar 2022 21:58:02 +0800 Subject: [PATCH 139/454] Defensive coding for cluster=null if require('cluster') fails in try-catch --- lib/clustering.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/clustering.js b/lib/clustering.js index ca49cb5d..61c6ff15 100644 --- a/lib/clustering.js +++ b/lib/clustering.js @@ -5,7 +5,7 @@ const configuration = require("./configuration"); let disabled = false; let cluster = null; try { - cluster = require("cluster"); //eslint-disable-line + cluster = require("cluster"); // eslint-disable-line } catch (e) { debug("cluster module not present"); disabled = true; @@ -17,7 +17,7 @@ let pm2 = false; let pm2InstanceVar = "NODE_APP_INSTANCE"; const isPM2Master = () => pm2 && process.env[pm2InstanceVar] === "0"; -const isMaster = () => disabled || cluster.isMaster || isPM2Master(); +const isMaster = () => disabled || (cluster && cluster.isMaster) || isPM2Master(); const sendToListeners = logEvent => { listeners.forEach(l => l(logEvent)); @@ -72,7 +72,7 @@ if (!disabled) { // we only want one of the app instances to write logs debug("listening for PM2 broadcast messages"); process.on("message", receiver); - } else if (cluster.isMaster) { + } else if (cluster && cluster.isMaster) { debug("listening for cluster messages"); cluster.on("message", receiver); } else { From 8d2a211a9fca667c7addf1e4570c20b6b5f1ed11 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 6 Mar 2022 21:22:08 +0800 Subject: [PATCH 140/454] chore(refactor): fileSyncAppender to have same internal code ordering as fileAppender --- lib/appenders/fileSync.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index b587dbe2..72e6e805 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -175,15 +175,22 @@ class RollingFileSync { * if not provided then logs won't be rotated. * @param numBackups - the number of log files to keep after logSize * has been reached (default 5) - * @param timezoneOffset - optional timezone offset in minutes - * (default system local) - * @param options - passed as is to fs options + * @param options - options to be passed to the underlying stream + * @param timezoneOffset - optional timezone offset in minutes (default system local) */ -function fileAppender(file, layout, logSize, numBackups, timezoneOffset, options) { - debug('fileSync appender created'); +function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; + debug( + 'Creating fileSync appender (', + file, ', ', + logSize, ', ', + numBackups, ', ', + options, ', ', + timezoneOffset, ')' + ); + function openTheStream(filePath, fileSize, numFiles) { let stream; @@ -234,8 +241,8 @@ function configure(config, layouts) { layout, config.maxLogSize, config.backups, - config.timezoneOffset, - options + options, + config.timezoneOffset ); } From 4bc77b68a996885656907e689fbe053c43512800 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 6 Mar 2022 21:22:53 +0800 Subject: [PATCH 141/454] chore(refactor): fileAppender to have same internal code ordering as fileSyncAppender --- lib/appenders/file.js | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index aeccddb7..0e10939e 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -13,23 +13,6 @@ function mainSighupHandler() { }); } -function openTheStream(file, fileSize, numFiles, options) { - const stream = new streams.RollingFileStream( - file, - fileSize, - numFiles, - options - ); - stream.on('error', (err) => { - console.error('log4js.fileAppender - Writing to file %s, error happened ', file, err); // eslint-disable-line - }); - stream.on('drain', () => { - process.emit("log4js:pause", false); - }); - return stream; -} - - /** * File Appender writing the logs to a text file. Supports rolling of logs by size. * @@ -56,6 +39,22 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset timezoneOffset, ')' ); + function openTheStream(filePath, fileSize, numFiles, opt) { + const stream = new streams.RollingFileStream( + filePath, + fileSize, + numFiles, + opt + ); + stream.on('error', (err) => { + console.error('log4js.fileAppender - Writing to file %s, error happened ', filePath, err); // eslint-disable-line + }); + stream.on('drain', () => { + process.emit("log4js:pause", false); + }); + return stream; + } + let writer = openTheStream(file, logSize, numBackups, options); const app = function (loggingEvent) { From e3a36db2327df0e3ee165afc55d2391a44c501d0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 6 Mar 2022 19:43:13 +0800 Subject: [PATCH 142/454] chore(validation): added filename validation for fileAppender and filesyncAppender --- lib/appenders/file.js | 5 ++++- lib/appenders/fileSync.js | 5 ++++- test/tap/fileAppender-test.js | 21 +++++++++++++++++++++ test/tap/fileSyncAppender-test.js | 21 +++++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 0e10939e..2680fc1f 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -16,7 +16,7 @@ function mainSighupHandler() { /** * File Appender writing the logs to a text file. Supports rolling of logs by size. * - * @param file file log messages will be written to + * @param file the file log messages will be written to * @param layout a function that takes a logEvent and returns a string * (defaults to basicLayout). * @param logSize - the maximum size (in bytes) for a log file, @@ -27,6 +27,9 @@ function mainSighupHandler() { * @param timezoneOffset - optional timezone offset in minutes (default system local) */ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { + if (typeof file !== "string" || file.length === 0) { + throw new Error(`Invalid filename: ${file}`); + } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 72e6e805..995ed78d 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -168,7 +168,7 @@ class RollingFileSync { /** * File Appender writing the logs to a text file. Supports rolling of logs by size. * - * @param file file log messages will be written to + * @param file the file log messages will be written to * @param layout a function that takes a logevent and returns a string * (defaults to basicLayout). * @param logSize - the maximum size (in bytes) for a log file, @@ -179,6 +179,9 @@ class RollingFileSync { * @param timezoneOffset - optional timezone offset in minutes (default system local) */ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { + if (typeof file !== "string" || file.length === 0) { + throw new Error(`Invalid filename: ${file}`); + } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 95ee8a4c..17f3b4b1 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -46,6 +46,27 @@ test("log4js fileAppender", batch => { t.end(); }); + batch.test("should give error if invalid filename", async t => { + const file = ""; + const expectedError = new Error(`Invalid filename: ${file}`); + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "file", + filename: file + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + expectedError + ); + t.end(); + }); + batch.test("should flush logs on shutdown", async t => { const testFile = path.join(__dirname, "fa-default-test.log"); await removeFile(testFile); diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index ff4d60cc..c7f01907 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -40,6 +40,27 @@ test("log4js fileSyncAppender", batch => { }); }); + batch.test("should give error if invalid filename", async t => { + const file = ""; + const expectedError = new Error(`Invalid filename: ${file}`); + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "fileSync", + filename: file + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + expectedError + ); + t.end(); + }); + batch.test("with a max file size and no backups", t => { const testFile = path.join(__dirname, "/fa-maxFileSize-sync-test.log"); const logger = log4js.getLogger("max-file-size"); From 65fe707350f029509063dae1bd181ac5344df182 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Mar 2022 22:03:38 +0800 Subject: [PATCH 143/454] chore(test): improve test coverage for multiprocessAppender appenders/multiprocess.js - Line 121 - debug('connection error', e); appenders/multiprocess.js - Line 122 - canWrite = false; appenders/multiprocess.js - Line 123 - emptyBuffer(); --- test/tap/multiprocess-test.js | 41 ++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index 69019393..2013ed79 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -79,7 +79,7 @@ test("Multiprocess Appender", async batch => { logger.info("before connect"); fakeNet.cbs.connect(); logger.info("after connect"); - fakeNet.cbs.close(true); + fakeNet.cbs.close(); logger.info("after error, before connect"); fakeNet.cbs.connect(); logger.info("after error, after connect"); @@ -173,6 +173,45 @@ test("Multiprocess Appender", async batch => { t.end(); }); + batch.test("worker with error", t => { + const fakeNet = makeFakeNet(); + + const log4js = sandbox.require("../../lib/log4js", { + requires: { + net: fakeNet + } + }); + log4js.configure({ + appenders: { worker: { type: "multiprocess", mode: "worker" } }, + categories: { default: { appenders: ["worker"], level: "trace" } } + }); + + const logger = log4js.getLogger(); + logger.info("before connect"); + fakeNet.cbs.connect(); + logger.info("after connect"); + fakeNet.cbs.error(); + logger.info("after error, before close"); + fakeNet.cbs.close(); + logger.info("after close, before connect"); + fakeNet.cbs.connect(); + logger.info("after close, after connect"); + + const net = fakeNet; + + t.test("should attempt to re-open the socket", assert => { + // skipping the __LOG4JS__ separators + assert.match(net.data[0], "before connect"); + assert.match(net.data[2], "after connect"); + assert.match(net.data[4], "after error, before close"); + assert.match(net.data[6], "after close, before connect"); + assert.match(net.data[8], "after close, after connect"); + assert.equal(net.createConnectionCalled, 2); + assert.end(); + }); + t.end(); + }); + batch.test("worker defaults", t => { const fakeNet = makeFakeNet(); From 64ef06b849fe9ebf5d44faedaaaf1f2e42fd595e Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 4 Mar 2022 22:11:00 +0800 Subject: [PATCH 144/454] chore(test): improve test coverage for tcp-serverAppender appenders/tcp-server.js - Line 19 - dataSoFar = events.pop(); appenders/tcp-server.js - Line 27 - dataSoFar = ''; --- test/tap/server-test.js | 129 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 117 insertions(+), 12 deletions(-) diff --git a/test/tap/server-test.js b/test/tap/server-test.js index a2b7416e..d56c2824 100644 --- a/test/tap/server-test.js +++ b/test/tap/server-test.js @@ -5,21 +5,20 @@ const vcr = require("../../lib/appenders/recording"); const levels = require("../../lib/levels"); const LoggingEvent = require("../../lib/LoggingEvent"); -log4js.configure({ - appenders: { - vcr: { type: "recording" }, - tcp: { type: "tcp-server", port: 5678 } - }, - categories: { - default: { appenders: ["vcr"], level: "debug" } - } -}); - -// give the socket a chance to start up test("TCP Server", batch => { batch.test( "should listen for TCP messages and re-send via process.send", t => { + log4js.configure({ + appenders: { + vcr: { type: "recording" }, + tcp: { type: "tcp-server", port: 5678 } + }, + categories: { + default: { appenders: ["vcr"], level: "debug" } + } + }); + // give the socket a chance to start up setTimeout(() => { const socket = net.connect(5678, () => { socket.write( @@ -83,8 +82,114 @@ test("TCP Server", batch => { socket.unref(); }, 100); + } + ); + + batch.test( + "sending incomplete messages in chunks", + t => { + log4js.configure({ + appenders: { + vcr: { type: "recording" }, + tcp: { type: "tcp-server" } + }, + categories: { + default: { appenders: ["vcr"], level: "debug" } + } + }); + // give the socket a chance to start up + setTimeout(() => { + const socket = net.connect(5000, () => { + const syncWrite = (dataArray = [], finalCallback) => { + if (dataArray === null) { + dataArray = []; + } else if (!Array.isArray(dataArray)) { + dataArray = [dataArray]; + } + if (typeof finalCallback !== "function") { + finalCallback = () => {}; + } + setTimeout(() => { + if (!dataArray.length) { + finalCallback(); + } else if (dataArray.length === 1) { + socket.write(dataArray.shift(), finalCallback); + } else { + socket.write(dataArray.shift(), () => { syncWrite(dataArray, finalCallback); }); + } + }, 100); + }; + + const dataArray = [ + "__LOG4JS__", + "Hello__LOG4JS__World", + "__LOG4JS__", + "testing nonsense", + `__LOG4JS__more nonsense__LOG4JS__` + ]; - batch.end(); + const finalCallback = () => { + socket.end(); + setTimeout(() => { + log4js.shutdown(() => { + const logs = vcr.replay(); + t.equal(logs.length, 8); + t.match(logs[4], { + data: [ + "Unable to parse log:", + "Hello", + "because: ", + SyntaxError + ], + categoryName: "log4js", + level: { levelStr: "ERROR" }, + context: {} + }); + t.match(logs[5], { + data: [ + "Unable to parse log:", + "World", + "because: ", + SyntaxError + ], + categoryName: "log4js", + level: { levelStr: "ERROR" }, + context: {} + }); + t.match(logs[6], { + data: [ + "Unable to parse log:", + "testing nonsense", + "because: ", + SyntaxError + ], + categoryName: "log4js", + level: { levelStr: "ERROR" }, + context: {} + }); + t.match(logs[7], { + data: [ + "Unable to parse log:", + "more nonsense", + "because: ", + SyntaxError + ], + categoryName: "log4js", + level: { levelStr: "ERROR" }, + context: {} + }); + t.end(); + }); + }, 100); + }; + + syncWrite(dataArray, finalCallback); + }); + + socket.unref(); + }, 100); } ); + + batch.end(); }); From 04bd18b44d17b7c060c18e4a6084a9d3714399ba Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 5 Mar 2022 01:51:39 +0800 Subject: [PATCH 145/454] chore(test): improve test coverage for appenders/index (requires truthy value, used a noop function, but the function never gets called anyway) appenders/index.js - Line 95 - }, /* istanbul ignore next */ () => {}); --- lib/appenders/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index 58b10c12..2039daba 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -92,7 +92,7 @@ const createAppender = (name, config) => { appender => getAppender(appender, config), levels ); - }, () => { }); + }, /* istanbul ignore next */ () => {}); }; const setup = (config) => { From a912401dc2a451d56a645af9659f667d57a1a84f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 5 Mar 2022 01:58:58 +0800 Subject: [PATCH 146/454] chore(test): improve test coverage for appenders/index appenders/index.js - Line 78 - process.emitWarning( appenders/index.js - Line 79 - `Appender ${appenderConfig.type} exports a shutdown function.`, appenders/index.js - Line 80 - "DeprecationWarning", "log4js-node-DEP0002" appenders/index.js - Line 81 - ); appenders/index.js - Line 82 - debug(`DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.`); --- test/tap/default-settings-test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/tap/default-settings-test.js b/test/tap/default-settings-test.js index ec9f8c07..f1816aaf 100644 --- a/test/tap/default-settings-test.js +++ b/test/tap/default-settings-test.js @@ -13,6 +13,8 @@ test("default settings", t => { output.push(evt); }; }, + shutdown() { + }, configure() { return this.appender(); } From 05a64ff1fe25150ed92d17964819c9c19cc6888f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 7 Mar 2022 00:19:14 +0800 Subject: [PATCH 147/454] chore(test): improve test coverage for log4js log4js.js - Line 83 - return recordingModule --- test/tap/recordingAppender-test.js | 28 ++++++++++++++++++++++++++++ types/test.ts | 5 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/tap/recordingAppender-test.js diff --git a/test/tap/recordingAppender-test.js b/test/tap/recordingAppender-test.js new file mode 100644 index 00000000..142f6e18 --- /dev/null +++ b/test/tap/recordingAppender-test.js @@ -0,0 +1,28 @@ +const { test } = require("tap"); +const log4js = require("../../lib/log4js"); + +test("recording appender", t => { + log4js.configure({ + appenders: { rec: { type: 'recording' } }, + categories: { default: { appenders: [ 'rec' ], 'level': 'debug' } } + }); + + const logger = log4js.getLogger(); + logger.level = 'debug'; + logger.debug('This will go to the recording!'); + logger.debug('Another one'); + + const recording = log4js.recording(); + const loggingEvents = recording.playback(); + + t.equal(loggingEvents.length, 2, "There should be 2 recorded events"); + t.equal(loggingEvents[0].data[0], "This will go to the recording!"); + t.equal(loggingEvents[1].data[0], "Another one"); + + recording.reset(); + const loggingEventsPostReset = recording.playback(); + + t.equal(loggingEventsPostReset.length, 0, "There should be 0 recorded events"); + + t.end(); +}); diff --git a/types/test.ts b/types/test.ts index b0c8d4ed..b7bb8f3e 100644 --- a/types/test.ts +++ b/types/test.ts @@ -139,7 +139,7 @@ log4js.configure({ log4js.configure({ appenders: { rec: { type: 'recording' } }, - categories: { default: { appenders: [ 'rec'], 'level': 'debug' } } + categories: { default: { appenders: ['rec'], 'level': 'debug' } } }); const logger8 = log4js.getLogger(); logger8.level = 'debug' @@ -150,6 +150,9 @@ const loggingEvents = recording.playback() if (loggingEvents.length !== 2) { throw new Error(`Expected 2 recorded events, got ${loggingEvents.length}`) } +if (loggingEvents[0].data[0] !== 'This will go to the recording!') { + throw new Error(`Expected message 'This will go to the recording!', got ${loggingEvents[0].data[0]}`) +} if (loggingEvents[1].data[0] !== 'Another one') { throw new Error(`Expected message 'Another one', got ${loggingEvents[1].data[0]}`) } From 70b69ea187784f1fd904ec2e0d942f6f78397da4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 7 Mar 2022 01:11:32 +0800 Subject: [PATCH 148/454] chore(test): improve test coverage for log4js log4js.js - Line 37 - if (!enabled) return; --- test/tap/logging-test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/tap/logging-test.js b/test/tap/logging-test.js index 7943f0c1..9cfdab8b 100644 --- a/test/tap/logging-test.js +++ b/test/tap/logging-test.js @@ -154,6 +154,8 @@ test("log4js", batch => { "should invoke appender shutdowns" ); logger.info("this should not go to the appenders"); + logger.log("info", "this should not go to the appenders"); + logger._log(require("../../lib/levels").INFO, ["this should not go to the appenders"]); t.notOk(events.event); t.end(); }); From f7489941db3191e03c03faac03c9ce72b029c38f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 7 Mar 2022 12:45:32 +0800 Subject: [PATCH 149/454] chore(test): tap.teardown() to await for log4js.shutdown() or removeFiles() --- test/tap/configuration-validation-test.js | 4 ++-- test/tap/file-descriptor-leak-test.js | 2 +- test/tap/file-sighup-test.js | 2 +- test/tap/fileAppender-test.js | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index b560146b..5f221377 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -256,8 +256,8 @@ test("log4js configuration validation", batch => { batch.test("should not throw error if configure object is freezed", t => { const testFile = "test/tap/freeze-date-file-test"; - t.teardown(() => { - removeFiles(testFile); + t.teardown(async () => { + await removeFiles(testFile); }); t.doesNotThrow(() => log4js.configure( diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 7436a8e7..6a899f84 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -68,7 +68,7 @@ if (process.platform !== "win32") { }); batch.teardown(async () => { - log4js.shutdown(); + await new Promise(resolve => log4js.shutdown(resolve)); const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index cf059b2b..d8fba5e8 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -39,7 +39,7 @@ test("file appender single SIGHUP handler", t => { log4js.configure(config); t.teardown(async () => { - log4js.shutdown(); + await new Promise(resolve => log4js.shutdown(resolve)); const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 17f3b4b1..b379a068 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -69,6 +69,7 @@ test("log4js fileAppender", batch => { batch.test("should flush logs on shutdown", async t => { const testFile = path.join(__dirname, "fa-default-test.log"); + const logger = log4js.getLogger("default-settings"); await removeFile(testFile); t.teardown(async () => { @@ -80,7 +81,6 @@ test("log4js fileAppender", batch => { appenders: { test: { type: "file", filename: testFile } }, categories: { default: { appenders: ["test"], level: "trace" } } }); - const logger = log4js.getLogger("default-settings"); logger.info("1"); logger.info("2"); @@ -100,12 +100,12 @@ test("log4js fileAppender", batch => { batch.test("with a max file size and no backups", async t => { const testFile = path.join(__dirname, "fa-maxFileSize-test.log"); const logger = log4js.getLogger("max-file-size"); + await removeFile(testFile); t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await removeFile(testFile); }); - await removeFile(testFile); // log file of 100 bytes maximum, no backups log4js.configure({ @@ -162,12 +162,12 @@ test("log4js fileAppender", batch => { batch.test("with a max file size in unit mode and no backups", async t => { const testFile = path.join(__dirname, "fa-maxFileSize-unit-test.log"); const logger = log4js.getLogger("max-file-size-unit"); + await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); t.teardown(async () => { await new Promise(resolve => log4js.shutdown(resolve)); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); - await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); // log file of 1K = 1024 bytes maximum, no backups log4js.configure({ From f5a9d13313c006448230277e74cbf51495ba2177 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 6 Mar 2022 22:56:44 +0800 Subject: [PATCH 150/454] chore(test): improve test coverage for multiFileAppender appenders/multiFile.js - Line 25 - debug('ignore error on file shutdown: %s', err.message); --- test/tap/multi-file-appender-test.js | 72 ++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 691c6f01..b827fa69 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -2,6 +2,7 @@ const process = require("process"); const { test } = require("tap"); const debug = require("debug"); const fs = require("fs"); +const sandbox = require("@log4js-node/sandboxed-module"); const log4js = require("../../lib/log4js"); const removeFiles = async filenames => { @@ -119,6 +120,77 @@ test("multiFile appender", batch => { }, timeoutMs*1 + 30); // add a 30 ms delay }); + batch.test("should close file safely after timeout", t => { + t.teardown(async () => { + await removeFiles("logs/C.log"); + }); + const error = new Error("fileAppender shutdown error"); + const sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + "./appenders/file": { + configure(config, layouts) { + const fileAppender = require("../../lib/appenders/file").configure(config, layouts); + const originalShutdown = fileAppender.shutdown; + fileAppender.shutdown = function (complete) { + const onCallback = function() { + complete(error); + }; + originalShutdown(onCallback); + }; + return fileAppender; + } + }, + debug + } + }); + /* checking that the file is closed after a timeout is done by looking at the debug logs + since detecting file locks with node.js is platform specific. + */ + const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugLogs = []; + const originalWrite = process.stderr.write; + process.stderr.write = (string, encoding, fd) => { + debugLogs.push(string); + if (debugWasEnabled) { + originalWrite.apply(process.stderr, [string, encoding, fd]); + } + }; + debug.enable("log4js:multiFile"); + const timeoutMs = 20; + sandboxedLog4js.configure({ + appenders: { + multi: { + type: "multiFile", + base: "logs/", + property: "label", + extension: ".log", + timeout: timeoutMs + } + }, + categories: { default: { appenders: ["multi"], level: "info" } } + }); + const loggerC = sandboxedLog4js.getLogger("cheese"); + loggerC.addContext("label", "C"); + loggerC.info("I am in logger C"); + setTimeout(() => { + t.match( + debugLogs[debugLogs.length - 2], + `C not used for > ${timeoutMs} ms => close`, + "(timeout1) should have closed" + ); + t.match( + debugLogs[debugLogs.length - 1], + `ignore error on file shutdown: ${error.message}`, + "safely shutdown" + ); + if (!debugWasEnabled) { + debug.disable("log4js:multiFile"); + } + process.stderr.write = originalWrite; + t.end(); + }, timeoutMs*1 + 30); // add a 30 ms delay + }); + batch.test("should close file after extended timeout", t => { t.teardown(async () => { await removeFiles("logs/D.log"); From 905a513cf6fb4c1815be41ae8259991f8a9c41da Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 15:33:38 +0800 Subject: [PATCH 151/454] chore(test): update multiFileAppender tests to teardown so as not to affect the next test --- test/tap/multi-file-appender-test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index b827fa69..8969d873 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -75,6 +75,7 @@ test("multiFile appender", batch => { batch.test("should close file after timeout", t => { t.teardown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await removeFiles("logs/C.log"); }); /* checking that the file is closed after a timeout is done by looking at the debug logs @@ -122,6 +123,7 @@ test("multiFile appender", batch => { batch.test("should close file safely after timeout", t => { t.teardown(async () => { + await new Promise(resolve => sandboxedLog4js.shutdown(resolve)); // eslint-disable-line no-use-before-define await removeFiles("logs/C.log"); }); const error = new Error("fileAppender shutdown error"); @@ -193,6 +195,7 @@ test("multiFile appender", batch => { batch.test("should close file after extended timeout", t => { t.teardown(async () => { + await new Promise(resolve => log4js.shutdown(resolve)); await removeFiles("logs/D.log"); }); /* checking that the file is closed after a timeout is done by looking at the debug logs From 6e6dbad5d34d908ac65eb30e3655ac1075313502 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 6 Mar 2022 23:10:45 +0800 Subject: [PATCH 152/454] chore(test): improve test coverage for multiFileAppender (else path will never be taken) appenders/multiFile.js - Line 17 - /* istanbul ignore else */ appenders/multiFile.js - Line 18 - if (timer && app) { --- lib/appenders/multiFile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/appenders/multiFile.js b/lib/appenders/multiFile.js index 2fd47b88..f981c3f0 100644 --- a/lib/appenders/multiFile.js +++ b/lib/appenders/multiFile.js @@ -14,6 +14,7 @@ module.exports.configure = (config, layouts) => { function checkForTimeout(fileKey) { const timer = timers.get(fileKey); const app = files.get(fileKey); + /* istanbul ignore else */ if (timer && app) { if (Date.now() - timer.lastUsed > timer.timeout) { debug('%s not used for > %d ms => close', fileKey, timer.timeout); From 8ad41831d1fcbc1d2d17d75ac5281820005f10d6 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 17:22:12 +0800 Subject: [PATCH 153/454] chore(test): improve test coverage for fileSyncAppender appenders/fileSync.js - Line 58 - throw new Error(`maxLogSize (${maxLogSize}) should be > 0`); --- lib/appenders/fileSync.js | 12 ++++-------- test/tap/fileSyncAppender-test.js | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 995ed78d..071ea9ed 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -51,19 +51,15 @@ function touchFile(file, options) { } class RollingFileSync { - constructor(filename, size, backups, options) { + constructor(filename, maxLogSize, backups, options) { debug('In RollingFileStream'); - function throwErrorIfArgumentsAreNotValid() { - if (!filename || !size || size <= 0) { - throw new Error('You must specify a filename and file size'); - } + if (maxLogSize < 0) { + throw new Error(`maxLogSize (${maxLogSize}) should be > 0`); } - throwErrorIfArgumentsAreNotValid(); - this.filename = filename; - this.size = size; + this.size = maxLogSize; this.backups = backups; this.options = options; this.currentSize = 0; diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index c7f01907..f6a2eb2b 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -61,6 +61,28 @@ test("log4js fileSyncAppender", batch => { t.end(); }); + batch.test("should give error if invalid maxLogSize", async t => { + const maxLogSize = -1; + const expectedError = new Error(`maxLogSize (${maxLogSize}) should be > 0`); + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "fileSync", + filename: path.join(__dirname, "fa-invalidMaxFileSize-sync-test.log"), + maxLogSize: -1 + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + expectedError + ); + t.end(); + }); + batch.test("with a max file size and no backups", t => { const testFile = path.join(__dirname, "/fa-maxFileSize-sync-test.log"); const logger = log4js.getLogger("max-file-size"); From d894f573058d50f6c41e9048f46fadc037097b16 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 17:25:39 +0800 Subject: [PATCH 154/454] chore(docs): updated file appender docs --- docs/file.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/file.md b/docs/file.md index 0be045cb..ed8536a4 100644 --- a/docs/file.md +++ b/docs/file.md @@ -6,8 +6,8 @@ The file appender writes log events to a file. It supports an optional maximum f * `type` - `"file"` * `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. -* `backups` - `integer` (optional, default to 5) - the number of old log files to keep during log rolling. +* `maxLogSize` - `integer` (optional, defaults to MAX_SAFE_INTEGER) - the maximum size (in bytes) for the log file. +* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling. * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): From faef3d20f643a9e1a29883f493cdbe893a47de77 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 17:25:51 +0800 Subject: [PATCH 155/454] chore(docs): updated fileSync appender docs --- docs/fileSync.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fileSync.md b/docs/fileSync.md index da5d9063..a73ca26c 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -6,8 +6,8 @@ The sync file appender writes log events to a file, the only difference to the n * `type` - `"fileSync"` * `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. -* `backups` - `integer` (optional, default value = 5) - the number of old log files to keep during log rolling. +* `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. +* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling. * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying node.js core stream implementation: From 3e270c06736b4abd605c38af02bc9f6341598fcb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 17:51:38 +0800 Subject: [PATCH 156/454] chore(docs): updated logger api docs --- docs/api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/api.md b/docs/api.md index 93ff6cd7..92bd48eb 100644 --- a/docs/api.md +++ b/docs/api.md @@ -33,9 +33,10 @@ This function takes a single optional string argument to denote the category to * `removeContext()` - removes a previously defined key-value pair from the context. * `clearContext()` - removes all context pairs from the logger. * `setParseCallStackFunction(function)` - Allow to override the default way to parse the callstack data for the layout pattern, a generic javascript Error object is passed to the function. Must return an object with properties : `functionName` / `fileName` / `lineNumber` / `columnNumber` / `callStack`. Can for example be used if all of your log call are made from one "debug" class and you would to "erase" this class from the callstack to only show the function which called your "debug" class. + The `Logger` object has the following property: * `level` - where `level` is a log4js level or a string that matches a level (e.g. 'info', 'INFO', etc). This allows overriding the configured level for this logger. Changing this value applies to all loggers of the same category. - +* `useCallStack` - where `useCallStack` is a boolean to indicate if log events for this category use the call stack to generate line numbers and file names in the event. This allows overriding the configured useCallStack for this logger. Changing this value applies to all loggers of the same category. ## Shutdown - `log4js.shutdown(cb)` From 7a16cfbef16937d043f7657e5ab61de6f56a494a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 22:59:27 +0800 Subject: [PATCH 157/454] chore(docs): updated logger api docs --- docs/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api.md b/docs/api.md index 92bd48eb..98eeabae 100644 --- a/docs/api.md +++ b/docs/api.md @@ -34,7 +34,7 @@ This function takes a single optional string argument to denote the category to * `clearContext()` - removes all context pairs from the logger. * `setParseCallStackFunction(function)` - Allow to override the default way to parse the callstack data for the layout pattern, a generic javascript Error object is passed to the function. Must return an object with properties : `functionName` / `fileName` / `lineNumber` / `columnNumber` / `callStack`. Can for example be used if all of your log call are made from one "debug" class and you would to "erase" this class from the callstack to only show the function which called your "debug" class. -The `Logger` object has the following property: +The `Logger` object has the following properties: * `level` - where `level` is a log4js level or a string that matches a level (e.g. 'info', 'INFO', etc). This allows overriding the configured level for this logger. Changing this value applies to all loggers of the same category. * `useCallStack` - where `useCallStack` is a boolean to indicate if log events for this category use the call stack to generate line numbers and file names in the event. This allows overriding the configured useCallStack for this logger. Changing this value applies to all loggers of the same category. From aa566df3f80baeaddb09c009ccf675e42de43c96 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 23:25:43 +0800 Subject: [PATCH 158/454] chore(test): improve test coverage for fileSyncAppender appenders/fileSync.js - Line 11 - return; --- test/tap/fileSyncAppender-test.js | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index f6a2eb2b..b36e3b06 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -40,6 +40,42 @@ test("log4js fileSyncAppender", batch => { }); }); + batch.test("with existing file", t => { + const testFile = path.join(__dirname, "/fa-existing-file-sync-test.log"); + const logger = log4js.getLogger("default-settings"); + remove(testFile); + + t.teardown(() => { + remove(testFile); + }); + + log4js.configure({ + appenders: { sync: { type: "fileSync", filename: testFile } }, + categories: { default: { appenders: ["sync"], level: "debug" } } + }); + + logger.info("This should be in the file."); + + log4js.shutdown(() => { + log4js.configure({ + appenders: { sync: { type: "fileSync", filename: testFile } }, + categories: { default: { appenders: ["sync"], level: "debug" } } + }); + + logger.info("This should also be in the file."); + + fs.readFile(testFile, "utf8", (err, fileContents) => { + t.match(fileContents, `This should be in the file.${EOL}`); + t.match(fileContents, `This should also be in the file.${EOL}`); + t.match( + fileContents, + /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / + ); + t.end(); + }); + }); + }); + batch.test("should give error if invalid filename", async t => { const file = ""; const expectedError = new Error(`Invalid filename: ${file}`); From edc612e5bea40f044447d6cd410853446efc3922 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 8 Mar 2022 23:43:36 +0800 Subject: [PATCH 159/454] chore(test): improve test coverage for dateFileAppender appenders/dateFile.js - Line 13 - console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); // eslint-disable-line --- test/tap/dateFileAppender-test.js | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index c224a96e..e48d1010 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -188,5 +188,60 @@ test("../../lib/appenders/dateFile", batch => { t.end(); }); + batch.test("when underlying stream errors", t => { + let consoleArgs; + let errorHandler; + + const DateRollingFileStream = class { + end() { + this.ended = true; + } + + on(evt, cb) { + if (evt === "error") { + this.errored = true; + errorHandler = cb; + } + } + + write() { + this.written = true; + return true; + } + }; + const dateFileAppender = sandbox.require("../../lib/appenders/dateFile", { + globals: { + console: { + error(...args) { + consoleArgs = args; + } + } + }, + requires: { + streamroller: { + DateRollingFileStream + } + } + }); + + dateFileAppender.configure( + { filename: "test1.log", maxLogSize: 100 }, + { basicLayout() {} } + ); + errorHandler({ error: "aargh" }); + + t.test("should log the error to console.error", assert => { + assert.ok(consoleArgs); + assert.equal( + consoleArgs[0], + "log4js.dateFileAppender - Writing to file %s, error happened " + ); + assert.equal(consoleArgs[1], "test1.log"); + assert.equal(consoleArgs[2].error, "aargh"); + assert.end(); + }); + t.end(); + }); + batch.end(); }); From 633b4222ab52c05cdb40f54efcdda28b415d84eb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 9 Mar 2022 23:36:42 +0800 Subject: [PATCH 160/454] chore(test): improve test coverage for tcpAppender appenders/tcp.js - Line 37 - debug('drain event received, emptying buffer'); appenders/tcp.js - Line 38 - canWrite = true; appenders/tcp.js - Line 39 - emptyBuffer(); appenders/tcp.js - Line 43 - debug('connection error', e); appenders/tcp.js - Line 44 - canWrite = false; appenders/tcp.js - Line 45 - emptyBuffer(); appenders/tcp.js - Line 54 - write(loggingEvent); --- test/tap/tcp-appender-test.js | 149 +++++++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 1 deletion(-) diff --git a/test/tap/tcp-appender-test.js b/test/tap/tcp-appender-test.js index e61255f7..293f6821 100644 --- a/test/tap/tcp-appender-test.js +++ b/test/tap/tcp-appender-test.js @@ -1,5 +1,7 @@ const { test } = require("tap"); const net = require("net"); +const flatted = require("flatted"); +const sandbox = require("@log4js-node/sandboxed-module"); const log4js = require("../../lib/log4js"); const LoggingEvent = require("../../lib/LoggingEvent"); @@ -26,6 +28,53 @@ function makeServer(config) { return server; } +function makeFakeNet() { + return { + data: [], + cbs: {}, + createConnectionCalled: 0, + createConnection(port, host) { + const fakeNet = this; + this.port = port; + this.host = host; + this.createConnectionCalled += 1; + return { + on(evt, cb) { + fakeNet.cbs[evt] = cb; + }, + write(data, encoding) { + fakeNet.data.push(data); + fakeNet.encoding = encoding; + return false; + }, + end() { + fakeNet.closeCalled = true; + } + }; + }, + createServer(cb) { + const fakeNet = this; + cb({ + remoteAddress: "1.2.3.4", + remotePort: "1234", + setEncoding(encoding) { + fakeNet.encoding = encoding; + }, + on(event, cb2) { + fakeNet.cbs[event] = cb2; + } + }); + + return { + listen(port, host) { + fakeNet.port = port; + fakeNet.host = host; + } + }; + } + }; +} + test("TCP Appender", batch => { batch.test("Default Configuration", t => { @@ -118,7 +167,6 @@ test("TCP Appender", batch => { }); }); - batch.test("Custom Layout", t => { messages = []; @@ -171,5 +219,104 @@ test("TCP Appender", batch => { }); }); + batch.test("when underlying stream errors", t => { + const fakeNet = makeFakeNet(); + + const sandboxedLog4js = sandbox.require("../../lib/log4js", { + requires: { + net: fakeNet + } + }); + sandboxedLog4js.configure({ + appenders: { + default: { type: "tcp" }, + }, + categories: { + default: { appenders: ["default"], level: "debug" }, + } + }); + + const logger = sandboxedLog4js.getLogger(); + + logger.info("before connect"); + t.test( + "should buffer messages written before socket is connected", + assert => { + assert.equal(fakeNet.data.length, 0); + assert.equal(fakeNet.createConnectionCalled, 1); + assert.end(); + } + ); + + fakeNet.cbs.connect(); + t.test( + "should flush buffered messages", + assert => { + assert.equal(fakeNet.data.length, 1); + assert.equal(fakeNet.createConnectionCalled, 1); + assert.match(fakeNet.data[0], "before connect"); + assert.end(); + } + ); + + logger.info("after connect"); + t.test( + "should write log messages to socket as flatted strings with a terminator string", + assert => { + assert.equal(fakeNet.data.length, 2); + assert.match(fakeNet.data[0], "before connect"); + assert.ok(fakeNet.data[0].endsWith("__LOG4JS__")); + assert.match(fakeNet.data[1], "after connect"); + assert.ok(fakeNet.data[1].endsWith("__LOG4JS__")); + assert.equal(fakeNet.encoding, "utf8"); + assert.end(); + } + ); + + fakeNet.cbs.error(); + logger.info("after error, before close"); + fakeNet.cbs.close(); + logger.info("after close, before connect"); + fakeNet.cbs.connect(); + logger.info("after error, after connect"); + t.test("should attempt to re-open the socket on error", assert => { + assert.equal(fakeNet.data.length, 5); + assert.equal(fakeNet.createConnectionCalled, 2); + assert.match(fakeNet.data[2], "after error, before close"); + assert.match(fakeNet.data[3], "after close, before connect"); + assert.match(fakeNet.data[4], "after error, after connect"); + assert.end(); + }); + + t.test("should buffer messages until drain", assert => { + const previousLength = fakeNet.data.length; + logger.info("should not be flushed"); + assert.equal(fakeNet.data.length, previousLength); + assert.notMatch(fakeNet.data[fakeNet.data.length - 1], "should not be flushed"); + + fakeNet.cbs.drain(); + assert.equal(fakeNet.data.length, previousLength + 1); + assert.match(fakeNet.data[fakeNet.data.length - 1], "should not be flushed"); + assert.end(); + }); + + t.test("should serialize an Error correctly", assert => { + const previousLength = fakeNet.data.length; + logger.error(new Error("Error test")); + fakeNet.cbs.drain(); + assert.equal(fakeNet.data.length, previousLength + 1); + const raw = fakeNet.data[fakeNet.data.length - 1]; + assert.ok( + flatted.parse(raw.substring(0, raw.indexOf('__LOG4JS__'))).data[0].stack, + `Expected:\n\n${fakeNet.data[6]}\n\n to have a 'data[0].stack' property` + ); + const actual = flatted.parse(raw.substring(0, raw.indexOf('__LOG4JS__'))).data[0].stack; + assert.match(actual, /^Error: Error test/); + assert.end(); + }); + + t.end(); + }); + batch.end(); }); From c556a1a5320dccdf9d4797acc389a0f7bd6f43a5 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 10 Mar 2022 00:56:36 +0800 Subject: [PATCH 161/454] chore(test): improve test coverage for fileAppender and dateFileAppender appenders/file.js - Line 56 - process.emit("log4js:pause", false); appenders/dateFile.js - Line 16 - process.emit("log4js:pause", false); --- test/tap/pause-test.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index fc8ef6cf..c4d00c63 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -13,6 +13,7 @@ tap.test("Drain event test", batch => { batch.test("Should emit pause event and resume when logging in a file with high frequency", t => { t.teardown(async () => { + process.off("log4js:pause", process.listeners("log4js:pause")[process.listeners("log4js:pause").length - 1]); await removeFiles("logs/drain.log"); }); // Generate logger with 5k of highWaterMark config @@ -31,8 +32,11 @@ tap.test("Drain event test", batch => { process.on("log4js:pause", value => { if (value) { paused = true; + t.ok(value, "log4js:pause, true"); } else { resumed = true; + t.ok(!value, "log4js:pause, false"); + t.end(); } }); @@ -42,12 +46,12 @@ tap.test("Drain event test", batch => { logger.info("This is a test for emitting drain event"); } } - t.end(); }); batch.test("Should emit pause event and resume when logging in a date file with high frequency", (t) => { t.teardown(async () => { + process.off("log4js:pause", process.listeners("log4js:pause")[process.listeners("log4js:pause").length - 1]); await removeFiles("logs/date-file-drain.log"); }); // Generate date file logger with 5kb of highWaterMark config @@ -66,8 +70,11 @@ tap.test("Drain event test", batch => { process.on("log4js:pause", value => { if (value) { paused = true; + t.ok(value, "log4js:pause, true"); } else { resumed = true; + t.ok(!value, "log4js:pause, false"); + t.end(); } }); @@ -76,7 +83,6 @@ tap.test("Drain event test", batch => { if (!paused) logger.info("This is a test for emitting drain event in date file logger"); } - t.end(); }); batch.teardown(async () => { From 0abf8a601d15383bd252bb516b6c8750054dd758 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 10 Mar 2022 01:02:18 +0800 Subject: [PATCH 162/454] chore(test): increased timeout for multi-file-appender-test.js --- test/tap/multi-file-appender-test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 8969d873..038ccdcf 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -91,7 +91,7 @@ test("multiFile appender", batch => { } }; debug.enable("log4js:multiFile"); - const timeoutMs = 20; + const timeoutMs = 25; log4js.configure({ appenders: { multi: { @@ -118,7 +118,7 @@ test("multiFile appender", batch => { } process.stderr.write = originalWrite; t.end(); - }, timeoutMs*1 + 30); // add a 30 ms delay + }, timeoutMs*1 + 50); // add a 50 ms delay }); batch.test("should close file safely after timeout", t => { @@ -158,7 +158,7 @@ test("multiFile appender", batch => { } }; debug.enable("log4js:multiFile"); - const timeoutMs = 20; + const timeoutMs = 25; sandboxedLog4js.configure({ appenders: { multi: { @@ -190,7 +190,7 @@ test("multiFile appender", batch => { } process.stderr.write = originalWrite; t.end(); - }, timeoutMs*1 + 30); // add a 30 ms delay + }, timeoutMs*1 + 50); // add a 50 ms delay }); batch.test("should close file after extended timeout", t => { @@ -240,7 +240,7 @@ test("multiFile appender", batch => { debugLogs.some(s => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1), "(timeout1) should not have closed" ); - }, timeoutMs*1 + 30); // add a 30 ms delay + }, timeoutMs*1 + 50); // add a 50 ms delay setTimeout(() => { t.match( debugLogs[debugLogs.length - 1], @@ -252,7 +252,7 @@ test("multiFile appender", batch => { } process.stderr.write = originalWrite; t.end(); - }, timeoutMs*2 + 30); // add a 30 ms delay + }, timeoutMs*2 + 50); // add a 50 ms delay }); batch.test("should clear interval for active timers on shutdown", t => { From 992db87ec975834368c2136b8d15ed53cee661b8 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 10 Mar 2022 23:44:24 +0800 Subject: [PATCH 163/454] chore(test): improve test coverage for connect-loggerAppender appenders/connect-logger.js - Line 279 - return; --- test/tap/connect-logger-test.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/tap/connect-logger-test.js b/test/tap/connect-logger-test.js index 6ee278ee..b53673fc 100644 --- a/test/tap/connect-logger-test.js +++ b/test/tap/connect-logger-test.js @@ -411,5 +411,29 @@ test("log4js connect logger", batch => { } ); + batch.test( + "handles as soon as any of the events end/finish/error/close triggers (only once)", + t => { + const ml = new MockLogger(); + const cl = clm(ml, ":remote-addr"); + const req = new MockRequest(null, "GET", "http://blah"); + req.socket = { socket: { remoteAddress: "this is weird" } }; + + const res = new MockResponse(); + cl(req, res, () => {}); + res.writeHead(200, {}); + + t.equal(ml.messages.length, 0); + res.emit("end"); + res.emit("finish"); + res.emit("error"); + res.emit("close"); + t.equal(ml.messages.length, 1); + + t.equal(ml.messages[0].message, "this is weird"); + t.end(); + } + ); + batch.end(); }); From 3b3b8452f61d608ce24d2f5ede50c0d72be547ec Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 11 Mar 2022 18:02:07 +0800 Subject: [PATCH 164/454] chore(test): improve test coverage for fileAppender and dateFileAppender appenders/file.js - Line 65 - return; appenders/dateFile.js - Line 45 - return; --- test/tap/dateFileAppender-test.js | 52 ++++++++++++++++++++++++++++++- test/tap/fileAppender-test.js | 52 ++++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 2 deletions(-) diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index e48d1010..183df149 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -166,7 +166,7 @@ test("../../lib/appenders/dateFile", batch => { fakeStreamroller.options = options; } - on() { } // eslint-disable-line + on() { } // eslint-disable-line class-methods-use-this } fakeStreamroller.DateRollingFileStream = DateRollingFileStream; const dateFileAppenderModule = sandbox.require( @@ -188,6 +188,56 @@ test("../../lib/appenders/dateFile", batch => { t.end(); }); + batch.test("handling of writer.writable", t => { + const output = []; + let writable = true; + + const DateRollingFileStream = class { + write(loggingEvent) { + output.push(loggingEvent); + this.written = true; + return true; + } + + on() { // eslint-disable-line class-methods-use-this + } + + get writable() { // eslint-disable-line class-methods-use-this + return writable; + } + }; + const dateFileAppender = sandbox.require("../../lib/appenders/dateFile", { + requires: { + streamroller: { + DateRollingFileStream + } + } + }); + + const appender = dateFileAppender.configure( + { filename: "test1.log", maxLogSize: 100 }, + { basicLayout(loggingEvent) { return loggingEvent.data; } } + ); + + t.test("should log when writer.writable=true", assert => { + writable = true; + appender({data: "something to log"}); + assert.ok(output.length, 1); + assert.match(output[output.length - 1], "something to log"); + assert.end(); + }); + + t.test("should not log when writer.writable=false", assert => { + writable = false; + appender({data: "this should not be logged"}); + assert.ok(output.length, 1); + assert.notMatch(output[output.length - 1], "this should not be logged"); + assert.end(); + }); + + t.end(); + }); + batch.test("when underlying stream errors", t => { let consoleArgs; let errorHandler; diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index b379a068..c0cb9916 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -330,6 +330,56 @@ test("log4js fileAppender", batch => { t.end(); }); + batch.test("handling of writer.writable", t => { + const output = []; + let writable = true; + + const RollingFileStream = class { + write(loggingEvent) { + output.push(loggingEvent); + this.written = true; + return true; + } + + on() { // eslint-disable-line class-methods-use-this + } + + get writable() { // eslint-disable-line class-methods-use-this + return writable; + } + }; + const fileAppender = sandbox.require("../../lib/appenders/file", { + requires: { + streamroller: { + RollingFileStream + } + } + }); + + const appender = fileAppender.configure( + { filename: "test1.log", maxLogSize: 100 }, + { basicLayout(loggingEvent) { return loggingEvent.data; } } + ); + + t.test("should log when writer.writable=true", assert => { + writable = true; + appender({data: "something to log"}); + assert.ok(output.length, 1); + assert.match(output[output.length - 1], "something to log"); + assert.end(); + }); + + t.test("should not log when writer.writable=false", assert => { + writable = false; + appender({data: "this should not be logged"}); + assert.ok(output.length, 1); + assert.notMatch(output[output.length - 1], "this should not be logged"); + assert.end(); + }); + + t.end(); + }); + batch.test("when underlying stream errors", t => { let consoleArgs; let errorHandler; @@ -384,7 +434,7 @@ test("log4js fileAppender", batch => { }); t.end(); }); - + batch.test("with removeColor fileAppender settings", async t => { const testFilePlain = path.join(__dirname, "fa-removeColor-test.log"); const testFileAsIs = path.join(__dirname, "fa-asIs-test.log"); From 1647ba5bdf956e6ad565904c0cff1355234c9b62 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 11 Mar 2022 18:02:50 +0800 Subject: [PATCH 165/454] chore(test): cleanup for file-sighup-test.js --- test/tap/file-sighup-test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index d8fba5e8..5a9da562 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -60,7 +60,7 @@ test("file appender SIGHUP", t => { let closeCalled = 0; let openCalled = 0; - const appender = sandbox + sandbox .require("../../lib/appenders/file", { requires: { streamroller: { @@ -99,12 +99,10 @@ test("file appender SIGHUP", t => { } ); - appender("something to log"); process.emit("SIGHUP", "SIGHUP", 1); t.plan(2); setTimeout(() => { - appender("something to log after sighup"); t.equal(openCalled, 2, "open should be called twice"); t.equal(closeCalled, 1, "close should be called once"); t.end(); From 442bab55b81d765dce4be093e92989dd035c8587 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 00:32:36 +0800 Subject: [PATCH 166/454] chore(test): improve test coverage for logger lib/logger.js - Line 25 - catch (err) { lib/logger.js - Line 26 - // will never get error unless nodejs has breaking changes to Error lib/logger.js - Line 27 - console.error('log4js.logger - defaultParseCallStack error', err); // eslint-disable-line no-console lib/logger.js - Line 28 - } lib/logger.js - Line 29 - return null; --- lib/logger.js | 27 +++++++++++++++++---------- test/tap/logger-test.js | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/logger.js b/lib/logger.js index 25f54be2..32600e90 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -9,16 +9,23 @@ const configuration = require("./configuration"); const stackReg = /at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/; function defaultParseCallStack(data, skipIdx = 4) { - const stacklines = data.stack.split("\n").slice(skipIdx); - const lineMatch = stackReg.exec(stacklines[0]); - if (lineMatch && lineMatch.length === 6) { - return { - functionName: lineMatch[1], - fileName: lineMatch[2], - lineNumber: parseInt(lineMatch[3], 10), - columnNumber: parseInt(lineMatch[4], 10), - callStack: stacklines.join("\n") - }; + try { + const stacklines = data.stack.split("\n").slice(skipIdx); + const lineMatch = stackReg.exec(stacklines[0]); + /* istanbul ignore else */ + if (lineMatch && lineMatch.length === 6) { + return { + functionName: lineMatch[1], + fileName: lineMatch[2], + lineNumber: parseInt(lineMatch[3], 10), + columnNumber: parseInt(lineMatch[4], 10), + callStack: stacklines.join("\n") + }; + } + } + catch (err) { + // will never get error unless nodejs has breaking changes to Error + console.error('log4js.logger - defaultParseCallStack error', err); // eslint-disable-line no-console } return null; } diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 476f965a..1a167105 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -5,6 +5,7 @@ const callsites = require("callsites"); const levels = require("../../lib/levels"); const events = []; +const messages = []; const Logger = sandbox.require("../../lib/logger", { requires: { "./levels": levels, @@ -16,6 +17,14 @@ const Logger = sandbox.require("../../lib/logger", { events.push(evt); } } + }, + globals: { + console: { + ...console, + error(msg) { + messages.push(msg); + } + } } }); @@ -219,6 +228,23 @@ test("../../lib/logger", batch => { } ); + batch.test("parseCallStack function coverage", t => { + const logger = new Logger("stack"); + logger.useCallStack = true; + + let results; + + results = logger.parseCallStack(new Error()); + t.ok(results); + t.equal(messages.length, 0, "should not have error"); + + results = logger.parseCallStack(""); + t.notOk(results); + t.equal(messages.length, 1, "should have error"); + + t.end(); + }); + batch.test("should correctly change the parseCallStack function", t => { const logger = new Logger("stack"); const parseFunction = function() { From 3533d159c35afbc711cbb4404ab3f696a3823653 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 01:12:45 +0800 Subject: [PATCH 167/454] chore(test): improve test coverage for fileSyncAppender used a simpler compare function to avoid branch coverage issues in fileSync.js --- lib/appenders/fileSync.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 071ea9ed..b610871c 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -97,14 +97,7 @@ class RollingFileSync { } function byIndex(a, b) { - if (index(a) > index(b)) { - return 1; - } - if (index(a) < index(b)) { - return -1; - } - - return 0; + return index(a) - index(b); } function increaseFileIndex(fileToRename) { From e78dbf50c08d88b0de01d6bc4d13a4ddba8330a9 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 01:16:36 +0800 Subject: [PATCH 168/454] chore(test): improve test coverage for fileSyncAppender removed redundant default value for EOL to avoid branch coverage issues in fileSync.js --- lib/appenders/fileSync.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index b610871c..a1db821b 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -3,7 +3,7 @@ const path = require('path'); const fs = require('fs'); const os = require('os'); -const eol = os.EOL || '\n'; +const eol = os.EOL; function touchFile(file, options) { // if the file exists, nothing to do From 4f1111ee40f677fdd859efd93da228024f72ca9f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 11 Mar 2022 22:36:08 +0800 Subject: [PATCH 169/454] chore(lint): added specific eslint rule(s) to disable for clarity --- lib/appenders/dateFile.js | 3 ++- lib/appenders/file.js | 3 ++- lib/appenders/index.js | 5 +++-- lib/clustering.js | 3 ++- test/tap/LoggingEvent-test.js | 2 +- test/tap/layouts-test.js | 2 +- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index 8999c740..76de634c 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -10,7 +10,8 @@ function openTheStream(filename, pattern, options) { options ); stream.on('error', (err) => { - console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); // eslint-disable-line + // eslint-disable-next-line no-console + console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); }); stream.on("drain", () => { process.emit("log4js:pause", false); diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 2680fc1f..73dad716 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -50,7 +50,8 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset opt ); stream.on('error', (err) => { - console.error('log4js.fileAppender - Writing to file %s, error happened ', filePath, err); // eslint-disable-line + // eslint-disable-next-line no-console + console.error('log4js.fileAppender - Writing to file %s, error happened ', filePath, err); }); stream.on('drain', () => { process.emit("log4js:pause", false); diff --git a/lib/appenders/index.js b/lib/appenders/index.js index 2039daba..b9100b1a 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -24,7 +24,8 @@ const appenders = new Map(); const tryLoading = (modulePath, config) => { debug('Loading module from ', modulePath); try { - return require(modulePath); // eslint-disable-line + // eslint-disable-next-line global-require, import/no-dynamic-require + return require(modulePath); } catch (e) { // if the module was found, and we still got an error, then raise it configuration.throwExceptionIf( @@ -83,7 +84,7 @@ const createAppender = (name, config) => { } debug(`${name}: clustering.isMaster ? ${clustering.isMaster()}`); - debug(`${name}: appenderModule is ${require('util').inspect(appenderModule)}`); // eslint-disable-line + debug(`${name}: appenderModule is ${require('util').inspect(appenderModule)}`); // eslint-disable-line global-require return clustering.onlyOnMaster(() => { debug(`calling appenderModule.configure for ${name} / ${appenderConfig.type}`); return appenderModule.configure( diff --git a/lib/clustering.js b/lib/clustering.js index 61c6ff15..fefe9764 100644 --- a/lib/clustering.js +++ b/lib/clustering.js @@ -5,7 +5,8 @@ const configuration = require("./configuration"); let disabled = false; let cluster = null; try { - cluster = require("cluster"); // eslint-disable-line + // eslint-disable-next-line global-require + cluster = require("cluster"); } catch (e) { debug("cluster module not present"); disabled = true; diff --git a/test/tap/LoggingEvent-test.js b/test/tap/LoggingEvent-test.js index c6af0157..a9f64871 100644 --- a/test/tap/LoggingEvent-test.js +++ b/test/tap/LoggingEvent-test.js @@ -48,7 +48,7 @@ test("LoggingEvent", batch => { batch.test("Should correct construct with/without location info", t => { // console.log([Error('123').stack.split('\n').slice(1).join('\n')]) const callStack = - " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line + " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line max-len const fileName = "/log4js-node/test/tap/layouts-test.js"; const lineNumber = 1; const columnNumber = 14; diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index f2f18433..855b6c98 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -257,7 +257,7 @@ test("log4js layouts", batch => { // console.log([Error('123').stack.split('\n').slice(1).join('\n')]) const callStack = - " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line + " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line max-len const fileName = path.normalize("/log4js-node/test/tap/layouts-test.js"); const lineNumber = 1; const columnNumber = 14; From 53c6837a60affdb45f1c095758b6579c34944664 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 01:26:48 +0800 Subject: [PATCH 170/454] chore(lint): should not disable eslint rule, no-plusplus, in file-level --- .eslintrc | 1 + lib/connect-logger.js | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.eslintrc b/.eslintrc index 7fd293c0..65d85bee 100644 --- a/.eslintrc +++ b/.eslintrc @@ -13,6 +13,7 @@ "max-len": [1, 120, 2], "no-use-before-define": ["warn"], "no-param-reassign": 0, + "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], "strict": 1, "import/no-extraneous-dependencies": 1 } diff --git a/lib/connect-logger.js b/lib/connect-logger.js index ed6c3131..9ca3d543 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -1,5 +1,3 @@ -/* eslint-disable no-plusplus */ - const levels = require("./levels"); const DEFAULT_FORMAT = @@ -37,9 +35,9 @@ function assembleTokens(req, res, customTokens) { for (let i = 0; i < a.length; ++i) { for (let j = i + 1; j < a.length; ++j) { // not === because token can be regexp object - /* eslint eqeqeq:0 */ + // eslint-disable-next-line eqeqeq if (a[i].token == a[j].token) { - a.splice(j--, 1); + a.splice(j--, 1); // eslint-disable-line no-plusplus } } } From 235656df8dd9236ddc9c9bf797f581630d2fd349 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 15:16:00 +0800 Subject: [PATCH 171/454] chore(lint): should not disable eslint rule, no-cond-assign, in file-level --- .eslintrc | 1 + lib/appenders/multiprocess.js | 1 - lib/appenders/tcp.js | 1 - lib/layouts.js | 1 - 4 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.eslintrc b/.eslintrc index 65d85bee..75260ea5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -11,6 +11,7 @@ "indent": 2, "func-names": 0, "max-len": [1, 120, 2], + "no-cond-assign": ["error", "except-parens"], "no-use-before-define": ["warn"], "no-param-reassign": 0, "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 50810a34..5a3a4425 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -100,7 +100,6 @@ function workerAppender(config) { function emptyBuffer() { let evt; debug('(worker) emptying worker buffer'); - /* eslint no-cond-assign:0 */ while ((evt = buffer.shift())) { write(evt); } diff --git a/lib/appenders/tcp.js b/lib/appenders/tcp.js index f5ee9b52..8098d48f 100644 --- a/lib/appenders/tcp.js +++ b/lib/appenders/tcp.js @@ -18,7 +18,6 @@ function appender(config, layout) { function emptyBuffer() { let evt; debug('emptying buffer'); - /* eslint no-cond-assign:0 */ while ((evt = buffer.shift())) { write(evt); } diff --git a/lib/layouts.js b/lib/layouts.js index dad27972..8223ce6e 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -340,7 +340,6 @@ function patternLayout(pattern, tokens) { let result; let searchString = pattern; - /* eslint no-cond-assign:0 */ while ((result = regex.exec(searchString)) !== null) { // const matchedString = result[0]; const padding = result[1]; From e38f1c5aa99731351d141a7df11b51d0f9dd9886 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 15:16:35 +0800 Subject: [PATCH 172/454] chore(lint): should not disable eslint rule, no-unused-var, in file-level --- lib/appenders/fileSync.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index a1db821b..d5db3992 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -131,7 +131,7 @@ class RollingFileSync { renameTheFiles(); } - /* eslint no-unused-vars:0 */ + // eslint-disable-next-line no-unused-vars write(chunk, encoding) { const that = this; From 3291aae870704df4c711590451d8c556a2518194 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 15:34:10 +0800 Subject: [PATCH 173/454] chore(lint): should not disable eslint rule, prefer-arrow-callback, in file-level --- lib/appenders/multiprocess.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 5a3a4425..da74a620 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -25,8 +25,7 @@ function logServer(config, actualAppender, levels) { return loggingEvent; } - /* eslint prefer-arrow-callback:0 */ - const server = net.createServer(function connectionHandler(clientSocket) { + const server = net.createServer((clientSocket) => { debug('(master) connection received'); clientSocket.setEncoding('utf8'); let logMessage = ''; @@ -66,7 +65,7 @@ function logServer(config, actualAppender, levels) { clientSocket.on('error', handleError); }); - server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost', function (e) { + server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost', (e) => { debug('(master) master server listening, error was ', e); // allow the process to exit, if this is the only socket active server.unref(); From 03f74493a9a10884fb88bb690d525a281933fc2a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 15:37:27 +0800 Subject: [PATCH 174/454] chore(lint): should not disable eslint rule, quote-props, in file-level --- lib/layouts.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/layouts.js b/lib/layouts.js index 8223ce6e..bdb327ca 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -271,7 +271,6 @@ function patternLayout(pattern, tokens) { return loggingEvent.callStack || ''; } - /* eslint quote-props:0 */ const replacers = { c: categoryName, d: formatAsDate, From 4c14bde0bb48bae05323f8d1c9fde3ada26bcbef Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 12 Mar 2022 16:00:40 +0800 Subject: [PATCH 175/454] chore(lint): moved eslint rule, no-underscore-dangle, with exceptions declared, to file-level --- lib/connect-logger.js | 3 ++- lib/logger.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/connect-logger.js b/lib/connect-logger.js index 9ca3d543..d39d371a 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -1,3 +1,5 @@ +/* eslint no-underscore-dangle: ["error", { "allow": ["__statusCode", "_remoteAddress", "__headers", "_logging"] }] */ + const levels = require("./levels"); const DEFAULT_FORMAT = @@ -235,7 +237,6 @@ function matchRules(statusCode, currentLevel, ruleSet) { * @api public */ module.exports = function getLogger(logger4js, options) { - /* eslint no-underscore-dangle:0 */ if (typeof options === "string" || typeof options === "function") { options = { format: options }; } else { diff --git a/lib/logger.js b/lib/logger.js index 32600e90..26059cf5 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,4 +1,5 @@ -/* eslint no-underscore-dangle:0 */ +/* eslint no-underscore-dangle: ["error", { "allow": ["_log"] }] */ + const debug = require("debug")("log4js:logger"); const LoggingEvent = require("./LoggingEvent"); const levels = require("./levels"); From 9b0f457369eb043e16ae73217830aa6d7ccdab67 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:27:05 +0800 Subject: [PATCH 176/454] chore(dev): bump eslint from 8.10.0 to 8.11.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6aeb4068..f31e390a 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.10.0", + "eslint": "^8.11.0", "eslint-config-airbnb-base": "^13.2.0", "eslint-config-prettier": "^8.4.0", "eslint-import-resolver-node": "^0.3.6", From cbfffd4d717f6fd6b1b835de0420cdbca249813f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:28:01 +0800 Subject: [PATCH 177/454] chore(dev): bump eslint-config-airbnb-base from 13.2.0 to 15.0.0 --- lib/LoggingEvent.js | 3 ++- lib/appenders/adapters.js | 2 +- package.json | 2 +- test/tap/connect-context-test.js | 4 +++- test/tap/connect-logger-test.js | 2 ++ test/tap/connect-nolog-test.js | 2 ++ test/tap/dateFileAppender-test.js | 2 ++ test/tap/file-descriptor-leak-test.js | 2 +- test/tap/file-sighup-test.js | 2 +- test/tap/fileAppender-test.js | 18 ++++++++++-------- test/tap/multi-file-appender-test.js | 6 +++--- test/tap/server-test.js | 6 ++---- 12 files changed, 30 insertions(+), 21 deletions(-) diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index 42a26561..4d36cb9c 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -19,7 +19,7 @@ class LoggingEvent { this.categoryName = categoryName; this.data = data; this.level = level; - this.context = Object.assign({}, context); + this.context = Object.assign({}, context); // eslint-disable-line prefer-object-spread this.pid = process.pid; if (location) { @@ -37,6 +37,7 @@ class LoggingEvent { // The following allows us to serialize errors correctly. // duck-typing for Error object if (value && value.message && value.stack) { + // eslint-disable-next-line prefer-object-spread value = Object.assign({message: value.message, stack: value.stack}, value); } // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. diff --git a/lib/appenders/adapters.js b/lib/appenders/adapters.js index 1ec15b8c..727196ac 100644 --- a/lib/appenders/adapters.js +++ b/lib/appenders/adapters.js @@ -20,7 +20,7 @@ function maxFileSizeUnitTransform(maxLogSize) { } function adapter(configAdapter, config) { - const newConfig = Object.assign({}, config); + const newConfig = Object.assign({}, config); // eslint-disable-line prefer-object-spread Object.keys(configAdapter).forEach((key) => { if (newConfig[key]) { newConfig[key] = configAdapter[key](config[key]); diff --git a/package.json b/package.json index f31e390a..b1125c61 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "codecov": "^3.8.3", "deep-freeze": "0.0.1", "eslint": "^8.11.0", - "eslint-config-airbnb-base": "^13.2.0", + "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.4.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", diff --git a/test/tap/connect-context-test.js b/test/tap/connect-context-test.js index 97bcad22..ea8dfd8b 100644 --- a/test/tap/connect-context-test.js +++ b/test/tap/connect-context-test.js @@ -1,3 +1,5 @@ +/* eslint max-classes-per-file: ["error", 2] */ + const { test } = require("tap"); const EE = require("events").EventEmitter; const levels = require("../../lib/levels"); @@ -10,7 +12,7 @@ class MockLogger { } log() { - this.contexts.push(Object.assign({}, this.context)); + this.contexts.push(Object.assign({}, this.context)); // eslint-disable-line prefer-object-spread } isLevelEnabled(level) { diff --git a/test/tap/connect-logger-test.js b/test/tap/connect-logger-test.js index b53673fc..7bc747e3 100644 --- a/test/tap/connect-logger-test.js +++ b/test/tap/connect-logger-test.js @@ -1,3 +1,5 @@ +/* eslint max-classes-per-file: ["error", 2] */ + const { test } = require("tap"); const EE = require("events").EventEmitter; const levels = require("../../lib/levels"); diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 1e339480..b53228ec 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -1,3 +1,5 @@ +/* eslint max-classes-per-file: ["error", 2] */ + const { test } = require("tap"); const EE = require("events").EventEmitter; const levels = require("../../lib/levels"); diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index 183df149..fa5e0285 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -1,3 +1,5 @@ +/* eslint max-classes-per-file: ["error", 3] */ + const { test } = require("tap"); const path = require("path"); const fs = require("fs"); diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index 6a899f84..da2924d9 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -68,7 +68,7 @@ if (process.platform !== "win32") { }); batch.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 5a9da562..f883e3d7 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -39,7 +39,7 @@ test("file appender single SIGHUP handler", t => { log4js.configure(config); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index c0cb9916..5ca1f6a3 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -1,3 +1,5 @@ +/* eslint max-classes-per-file: ["error", 2] */ + const { test } = require("tap"); const fs = require("fs-extra"); const path = require("path"); @@ -25,7 +27,7 @@ test("log4js fileAppender", batch => { await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFile(testFile); }); @@ -73,7 +75,7 @@ test("log4js fileAppender", batch => { await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFile(testFile); }); @@ -86,7 +88,7 @@ test("log4js fileAppender", batch => { logger.info("2"); logger.info("3"); - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); const fileContents = await fs.readFile(testFile, "utf8"); // 3 lines of output, plus the trailing newline. t.equal(fileContents.split(EOL).length, 4); @@ -103,7 +105,7 @@ test("log4js fileAppender", batch => { await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFile(testFile); }); @@ -165,7 +167,7 @@ test("log4js fileAppender", batch => { await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); @@ -217,7 +219,7 @@ test("log4js fileAppender", batch => { ]); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1`), @@ -277,7 +279,7 @@ test("log4js fileAppender", batch => { ]); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1.gz`), @@ -443,7 +445,7 @@ test("log4js fileAppender", batch => { await removeFile(testFileAsIs); t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFile(testFilePlain); await removeFile(testFileAsIs); }); diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 038ccdcf..1e0be190 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -75,7 +75,7 @@ test("multiFile appender", batch => { batch.test("should close file after timeout", t => { t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFiles("logs/C.log"); }); /* checking that the file is closed after a timeout is done by looking at the debug logs @@ -123,7 +123,7 @@ test("multiFile appender", batch => { batch.test("should close file safely after timeout", t => { t.teardown(async () => { - await new Promise(resolve => sandboxedLog4js.shutdown(resolve)); // eslint-disable-line no-use-before-define + await new Promise(resolve => { sandboxedLog4js.shutdown(resolve); }); // eslint-disable-line no-use-before-define await removeFiles("logs/C.log"); }); const error = new Error("fileAppender shutdown error"); @@ -195,7 +195,7 @@ test("multiFile appender", batch => { batch.test("should close file after extended timeout", t => { t.teardown(async () => { - await new Promise(resolve => log4js.shutdown(resolve)); + await new Promise(resolve => { log4js.shutdown(resolve); }); await removeFiles("logs/D.log"); }); /* checking that the file is closed after a timeout is done by looking at the debug logs diff --git a/test/tap/server-test.js b/test/tap/server-test.js index d56c2824..69c70615 100644 --- a/test/tap/server-test.js +++ b/test/tap/server-test.js @@ -100,10 +100,8 @@ test("TCP Server", batch => { // give the socket a chance to start up setTimeout(() => { const socket = net.connect(5000, () => { - const syncWrite = (dataArray = [], finalCallback) => { - if (dataArray === null) { - dataArray = []; - } else if (!Array.isArray(dataArray)) { + const syncWrite = (dataArray, finalCallback) => { + if (!Array.isArray(dataArray)) { dataArray = [dataArray]; } if (typeof finalCallback !== "function") { From ed3a7450e1f6f3cba3bb84e26b921a877d847471 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:28:42 +0800 Subject: [PATCH 178/454] chore(dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b1125c61..339a8fe3 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "deep-freeze": "0.0.1", "eslint": "^8.11.0", "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^8.4.0", + "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.25.4", "eslint-plugin-prettier": "^4.0.0", From a80cbf2e3b7a6da5729b74ca9aaeb6c816d03f4a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:29:24 +0800 Subject: [PATCH 179/454] chore(dev): bump tap from 15.1.6 to 16.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 339a8fe3..8c77f64c 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "nyc": "^15.1.0", "prettier": "^2.5.1", "proxyquire": "^2.1.3", - "tap": "^15.1.6", + "tap": "^16.0.0", "typescript": "^4.6.2", "validate-commit-msg": "^2.14.0" }, From f5f97b70589eef3b91739355e874098b9ce866cc Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:30:02 +0800 Subject: [PATCH 180/454] chore(dep): bump date-format from 4.0.4 to 4.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c77f64c..0158274d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.4", + "date-format": "^4.0.5", "debug": "^4.3.3", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 578174f94dbb77069aabe40ee188f8f9fc9697cb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 15:30:32 +0800 Subject: [PATCH 181/454] chore(dep): bump streamroller from 3.0.4 to 3.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0158274d..db9a73e6 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.3", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.4" + "streamroller": "^3.0.5" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 0b55d13cacc97fde8fb26f855f086d47a25ff067 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 16:35:01 +0800 Subject: [PATCH 182/454] chore(dep): updated package-lock.json --- package-lock.json | 507 +++++++--------------------------------------- 1 file changed, 69 insertions(+), 438 deletions(-) diff --git a/package-lock.json b/package-lock.json index decf542b..eef30f2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -312,16 +312,16 @@ } }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -334,12 +334,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -610,60 +604,18 @@ "es-abstract": "^1.19.0" } }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, "async-hook-domain": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -696,13 +648,13 @@ } }, "browserslist": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", - "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", + "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001312", - "electron-to-chromium": "^1.4.71", + "caniuse-lite": "^1.0.30001313", + "electron-to-chromium": "^1.4.76", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.0" @@ -749,15 +701,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "version": "1.0.30001315", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001315.tgz", + "integrity": "sha512-5v7LFQU4Sb/qvkz7JcZkvtSH1Ko+1x2kgo3ocdBeMGZSOFpuE1kkm0kpTwLtWeFrw5qw08ulLxJjVIXIS8MkiQ==", "dev": true }, "chalk": { @@ -854,15 +800,6 @@ "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", @@ -902,25 +839,6 @@ "safe-buffer": "~5.1.1" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -932,19 +850,10 @@ "which": "^2.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "date-format": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.4.tgz", - "integrity": "sha512-/jyf4rhB17ge328HJuJjAcmRtCsGd+NDeAtahRBTaK6vSPR6MO5HlrAit3Nn7dVjaa6sowW0WXt8yQtLyZQFRg==" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.5.tgz", + "integrity": "sha512-zBhRiN/M0gDxUoM2xRtzTjJzSg0XEi1ofYpF84PfXeS3hN2PsGxmc7jw3DNQtFlimRbMmob5FC3G0cJq6jQQpw==" }, "debug": { "version": "4.3.3", @@ -998,12 +907,6 @@ "object-keys": "^1.0.12" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1019,20 +922,10 @@ "esutils": "^2.0.2" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "electron-to-chromium": { - "version": "1.4.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", - "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", + "version": "1.4.82", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.82.tgz", + "integrity": "sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw==", "dev": true }, "emoji-regex": { @@ -1099,12 +992,12 @@ "dev": true }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", + "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1159,20 +1052,21 @@ } }, "eslint-config-airbnb-base": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz", - "integrity": "sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.5", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0" + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" } }, "eslint-config-prettier": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz", - "integrity": "sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, "eslint-import-resolver-node": { @@ -1359,18 +1253,6 @@ "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1499,23 +1381,6 @@ "signal-exit": "^3.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -1608,15 +1473,6 @@ "get-intrinsic": "^1.1.1" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1654,22 +1510,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1741,17 +1581,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1999,12 +1828,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -2144,24 +1967,12 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2174,12 +1985,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -2198,24 +2003,6 @@ "universalify": "^2.0.0" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2227,9 +2014,9 @@ } }, "libtap": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.1.4.tgz", - "integrity": "sha512-jM+QyAeRdVs1bJrNpjlu+l8gRdDkAehqls31AwSnqXghVLUP6nbYeU2Xfs2svYS7ZdksvnHvrxCKRBFEz/BCjA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.3.0.tgz", + "integrity": "sha512-yU5uSY987sVwpWiR5h84ZM96bxvmCQFZ/bOEJ1M7+Us8oez25fLmmLNGFRFGWi2PzuLqAzqzESH7HCaZ/b9IZA==", "dev": true, "requires": { "async-hook-domain": "^2.0.4", @@ -2241,11 +2028,10 @@ "own-or-env": "^1.0.2", "signal-exit": "^3.0.4", "stack-utils": "^2.0.4", - "tap-parser": "^10.0.1", + "tap-parser": "^11.0.0", "tap-yaml": "^1.0.0", "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1", - "yapool": "^1.0.0" + "trivial-deferred": "^1.0.1" } }, "locate-path": { @@ -2270,12 +2056,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -2291,21 +2071,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2475,12 +2240,6 @@ } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", @@ -2649,12 +2408,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -2768,24 +2521,12 @@ "resolve": "^1.11.1" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2810,42 +2551,6 @@ "es6-error": "^4.0.1" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2901,12 +2606,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3001,23 +2700,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -3051,11 +2733,11 @@ } }, "streamroller": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.4.tgz", - "integrity": "sha512-GI9NzeD+D88UFuIlJkKNDH/IsuR+qIN7Qh8EsmhoRZr9bQoehTraRgwtLUkZbpcAw+hLPfHOypmppz8YyGK68w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.5.tgz", + "integrity": "sha512-5uzTEUIi4OB5zy/H30kbUN/zpDNJsFUA+Z47ZL8EfrP93lcZvRLEqdbhdunEPa7CouuAzXXsHpCJ9dg90Umw7g==", "requires": { - "date-format": "^4.0.4", + "date-format": "^4.0.5", "debug": "^4.3.3", "fs-extra": "^10.0.1" } @@ -3134,15 +2816,14 @@ "dev": true }, "tap": { - "version": "15.1.6", - "resolved": "https://registry.npmjs.org/tap/-/tap-15.1.6.tgz", - "integrity": "sha512-TN7xH6Q2tUPTd6qwmkhuFJcx1vUR8e4dDUpBKc61G0krOzne7Ia6aKIFb8O/0kVazachSSuVME1V8nQ2xwWL8w==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.0.0.tgz", + "integrity": "sha512-EnrFFUIn+/089C051WYPXxNlAnXJ1TkKerh0Osz9lK0Ynb+X5FWBEZxWcZLVKiucdTnV5g97NL8Xaw1CuAkj4Q==", "dev": true, "requires": { "@isaacs/import-jsx": "^4.0.1", "@types/react": "^17", "chokidar": "^3.3.0", - "coveralls": "^3.0.11", "findit": "^2.0.0", "foreground-child": "^2.0.0", "fs-exists-cached": "^1.0.0", @@ -3151,7 +2832,7 @@ "isexe": "^2.0.0", "istanbul-lib-processinfo": "^2.0.2", "jackspeak": "^1.4.1", - "libtap": "^1.1.4", + "libtap": "^1.3.0", "minipass": "^3.1.1", "mkdirp": "^1.0.4", "nyc": "^15.1.0", @@ -3160,11 +2841,11 @@ "rimraf": "^3.0.0", "signal-exit": "^3.0.6", "source-map-support": "^0.5.16", - "tap-mocha-reporter": "^5.0.0", - "tap-parser": "^10.0.1", + "tap-mocha-reporter": "^5.0.3", + "tap-parser": "^11.0.1", "tap-yaml": "^1.0.0", "tcompare": "^5.0.7", - "treport": "^3.0.2", + "treport": "^3.0.3", "which": "^2.0.2" }, "dependencies": { @@ -3486,11 +3167,6 @@ "requires": { "caller-callsite": "^4.1.0" } - }, - "callsites": { - "version": "3.1.0", - "bundled": true, - "dev": true } } }, @@ -3588,6 +3264,11 @@ "picocolors": "^1.0.0" } }, + "callsites": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, "caniuse-lite": { "version": "1.0.30001279", "bundled": true, @@ -3951,7 +3632,7 @@ "dev": true }, "minipass": { - "version": "3.1.5", + "version": "3.1.6", "bundled": true, "dev": true, "requires": { @@ -4210,12 +3891,12 @@ } }, "tap-parser": { - "version": "10.1.0", + "version": "11.0.1", "bundled": true, "dev": true, "requires": { "events-to-array": "^1.0.1", - "minipass": "^3.0.0", + "minipass": "^3.1.6", "tap-yaml": "^1.0.0" } }, @@ -4233,7 +3914,7 @@ "dev": true }, "treport": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true, "requires": { @@ -4242,7 +3923,7 @@ "chalk": "^3.0.0", "ink": "^3.2.0", "ms": "^2.1.2", - "tap-parser": "^10.0.1", + "tap-parser": "^11.0.0", "unicode-length": "^2.0.2" }, "dependencies": { @@ -4392,9 +4073,9 @@ } }, "tap-mocha-reporter": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.2.tgz", - "integrity": "sha512-VdNiCbPLPmbLaAMfPMQs9nQ22BYjYjXa3+m8VImB/l5uCP5afV9/W30F7DNCJWi2QXWjbFnU1JaP+3iUS/kVLw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", + "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", "dev": true, "requires": { "color-support": "^1.1.0", @@ -4402,7 +4083,7 @@ "diff": "^4.0.1", "escape-string-regexp": "^2.0.0", "glob": "^7.0.5", - "tap-parser": "^10.0.0", + "tap-parser": "^11.0.0", "tap-yaml": "^1.0.0", "unicode-length": "^2.0.2" }, @@ -4416,13 +4097,13 @@ } }, "tap-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.1.0.tgz", - "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", + "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", "dev": true, "requires": { "events-to-array": "^1.0.1", - "minipass": "^3.0.0", + "minipass": "^3.1.6", "tap-yaml": "^1.0.0" } }, @@ -4489,24 +4170,6 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -4520,9 +4183,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -4531,21 +4194,6 @@ "strip-bom": "^3.0.0" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -4676,17 +4324,6 @@ "semver-regex": "1.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -4784,12 +4421,6 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true - }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", From 6d867f5cafeabbdc236b6af6a275d0d0c1c82536 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 17:15:44 +0800 Subject: [PATCH 183/454] chore(docs): added docs for istanbul ignore --- lib/appenders/index.js | 2 +- lib/appenders/multiFile.js | 5 ++++- lib/logger.js | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index b9100b1a..0d2e3693 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -93,7 +93,7 @@ const createAppender = (name, config) => { appender => getAppender(appender, config), levels ); - }, /* istanbul ignore next */ () => {}); + }, /* istanbul ignore next: fn never gets called by non-master yet needed to pass config validation */ () => {}); }; const setup = (config) => { diff --git a/lib/appenders/multiFile.js b/lib/appenders/multiFile.js index f981c3f0..8efb4e14 100644 --- a/lib/appenders/multiFile.js +++ b/lib/appenders/multiFile.js @@ -14,7 +14,7 @@ module.exports.configure = (config, layouts) => { function checkForTimeout(fileKey) { const timer = timers.get(fileKey); const app = files.get(fileKey); - /* istanbul ignore else */ + /* istanbul ignore else: failsafe */ if (timer && app) { if (Date.now() - timer.lastUsed > timer.timeout) { debug('%s not used for > %d ms => close', fileKey, timer.timeout); @@ -27,6 +27,9 @@ module.exports.configure = (config, layouts) => { } }); } + } else { + // will never get here as files and timers are coupled to be added and deleted at same place + debug('timer or app does not exist'); } } diff --git a/lib/logger.js b/lib/logger.js index 26059cf5..d1f84bd7 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -13,7 +13,7 @@ function defaultParseCallStack(data, skipIdx = 4) { try { const stacklines = data.stack.split("\n").slice(skipIdx); const lineMatch = stackReg.exec(stacklines[0]); - /* istanbul ignore else */ + /* istanbul ignore else: failsafe */ if (lineMatch && lineMatch.length === 6) { return { functionName: lineMatch[1], @@ -22,6 +22,9 @@ function defaultParseCallStack(data, skipIdx = 4) { columnNumber: parseInt(lineMatch[4], 10), callStack: stacklines.join("\n") }; + } else { // eslint-disable-line no-else-return + // will never get here unless nodejs has changes to Error + console.error('log4js.logger - defaultParseCallStack error'); // eslint-disable-line no-console } } catch (err) { From 7207174447075f9b061d4f5b90e8304d4669f27b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 14 Mar 2022 17:19:07 +0800 Subject: [PATCH 184/454] chore(docs): updated README.md with badges --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cb837a79..74fd8824 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# log4js-node [![Build Status](https://secure.travis-ci.org/log4js-node/log4js-node.png?branch=master)](http://travis-ci.org/log4js-node/log4js-node) [![codecov](https://codecov.io/gh/log4js-node/log4js-node/branch/master/graph/badge.svg)](https://codecov.io/gh/log4js-node/log4js-node) +log4js-node [![CodeQL](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml) [![Node.js CI](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml) +=========== [![NPM](https://nodei.co/npm/log4js.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/log4js/) From 4b400523b83a9b3cb5984a3d26293d122372ef1b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 15:42:02 +0800 Subject: [PATCH 185/454] chore(optimise): do not initialise default appenders as it will be done again by configure() --- lib/appenders/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index b9100b1a..483483ff 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -99,6 +99,10 @@ const createAppender = (name, config) => { const setup = (config) => { appenders.clear(); appendersLoading.clear(); + if (!config) { + return; + } + const usedAppenders = []; Object.values(config.categories).forEach(category => { usedAppenders.push(...category.appenders); @@ -114,7 +118,7 @@ const setup = (config) => { }; const init = () => { - setup({ appenders: { out: { type: 'stdout' } }, categories: { default: { appenders: ['out'], level: 'trace' } } }); + setup(); }; init(); From 7534f9c25fc3a23d6b63d7ae1ed6f1f2c1811625 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 15:43:21 +0800 Subject: [PATCH 186/454] chore(test): added test coverage for deprecation notices --- lib/appenders/index.js | 6 +- lib/layouts.js | 6 +- test/tap/default-settings-test.js | 129 ++++++++++++++++++++++++------ test/tap/layouts-test.js | 47 +++++++++++ 4 files changed, 159 insertions(+), 29 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index 647ed8e9..7069d9e0 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -73,14 +73,16 @@ const createAppender = (name, config) => { `Appender ${appenderConfig.type} exports an appender function.`, "DeprecationWarning", "log4js-node-DEP0001" ); - debug(`DEPRECATION: Appender ${appenderConfig.type} exports an appender function.`); + debug("[log4js-node-DEP0001]", + `DEPRECATION: Appender ${appenderConfig.type} exports an appender function.`); } if (appenderModule.shutdown) { process.emitWarning( `Appender ${appenderConfig.type} exports a shutdown function.`, "DeprecationWarning", "log4js-node-DEP0002" ); - debug(`DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.`); + debug("[log4js-node-DEP0002]", + `DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.`); } debug(`${name}: clustering.isMaster ? ${clustering.isMaster()}`); diff --git a/lib/layouts.js b/lib/layouts.js index bdb327ca..5c2d6004 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -160,7 +160,8 @@ function patternLayout(pattern, tokens) { "Please use %d{ABSOLUTETIME} instead.", "DeprecationWarning", "log4js-node-DEP0003" ); - debug("DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); + debug("[log4js-node-DEP0003]", + "DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); // falls through case 'ABSOLUTETIME': case 'ABSOLUTETIME_FORMAT': @@ -172,7 +173,8 @@ function patternLayout(pattern, tokens) { "Please use %d{DATETIME} instead.", "DeprecationWarning", "log4js-node-DEP0004" ); - debug("DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); + debug("[log4js-node-DEP0004]", + "DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); // falls through case 'DATETIME': case 'DATETIME_FORMAT': diff --git a/test/tap/default-settings-test.js b/test/tap/default-settings-test.js index f1816aaf..77359c53 100644 --- a/test/tap/default-settings-test.js +++ b/test/tap/default-settings-test.js @@ -1,48 +1,127 @@ const { test } = require("tap"); +const debug = require("debug"); const sandbox = require("@log4js-node/sandboxed-module"); -test("default settings", t => { - const output = []; +test("default settings", batch => { + const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; + const warningListener = error => { + if (error.name === "DeprecationWarning") { + if (error.code.startsWith("log4js-node-DEP0001") || error.code.startsWith("log4js-node-DEP0002")) { + return; + } + } + originalListener(error); + }; + process.off("warning", originalListener); + process.on("warning", warningListener); + + const debugWasEnabled = debug.enabled("log4js:appenders"); + const debugLogs = []; + const originalWrite = process.stderr.write; + process.stderr.write = (string, encoding, fd) => { + debugLogs.push(string); + if (debugWasEnabled) { + originalWrite.apply(process.stderr, [string, encoding, fd]); + } + }; + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:appenders`); + + batch.teardown(async () => { + // next event loop so that past warnings will not be printed + setImmediate(() => { + process.off("warning", warningListener); + process.on("warning", originalListener); + }); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const output = []; const log4js = sandbox.require("../../lib/log4js", { requires: { "./appenders/stdout": { name: "stdout", - appender() { + appender() { // deprecated return function(evt) { output.push(evt); }; }, - shutdown() { + shutdown() { // deprecated }, configure() { return this.appender(); } - } + }, + debug } }); - const logger = log4js.getLogger("default-settings"); - logger.info("This should not be logged yet."); + let logger; + + batch.test("should call configure() on getLogger() if not configured", t => { + const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length; + const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length; + logger = log4js.getLogger("default-settings"); + t.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length, + DEP0001 + 1, + "deprecation log4js-node-DEP0001 emitted" + ); + t.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length, + DEP0002 + 1, + "deprecation log4js-node-DEP0002 emitted" + ); + t.end(); + }); + + batch.test("nothing should be logged until level is set or configure() is called", t => { + const originalLevel = logger.level; + t.equal( + originalLevel.levelStr, + "OFF", + "default logger.level should be OFF" + ); - t.plan(3); - t.equal( - output.length, - 0, - "Nothing should be logged until configure is called." - ); + logger.info("This should not be logged yet."); + t.equal(output.length, 0, "nothing should be logged"); - log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "debug" } } + t.test("after level is set", assert => { + logger.level = "debug"; + logger.info("This should be logged."); + assert.equal(output.length, 1, "should log the message if level is set"); + assert.equal(output[output.length - 1].data[0], "This should be logged."); + logger.level = originalLevel; + assert.end(); + }); + + t.test("after configure() is called", assert => { + const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length; + const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length; + log4js.configure({ + appenders: { stdout: { type: "stdout" } }, + categories: { default: { appenders: ["stdout"], level: "debug" } } + }); + assert.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length, + DEP0001 + 1, + "deprecation log4js-node-DEP0001 emitted" + ); + assert.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length, + DEP0002 + 1, + "deprecation log4js-node-DEP0002 emitted" + ); + + logger.info("This should go to stdout."); + assert.equal(output.length, 2, "should log the message after configure() is called"); + assert.equal(output[output.length - 1].data[0], "This should go to stdout."); + assert.end(); + }); + + t.end(); }); - logger.info("This should go to stdout."); - - t.equal(output.length, 1, "It should log to stdout."); - t.equal( - output[0].data[0], - "This should go to stdout.", - "It should log the message." - ); - t.end(); + + batch.end(); }); diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index 855b6c98..713f63fa 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -1,4 +1,5 @@ const { test } = require("tap"); +const debug = require("debug"); const os = require("os"); const path = require("path"); @@ -245,6 +246,40 @@ test("log4js layouts", batch => { }); batch.test("patternLayout", t => { + const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; + const warningListener = error => { + if (error.name === "DeprecationWarning") { + if (error.code.startsWith("log4js-node-DEP0003") || error.code.startsWith("log4js-node-DEP0004")) { + return; + } + } + originalListener(error); + }; + process.off("warning", originalListener); + process.on("warning", warningListener); + + const debugWasEnabled = debug.enabled("log4js:layouts"); + const debugLogs = []; + const originalWrite = process.stderr.write; + process.stderr.write = (string, encoding, fd) => { + debugLogs.push(string); + if (debugWasEnabled) { + originalWrite.apply(process.stderr, [string, encoding, fd]); + } + }; + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:layouts`); + + batch.teardown(async () => { + // next event loop so that past warnings will not be printed + setImmediate(() => { + process.off("warning", warningListener); + process.on("warning", originalListener); + }); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const tokens = { testString: "testStringToken", testFunction() { @@ -421,6 +456,7 @@ test("log4js layouts", batch => { "2010-12-05T14:18:30.045+10:00" ); + const DEP0003 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length; testPattern( assert, layout, @@ -429,6 +465,11 @@ test("log4js layouts", batch => { "%d{ABSOLUTE}", // deprecated "14:18:30.045" ); + assert.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length, + DEP0003 + 1, + "deprecation log4js-node-DEP0003 emitted" + ); testPattern( assert, layout, @@ -438,6 +479,7 @@ test("log4js layouts", batch => { "14:18:30.045" ); + const DEP0004 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length; testPattern( assert, layout, @@ -446,6 +488,11 @@ test("log4js layouts", batch => { "%d{DATE}", // deprecated "05 12 2010 14:18:30.045" ); + assert.equal( + debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length, + DEP0004 + 1, + "deprecation log4js-node-DEP0004 emitted" + ); testPattern( assert, layout, From 63b8f5367adbd8b120ec0057e2f0ac8de4e6de1d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 15:43:47 +0800 Subject: [PATCH 187/454] chore(test): updated multiFileAppender tests' teardown() to reinstate debug and process.stderr.write --- test/tap/multi-file-appender-test.js | 74 +++++++++++++++------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 1e0be190..3becca37 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -74,10 +74,6 @@ test("multiFile appender", batch => { ); batch.test("should close file after timeout", t => { - t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); - await removeFiles("logs/C.log"); - }); /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ @@ -90,7 +86,16 @@ test("multiFile appender", batch => { originalWrite.apply(process.stderr, [string, encoding, fd]); } }; - debug.enable("log4js:multiFile"); + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:multiFile`); + + t.teardown(async () => { + await new Promise(resolve => { log4js.shutdown(resolve); }); + await removeFiles("logs/C.log"); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const timeoutMs = 25; log4js.configure({ appenders: { @@ -113,19 +118,11 @@ test("multiFile appender", batch => { `C not used for > ${timeoutMs} ms => close`, "(timeout1) should have closed" ); - if (!debugWasEnabled) { - debug.disable("log4js:multiFile"); - } - process.stderr.write = originalWrite; t.end(); }, timeoutMs*1 + 50); // add a 50 ms delay }); batch.test("should close file safely after timeout", t => { - t.teardown(async () => { - await new Promise(resolve => { sandboxedLog4js.shutdown(resolve); }); // eslint-disable-line no-use-before-define - await removeFiles("logs/C.log"); - }); const error = new Error("fileAppender shutdown error"); const sandboxedLog4js = sandbox.require("../../lib/log4js", { requires: { @@ -157,7 +154,16 @@ test("multiFile appender", batch => { originalWrite.apply(process.stderr, [string, encoding, fd]); } }; - debug.enable("log4js:multiFile"); + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:multiFile`); + + t.teardown(async () => { + await new Promise(resolve => { sandboxedLog4js.shutdown(resolve); }); + await removeFiles("logs/C.log"); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const timeoutMs = 25; sandboxedLog4js.configure({ appenders: { @@ -185,19 +191,11 @@ test("multiFile appender", batch => { `ignore error on file shutdown: ${error.message}`, "safely shutdown" ); - if (!debugWasEnabled) { - debug.disable("log4js:multiFile"); - } - process.stderr.write = originalWrite; t.end(); }, timeoutMs*1 + 50); // add a 50 ms delay }); batch.test("should close file after extended timeout", t => { - t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); - await removeFiles("logs/D.log"); - }); /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ @@ -210,7 +208,16 @@ test("multiFile appender", batch => { originalWrite.apply(process.stderr, [string, encoding, fd]); } }; - debug.enable("log4js:multiFile"); + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:multiFile`); + + t.teardown(async () => { + await new Promise(resolve => { log4js.shutdown(resolve); }); + await removeFiles("logs/D.log"); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const timeoutMs = 100; log4js.configure({ appenders: { @@ -247,18 +254,11 @@ test("multiFile appender", batch => { `D not used for > ${timeoutMs} ms => close`, "(timeout2) should have closed" ); - if (!debugWasEnabled) { - debug.disable("log4js:multiFile"); - } - process.stderr.write = originalWrite; t.end(); }, timeoutMs*2 + 50); // add a 50 ms delay }); batch.test("should clear interval for active timers on shutdown", t => { - t.teardown(async () => { - await removeFiles("logs/D.log"); - }); /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ @@ -271,7 +271,15 @@ test("multiFile appender", batch => { originalWrite.apply(process.stderr, [string, encoding, fd]); } }; - debug.enable("log4js:multiFile"); + const originalNamespace = debug.disable(); + debug.enable(`${originalNamespace}, log4js:multiFile`); + + t.teardown(async () => { + await removeFiles("logs/D.log"); + process.stderr.write = originalWrite; + debug.enable(originalNamespace); + }); + const timeoutMs = 100; log4js.configure({ appenders: { @@ -302,10 +310,6 @@ test("multiFile appender", batch => { "calling shutdown for D", "should have called shutdown" ); - if (!debugWasEnabled) { - debug.disable("log4js:multiFile"); - } - process.stderr.write = originalWrite; t.end(); }); }); From dc6c1f46ebd5169573e981ff48f0047733f45d02 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 15:44:00 +0800 Subject: [PATCH 188/454] chore(test): use setImmediate() instead of setTimeout(0) for next event loop --- test/tap/file-sighup-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index f883e3d7..71524f05 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -48,12 +48,12 @@ test("file appender single SIGHUP handler", t => { }); t.plan(2); - // put in a timeout 0 to allow event emitter/listener to happen - setTimeout(() => { + // next event loop to allow event emitter/listener to happen + setImmediate(() => { t.notOk(warning, "should not have MaxListenersExceededWarning for SIGHUP"); t.equal(process.listenerCount("SIGHUP") - initialListeners, 1, "should be 1 SIGHUP listener"); t.end(); - }, 0); + }); }); test("file appender SIGHUP", t => { From c863c7768571447a28e9032cbccf079bdfc06225 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 16:39:08 +0800 Subject: [PATCH 189/454] chore(test): updated file-sighup-test.js teardown() to reinstate warning listener --- test/tap/file-sighup-test.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index 71524f05..deb612a8 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -14,11 +14,15 @@ test("file appender single SIGHUP handler", t => { const initialListeners = process.listenerCount("SIGHUP"); let warning; + const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; const warningListener = error => { if (error.type === "SIGHUP" && error.name === "MaxListenersExceededWarning") { warning = error; + return; } + originalListener(error); }; + process.off("warning", originalListener); process.on("warning", warningListener); const config = { @@ -39,12 +43,16 @@ test("file appender single SIGHUP handler", t => { log4js.configure(config); t.teardown(async () => { + // next event loop so that past warnings will not be printed + setImmediate(() => { + process.off("warning", warningListener); + process.on("warning", originalListener); + }); + await new Promise(resolve => { log4js.shutdown(resolve); }); const filenames = Object.values(config.appenders).map(appender => appender.filename); await removeFiles(filenames); - - process.off("warning", warningListener); }); t.plan(2); From 62666a42f0b98b3f549dd24314297a2f6824d8f9 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 15 Mar 2022 17:01:21 +0800 Subject: [PATCH 190/454] chore(docs): updated changelog for 6.4.3 --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76975048..db3c68f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # log4js-node changelog +## 6.4.3 + +- chore(test): 100% test coverage - thanks [@peteriman](https://github.com/peteriman) + - Part 1 of 3: https://github.com/log4js-node/log4js-node/pull/1200 + - Part 2 of 3: https://github.com/log4js-node/log4js-node/pull/1204 + - Part 3 of 3: https://github.com/log4js-node/log4js-node/pull/1205 + - [chore(test): improved test cases](https://github.com/log4js-node/log4js-node/pull/1211) +- [chore(validation): added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@peteriman](https://github.com/peteriman) +- [chore(improvement): do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@peteriman](https://github.com/peteriman) +- [chore(improvement): defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@peteriman](https://github.com/peteriman) +- [chore(improvement): removed redundant logic in tcp-serverAppender](https://github.com/log4js-node/log4js-node/pull/1198) - thanks [@peteriman](https://github.com/peteriman) +- [chore(improvement): removed redundant logic in multiprocessAppender](https://github.com/log4js-node/log4js-node/pull/1197) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated README.md with badges](https://github.com/log4js-node/log4js-node/pull/1209) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): added docs for istanbul ignore](https://github.com/log4js-node/log4js-node/pull/1208) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated logger api docs](https://github.com/log4js-node/log4js-node/pull/1203) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated file and fileSync appender docs](https://github.com/log4js-node/log4js-node/pull/1202) - thanks [@peteriman](https://github.com/peteriman) +- [chore(lint): improve eslint rules](https://github.com/log4js-node/log4js-node/pull/1206) - thanks [@peteriman](https://github.com/peteriman) +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1207) - thanks [@peteriman](https://github.com/peteriman) + - chore(dev): bump eslint from 8.10.0 to 8.11.0 + - chore(dev): bump eslint-config-airbnb-base from 13.2.0 to 15.0.0 + - chore(dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 + - chore(dev): bump tap from 15.1.6 to 16.0.0 + - chore(dep): bump date-format from 4.0.4 to 4.0.5 + - chore(dep): bump streamroller from 3.0.4 to 3.0.5 + - chore(dep): updated package-lock.json + ## 6.4.2 - [bug: fixed fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@peteriman](https://github.com/peteriman) From 58cfdc3fca3163d99922f3e09eb4f1e489720114 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 15 Mar 2022 09:07:10 +0000 Subject: [PATCH 191/454] 6.4.3 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index eef30f2c..d0fcbec5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.2", + "version": "6.4.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index db9a73e6..e56a4a5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.2", + "version": "6.4.3", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From f7f5f65bfc2d92f97f695a9343c160dec5ecd1e3 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 03:59:58 +0800 Subject: [PATCH 192/454] chore(fix): when logger.level clones category from parent/default, to also clone over useCallStack --- lib/categories.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/categories.js b/lib/categories.js index 4e559180..1fb6ad28 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -193,6 +193,7 @@ const setLevelForCategory = (category, level) => { debug('setLevelForCategory: no config found for category, ' + `found ${sourceCategoryConfig} for parents of ${category}`); categoryConfig = { appenders: sourceCategoryConfig.appenders }; + categoryConfig.enableCallStack = sourceCategoryConfig.enableCallStack; } categoryConfig.level = level; categories.set(category, categoryConfig); From b383422d21357430aec4ae0bbd1fac11e1c93888 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 04:02:48 +0800 Subject: [PATCH 193/454] chore(refactor): clone category from parent/default when it does not exist instead of during logger.level --- lib/categories.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/categories.js b/lib/categories.js index 1fb6ad28..a1c194e2 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -141,6 +141,9 @@ configuration.addListener((config) => { const setup = (config) => { categories.clear(); + if (!config) { + return; + } const categoryNames = Object.keys(config.categories); categoryNames.forEach((name) => { @@ -162,7 +165,7 @@ const setup = (config) => { }; const init = () => { - setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); + setup(); }; init(); @@ -174,29 +177,27 @@ const configForCategory = (category) => { debug(`configForCategory: ${category} exists in config, returning it`); return categories.get(category); } + + let sourceCategoryConfig; if (category.indexOf('.') > 0) { - debug(`configForCategory: ${category} has hierarchy, searching for parents`); - return configForCategory(category.substring(0, category.lastIndexOf('.'))); + debug(`configForCategory: ${category} has hierarchy, cloning from parents`); + sourceCategoryConfig = { ...configForCategory(category.substring(0, category.lastIndexOf('.'))) }; + } else { + if (!categories.has('default')) { + setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); + } + debug('configForCategory: cloning default category'); + sourceCategoryConfig = { ...categories.get('default') }; } - debug('configForCategory: returning config for default category'); - return configForCategory('default'); + categories.set(category, sourceCategoryConfig); + return sourceCategoryConfig; }; const appendersForCategory = category => configForCategory(category).appenders; -const getLevelForCategory = category => configForCategory(category).level; +const getLevelForCategory = category => configForCategory(category).level; const setLevelForCategory = (category, level) => { - let categoryConfig = categories.get(category); - debug(`setLevelForCategory: found ${categoryConfig} for ${category}`); - if (!categoryConfig) { - const sourceCategoryConfig = configForCategory(category); - debug('setLevelForCategory: no config found for category, ' - + `found ${sourceCategoryConfig} for parents of ${category}`); - categoryConfig = { appenders: sourceCategoryConfig.appenders }; - categoryConfig.enableCallStack = sourceCategoryConfig.enableCallStack; - } - categoryConfig.level = level; - categories.set(category, categoryConfig); + configForCategory(category).level = level; }; const getEnableCallStackForCategory = category => configForCategory(category).enableCallStack === true; From 58bc58ae75d62b2e7979908d1300f880d31ab909 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 04:03:16 +0800 Subject: [PATCH 194/454] chore(refactor): default level should be OFF --- lib/logger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/logger.js b/lib/logger.js index d1f84bd7..ca36be5e 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -60,7 +60,7 @@ class Logger { get level() { return levels.getLevel( categories.getLevelForCategory(this.category), - levels.TRACE + levels.OFF ); } From b4b8bbfef9a1977b99f4ecdb5ff753d410c372a8 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 05:05:08 +0800 Subject: [PATCH 195/454] chore(test): added test cases --- test/tap/logger-test.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 1a167105..6582dfb2 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -3,12 +3,14 @@ const debug = require("debug")("log4js:test.logger"); const sandbox = require("@log4js-node/sandboxed-module"); const callsites = require("callsites"); const levels = require("../../lib/levels"); +const categories = require("../../lib/categories"); const events = []; const messages = []; const Logger = sandbox.require("../../lib/logger", { requires: { "./levels": levels, + "./categories": categories, "./clustering": { isMaster: () => true, onlyOnMaster: fn => fn(), @@ -272,5 +274,43 @@ test("../../lib/logger", batch => { t.end(); }); + batch.test("creating/cloning of category", t => { + const defaultLogger = new Logger("default"); + defaultLogger.level = "trace"; + defaultLogger.useCallStack = true; + + t.test("category should be cloned from parent/default if does not exist", assert => { + const originalLength = categories.size; + + const logger = new Logger("cheese1"); + assert.equal(categories.size, originalLength + 1, "category should be cloned"); + assert.equal(logger.level, levels.TRACE, "should inherit level=TRACE from default-category"); + assert.equal(logger.useCallStack, true, "should inherit useCallStack=true from default-category"); + assert.end(); + }); + + t.test("changing level should not impact default-category or useCallStack", assert => { + const logger = new Logger("cheese2"); + logger.level = "debug"; + assert.equal(logger.level, levels.DEBUG, "should be changed to level=DEBUG"); + assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); + assert.equal(logger.useCallStack, true, "should remain as useCallStack=true"); + assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); + assert.end(); + }); + + t.test("changing useCallStack should not impact default-category or level", assert => { + const logger = new Logger("cheese3"); + logger.useCallStack = false; + assert.equal(logger.useCallStack, false, "should be changed to useCallStack=false"); + assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); + assert.equal(logger.level, levels.TRACE, "should remain as level=TRACE"); + assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); + assert.end(); + }); + + t.end(); + }); + batch.end(); }); From b011fb9723cda8ef31ce1d29b62f195705d4f4b3 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 05:16:13 +0800 Subject: [PATCH 196/454] chore(docs): added links to pages that were not accessible --- docs/_layouts/default.html | 1 + docs/appenders.md | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index e16f1299..956b15be 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -25,6 +25,7 @@

{{ site.title | default: site.github.repository_name }}

  • Home
  • API
  • Appenders
  • +
  • Categories
  • Layouts
  • Terminology
  • FAQ
  • diff --git a/docs/appenders.md b/docs/appenders.md index 22c6d1c8..0f536fd3 100644 --- a/docs/appenders.md +++ b/docs/appenders.md @@ -27,6 +27,7 @@ The following appenders are included with log4js. Some require extra dependencie * [logLevelFilter](logLevelFilter.md) * [multiFile](multiFile.md) * [multiprocess](multiprocess.md) +* [noLogFilter](noLogFilter.md) * [recording](recording.md) * [stderr](stderr.md) * [stdout](stdout.md) From 10d944ed6c4862e641098481e6aa37f092529d71 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 20 Mar 2022 19:06:48 +0800 Subject: [PATCH 197/454] chore(docs): fixed broken links --- docs/appenders.md | 2 +- docs/index.md | 2 +- docs/layouts.md | 4 ++-- docs/migration-guide.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/appenders.md b/docs/appenders.md index 0f536fd3..a34c6b72 100644 --- a/docs/appenders.md +++ b/docs/appenders.md @@ -17,7 +17,7 @@ This defines two appenders named 'out' and 'app'. 'out' uses the [stdout](stdout ## Core Appenders -The following appenders are included with log4js. Some require extra dependencies that are not included as part of log4js (the [smtp](smtp.md) appender needs [nodemailer](https://www.npmjs.org/packages/nodemailer) for example), and these will be noted in the docs for that appender. If you don't use those appenders, then you don't need the extra dependencies. +The following appenders are included with log4js. Some require extra dependencies that are not included as part of log4js (the [smtp](https://github.com/log4js-node/smtp) appender needs [nodemailer](https://www.npmjs.com/package/nodemailer) for example), and these will be noted in the docs for that appender. If you don't use those appenders, then you don't need the extra dependencies. * [categoryFilter](categoryFilter.md) * [console](console.md) diff --git a/docs/index.md b/docs/index.md index ba8a54ff..78da762d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ There have been a few changes between log4js 1.x and 2.x (and 0.x too). You shou - [GELF appender](https://github.com/log4js-node/gelf) - [Loggly appender](https://github.com/log4js-node/loggly) - [Logstash UDP appender](https://github.com/log4js-node/logstashUDP) -- logFaces ([UDP](logFaces-UDP.md) and [HTTP](logFaces-HTTP.md)) appender +- logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender - [TCP appender](tcp.md) (useful when you've got multiple servers but want to centralise logging) - a [logger for connect/express](connect-logger.md) servers - configurable log message [layout/patterns](layouts.md) diff --git a/docs/layouts.md b/docs/layouts.md index b2d2e456..b24bbca2 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -2,7 +2,7 @@ Layouts are functions used by appenders to format log events for output. They take a log event as an argument and return a string. Log4js comes with several appenders built-in, and provides ways to create your own if these are not suitable. -For most use cases you will not need to configure layouts - there are some appenders which do not need layouts defined (for example, [logFaces-UDP](logFaces-UDP.md)); all the appenders that use layouts will have a sensible default defined. +For most use cases you will not need to configure layouts - there are some appenders which do not need layouts defined (for example, [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP)); all the appenders that use layouts will have a sensible default defined. ## Configuration @@ -75,7 +75,7 @@ Cheese is too ripe! Cheese was: gouda * `type` - `dummy` -This layout only outputs the first value in the log event's data. It was added for the [logstashUDP](logstashUDP.md) appender, and I'm not sure there's much use for it outside that. +This layout only outputs the first value in the log event's data. It was added for the [logstashUDP](https://github.com/log4js-node/logstashUDP) appender, and I'm not sure there's much use for it outside that. ## Example ```javascript diff --git a/docs/migration-guide.md b/docs/migration-guide.md index c95af1c9..8be8e4f8 100644 --- a/docs/migration-guide.md +++ b/docs/migration-guide.md @@ -57,7 +57,7 @@ The `logFaces` appender was split into two versions to make testing easier and t Some appenders used to define their own `exit` listeners, and it was never clear whose responsibility it was to clean up resources. Now log4js does not define any `exit` listeners. Instead your application should register an `exit` listener, and call `log4js.shutdown` to be sure that all log messages get written before your application terminates. ## New Features -* MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the [logFaces appenders](logFaces-UDP.md), and the [multi-file appender](multiFile.md). +* MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender, and the [multi-file appender](multiFile.md). * Automatic cluster support - log4js now handles clusters transparently * Custom levels - you can define your own log levels in the configuration object, including the colours * Improved performance - several changes have been made to improve performance, especially for the file appenders. From 17bbc784014b2a87de056cfb42dd8e27bc3afd11 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 03:59:58 +0800 Subject: [PATCH 198/454] chore(fix): when logger.level clones category from parent/default, to also clone over useCallStack --- lib/categories.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/categories.js b/lib/categories.js index 4e559180..1fb6ad28 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -193,6 +193,7 @@ const setLevelForCategory = (category, level) => { debug('setLevelForCategory: no config found for category, ' + `found ${sourceCategoryConfig} for parents of ${category}`); categoryConfig = { appenders: sourceCategoryConfig.appenders }; + categoryConfig.enableCallStack = sourceCategoryConfig.enableCallStack; } categoryConfig.level = level; categories.set(category, categoryConfig); From 06e6708db9353115e3207242079b3ef4d02b99d0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 04:02:48 +0800 Subject: [PATCH 199/454] chore(refactor): clone category from parent/default when it does not exist instead of during logger.level --- lib/categories.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/categories.js b/lib/categories.js index 1fb6ad28..a1c194e2 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -141,6 +141,9 @@ configuration.addListener((config) => { const setup = (config) => { categories.clear(); + if (!config) { + return; + } const categoryNames = Object.keys(config.categories); categoryNames.forEach((name) => { @@ -162,7 +165,7 @@ const setup = (config) => { }; const init = () => { - setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); + setup(); }; init(); @@ -174,29 +177,27 @@ const configForCategory = (category) => { debug(`configForCategory: ${category} exists in config, returning it`); return categories.get(category); } + + let sourceCategoryConfig; if (category.indexOf('.') > 0) { - debug(`configForCategory: ${category} has hierarchy, searching for parents`); - return configForCategory(category.substring(0, category.lastIndexOf('.'))); + debug(`configForCategory: ${category} has hierarchy, cloning from parents`); + sourceCategoryConfig = { ...configForCategory(category.substring(0, category.lastIndexOf('.'))) }; + } else { + if (!categories.has('default')) { + setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); + } + debug('configForCategory: cloning default category'); + sourceCategoryConfig = { ...categories.get('default') }; } - debug('configForCategory: returning config for default category'); - return configForCategory('default'); + categories.set(category, sourceCategoryConfig); + return sourceCategoryConfig; }; const appendersForCategory = category => configForCategory(category).appenders; -const getLevelForCategory = category => configForCategory(category).level; +const getLevelForCategory = category => configForCategory(category).level; const setLevelForCategory = (category, level) => { - let categoryConfig = categories.get(category); - debug(`setLevelForCategory: found ${categoryConfig} for ${category}`); - if (!categoryConfig) { - const sourceCategoryConfig = configForCategory(category); - debug('setLevelForCategory: no config found for category, ' - + `found ${sourceCategoryConfig} for parents of ${category}`); - categoryConfig = { appenders: sourceCategoryConfig.appenders }; - categoryConfig.enableCallStack = sourceCategoryConfig.enableCallStack; - } - categoryConfig.level = level; - categories.set(category, categoryConfig); + configForCategory(category).level = level; }; const getEnableCallStackForCategory = category => configForCategory(category).enableCallStack === true; From f6095a39425c9db3fab7f1189f6af70b0090cbcb Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 04:03:16 +0800 Subject: [PATCH 200/454] chore(refactor): default level should be OFF --- lib/logger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/logger.js b/lib/logger.js index d1f84bd7..ca36be5e 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -60,7 +60,7 @@ class Logger { get level() { return levels.getLevel( categories.getLevelForCategory(this.category), - levels.TRACE + levels.OFF ); } From 496e318fcc951ff75ef122ccba8c399ce1b07b1b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 05:05:08 +0800 Subject: [PATCH 201/454] chore(test): added test cases --- test/tap/logger-test.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 1a167105..6582dfb2 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -3,12 +3,14 @@ const debug = require("debug")("log4js:test.logger"); const sandbox = require("@log4js-node/sandboxed-module"); const callsites = require("callsites"); const levels = require("../../lib/levels"); +const categories = require("../../lib/categories"); const events = []; const messages = []; const Logger = sandbox.require("../../lib/logger", { requires: { "./levels": levels, + "./categories": categories, "./clustering": { isMaster: () => true, onlyOnMaster: fn => fn(), @@ -272,5 +274,43 @@ test("../../lib/logger", batch => { t.end(); }); + batch.test("creating/cloning of category", t => { + const defaultLogger = new Logger("default"); + defaultLogger.level = "trace"; + defaultLogger.useCallStack = true; + + t.test("category should be cloned from parent/default if does not exist", assert => { + const originalLength = categories.size; + + const logger = new Logger("cheese1"); + assert.equal(categories.size, originalLength + 1, "category should be cloned"); + assert.equal(logger.level, levels.TRACE, "should inherit level=TRACE from default-category"); + assert.equal(logger.useCallStack, true, "should inherit useCallStack=true from default-category"); + assert.end(); + }); + + t.test("changing level should not impact default-category or useCallStack", assert => { + const logger = new Logger("cheese2"); + logger.level = "debug"; + assert.equal(logger.level, levels.DEBUG, "should be changed to level=DEBUG"); + assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); + assert.equal(logger.useCallStack, true, "should remain as useCallStack=true"); + assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); + assert.end(); + }); + + t.test("changing useCallStack should not impact default-category or level", assert => { + const logger = new Logger("cheese3"); + logger.useCallStack = false; + assert.equal(logger.useCallStack, false, "should be changed to useCallStack=false"); + assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); + assert.equal(logger.level, levels.TRACE, "should remain as level=TRACE"); + assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); + assert.end(); + }); + + t.end(); + }); + batch.end(); }); From 68a85f956ed38eaaba17ce850de249fd59559693 Mon Sep 17 00:00:00 2001 From: Matt Alexander Date: Sat, 19 Mar 2022 17:01:35 -0500 Subject: [PATCH 202/454] Broken link to https://github.com/log4js-node/gelf --- docs/layouts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/layouts.md b/docs/layouts.md index b2d2e456..27b8843f 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -54,7 +54,7 @@ This layout is the same as `basic`, except that the timestamp, level and categor ## Message Pass-Through * `type` - `messagePassThrough` -This layout just formats the log event data, and does not output a timestamp, level or category. It is typically used in appenders that serialise the events using a specific format (e.g. [gelf](gelf.md)). +This layout just formats the log event data, and does not output a timestamp, level or category. It is typically used in appenders that serialise the events using a specific format (e.g. [gelf](https://github.com/log4js-node/gelf)). ## Example ```javascript From 878ae0e2a74008661f392ae8ee72eb2cd9c91c4d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 18 Mar 2022 05:16:13 +0800 Subject: [PATCH 203/454] chore(docs): added links to pages that were not accessible --- docs/_layouts/default.html | 1 + docs/appenders.md | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index e16f1299..956b15be 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -25,6 +25,7 @@

    {{ site.title | default: site.github.repository_name }}

  • Home
  • API
  • Appenders
  • +
  • Categories
  • Layouts
  • Terminology
  • FAQ
  • diff --git a/docs/appenders.md b/docs/appenders.md index 22c6d1c8..0f536fd3 100644 --- a/docs/appenders.md +++ b/docs/appenders.md @@ -27,6 +27,7 @@ The following appenders are included with log4js. Some require extra dependencie * [logLevelFilter](logLevelFilter.md) * [multiFile](multiFile.md) * [multiprocess](multiprocess.md) +* [noLogFilter](noLogFilter.md) * [recording](recording.md) * [stderr](stderr.md) * [stdout](stdout.md) From b23f208165432b5c9d90ce04c2a13580deae6321 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 20 Mar 2022 19:06:48 +0800 Subject: [PATCH 204/454] chore(docs): fixed broken links --- docs/appenders.md | 2 +- docs/index.md | 2 +- docs/layouts.md | 4 ++-- docs/migration-guide.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/appenders.md b/docs/appenders.md index 0f536fd3..a34c6b72 100644 --- a/docs/appenders.md +++ b/docs/appenders.md @@ -17,7 +17,7 @@ This defines two appenders named 'out' and 'app'. 'out' uses the [stdout](stdout ## Core Appenders -The following appenders are included with log4js. Some require extra dependencies that are not included as part of log4js (the [smtp](smtp.md) appender needs [nodemailer](https://www.npmjs.org/packages/nodemailer) for example), and these will be noted in the docs for that appender. If you don't use those appenders, then you don't need the extra dependencies. +The following appenders are included with log4js. Some require extra dependencies that are not included as part of log4js (the [smtp](https://github.com/log4js-node/smtp) appender needs [nodemailer](https://www.npmjs.com/package/nodemailer) for example), and these will be noted in the docs for that appender. If you don't use those appenders, then you don't need the extra dependencies. * [categoryFilter](categoryFilter.md) * [console](console.md) diff --git a/docs/index.md b/docs/index.md index ba8a54ff..78da762d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ There have been a few changes between log4js 1.x and 2.x (and 0.x too). You shou - [GELF appender](https://github.com/log4js-node/gelf) - [Loggly appender](https://github.com/log4js-node/loggly) - [Logstash UDP appender](https://github.com/log4js-node/logstashUDP) -- logFaces ([UDP](logFaces-UDP.md) and [HTTP](logFaces-HTTP.md)) appender +- logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender - [TCP appender](tcp.md) (useful when you've got multiple servers but want to centralise logging) - a [logger for connect/express](connect-logger.md) servers - configurable log message [layout/patterns](layouts.md) diff --git a/docs/layouts.md b/docs/layouts.md index b2d2e456..b24bbca2 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -2,7 +2,7 @@ Layouts are functions used by appenders to format log events for output. They take a log event as an argument and return a string. Log4js comes with several appenders built-in, and provides ways to create your own if these are not suitable. -For most use cases you will not need to configure layouts - there are some appenders which do not need layouts defined (for example, [logFaces-UDP](logFaces-UDP.md)); all the appenders that use layouts will have a sensible default defined. +For most use cases you will not need to configure layouts - there are some appenders which do not need layouts defined (for example, [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP)); all the appenders that use layouts will have a sensible default defined. ## Configuration @@ -75,7 +75,7 @@ Cheese is too ripe! Cheese was: gouda * `type` - `dummy` -This layout only outputs the first value in the log event's data. It was added for the [logstashUDP](logstashUDP.md) appender, and I'm not sure there's much use for it outside that. +This layout only outputs the first value in the log event's data. It was added for the [logstashUDP](https://github.com/log4js-node/logstashUDP) appender, and I'm not sure there's much use for it outside that. ## Example ```javascript diff --git a/docs/migration-guide.md b/docs/migration-guide.md index c95af1c9..8be8e4f8 100644 --- a/docs/migration-guide.md +++ b/docs/migration-guide.md @@ -57,7 +57,7 @@ The `logFaces` appender was split into two versions to make testing easier and t Some appenders used to define their own `exit` listeners, and it was never clear whose responsibility it was to clean up resources. Now log4js does not define any `exit` listeners. Instead your application should register an `exit` listener, and call `log4js.shutdown` to be sure that all log messages get written before your application terminates. ## New Features -* MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the [logFaces appenders](logFaces-UDP.md), and the [multi-file appender](multiFile.md). +* MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender, and the [multi-file appender](multiFile.md). * Automatic cluster support - log4js now handles clusters transparently * Custom levels - you can define your own log levels in the configuration object, including the colours * Improved performance - several changes have been made to improve performance, especially for the file appenders. From 25a47388a327b6123e954dfa1e5a5063c60dada3 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 11:00:42 +0800 Subject: [PATCH 205/454] chore(docs): updated writing-appenders.md --- docs/writing-appenders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/writing-appenders.md b/docs/writing-appenders.md index 94c2b9c4..7f81b2ae 100644 --- a/docs/writing-appenders.md +++ b/docs/writing-appenders.md @@ -7,7 +7,7 @@ Log4js can load appenders from outside its core set. To add a custom appender, t When log4js parses your configuration, it loops through the defined appenders. For each one, it will `require` the appender initially using the `type` value prepended with './appenders' as the module identifier - this is to try loading from the core appenders first. If that fails (the module could not be found in the core appenders), then log4js will try to require the module using variations of the `type` value. Log4js checks the following places (in this order) for appenders based on the type value: -1. The core appenders: `require('./' + type)` +1. Bundled core appenders (within appenders directory): `require('./' + type)` 2. node_modules: `require(type)` 3. relative to the main file of your application: `require(path.dirname(require.main.filename) + '/' + type)` 4. relative to the process' current working directory: `require(process.cwd() + '/' + type)` From 96ca9dcc5f9028976b4ee26da5a810ccf39076ec Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 11:12:43 +0800 Subject: [PATCH 206/454] chore(docs): updated changelog for 6.4.4 --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db3c68f8..f11e1a7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ -# log4js-node changelog +# log4js-node Changelog + +## 6.4.4 + +- [chore(fix): set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) +- [chore(docs): updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) ## 6.4.3 From 67454c96141128175453702ab3d580e6b10c0cf2 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:25:50 +0800 Subject: [PATCH 207/454] chore(dep): updated package-lock.json --- package-lock.json | 139 +++++++++++++++++++++++----------------------- 1 file changed, 68 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0fcbec5..a0b51834 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,24 +23,24 @@ } }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -52,20 +52,17 @@ }, "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -74,12 +71,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" @@ -133,14 +130,14 @@ } }, "@babel/helper-module-transforms": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", - "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", @@ -149,12 +146,12 @@ } }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-split-export-declaration": { @@ -179,13 +176,13 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" } }, @@ -259,9 +256,9 @@ } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", "dev": true }, "@babel/template": { @@ -648,13 +645,13 @@ } }, "browserslist": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz", - "integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001313", - "electron-to-chromium": "^1.4.76", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.0" @@ -701,9 +698,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001315", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001315.tgz", - "integrity": "sha512-5v7LFQU4Sb/qvkz7JcZkvtSH1Ko+1x2kgo3ocdBeMGZSOFpuE1kkm0kpTwLtWeFrw5qw08ulLxJjVIXIS8MkiQ==", + "version": "1.0.30001319", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", + "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==", "dev": true }, "chalk": { @@ -851,14 +848,14 @@ } }, "date-format": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.5.tgz", - "integrity": "sha512-zBhRiN/M0gDxUoM2xRtzTjJzSg0XEi1ofYpF84PfXeS3hN2PsGxmc7jw3DNQtFlimRbMmob5FC3G0cJq6jQQpw==" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", + "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -923,9 +920,9 @@ } }, "electron-to-chromium": { - "version": "1.4.82", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.82.tgz", - "integrity": "sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw==", + "version": "1.4.89", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.89.tgz", + "integrity": "sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw==", "dev": true }, "emoji-regex": { @@ -1497,9 +1494,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2081,9 +2078,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minipass": { @@ -2487,9 +2484,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", "dev": true }, "prettier-linter-helpers": { @@ -2733,12 +2730,12 @@ } }, "streamroller": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.5.tgz", - "integrity": "sha512-5uzTEUIi4OB5zy/H30kbUN/zpDNJsFUA+Z47ZL8EfrP93lcZvRLEqdbhdunEPa7CouuAzXXsHpCJ9dg90Umw7g==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz", + "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==", "requires": { - "date-format": "^4.0.5", - "debug": "^4.3.3", + "date-format": "^4.0.6", + "debug": "^4.3.4", "fs-extra": "^10.0.1" } }, From cd10f2e6a1455564be094aa7c02555ef7efd54a6 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:26:23 +0800 Subject: [PATCH 208/454] chore(dev): bump prettier from 2.5.1 to 2.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e56a4a5c..8891be47 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "fs-extra": "^10.0.1", "husky": "^7.0.4", "nyc": "^15.1.0", - "prettier": "^2.5.1", + "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.0.0", "typescript": "^4.6.2", From e31655dc89b2b3e97c9b50152128fdb85007cb19 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:28:50 +0800 Subject: [PATCH 209/454] chore(dep): bump date-format from 4.0.5 to 4.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8891be47..10be8db4 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.5", + "date-format": "^4.0.6", "debug": "^4.3.3", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 24e9ac82f2923345981cc627e82b22a4f06c8220 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:29:21 +0800 Subject: [PATCH 210/454] chore(dep): bump debug from 4.3.3 to 4.3.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10be8db4..d6334510 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "date-format": "^4.0.6", - "debug": "^4.3.3", + "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", "streamroller": "^3.0.5" From 8ac0fc0c5e798ae5a3d87733b2c04ad6d1af189a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:29:43 +0800 Subject: [PATCH 211/454] chore(dep): bump streamroller from 3.0.5 to 3.0.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d6334510..013656e3 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.5" + "streamroller": "^3.0.6" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From c923bbef515eac027b93e2bdd7d31be360885b35 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 22 Mar 2022 14:37:59 +0800 Subject: [PATCH 212/454] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f11e1a7d..8d8b391e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ - [chore(docs): updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) - [chore(docs): broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) - [chore(docs): updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1221) - thanks [@peteriman](https://github.com/peteriman) + - chore(dep): bump streamroller from 3.0.5 to 3.0.6 + - chore(dep): bump debug from 4.3.3 to 4.3.4 + - chore(dep): bump date-format from 4.0.5 to 4.0.6 + - chore(dev): bump prettier from 2.5.1 to 2.6.0 + - updated package-lock.json ## 6.4.3 From 8281d3af604842c83d5fad5a65962d4b145cf589 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 22 Mar 2022 06:42:12 +0000 Subject: [PATCH 213/454] 6.4.4 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a0b51834..a9c89220 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.3", + "version": "6.4.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 013656e3..530207c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.3", + "version": "6.4.4", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From 7010a7d93aaf31b01d6aed9c943720a1f2c44083 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 23 Mar 2022 18:57:03 +0800 Subject: [PATCH 214/454] Update CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d8b391e..a95e1994 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,7 +77,9 @@ - [chore(deps): bump node-fetch from 2.6.6 to 2.6.7](https://github.com/log4js-node/log4js-node/pull/1167) - thanks [@Dependabot](https://github.com/dependabot) - [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@peteriman](https://github.com/peteriman) -## 6.4.0 +## 6.4.0 - BREAKING CHANGE 💥 +New default file permissions may cause external applications unable to read logs. +A manual code/configuration change is required. - [security: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) - [chore(docs): updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) From b8f16ccb5de645d19fa90f44081bffa287dd206c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 23 Mar 2022 19:07:48 +0800 Subject: [PATCH 215/454] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a95e1994..64487b0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -79,7 +79,7 @@ ## 6.4.0 - BREAKING CHANGE 💥 New default file permissions may cause external applications unable to read logs. -A manual code/configuration change is required. +A [manual code/configuration change](https://github.com/log4js-node/log4js-node/pull/1141#issuecomment-1076224470) is required. - [security: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) - [chore(docs): updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) From aeff6dc882c759a0ffea4a0d793bd011b37cfb53 Mon Sep 17 00:00:00 2001 From: Tobias Speicher Date: Sun, 27 Mar 2022 01:47:47 +0100 Subject: [PATCH 216/454] refactor: replace deprecated String.prototype.substr() .substr() is deprecated so we replace it with .slice() which works similarily but isn't deprecated Signed-off-by: Tobias Speicher --- lib/appenders/adapters.js | 4 ++-- lib/appenders/fileSync.js | 2 +- lib/appenders/multiprocess.js | 4 ++-- lib/categories.js | 4 ++-- lib/layouts.js | 8 ++++---- test/tap/layouts-test.js | 6 +++--- test/tap/multiprocess-test.js | 4 ++-- test/tap/tcp-appender-test.js | 5 +++-- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/lib/appenders/adapters.js b/lib/appenders/adapters.js index 727196ac..389c98b0 100644 --- a/lib/appenders/adapters.js +++ b/lib/appenders/adapters.js @@ -9,8 +9,8 @@ function maxFileSizeUnitTransform(maxLogSize) { G: 1024 * 1024 * 1024, }; const validUnit = Object.keys(units); - const unit = maxLogSize.substr(maxLogSize.length - 1).toLocaleUpperCase(); - const value = maxLogSize.substring(0, maxLogSize.length - 1).trim(); + const unit = maxLogSize.slice(-1).toLocaleUpperCase(); + const value = maxLogSize.slice(0, -1).trim(); if (validUnit.indexOf(unit) < 0 || !Number.isInteger(Number(value))) { throw Error(`maxLogSize: "${maxLogSize}" is invalid`); diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index d5db3992..16dc538e 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -93,7 +93,7 @@ class RollingFileSync { } function index(filename_) { - return parseInt(filename_.substring((`${path.basename(filename)}.`).length), 10) || 0; + return parseInt(filename_.slice((`${path.basename(filename)}.`).length), 10) || 0; } function byIndex(a, b) { diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index da74a620..95b5a9d3 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -40,9 +40,9 @@ function logServer(config, actualAppender, levels) { let event; logMessage += chunk || ''; if (logMessage.indexOf(END_MSG) > -1) { - event = logMessage.substring(0, logMessage.indexOf(END_MSG)); + event = logMessage.slice(0, logMessage.indexOf(END_MSG)); logTheMessage(event); - logMessage = logMessage.substring(event.length + END_MSG.length) || ''; + logMessage = logMessage.slice(event.length + END_MSG.length) || ''; // check for more, maybe it was a big chunk chunkReceived(); } diff --git a/lib/categories.js b/lib/categories.js index a1c194e2..18c3c1df 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -19,7 +19,7 @@ function inheritFromParent(config, category, categoryName) { if (category.inherit === false) return; const lastDotIndex = categoryName.lastIndexOf('.'); if (lastDotIndex < 0) return; // category is not a child - const parentCategoryName = categoryName.substring(0, lastDotIndex); + const parentCategoryName = categoryName.slice(0, lastDotIndex); let parentCategory = config.categories[parentCategoryName]; @@ -181,7 +181,7 @@ const configForCategory = (category) => { let sourceCategoryConfig; if (category.indexOf('.') > 0) { debug(`configForCategory: ${category} has hierarchy, cloning from parents`); - sourceCategoryConfig = { ...configForCategory(category.substring(0, category.lastIndexOf('.'))) }; + sourceCategoryConfig = { ...configForCategory(category.slice(0, category.lastIndexOf('.'))) }; } else { if (!categories.has('default')) { setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); diff --git a/lib/layouts.js b/lib/layouts.js index 5c2d6004..7bcf1e73 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -156,7 +156,7 @@ function patternLayout(pattern, tokens) { break; case 'ABSOLUTE': process.emitWarning( - "Pattern %d{ABSOLUTE} is deprecated in favor of %d{ABSOLUTETIME}. " + + "Pattern %d{ABSOLUTE} is deprecated in favor of %d{ABSOLUTETIME}. " + "Please use %d{ABSOLUTETIME} instead.", "DeprecationWarning", "log4js-node-DEP0003" ); @@ -301,7 +301,7 @@ function patternLayout(pattern, tokens) { function truncate(truncation, toTruncate) { let len; if (truncation) { - len = parseInt(truncation.substr(1), 10); + len = parseInt(truncation.slice(1), 10); // negative truncate length means truncate from end of string return len > 0 ? toTruncate.slice(0, len) : toTruncate.slice(len); } @@ -313,7 +313,7 @@ function patternLayout(pattern, tokens) { let len; if (padding) { if (padding.charAt(0) === '-') { - len = parseInt(padding.substr(1), 10); + len = parseInt(padding.slice(1), 10); // Right pad with spaces while (toPad.length < len) { toPad += ' '; @@ -358,7 +358,7 @@ function patternLayout(pattern, tokens) { const replacement = replaceToken(conversionCharacter, loggingEvent, specifier); formattedString += truncateAndPad(replacement, truncation, padding); } - searchString = searchString.substr(result.index + result[0].length); + searchString = searchString.slice(result.index + result[0].length); } return formattedString; }; diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index 713f63fa..5e5863ad 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -456,7 +456,7 @@ test("log4js layouts", batch => { "2010-12-05T14:18:30.045+10:00" ); - const DEP0003 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length; + const DEP0003 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length; testPattern( assert, layout, @@ -479,7 +479,7 @@ test("log4js layouts", batch => { "14:18:30.045" ); - const DEP0004 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length; + const DEP0004 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length; testPattern( assert, layout, @@ -585,7 +585,7 @@ test("log4js layouts", batch => { }); t.test("%f should accept truncation and padding", assert => { - testPattern(assert, layout, event, tokens, "%.5f", fileName.substring(0, 5)); + testPattern(assert, layout, event, tokens, "%.5f", fileName.slice(0, 5)); testPattern(assert, layout, event, tokens, "%20f{1}", " layouts-test.js"); testPattern(assert, layout, event, tokens, "%30.30f{2}", ` ${ path.join("tap","layouts-test.js")}`); testPattern(assert, layout, event, tokens, "%10.-5f{1}", " st.js"); diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index 2013ed79..4e615213 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -302,8 +302,8 @@ test("Multiprocess Appender", async batch => { data: ["an error message"] })}__LOG4JS__` ); - net.cbs.data(logString.substring(0, 10)); - net.cbs.data(logString.substring(10)); + net.cbs.data(logString.slice(0, 10)); + net.cbs.data(logString.slice(10)); net.cbs.data(logString + logString + logString); net.cbs.end( `${flatted.stringify({ diff --git a/test/tap/tcp-appender-test.js b/test/tap/tcp-appender-test.js index 293f6821..3e9fb198 100644 --- a/test/tap/tcp-appender-test.js +++ b/test/tap/tcp-appender-test.js @@ -306,11 +306,12 @@ test("TCP Appender", batch => { fakeNet.cbs.drain(); assert.equal(fakeNet.data.length, previousLength + 1); const raw = fakeNet.data[fakeNet.data.length - 1]; + const offset = raw.indexOf('__LOG4JS__'); assert.ok( - flatted.parse(raw.substring(0, raw.indexOf('__LOG4JS__'))).data[0].stack, + flatted.parse(raw.slice(0, offset !== -1 ? offset : 0)).data[0].stack, `Expected:\n\n${fakeNet.data[6]}\n\n to have a 'data[0].stack' property` ); - const actual = flatted.parse(raw.substring(0, raw.indexOf('__LOG4JS__'))).data[0].stack; + const actual = flatted.parse(raw.slice(0, offset !== -1 ? offset : 0)).data[0].stack; assert.match(actual, /^Error: Error test/); assert.end(); }); From 4276dae02615258f5f16e6510fe8e20e423f224e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Apr 2022 23:24:43 +0000 Subject: [PATCH 217/454] chore(deps): bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9c89220..e74c98a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3623,11 +3623,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true - }, "minipass": { "version": "3.1.6", "bundled": true, From 4a46bccfccac665aee5ab7c74159b35b38cea68f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 00:13:15 +0800 Subject: [PATCH 218/454] chore(dev): bump eslint from 8.11.0 to 8.13.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 530207c7..8f7a19cf 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.11.0", + "eslint": "^8.13.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From c9c3f9d3c0196d89b2c893474e3932f87a28ec6b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 00:13:50 +0800 Subject: [PATCH 219/454] chore(dev): bump eslint-plugin-import from 2.25.4 to 2.26.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f7a19cf..5d1695da 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-plugin-import": "^2.25.4", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.0.1", "husky": "^7.0.4", From e91456c018c9ce1266fa794e4490a3846bee769c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 00:14:16 +0800 Subject: [PATCH 220/454] chore(dev): bump tap from 16.0.0 to 16.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5d1695da..d353f7b1 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", - "tap": "^16.0.0", + "tap": "^16.0.1", "typescript": "^4.6.2", "validate-commit-msg": "^2.14.0" }, From 27f7104e34e504a46ca05d9c2a8cdd82d7a30f1f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 00:14:32 +0800 Subject: [PATCH 221/454] chore(dev): bump typescript from 4.6.2 to 4.6.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d353f7b1..05217af9 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.0.1", - "typescript": "^4.6.2", + "typescript": "^4.6.3", "validate-commit-msg": "^2.14.0" }, "browser": { From c4476319dc71fd935a433e117f9f07de35f892cd Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 00:14:41 +0800 Subject: [PATCH 222/454] chore(dep): updated package-lock.json --- package-lock.json | 469 +++++++++++++++++++++++----------------------- 1 file changed, 233 insertions(+), 236 deletions(-) diff --git a/package-lock.json b/package-lock.json index e74c98a3..678aee45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,25 +29,25 @@ "dev": true }, "@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", + "@babel/generator": "^7.17.9", "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "dependencies": { @@ -60,9 +60,9 @@ } }, "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -92,23 +92,13 @@ } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -176,20 +166,20 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -256,9 +246,9 @@ } }, "@babel/parser": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", - "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true }, "@babel/template": { @@ -273,18 +263,18 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -698,9 +688,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001319", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", - "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==", + "version": "1.0.30001327", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz", + "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==", "dev": true }, "chalk": { @@ -920,9 +910,9 @@ } }, "electron-to-chromium": { - "version": "1.4.89", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.89.tgz", - "integrity": "sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw==", + "version": "1.4.106", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz", + "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==", "dev": true }, "emoji-regex": { @@ -932,9 +922,9 @@ "dev": true }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -943,15 +933,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -989,9 +979,9 @@ "dev": true }, "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.2.1", @@ -1109,9 +1099,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -1119,14 +1109,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { @@ -1503,9 +1493,9 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "has": { "version": "1.0.3", @@ -1744,9 +1734,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -1769,10 +1759,13 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -2484,9 +2477,9 @@ "dev": true }, "prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "prettier-linter-helpers": { @@ -2813,9 +2806,9 @@ "dev": true }, "tap": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.0.0.tgz", - "integrity": "sha512-EnrFFUIn+/089C051WYPXxNlAnXJ1TkKerh0Osz9lK0Ynb+X5FWBEZxWcZLVKiucdTnV5g97NL8Xaw1CuAkj4Q==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.0.1.tgz", + "integrity": "sha512-y32sc4NFWzeOE1mrNvZoS1kRJADI8MCCSaatVBalCNVgusTf59h3t8mHZ3d0wSTQRs05JTOG52WC3KnWovhjPg==", "dev": true, "requires": { "@isaacs/import-jsx": "^4.0.1", @@ -2846,220 +2839,209 @@ "which": "^2.0.2" }, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@babel/code-frame": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { - "version": "7.16.0", + "version": "7.17.7", "bundled": true, "dev": true }, "@babel/core": { - "version": "7.16.0", + "version": "7.17.8", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.16.0", + "version": "7.17.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { - "version": "7.16.3", + "version": "7.17.7", "bundled": true, "dev": true, "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" } }, - "@babel/helper-function-name": { - "version": "7.16.0", + "@babel/helper-environment-visitor": { + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", + "@babel/helper-function-name": { + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", + "@babel/helper-get-function-arity": { + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", + "@babel/helper-hoist-variables": { + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", + "version": "7.17.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", + "version": "7.16.7", "bundled": true, "dev": true }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, "@babel/helper-simple-access": { - "version": "7.16.0", + "version": "7.17.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.17.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", + "version": "7.16.7", "bundled": true, "dev": true }, "@babel/helper-validator-option": { - "version": "7.14.5", + "version": "7.16.7", "bundled": true, "dev": true }, "@babel/helpers": { - "version": "7.16.3", + "version": "7.17.8", "bundled": true, "dev": true, "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.0", + "version": "7.16.10", "bundled": true, "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.16.3", + "version": "7.17.8", "bundled": true, "dev": true }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", + "version": "7.17.3", "bundled": true, "dev": true, "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" + "@babel/plugin-transform-parameters": "^7.16.7" } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -3071,65 +3053,66 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.16.0", + "version": "7.17.7", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-parameters": { - "version": "7.16.3", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.16.0", + "version": "7.17.3", "bundled": true, "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" } }, "@babel/template": { - "version": "7.16.0", + "version": "7.16.7", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/traverse": { - "version": "7.16.3", + "version": "7.17.3", "bundled": true, "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.16.0", + "version": "7.17.0", "bundled": true, "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -3147,24 +3130,25 @@ "make-dir": "^3.0.2", "resolve-from": "^3.0.0", "rimraf": "^3.0.0" - }, - "dependencies": { - "caller-callsite": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "callsites": "^3.1.0" - } - }, - "caller-path": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "caller-callsite": "^4.1.0" - } - } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "bundled": true, + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "bundled": true, + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "bundled": true, + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@types/prop-types": { @@ -3173,7 +3157,7 @@ "dev": true }, "@types/react": { - "version": "17.0.34", + "version": "17.0.41", "bundled": true, "dev": true, "requires": { @@ -3250,24 +3234,40 @@ } }, "browserslist": { - "version": "4.17.6", + "version": "4.20.2", "bundled": true, "dev": true, "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, + "caller-callsite": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "callsites": "^3.1.0" + } + }, + "caller-path": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "caller-callsite": "^4.1.0" + } + }, "callsites": { "version": "3.1.0", "bundled": true, "dev": true }, "caniuse-lite": { - "version": "1.0.30001279", + "version": "1.0.30001319", "bundled": true, "dev": true }, @@ -3362,12 +3362,12 @@ "dev": true }, "csstype": { - "version": "3.0.9", + "version": "3.0.11", "bundled": true, "dev": true }, "debug": { - "version": "4.3.2", + "version": "4.3.4", "bundled": true, "dev": true, "requires": { @@ -3375,7 +3375,7 @@ } }, "electron-to-chromium": { - "version": "1.3.893", + "version": "1.4.89", "bundled": true, "dev": true }, @@ -3574,12 +3574,9 @@ "dev": true }, "json5": { - "version": "2.2.0", + "version": "2.2.1", "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "dev": true }, "locate-path": { "version": "5.0.0", @@ -3616,7 +3613,7 @@ "dev": true }, "minimatch": { - "version": "3.0.4", + "version": "3.1.2", "bundled": true, "dev": true, "requires": { @@ -3637,7 +3634,7 @@ "dev": true }, "node-releases": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "dev": true }, @@ -3726,7 +3723,7 @@ } }, "react-devtools-core": { - "version": "4.21.0", + "version": "4.24.1", "bundled": true, "dev": true, "requires": { @@ -3799,7 +3796,7 @@ "dev": true }, "signal-exit": { - "version": "3.0.6", + "version": "3.0.7", "bundled": true, "dev": true }, @@ -4040,7 +4037,7 @@ "dev": true }, "ws": { - "version": "7.5.5", + "version": "7.5.7", "bundled": true, "dev": true }, @@ -4175,14 +4172,14 @@ "dev": true }, "tsconfig-paths": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", - "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, @@ -4211,9 +4208,9 @@ } }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "unbox-primitive": { From b4c45b564b1e34bb72e1fa900f21f32286047f1a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 30 Mar 2022 03:53:29 +0800 Subject: [PATCH 223/454] chore(fix): fileDepth for ESM --- lib/layouts.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/layouts.js b/lib/layouts.js index 7bcf1e73..a762e4d0 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -2,6 +2,7 @@ const dateFormat = require('date-format'); const os = require('os'); const util = require('util'); const path = require('path'); +const url = require('url'); const debug = require('debug')('log4js:layouts'); const styles = { @@ -250,6 +251,35 @@ function patternLayout(pattern, tokens) { function fileName(loggingEvent, specifier) { let filename = loggingEvent.fileName || ''; + + // support for ESM as it uses url instead of path for file + /* istanbul ignore next: unsure how to simulate ESM for test coverage */ + const convertFileURLToPath = function(filepath) { + const urlPrefix = 'file://'; + if (filepath.startsWith(urlPrefix)) { + // https://nodejs.org/api/url.html#urlfileurltopathurl + if (typeof url.fileURLToPath === 'function') { + filepath = url.fileURLToPath(filepath); + } + // backward-compatible for nodejs pre-10.12.0 (without url.fileURLToPath method) + else { + // posix: file:///hello/world/foo.txt -> /hello/world/foo.txt -> /hello/world/foo.txt + // win32: file:///C:/path/foo.txt -> /C:/path/foo.txt -> \C:\path\foo.txt -> C:\path\foo.txt + // win32: file://nas/foo.txt -> //nas/foo.txt -> nas\foo.txt -> \\nas\foo.txt + filepath = path.normalize(filepath.replace(new RegExp(`^${urlPrefix}`), '')); + if (process.platform === 'win32') { + if (filepath.startsWith('\\')) { + filepath = filepath.slice(1); + } else { + filepath = path.sep + path.sep + filepath; + } + } + } + } + return filepath; + }; + filename = convertFileURLToPath(filename); + if (specifier) { const fileDepth = parseInt(specifier, 10); const fileList = filename.split(path.sep); From e61dbcc22d061f5a8a9b964f1f2afe53973e6855 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 11 Apr 2022 17:58:13 +0800 Subject: [PATCH 224/454] chore(docs): updated typescript usage --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 74fd8824..68dc4211 100644 --- a/README.md +++ b/README.md @@ -99,16 +99,15 @@ There's also [an example application](https://github.com/log4js-node/log4js-exam ## TypeScript ```ts -import { configure, getLogger } from "log4js"; -configure("./filename"); -const logger = getLogger(); -logger.level = "debug"; -logger.debug("Some debug messages"); - -configure({ +import log4js from "log4js"; +log4js.configure({ appenders: { cheese: { type: "file", filename: "cheese.log" } }, categories: { default: { appenders: ["cheese"], level: "error" } } }); + +const logger = log4js.getLogger(); +logger.level = "debug"; +logger.debug("Some debug messages"); ``` ## Contributing From c0a63b3bc7f43f9160a99f51c51e3fcb577fc55f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 13 Apr 2022 00:27:33 +0800 Subject: [PATCH 225/454] chore(fix): deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack --- lib/LoggingEvent.js | 10 +++++++++- test/tap/LoggingEvent-test.js | 14 +++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index 4d36cb9c..f30e5ee1 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -65,11 +65,19 @@ class LoggingEvent { } return value; }); + rehydratedEvent.location = { + functionName: rehydratedEvent.functionName, + fileName: rehydratedEvent.fileName, + lineNumber: rehydratedEvent.lineNumber, + columnNumber: rehydratedEvent.columnNumber, + callStack: rehydratedEvent.callStack + }; event = new LoggingEvent( rehydratedEvent.categoryName, levels.getLevel(rehydratedEvent.level.levelStr), rehydratedEvent.data, - rehydratedEvent.context + rehydratedEvent.context, + rehydratedEvent.location ); event.startTime = new Date(rehydratedEvent.startTime); event.pid = rehydratedEvent.pid; diff --git a/test/tap/LoggingEvent-test.js b/test/tap/LoggingEvent-test.js index a9f64871..f8c8ec35 100644 --- a/test/tap/LoggingEvent-test.js +++ b/test/tap/LoggingEvent-test.js @@ -32,7 +32,13 @@ test("LoggingEvent", batch => { levelStr: "INFO" }, data: ["some log message", { x: 1 }], - context: { thing: "otherThing" } + context: { thing: "otherThing" }, + pid: "1234", + functionName: "bound", + fileName: "domain.js", + lineNumber: 421, + columnNumber: 15, + callStack: "at bound (domain.js:421:15)\n" }); const event = LoggingEvent.deserialise(dehydratedEvent); t.type(event, LoggingEvent); @@ -42,6 +48,12 @@ test("LoggingEvent", batch => { t.equal(event.data[0], "some log message"); t.equal(event.data[1].x, 1); t.equal(event.context.thing, "otherThing"); + t.equal(event.pid, "1234"); + t.equal(event.functionName, "bound"); + t.equal(event.fileName, "domain.js"); + t.equal(event.lineNumber, 421); + t.equal(event.columnNumber, 15); + t.equal(event.callStack, "at bound (domain.js:421:15)\n"); t.end(); }); From 92e84db7df8d084a9967971d179d8e56b6eb0faa Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 13 Apr 2022 00:49:11 +0800 Subject: [PATCH 226/454] chore(types): LogEvent types --- types/log4js.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index ca9cd8e7..89152586 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -66,6 +66,11 @@ export interface LoggingEvent { workerId: number; worker: number; }; + functionName?: string; + fileName?: string; + lineNumber?: number; + columnNumber?: number; + callStack?: string; } export type Token = ((logEvent: LoggingEvent) => string) | string; From dcd4b4327507365e81c53e3b91a9760d3fcc24c7 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 15 Apr 2022 18:50:36 +0800 Subject: [PATCH 227/454] chore(dep): bump date-format from 4.0.6 to 4.0.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 05217af9..44859b48 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.6", + "date-format": "^4.0.7", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 58ee293528f09c76ff1c9f645e4cca32e3eb12de Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 15 Apr 2022 18:50:57 +0800 Subject: [PATCH 228/454] chore(dep): bump streamroller from 3.0.6 to 3.0.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 44859b48..59ca7e97 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.6" + "streamroller": "^3.0.7" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 98ae5c987cc72cc1debbfa54bb08a6bde498206e Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 15 Apr 2022 18:51:17 +0800 Subject: [PATCH 229/454] chore(dep): updated package-lock.json --- package-lock.json | 82 +++++++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 678aee45..82637e9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -581,14 +581,15 @@ } }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "async-hook-domain": { @@ -688,9 +689,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001327", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz", - "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==", + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", "dev": true }, "chalk": { @@ -838,9 +839,9 @@ } }, "date-format": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", - "integrity": "sha512-B9vvg5rHuQ8cbUXE/RMWMyX2YA5TecT3jKF5fLtGNlzPlU7zblSPmAm2OImDbWL+LDOQ6pUm+4LOFz+ywS41Zw==" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.7.tgz", + "integrity": "sha512-k5xqlzDGIfv2N/DHR/BR8Kc4N9CRy9ReuDkmdxeX/jNfit94QXd36emWMm40ZOEDKNm/c91yV9EO3uGPkR7wWQ==" }, "debug": { "version": "4.3.4", @@ -886,12 +887,13 @@ } }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "diff": { @@ -910,9 +912,9 @@ } }, "electron-to-chromium": { - "version": "1.4.106", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz", - "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==", + "version": "1.4.109", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.109.tgz", + "integrity": "sha512-LCF+Oqs2Oqwf8M3oc8T59Wi9C0xpL1qVyqIR6bPTCl8uPvln7G184L39tO4SE4Dyg/Kp1RjAz//BKMvi0uvw4w==", "dev": true }, "emoji-regex": { @@ -922,9 +924,9 @@ "dev": true }, "es-abstract": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", - "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -938,7 +940,7 @@ "is-callable": "^1.2.4", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", "object-inspect": "^1.12.0", @@ -949,6 +951,15 @@ "unbox-primitive": "^1.0.1" } }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -1518,6 +1529,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1569,9 +1589,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -2127,9 +2147,9 @@ } }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", "dev": true }, "normalize-path": { @@ -2723,11 +2743,11 @@ } }, "streamroller": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.6.tgz", - "integrity": "sha512-Qz32plKq/MZywYyhEatxyYc8vs994Gz0Hu2MSYXXLD233UyPeIeRBZARIIGwFer4Mdb8r3Y2UqKkgyDghM6QCg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.7.tgz", + "integrity": "sha512-kh68kwiDGuIPiPDWwRbEC5us+kfARP1e9AsQiaLaSqGrctOvMn0mtL8iNY3r4/o5nIoYi3gPI1jexguZsXDlxw==", "requires": { - "date-format": "^4.0.6", + "date-format": "^4.0.7", "debug": "^4.3.4", "fs-extra": "^10.0.1" } From 255c037e39ef85a8e07a895f62ed9d81148e1013 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 15 Apr 2022 19:03:32 +0800 Subject: [PATCH 230/454] chore(docs): updated changelog for 6.4.5 --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64487b0d..8333e7bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # log4js-node Changelog +## 6.4.5 + +- [chore(fix): deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@peteriman](https://github.com/peteriman) +- [chore(fix): fileDepth for ESM](https://github.com/log4js-node/log4js-node/pull/1224) - thanks [@peteriman](https://github.com/peteriman) +- [chore(refactor): replace deprecated String.prototype.substr()](https://github.com/log4js-node/log4js-node/pull/1223) - thanks [@CommanderRoot](https://github.com/CommanderRoot) +- [chore(types): LogEvent types](https://github.com/log4js-node/log4js-node/pull/1231) - thanks [@peteriman](https://github.com/peteriman) +- [chore(docs): updated typescript usage](https://github.com/log4js-node/log4js-node/pull/1229) - thanks [@peteriman](https://github.com/peteriman) +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@peteriman](https://github.com/peteriman) + - chore(dep): bump date-format from 4.0.6 to 4.0.7 + - chore(dep): bump streamroller from 3.0.6 to 3.0.7 + - updated package-lock.json +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@peteriman](https://github.com/peteriman) + - chore(dev): bump eslint from 8.11.0 to 8.13.0 + - chore(dev): bump eslint-plugin-import from 2.25.4 to 2.26.0 + - chore(dev): bump tap from 16.0.0 to 16.0.1 + - chore(dev): bump typescript from 4.6.2 to 4.6.3 + - updated package-lock.json +- [chore(deps): bump minimist from 1.2.5 to 1.2.6](https://github.com/log4js-node/log4js-node/pull/1227) - thanks [@Dependabot](https://github.com/dependabot) + ## 6.4.4 - [chore(fix): set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) From 040ae00794c68103ba131211bfd9c7c5b7b18c9d Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 15 Apr 2022 11:10:32 +0000 Subject: [PATCH 231/454] 6.4.5 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82637e9d..bda7453c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.4", + "version": "6.4.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 59ca7e97..b38ee35c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.4", + "version": "6.4.5", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From a2fb9ce50ba891d9695aad225996e006475fbd6e Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 17 Apr 2022 23:50:31 +0800 Subject: [PATCH 232/454] chore(dep): bump fs-extra from 10.0.1 to 10.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b38ee35c..ebd3fca3 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", - "fs-extra": "^10.0.1", + "fs-extra": "^10.1.0", "husky": "^7.0.4", "nyc": "^15.1.0", "prettier": "^2.6.0", From 90d0ad8a0a3e6069d61906aa050dfca36d5782a9 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 17 Apr 2022 23:51:04 +0800 Subject: [PATCH 233/454] chore(dep): updated package-lock.json --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index bda7453c..67e4a488 100644 --- a/package-lock.json +++ b/package-lock.json @@ -912,9 +912,9 @@ } }, "electron-to-chromium": { - "version": "1.4.109", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.109.tgz", - "integrity": "sha512-LCF+Oqs2Oqwf8M3oc8T59Wi9C0xpL1qVyqIR6bPTCl8uPvln7G184L39tO4SE4Dyg/Kp1RjAz//BKMvi0uvw4w==", + "version": "1.4.111", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.111.tgz", + "integrity": "sha512-/s3+fwhKf1YK4k7btOImOzCQLpUjS6MaPf0ODTNuT4eTM1Bg4itBpLkydhOzJmpmH6Z9eXFyuuK5czsmzRzwtw==", "dev": true }, "emoji-regex": { @@ -1392,9 +1392,9 @@ "dev": true }, "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", From 6a08fc5a58d0bb0351ba6e5b07c81fc83573249f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 11:30:20 +0800 Subject: [PATCH 234/454] chore(dev): bump eslint from 8.13.0 to 8.14.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ebd3fca3..028aacde 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.13.0", + "eslint": "^8.14.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From 7d0559574290ab3991b28ac643ad682c6a4c797d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 12:27:31 +0800 Subject: [PATCH 235/454] chore(dep): bump date-format from 4.0.7 to 4.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 028aacde..a579b108 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.7", + "date-format": "^4.0.9", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", From b0008ca66d39c6180f4e326e62bc9ee26c4993c5 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 12:53:01 +0800 Subject: [PATCH 236/454] chore(dep): bump streamroller from 3.0.7 to 3.0.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a579b108..1bea5fe9 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.7" + "streamroller": "^3.0.8" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 713b89de6c30a1be6a54e094befda2d9453b5a42 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 12:53:12 +0800 Subject: [PATCH 237/454] chore(dep): updated package-lock.json --- package-lock.json | 78 +++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 67e4a488..f48a408a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -299,9 +299,9 @@ } }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -426,9 +426,9 @@ "dev": true }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -438,9 +438,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -636,15 +636,15 @@ } }, "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" } }, @@ -839,9 +839,9 @@ } }, "date-format": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.7.tgz", - "integrity": "sha512-k5xqlzDGIfv2N/DHR/BR8Kc4N9CRy9ReuDkmdxeX/jNfit94QXd36emWMm40ZOEDKNm/c91yV9EO3uGPkR7wWQ==" + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.9.tgz", + "integrity": "sha512-+8J+BOUpSrlKLQLeF8xJJVTxS8QfRSuJgwxSVvslzgO3E6khbI0F5mMEPf5mTYhCCm4h99knYP6H3W9n3BQFrg==" }, "debug": { "version": "4.3.4", @@ -912,9 +912,9 @@ } }, "electron-to-chromium": { - "version": "1.4.111", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.111.tgz", - "integrity": "sha512-/s3+fwhKf1YK4k7btOImOzCQLpUjS6MaPf0ODTNuT4eTM1Bg4itBpLkydhOzJmpmH6Z9eXFyuuK5czsmzRzwtw==", + "version": "1.4.118", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", + "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==", "dev": true }, "emoji-regex": { @@ -990,12 +990,12 @@ "dev": true }, "eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1518,9 +1518,9 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -1703,9 +1703,9 @@ "dev": true }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -2024,9 +2024,9 @@ } }, "libtap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.3.0.tgz", - "integrity": "sha512-yU5uSY987sVwpWiR5h84ZM96bxvmCQFZ/bOEJ1M7+Us8oez25fLmmLNGFRFGWi2PzuLqAzqzESH7HCaZ/b9IZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", + "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", "dev": true, "requires": { "async-hook-domain": "^2.0.4", @@ -2743,13 +2743,13 @@ } }, "streamroller": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.7.tgz", - "integrity": "sha512-kh68kwiDGuIPiPDWwRbEC5us+kfARP1e9AsQiaLaSqGrctOvMn0mtL8iNY3r4/o5nIoYi3gPI1jexguZsXDlxw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.8.tgz", + "integrity": "sha512-VI+ni3czbFZrd1MrlybxykWZ8sMDCMtTU7YJyhgb9M5X6d1DDxLdJr+gSnmRpXPMnIWxWKMaAE8K0WumBp3lDg==", "requires": { - "date-format": "^4.0.7", + "date-format": "^4.0.9", "debug": "^4.3.4", - "fs-extra": "^10.0.1" + "fs-extra": "^10.1.0" } }, "string-width": { From d7c06a0899ff31ef59305f556c1337c7757100b7 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 14:36:06 +0800 Subject: [PATCH 238/454] chore(docs): updated changelog for 6.4.6 --- CHANGELOG.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8333e7bc..2821c20d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # log4js-node Changelog +## 6.4.6 + +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1236) - thanks [@peteriman](https://github.com/peteriman) + - chore(dev): bump eslint from 8.13.0 to 8.14.0 + - chore(dep): bump date-format from 4.0.7 to 4.0.9 + - chore(dep): bump streamroller from 3.0.7 to 3.0.8 + - resolved [#1216](https://github.com/log4js-node/log4js-node/issues/1216) where promise rejection is not handled ([streamroller@3.0.8 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - updated package-lock.json +- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1234) - thanks [@peteriman](https://github.com/peteriman) + - chore(dep): bump fs-extra from 10.0.1 to 10.1.0 + - updated package-lock.json + ## 6.4.5 - [chore(fix): deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@peteriman](https://github.com/peteriman) @@ -10,6 +22,7 @@ - [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@peteriman](https://github.com/peteriman) - chore(dep): bump date-format from 4.0.6 to 4.0.7 - chore(dep): bump streamroller from 3.0.6 to 3.0.7 + - resolved [#1225](https://github.com/log4js-node/log4js-node/issues/1225) where fs-extra throws error when fs.realpath.native is undefined ([streamroller@3.0.7 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - updated package-lock.json - [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@peteriman](https://github.com/peteriman) - chore(dev): bump eslint from 8.11.0 to 8.13.0 @@ -74,7 +87,7 @@ - [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1194) - thanks [@peteriman](https://github.com/peteriman) - chore(deps): bump date-format from 4.0.3 to 4.0.4 - chore(deps): bump streamroller from 3.0.2 to 3.0.4 - - issue: addresses compatibility issue with directory creation for NodeJS < 10.12.0 ([#1189](https://github.com/log4js-node/log4js-node/issues/1189)) - details: [streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) + - resolved [#1189](https://github.com/log4js-node/log4js-node/issues/1189) for an compatibility issue with directory creation for NodeJS < 10.12.0 ([streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - chore(deps-dev): bump eslint from 8.8.0 to 8.10.0 - chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 - chore(deps-dev): bump fs-extra from 10.0.0 to 10.0.1 @@ -135,8 +148,8 @@ A [manual code/configuration change](https://github.com/log4js-node/log4js-node/ - [feat: allows for zero backups](https://github.com/log4js-node/log4js-node/pull/1151) - thanks [@peteriman](https://github.com/peteriman) - [api: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@peteriman](https://github.com/peteriman) - [bug: compressed file ignores dateFile appender "mode"](https://github.com/log4js-node/streamroller/pull/65) - thanks [@rnd-debug](https://github.com/rnd-debug) - - issue: addresses additional separator in filename ([#1039](https://github.com/log4js-node/log4js-node/issues/1039)) - details: [streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) - - issue: addresses daysToKeep naming confusion ([#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080)) - details: [streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md) + - resolved [#1039](https://github.com/log4js-node/log4js-node/issues/1039) where there is an additional separator in filename ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - resolved [#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080) for daysToKeep naming confusion ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - [chore(deps): bump date-format from 3.0.0 to 4.0.2](https://github.com/log4js-node/log4js-node/pull/1134) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps): Updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@peteriman](https://github.com/peteriman) - eslint-config-prettier from 6.15.0 to 8.3.0 From d97243b0aa6969338136a6c99dca95473d60db0b Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 25 Apr 2022 06:52:26 +0000 Subject: [PATCH 239/454] 6.4.6 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f48a408a..545e1acc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.5", + "version": "6.4.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1bea5fe9..cf9eda16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.5", + "version": "6.4.6", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From bae9c998094bb7310c48a5665b026d7eed46aa03 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 14:54:10 +0800 Subject: [PATCH 240/454] chore(dev): bump tap from 16.0.1 to 16.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf9eda16..0f216289 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", - "tap": "^16.0.1", + "tap": "^16.1.0", "typescript": "^4.6.3", "validate-commit-msg": "^2.14.0" }, From c7e2d8eeb73a13b7e359dee6ac3f3e4ab4aee930 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Apr 2022 14:54:37 +0800 Subject: [PATCH 241/454] chore(dep): updated package-lock.json --- package-lock.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 545e1acc..774c282c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2826,9 +2826,9 @@ "dev": true }, "tap": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.0.1.tgz", - "integrity": "sha512-y32sc4NFWzeOE1mrNvZoS1kRJADI8MCCSaatVBalCNVgusTf59h3t8mHZ3d0wSTQRs05JTOG52WC3KnWovhjPg==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.1.0.tgz", + "integrity": "sha512-EFERYEEDCLjvsT+B+z/qAVuxh5JPEmtn0aGh1ZT/2BN5nVLm6VbcL9fR/Y2FtsxvHuEC3Q2xLc1n1h7mnWVP9w==", "dev": true, "requires": { "@isaacs/import-jsx": "^4.0.1", @@ -2842,7 +2842,7 @@ "isexe": "^2.0.0", "istanbul-lib-processinfo": "^2.0.2", "jackspeak": "^1.4.1", - "libtap": "^1.3.0", + "libtap": "^1.4.0", "minipass": "^3.1.1", "mkdirp": "^1.0.4", "nyc": "^15.1.0", @@ -4234,14 +4234,14 @@ "dev": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, From 480c81aa9ad14e16ea6aa3f11b94d17144d18681 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 11 May 2022 13:46:21 +0800 Subject: [PATCH 242/454] chore(docs): updated comments in typescript def - based on faef3d20f643a9e1a29883f493cdbe893a47de77 - based on d894f573058d50f6c41e9048f46fadc037097b16 - based on e2947474c719d891b282858a4509fa8292f7ac22 - based on https://github.com/log4js-node/log4js-node/pull/1182 - based on https://github.com/log4js-node/log4js-node/pull/1181 --- types/log4js.d.ts | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 89152586..76aa197b 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -133,32 +133,39 @@ export interface FileAppender { type: 'file'; // the path of the file where you want your logs written. filename: string; - // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. + // (defaults to MAX_SAFE_INTEGER) the maximum size (in bytes) for the log file. maxLogSize?: number | string; - // (default value = 5) - the number of old log files to keep during log rolling. + // (defaults to 5) the number of old log files to keep. backups?: number; - // defaults to basic layout + // (defaults to basic layout) layout?: Layout; - compress?: boolean; // compress the backups - // keep the file extension when rotating logs - keepFileExt?: boolean; + // (defaults to utf-8) encoding?: string; + // (defaults to 0o600) mode?: number; + // (defaults to a) flags?: string; + // (defaults to false) compress the backup files using gzip (backup files will have .gz extension) + compress?: boolean; + // (defaults to false) preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). + keepFileExt?: boolean; } export interface SyncfileAppender { type: 'fileSync'; // the path of the file where you want your logs written. filename: string; - // the maximum size (in bytes) for the log file. If not specified, then no log rolling will happen. + // (defaults to undefined) the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. maxLogSize?: number | string; - // (default value = 5) - the number of old log files to keep during log rolling. + // (defaults to 5) the number of old log files to keep. backups?: number; - // defaults to basic layout + // (defaults to basic layout) layout?: Layout; + // (defaults to utf-8) encoding?: string; + // (defaults to 0o600) mode?: number; + // (defaults to a) flags?: string; } @@ -166,9 +173,7 @@ export interface DateFileAppender { type: 'dateFile'; // the path of the file where you want your logs written. filename: string; - // defaults to basic layout - layout?: Layout; - // defaults to .yyyy-MM-dd - the pattern to use to determine when to roll the logs. + // (defaults to yyyy-MM-dd) the pattern to use to determine when to roll the logs. /** * The following strings are recognised in the pattern: * - yyyy : the full year, use yy for just the last two digits @@ -181,19 +186,21 @@ export interface DateFileAppender { * - O : timezone (capital letter o) */ pattern?: string; - // default “utf-8” + // (defaults to basic layout) + layout?: Layout; + // (defaults to utf-8) encoding?: string; - // default 0600 + // (defaults to 0o600) mode?: number; - // default ‘a’ + // (defaults to a) flags?: string; - // compress the backup files during rolling (backup files will have .gz extension)(default false) + // (defaults to false) compress the backup files using gzip (backup files will have .gz extension) compress?: boolean; - // include the pattern in the name of the current log file as well as the backups.(default false) - alwaysIncludePattern?: boolean; - // keep the file extension when rotating logs + // (defaults to false) preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). keepFileExt?: boolean; - // if this value is greater than zero, then files older than that many days will be deleted during log rolling.(default 0) + // (defaults to false) include the pattern in the name of the current log file. + alwaysIncludePattern?: boolean; + // (defaults to 1) the number of old files that matches the pattern to keep (excluding the hot file). numBackups?: number; } From 126e286c1a56892f3962a5621e46c8ddf4b41510 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 00:56:18 +0800 Subject: [PATCH 243/454] chore(docs): updated documentation --- docs/connect-logger.md | 2 +- docs/file.md | 2 +- docs/fileSync.md | 2 +- types/log4js.d.ts | 36 ++++++++++++++++++------------------ 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/connect-logger.md b/docs/connect-logger.md index c41c1bb1..d7f428da 100644 --- a/docs/connect-logger.md +++ b/docs/connect-logger.md @@ -50,7 +50,7 @@ app.use(log4js.connectLogger(logger, { When you request of POST, you want to log the request body parameter like JSON. The log format function is very useful. -Please use log format function instead “tokens” property for use express's request or response. +Please use log format function instead "tokens" property for use express's request or response. ```javascript diff --git a/docs/file.md b/docs/file.md index ed8536a4..638e575d 100644 --- a/docs/file.md +++ b/docs/file.md @@ -7,7 +7,7 @@ The file appender writes log events to a file. It supports an optional maximum f * `type` - `"file"` * `filename` - `string` - the path of the file where you want your logs written. * `maxLogSize` - `integer` (optional, defaults to MAX_SAFE_INTEGER) - the maximum size (in bytes) for the log file. -* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling. +* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): diff --git a/docs/fileSync.md b/docs/fileSync.md index a73ca26c..98a61f62 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -7,7 +7,7 @@ The sync file appender writes log events to a file, the only difference to the n * `type` - `"fileSync"` * `filename` - `string` - the path of the file where you want your logs written. * `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. -* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling. +* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying node.js core stream implementation: diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 76aa197b..36e74bdc 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -27,7 +27,7 @@ export const levels: Levels; export function shutdown(cb?: (error: Error) => void): void | null; -export interface BaseLayout { +export interface BasicLayout { type: 'basic'; } @@ -88,7 +88,7 @@ export interface CustomLayout { type: string; } -export type Layout = BaseLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; +export type Layout = BasicLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; /** * Category Filter @@ -125,7 +125,7 @@ export interface NoLogFilterAppender { */ export interface ConsoleAppender { type: 'console'; - // defaults to colouredLayout + // (defaults to ColoredLayout) layout?: Layout; } @@ -135,9 +135,9 @@ export interface FileAppender { filename: string; // (defaults to MAX_SAFE_INTEGER) the maximum size (in bytes) for the log file. maxLogSize?: number | string; - // (defaults to 5) the number of old log files to keep. + // (defaults to 5) the number of old log files to keep (excluding the hot file). backups?: number; - // (defaults to basic layout) + // (defaults to BasicLayout) layout?: Layout; // (defaults to utf-8) encoding?: string; @@ -157,9 +157,9 @@ export interface SyncfileAppender { filename: string; // (defaults to undefined) the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. maxLogSize?: number | string; - // (defaults to 5) the number of old log files to keep. + // (defaults to 5) the number of old log files to keep (excluding the hot file). backups?: number; - // (defaults to basic layout) + // (defaults to BasicLayout) layout?: Layout; // (defaults to utf-8) encoding?: string; @@ -186,7 +186,7 @@ export interface DateFileAppender { * - O : timezone (capital letter o) */ pattern?: string; - // (defaults to basic layout) + // (defaults to BasicLayout) layout?: Layout; // (defaults to utf-8) encoding?: string; @@ -210,7 +210,7 @@ export interface LogLevelFilterAppender { appender: string; // the minimum level of event to allow through the filter level: string; - // (defaults to FATAL) - the maximum level of event to allow through the filter + // (defaults to FATAL) the maximum level of event to allow through the filter maxLevel?: string; } @@ -228,11 +228,11 @@ export interface MultiprocessAppender { type: 'multiprocess'; // controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. mode: 'master' | 'worker'; - // (only needed if mode == master)- the name of the appender to send the log events to + // (only needed if mode == master) the name of the appender to send the log events to appender?: string; - // (defaults to 5000) - the port to listen on, or send to + // (defaults to 5000) the port to listen on, or send to loggerPort?: number; - // (defaults to localhost) - the host/IP address to listen on, or send to + // (defaults to localhost) the host/IP address to listen on, or send to loggerHost?: string; } @@ -242,13 +242,13 @@ export interface RecordingAppender { export interface StandardErrorAppender { type: 'stderr'; - // (defaults to colouredLayout) + // (defaults to ColoredLayout) layout?: Layout; } export interface StandardOutputAppender { type: 'stdout'; - // (defaults to colouredLayout) + // (defaults to ColoredLayout) layout?: Layout; } @@ -259,13 +259,13 @@ export interface StandardOutputAppender { */ export interface TCPAppender { type: 'tcp'; - // defaults to 5000 + // (defaults to 5000) port?: number - // defaults to localhost + // (defaults to localhost) host?: string - // default to __LOG4JS__ + // (defaults to __LOG4JS__) endMsg?: string - // defaults to a serialized log event + // (defaults to a serialized log event) layout?: Layout; } From d9d2d8d9210f936efc7fbce7d68605b414a83db8 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 00:56:44 +0800 Subject: [PATCH 244/454] chore(type): added fileNameSep for FileAppender and DateFileAppender - based on https://github.com/log4js-node/log4js-node/pull/1182 - based on https://github.com/log4js-node/log4js-node/pull/1181 --- types/log4js.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 36e74bdc..2b69dc9f 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -149,6 +149,8 @@ export interface FileAppender { compress?: boolean; // (defaults to false) preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). keepFileExt?: boolean; + // (defaults to .) the filename separator when rolling. e.g.: abc.log`.`1 or abc`.`1.log (keepFileExt) + fileNameSep?: string; } export interface SyncfileAppender { @@ -198,6 +200,8 @@ export interface DateFileAppender { compress?: boolean; // (defaults to false) preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). keepFileExt?: boolean; + // (defaults to .) the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) + fileNameSep?: string; // (defaults to false) include the pattern in the name of the current log file. alwaysIncludePattern?: boolean; // (defaults to 1) the number of old files that matches the pattern to keep (excluding the hot file). From 6d44dc3751df7739d38b30288f4de909abe1f273 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 03:07:30 +0800 Subject: [PATCH 245/454] chore(dev): bump eslint from 8.14.0 to 8.15.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0f216289..6433fd82 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.14.0", + "eslint": "^8.15.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From a7f64f3adc1b7367b400c2546659c77e1093be9d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 03:08:07 +0800 Subject: [PATCH 246/454] chore(dev): bump husky from 7.0.4 to 8.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6433fd82..462b5abc 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.1.0", - "husky": "^7.0.4", + "husky": "^8.0.1", "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", From e40cb48c1e22579bc58de60a67547a2922d52205 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 03:08:44 +0800 Subject: [PATCH 247/454] chore(dev): bump tap from 16.1.0 to 16.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 462b5abc..d7c91f8b 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", - "tap": "^16.1.0", + "tap": "^16.2.0", "typescript": "^4.6.3", "validate-commit-msg": "^2.14.0" }, From 567d93772c045fba32d4bb15d842305e42e7ab0b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 03:09:04 +0800 Subject: [PATCH 248/454] chore(dev): bump typescript from 4.6.3 to 4.6.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7c91f8b..b2171dfd 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.2.0", - "typescript": "^4.6.3", + "typescript": "^4.6.4", "validate-commit-msg": "^2.14.0" }, "browser": { From 313553e12ff4706414a412b8b357c2db25b71fff Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 13 May 2022 00:00:16 +0800 Subject: [PATCH 249/454] chore(docs): added spacing for consistent formatting --- docs/dateFile.md | 2 +- docs/file.md | 2 +- docs/fileSync.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dateFile.md b/docs/dateFile.md index b90fbd34..6ec289f4 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -11,7 +11,7 @@ This is a file appender that rolls log files based on a configurable time, rathe Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) * `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). diff --git a/docs/file.md b/docs/file.md index 638e575d..f8f63f49 100644 --- a/docs/file.md +++ b/docs/file.md @@ -12,7 +12,7 @@ The file appender writes log events to a file. It supports an optional maximum f Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) * `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) * `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). diff --git a/docs/fileSync.md b/docs/fileSync.md index 98a61f62..cad20b4c 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -12,7 +12,7 @@ The sync file appender writes log events to a file, the only difference to the n Any other configuration parameters will be passed to the underlying node.js core stream implementation: * `encoding` - `string` (default "utf-8") -* `mode`- `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) * `flags` - `string` (default 'a') ## Example From c0de05120da09c41daa20674af38cd869a763345 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 13 May 2022 00:19:46 +0800 Subject: [PATCH 250/454] chore(docs): updated usage of units for maxLogSize --- docs/file.md | 1 + docs/fileSync.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/file.md b/docs/file.md index f8f63f49..22797238 100644 --- a/docs/file.md +++ b/docs/file.md @@ -7,6 +7,7 @@ The file appender writes log events to a file. It supports an optional maximum f * `type` - `"file"` * `filename` - `string` - the path of the file where you want your logs written. * `maxLogSize` - `integer` (optional, defaults to MAX_SAFE_INTEGER) - the maximum size (in bytes) for the log file. + `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. * `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) diff --git a/docs/fileSync.md b/docs/fileSync.md index cad20b4c..a8f75c0b 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -6,7 +6,8 @@ The sync file appender writes log events to a file, the only difference to the n * `type` - `"fileSync"` * `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. +* `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. + `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. * `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) From 2905e0c12f3515d5831a119bd6d8d80f7858b1ce Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 13 May 2022 02:59:31 +0800 Subject: [PATCH 251/454] chore(fix): dateFileAppender unable to use units in maxLogSize --- lib/appenders/adapters.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/appenders/adapters.js b/lib/appenders/adapters.js index 389c98b0..35dfff26 100644 --- a/lib/appenders/adapters.js +++ b/lib/appenders/adapters.js @@ -37,6 +37,7 @@ function fileAppenderAdapter(config) { } const adapters = { + dateFile: fileAppenderAdapter, file: fileAppenderAdapter, fileSync: fileAppenderAdapter }; From 8b81193017b36f057901a42ea941fac7b2e7976b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 15 May 2022 00:57:55 +0800 Subject: [PATCH 252/454] chore(deps): bump date-format from 4.0.9 to 4.0.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b2171dfd..2a8315a4 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.9", + "date-format": "^4.0.10", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", From b8aa0c8f458bb2fe57a06c1e2bf8101f06c1181d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 15 May 2022 00:58:19 +0800 Subject: [PATCH 253/454] chore(deps): bump streamroller from 3.0.8 to 3.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a8315a4..a93413b2 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.8" + "streamroller": "^3.0.9" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From 42f7aeb655421b06cccb6070199dad233f64da5f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 12 May 2022 03:09:26 +0800 Subject: [PATCH 254/454] chore(dep): updated package-lock.json --- package-lock.json | 307 ++++++++++++++++++++++++++-------------------- 1 file changed, 171 insertions(+), 136 deletions(-) diff --git a/package-lock.json b/package-lock.json index 774c282c..047ddf02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,12 +5,13 @@ "requires": true, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { @@ -23,27 +24,27 @@ } }, "@babel/compat-data": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", - "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", "dev": true }, "@babel/core": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", - "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.9", - "@babel/helper-compilation-targets": "^7.17.7", + "@babel/generator": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-module-transforms": "^7.17.7", "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.9", + "@babel/parser": "^7.17.10", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0", + "@babel/traverse": "^7.17.10", + "@babel/types": "^7.17.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -60,25 +61,25 @@ } }, "@babel/generator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", - "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", + "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", "dev": true, "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.17.10", + "@jridgewell/gen-mapping": "^0.1.0", + "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", - "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", + "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.7", + "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "browserslist": "^4.20.2", "semver": "^6.3.0" } }, @@ -246,9 +247,9 @@ } }, "@babel/parser": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", - "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", "dev": true }, "@babel/template": { @@ -263,19 +264,19 @@ } }, "@babel/traverse": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", - "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", + "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.9", + "@babel/generator": "^7.17.10", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.9", - "@babel/types": "^7.17.0", + "@babel/parser": "^7.17.10", + "@babel/types": "^7.17.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -289,9 +290,9 @@ } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", + "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -299,19 +300,19 @@ } }, "@eslint/eslintrc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", - "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", + "espree": "^9.3.2", "globals": "^13.9.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -425,22 +426,38 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jridgewell/resolve-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", - "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -470,9 +487,9 @@ "dev": true }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { @@ -568,14 +585,14 @@ "dev": true }, "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" } @@ -689,9 +706,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "version": "1.0.30001341", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", + "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", "dev": true }, "chalk": { @@ -839,9 +856,9 @@ } }, "date-format": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.9.tgz", - "integrity": "sha512-+8J+BOUpSrlKLQLeF8xJJVTxS8QfRSuJgwxSVvslzgO3E6khbI0F5mMEPf5mTYhCCm4h99knYP6H3W9n3BQFrg==" + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.10.tgz", + "integrity": "sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA==" }, "debug": { "version": "4.3.4", @@ -912,9 +929,9 @@ } }, "electron-to-chromium": { - "version": "1.4.118", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", - "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==", + "version": "1.4.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", + "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", "dev": true }, "emoji-regex": { @@ -924,17 +941,19 @@ "dev": true }, "es-abstract": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", - "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", + "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", @@ -946,9 +965,10 @@ "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "regexp.prototype.flags": "^1.4.1", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-shim-unscopables": { @@ -990,12 +1010,12 @@ "dev": true }, "eslint": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", - "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", + "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.2", + "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1006,7 +1026,7 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.3.2", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1022,7 +1042,7 @@ "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", @@ -1199,13 +1219,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -1426,12 +1446,30 @@ "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", "dev": true }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -1472,15 +1510,15 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.2.tgz", + "integrity": "sha512-NzDgHDiJwKYByLrL5lONmQFpK/2G78SMMfo+E9CuGlX4IkvfKDsiQSNPwAYxEy+e6p7ZQ3uslSLlwlJcqezBmQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -1495,9 +1533,9 @@ } }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -1599,9 +1637,9 @@ } }, "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true }, "ignore": { @@ -1908,14 +1946,6 @@ "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { @@ -2147,9 +2177,9 @@ } }, "node-releases": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", - "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", "dev": true }, "normalize-path": { @@ -2546,6 +2576,17 @@ "picomatch": "^2.2.1" } }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -2667,9 +2708,9 @@ "dev": true }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { @@ -2680,14 +2721,6 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "spawn-wrap": { @@ -2743,11 +2776,11 @@ } }, "streamroller": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.8.tgz", - "integrity": "sha512-VI+ni3czbFZrd1MrlybxykWZ8sMDCMtTU7YJyhgb9M5X6d1DDxLdJr+gSnmRpXPMnIWxWKMaAE8K0WumBp3lDg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.9.tgz", + "integrity": "sha512-Y46Aq/ftqFP6Wb6sK79hgnZeRfEVz2F0nquBy4lMftUuJoTiwKa6Y96AWAUGV1F3CjhFark9sQmzL9eDpltkRw==", "requires": { - "date-format": "^4.0.9", + "date-format": "^4.0.10", "debug": "^4.3.4", "fs-extra": "^10.1.0" } @@ -2764,23 +2797,25 @@ } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "strip-ansi": { @@ -2826,9 +2861,9 @@ "dev": true }, "tap": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.1.0.tgz", - "integrity": "sha512-EFERYEEDCLjvsT+B+z/qAVuxh5JPEmtn0aGh1ZT/2BN5nVLm6VbcL9fR/Y2FtsxvHuEC3Q2xLc1n1h7mnWVP9w==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.2.0.tgz", + "integrity": "sha512-ikfNLy701p2+sH3R0pAXQ/Aen6ZByaguUY7UsoTLL4AXa2c9gYQL+pI21p13lq54R7/CEoLaViC1sexcWG32ig==", "dev": true, "requires": { "@isaacs/import-jsx": "^4.0.1", @@ -4228,9 +4263,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "unbox-primitive": { From 8c5bee7664d22c45f76116bdb0a0f29d7b587ea0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 13 May 2022 04:22:43 +0800 Subject: [PATCH 255/454] chore(docs): updated changelog for 6.4.7 --- CHANGELOG.md | 221 ++++++++++++++++++++++++++++----------------------- 1 file changed, 120 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2821c20d..f9cc5a4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,93 +1,112 @@ # log4js-node Changelog +## 6.4.7 + +- [fix: dateFileAppender unable to use units in maxLogSize](https://github.com/log4js-node/log4js-node/pull/1243) - thanks [@peteriman](https://github.com/peteriman) +- [type: added fileNameSep for FileAppender and DateFileAppender](https://github.com/log4js-node/log4js-node/pull/1241) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated usage of units for maxLogSize](https://github.com/log4js-node/log4js-node/pull/1242) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated comments in typescript def](https://github.com/log4js-node/log4js-node/pull/1240) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1244) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint from 8.14.0 to 8.15.0 + - chore(deps-dev): bump husky from 7.0.4 to 8.0.1 + - chore(deps-dev): bump tap from 16.1.0 to 16.2.0 + - chore(deps-dev): bump typescript from 4.6.3 to 4.6.4 + - chore(deps): bump date-format from 4.0.9 to 4.0.10 + - chore(deps): bump streamroller from 3.0.8 to 3.0.9 + - chore(deps): updated package-lock.json +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1238) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump tap from 16.0.1 to 16.1.0 + - chore(deps-dev): updated package-lock.json + ## 6.4.6 -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1236) - thanks [@peteriman](https://github.com/peteriman) - - chore(dev): bump eslint from 8.13.0 to 8.14.0 - - chore(dep): bump date-format from 4.0.7 to 4.0.9 - - chore(dep): bump streamroller from 3.0.7 to 3.0.8 - - resolved [#1216](https://github.com/log4js-node/log4js-node/issues/1216) where promise rejection is not handled ([streamroller@3.0.8 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - - updated package-lock.json -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1234) - thanks [@peteriman](https://github.com/peteriman) - - chore(dep): bump fs-extra from 10.0.1 to 10.1.0 - - updated package-lock.json +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1236) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 + - chore(deps): bump date-format from 4.0.7 to 4.0.9 + - chore(deps): bump streamroller from 3.0.7 to 3.0.8 + - fix: [#1216](https://github.com/log4js-node/log4js-node/issues/1216) where promise rejection is not handled ([streamroller@3.0.8 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - chore(deps): updated package-lock.json +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1234) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump fs-extra from 10.0.1 to 10.1.0 + - chore(deps): updated package-lock.json ## 6.4.5 -- [chore(fix): deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@peteriman](https://github.com/peteriman) -- [chore(fix): fileDepth for ESM](https://github.com/log4js-node/log4js-node/pull/1224) - thanks [@peteriman](https://github.com/peteriman) -- [chore(refactor): replace deprecated String.prototype.substr()](https://github.com/log4js-node/log4js-node/pull/1223) - thanks [@CommanderRoot](https://github.com/CommanderRoot) -- [chore(types): LogEvent types](https://github.com/log4js-node/log4js-node/pull/1231) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated typescript usage](https://github.com/log4js-node/log4js-node/pull/1229) - thanks [@peteriman](https://github.com/peteriman) -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@peteriman](https://github.com/peteriman) - - chore(dep): bump date-format from 4.0.6 to 4.0.7 - - chore(dep): bump streamroller from 3.0.6 to 3.0.7 - - resolved [#1225](https://github.com/log4js-node/log4js-node/issues/1225) where fs-extra throws error when fs.realpath.native is undefined ([streamroller@3.0.7 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - - updated package-lock.json -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@peteriman](https://github.com/peteriman) - - chore(dev): bump eslint from 8.11.0 to 8.13.0 - - chore(dev): bump eslint-plugin-import from 2.25.4 to 2.26.0 - - chore(dev): bump tap from 16.0.0 to 16.0.1 - - chore(dev): bump typescript from 4.6.2 to 4.6.3 - - updated package-lock.json -- [chore(deps): bump minimist from 1.2.5 to 1.2.6](https://github.com/log4js-node/log4js-node/pull/1227) - thanks [@Dependabot](https://github.com/dependabot) +- [fix: deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@peteriman](https://github.com/peteriman) +- [fix: fileDepth for ESM](https://github.com/log4js-node/log4js-node/pull/1224) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: replace deprecated String.prototype.substr()](https://github.com/log4js-node/log4js-node/pull/1223) - thanks [@CommanderRoot](https://github.com/CommanderRoot) +- [type: LogEvent types](https://github.com/log4js-node/log4js-node/pull/1231) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated typescript usage](https://github.com/log4js-node/log4js-node/pull/1229) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump date-format from 4.0.6 to 4.0.7 + - chore(deps): bump streamroller from 3.0.6 to 3.0.7 + - fix: [#1225](https://github.com/log4js-node/log4js-node/issues/1225) where fs-extra throws error when fs.realpath.native is undefined ([streamroller@3.0.7 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - chore(deps): updated package-lock.json +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint from 8.11.0 to 8.13.0 + - chore(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.26.0 + - chore(deps-dev): bump tap from 16.0.0 to 16.0.1 + - chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 + - chore(deps-dev): updated package-lock.json +- [chore(deps-dev): bump minimist from 1.2.5 to 1.2.6](https://github.com/log4js-node/log4js-node/pull/1227) - thanks [@Dependabot](https://github.com/dependabot) ## 6.4.4 -- [chore(fix): set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) -- [chore(docs): updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1221) - thanks [@peteriman](https://github.com/peteriman) - - chore(dep): bump streamroller from 3.0.5 to 3.0.6 - - chore(dep): bump debug from 4.3.3 to 4.3.4 - - chore(dep): bump date-format from 4.0.5 to 4.0.6 - - chore(dev): bump prettier from 2.5.1 to 2.6.0 - - updated package-lock.json +- [fix: set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) +- [docs: broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) +- [docs: updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1221) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump streamroller from 3.0.5 to 3.0.6 + - chore(deps): bump debug from 4.3.3 to 4.3.4 + - chore(deps): bump date-format from 4.0.5 to 4.0.6 + - chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 + - chore(deps): updated package-lock.json ## 6.4.3 -- chore(test): 100% test coverage - thanks [@peteriman](https://github.com/peteriman) - - Part 1 of 3: https://github.com/log4js-node/log4js-node/pull/1200 - - Part 2 of 3: https://github.com/log4js-node/log4js-node/pull/1204 - - Part 3 of 3: https://github.com/log4js-node/log4js-node/pull/1205 - - [chore(test): improved test cases](https://github.com/log4js-node/log4js-node/pull/1211) -- [chore(validation): added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@peteriman](https://github.com/peteriman) -- [chore(improvement): do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@peteriman](https://github.com/peteriman) -- [chore(improvement): defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@peteriman](https://github.com/peteriman) -- [chore(improvement): removed redundant logic in tcp-serverAppender](https://github.com/log4js-node/log4js-node/pull/1198) - thanks [@peteriman](https://github.com/peteriman) -- [chore(improvement): removed redundant logic in multiprocessAppender](https://github.com/log4js-node/log4js-node/pull/1197) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated README.md with badges](https://github.com/log4js-node/log4js-node/pull/1209) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): added docs for istanbul ignore](https://github.com/log4js-node/log4js-node/pull/1208) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated logger api docs](https://github.com/log4js-node/log4js-node/pull/1203) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated file and fileSync appender docs](https://github.com/log4js-node/log4js-node/pull/1202) - thanks [@peteriman](https://github.com/peteriman) + +- [fix: added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: removed redundant logic in tcp-serverAppender](https://github.com/log4js-node/log4js-node/pull/1198) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: removed redundant logic in multiprocessAppender](https://github.com/log4js-node/log4js-node/pull/1197) - thanks [@peteriman](https://github.com/peteriman) +- test: 100% test coverage - thanks [@peteriman](https://github.com/peteriman) + - test: part 1 of 3: https://github.com/log4js-node/log4js-node/pull/1200 + - test: part 2 of 3: https://github.com/log4js-node/log4js-node/pull/1204 + - test: part 3 of 3: https://github.com/log4js-node/log4js-node/pull/1205 + - [test: improved test cases](https://github.com/log4js-node/log4js-node/pull/1211) +- [docs: updated README.md with badges](https://github.com/log4js-node/log4js-node/pull/1209) - thanks [@peteriman](https://github.com/peteriman) +- [docs: added docs for istanbul ignore](https://github.com/log4js-node/log4js-node/pull/1208) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated logger api docs](https://github.com/log4js-node/log4js-node/pull/1203) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated file and fileSync appender docs](https://github.com/log4js-node/log4js-node/pull/1202) - thanks [@peteriman](https://github.com/peteriman) - [chore(lint): improve eslint rules](https://github.com/log4js-node/log4js-node/pull/1206) - thanks [@peteriman](https://github.com/peteriman) -- [chore(dep): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1207) - thanks [@peteriman](https://github.com/peteriman) - - chore(dev): bump eslint from 8.10.0 to 8.11.0 - - chore(dev): bump eslint-config-airbnb-base from 13.2.0 to 15.0.0 - - chore(dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 - - chore(dev): bump tap from 15.1.6 to 16.0.0 - - chore(dep): bump date-format from 4.0.4 to 4.0.5 - - chore(dep): bump streamroller from 3.0.4 to 3.0.5 - - chore(dep): updated package-lock.json +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1207) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 + - chore(deps-dev): bump eslint-config-airbnb-base from 13.2.0 to 15.0.0 + - chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 + - chore(deps-dev): bump tap from 15.1.6 to 16.0.0 + - chore(deps): bump date-format from 4.0.4 to 4.0.5 + - chore(deps): bump streamroller from 3.0.4 to 3.0.5 + - chore(deps): updated package-lock.json ## 6.4.2 -- [bug: fixed fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@peteriman](https://github.com/peteriman) -- [bug: fixed serialise() for NaN, Infinity, -Infinity and undefined](https://github.com/log4js-node/log4js-node/pull/1188) - thanks [@peteriman](https://github.com/peteriman) -- [bug: fixed connectLogger not logging on close](https://github.com/log4js-node/log4js-node/pull/1179) - thanks [@peteriman](https://github.com/peteriman) -- [improvement: defensive coding](https://github.com/log4js-node/log4js-node/pull/1183) - thanks [@peteriman](https://github.com/peteriman) +- [fix: fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@peteriman](https://github.com/peteriman) +- [fix: serialise() for NaN, Infinity, -Infinity and undefined](https://github.com/log4js-node/log4js-node/pull/1188) - thanks [@peteriman](https://github.com/peteriman) +- [fix: connectLogger not logging on close](https://github.com/log4js-node/log4js-node/pull/1179) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: defensive coding](https://github.com/log4js-node/log4js-node/pull/1183) - thanks [@peteriman](https://github.com/peteriman) - [type: fixed Logger constructor](https://github.com/log4js-node/log4js-node/pull/1177) - thanks [@peteriman](https://github.com/peteriman) - [test: improve test coverage](https://github.com/log4js-node/log4js-node/pull/1184) - thanks [@peteriman](https://github.com/peteriman) - [test: refactor and replaced tap deprecation in preparation for tap v15](https://github.com/log4js-node/log4js-node/pull/1172) - thanks [@peteriman](https://github.com/peteriman) - [test: added e2e test for multiprocess Appender](https://github.com/log4js-node/log4js-node/pull/1170) - thanks [@nicojs](https://github.com/nicojs) -- [chore(docs): updated file appender docs](https://github.com/log4js-node/log4js-node/pull/1182) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): updated dateFile appender docs](https://github.com/log4js-node/log4js-node/pull/1181) - thanks [@peteriman](https://github.com/peteriman) -- [chore(docs): corrected typo in sample code for multiFile appender](https://github.com/log4js-node/log4js-node/pull/1180) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated file appender docs](https://github.com/log4js-node/log4js-node/pull/1182) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated dateFile appender docs](https://github.com/log4js-node/log4js-node/pull/1181) - thanks [@peteriman](https://github.com/peteriman) +- [docs: corrected typo in sample code for multiFile appender](https://github.com/log4js-node/log4js-node/pull/1180) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1194) - thanks [@peteriman](https://github.com/peteriman) - chore(deps): bump date-format from 4.0.3 to 4.0.4 - chore(deps): bump streamroller from 3.0.2 to 3.0.4 - - resolved [#1189](https://github.com/log4js-node/log4js-node/issues/1189) for an compatibility issue with directory creation for NodeJS < 10.12.0 ([streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - fix: [#1189](https://github.com/log4js-node/log4js-node/issues/1189) for an compatibility issue with directory creation for NodeJS < 10.12.0 ([streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - chore(deps-dev): bump eslint from 8.8.0 to 8.10.0 - chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 - chore(deps-dev): bump fs-extra from 10.0.0 to 10.0.1 @@ -100,12 +119,12 @@ ## 6.4.1 -- [bug: Fixed to startup multiprocess even when no direct appenders](https://github.com/log4js-node/log4js-node/pull/1162) - thanks [@nicojs](https://github.com/nicojs) +- [fix: startup multiprocess even when no direct appenders](https://github.com/log4js-node/log4js-node/pull/1162) - thanks [@nicojs](https://github.com/nicojs) - [refactor: fixed eslint warnings](https://github.com/log4js-node/log4js-node/pull/1165) - thanks [@peteriman](https://github.com/peteriman) -- [improvement: additional alias for date patterns](https://github.com/log4js-node/log4js-node/pull/1163) - thanks [@peteriman](https://github.com/peteriman) -- [improvement: added emitWarning for deprecation](https://github.com/log4js-node/log4js-node/pull/1164) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: additional alias for date patterns](https://github.com/log4js-node/log4js-node/pull/1163) - thanks [@peteriman](https://github.com/peteriman) +- [refactor: added emitWarning for deprecation](https://github.com/log4js-node/log4js-node/pull/1164) - thanks [@peteriman](https://github.com/peteriman) - [type: Fixed wrong types from 6.4.0 regression](https://github.com/log4js-node/log4js-node/pull/1158) - thanks [@glasser](https://github.com/glasser) -- [chore(docs): changed author to contributors in package.json](https://github.com/log4js-node/log4js-node/pull/1153) - thanks [@peteriman](https://github.com/peteriman) +- [docs: changed author to contributors in package.json](https://github.com/log4js-node/log4js-node/pull/1153) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps): bump node-fetch from 2.6.6 to 2.6.7](https://github.com/log4js-node/log4js-node/pull/1167) - thanks [@Dependabot](https://github.com/dependabot) - [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@peteriman](https://github.com/peteriman) @@ -113,23 +132,23 @@ New default file permissions may cause external applications unable to read logs. A [manual code/configuration change](https://github.com/log4js-node/log4js-node/pull/1141#issuecomment-1076224470) is required. -- [security: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) - - [chore(docs): updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) -- [feat: Added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) -- [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) -- [bug: Fixed file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@peteriman](https://github.com/peteriman) -- [bug: Fixed MaxListenersExceededWarning from NodeJS](https://github.com/log4js-node/log4js-node/pull/1110) - thanks [@peteriman](https://github.com/peteriman) +- [fix: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) + - [docs: updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) +- [fix: file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@peteriman](https://github.com/peteriman) +- [fix: MaxListenersExceededWarning from NodeJS](https://github.com/log4js-node/log4js-node/pull/1110) - thanks [@peteriman](https://github.com/peteriman) - [test: added assertion for increase of SIGHUP listeners on log4js.configure()](https://github.com/log4js-node/log4js-node/pull/1142) - thanks [@peteriman](https://github.com/peteriman) -- [bug: Fixed missing TCP appender with Webpack and Typescript](https://github.com/log4js-node/log4js-node/pull/1028) - thanks [@techmunk](https://github.com/techmunk) -- [bug: Fixed dateFile appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1097) - thanks [@4eb0da](https://github.com/4eb0da) +- [fix: missing TCP appender with Webpack and Typescript](https://github.com/log4js-node/log4js-node/pull/1028) - thanks [@techmunk](https://github.com/techmunk) +- [fix: dateFile appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1097) - thanks [@4eb0da](https://github.com/4eb0da) - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@peteriman](https://github.com/peteriman) -- [bug: Fixed TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) -- [bug: Fixed multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) +- [fix: TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) +- [fix: multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) +- [feat: added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) +- [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) - [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@peteriman](https://github.com/peteriman) - [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@peteriman](https://github.com/peteriman) - test: added tap.tearDown() to clean up test files - - [#1143](https://github.com/log4js-node/log4js-node/pull/1143) - thanks [@peteriman](https://github.com/peteriman) - - [#1022](https://github.com/log4js-node/log4js-node/pull/1022) - thanks [@abetomo](https://github.com/abetomo) + - test: [#1143](https://github.com/log4js-node/log4js-node/pull/1143) - thanks [@peteriman](https://github.com/peteriman) + - test: [#1022](https://github.com/log4js-node/log4js-node/pull/1022) - thanks [@abetomo](https://github.com/abetomo) - [type: improved @types for AppenderModule](https://github.com/log4js-node/log4js-node/pull/1079) - thanks [@nicobao](https://github.com/nicobao) - [type: Updated fileSync appender types](https://github.com/log4js-node/log4js-node/pull/1116) - thanks [@peteriman](https://github.com/peteriman) - [type: Removed erroneous type in file appender](https://github.com/log4js-node/log4js-node/pull/1031) - thanks [@vdmtrv](https://github.com/vdmtrv) @@ -145,28 +164,28 @@ A [manual code/configuration change](https://github.com/log4js-node/log4js-node/ - [chore(deps): bump flatted from 2.0.2 to 3.2.4](https://github.com/log4js-node/log4js-node/pull/1137) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps-dev): bump fs-extra from 8.1.0 to 10.0.0](https://github.com/log4js-node/log4js-node/pull/1136) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps): bump streamroller from 2.2.4 to 3.0.1](https://github.com/log4js-node/log4js-node/pull/1135) - thanks [@peteriman](https://github.com/peteriman) + - [fix: compressed file ignores dateFile appender "mode"](https://github.com/log4js-node/streamroller/pull/65) - thanks [@rnd-debug](https://github.com/rnd-debug) + - fix: [#1039](https://github.com/log4js-node/log4js-node/issues/1039) where there is an additional separator in filename ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - fix: [#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080) for daysToKeep naming confusion ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) + - [refactor: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@peteriman](https://github.com/peteriman) - [feat: allows for zero backups](https://github.com/log4js-node/log4js-node/pull/1151) - thanks [@peteriman](https://github.com/peteriman) - - [api: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@peteriman](https://github.com/peteriman) - - [bug: compressed file ignores dateFile appender "mode"](https://github.com/log4js-node/streamroller/pull/65) - thanks [@rnd-debug](https://github.com/rnd-debug) - - resolved [#1039](https://github.com/log4js-node/log4js-node/issues/1039) where there is an additional separator in filename ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - - resolved [#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080) for daysToKeep naming confusion ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - [chore(deps): bump date-format from 3.0.0 to 4.0.2](https://github.com/log4js-node/log4js-node/pull/1134) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): Updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@peteriman](https://github.com/peteriman) - - eslint-config-prettier from 6.15.0 to 8.3.0 - - eslint-plugin-prettier from 3.4.1 to 4.0.0 - - husky from 3.1.0 to 7.0.4 - - prettier from 1.19.0 to 2.5.1 - - typescript from 3.9.10 to 4.5.4 +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0 + - chore(deps-dev): bump eslint-plugin-prettier from 3.4.1 to 4.0.0 + - chore(deps-dev): bump husky from 3.1.0 to 7.0.4 + - chore(deps-dev): bump prettier from 1.19.0 to 2.5.1 + - chore(deps-dev): bump typescript from 3.9.10 to 4.5.4 - [chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0](https://github.com/log4js-node/log4js-node/pull/1129) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): Updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@peteriman](https://github.com/peteriman) - - codecov from 3.6.1 to 3.8.3 - - eslint-config-prettier from 6.5.0 to 6.15.0 - - eslint-import-resolver-node from 0.3.2 to 0.3.6 - - eslint-plugin-import" from 2.18.2 to 2.25.4 - - eslint-plugin-prettier from 3.1.1 to 3.4.1 - - husky from 3.0.9 to 3.1.0 - - prettier from 1.18.2 to 1.19.1 - - typescript from 3.7.2 to 3.9.10 +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump codecov from 3.6.1 to 3.8.3 + - chore(deps-dev): bump eslint-config-prettier from 6.5.0 to 6.15.0 + - chore(deps-dev): bump eslint-import-resolver-node from 0.3.2 to 0.3.6 + - chore(deps-dev): bump eslint-plugin-import" from 2.18.2 to 2.25.4 + - chore(deps-dev): bump eslint-plugin-prettier from 3.1.1 to 3.4.1 + - chore(deps-dev): bump husky from 3.0.9 to 3.1.0 + - chore(deps-dev): bump prettier from 1.18.2 to 1.19.1 + - chore(deps-dev): bump typescript from 3.7.2 to 3.9.10 - [chore(deps): bump path-parse from 1.0.6 to 1.0.7](https://github.com/log4js-node/log4js-node/pull/1120) - thanks [@Dependabot](https://github.com/dependabot) - [chore(deps): bump glob-parent from 5.1.1 to 5.1.2](https://github.com/log4js-node/log4js-node/pull/1084) - thanks [@Dependabot](https://github.com/dependabot) - [chore(deps): bump hosted-git-info from 2.7.1 to 2.8.9](https://github.com/log4js-node/log4js-node/pull/1076) - thanks [@Dependabot](https://github.com/dependabot) From b81c08b1f9e8d6fe489e6c424a11343910bfdc1c Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 14 May 2022 17:52:23 +0000 Subject: [PATCH 256/454] 6.4.7 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 047ddf02..27f7617e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.6", + "version": "6.4.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a93413b2..467330b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.6", + "version": "6.4.7", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From 24651f36d5bb98f6b3476e5fad0ccec9fec2d9e1 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 20 May 2022 01:06:48 +0800 Subject: [PATCH 257/454] style: white-space --- lib/layouts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/layouts.js b/lib/layouts.js index a762e4d0..74254858 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -254,7 +254,7 @@ function patternLayout(pattern, tokens) { // support for ESM as it uses url instead of path for file /* istanbul ignore next: unsure how to simulate ESM for test coverage */ - const convertFileURLToPath = function(filepath) { + const convertFileURLToPath = function (filepath) { const urlPrefix = 'file://'; if (filepath.startsWith(urlPrefix)) { // https://nodejs.org/api/url.html#urlfileurltopathurl From 70dc7b873635d8ce330c1cf7702100cc7cc87c9a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 20 May 2022 01:08:13 +0800 Subject: [PATCH 258/454] fix: fallback for logger.log outputs nothing --- lib/logger.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/logger.js b/lib/logger.js index ca36be5e..1d117656 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -82,8 +82,9 @@ class Logger { log(level, ...args) { let logLevel = levels.getLevel(level); if (!logLevel) { - this._log(levels.WARN, 'log4js:logger.log: invalid value for log-level as first parameter given: ', level); + this._log(levels.WARN, ['log4js:logger.log: invalid value for log-level as first parameter given:', level]); logLevel = levels.INFO; + args = [level, ...args]; } if (this.isLevelEnabled(logLevel)) { this._log(logLevel, args); From e4dc432a2c92489c77558ed6042cc7b1850d5c64 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 20 May 2022 01:10:06 +0800 Subject: [PATCH 259/454] test: added tests to verify the warning and fallback outputs from logger.log --- test/tap/newLevel-test.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index 1422ab30..957b317e 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -232,14 +232,32 @@ test("../../lib/logger", batch => { const logger = log4js.getLogger(); - logger.log("LEVEL_DOES_NEXT_EXIST", "Event 1"); - logger.log(log4js.levels.getLevel("LEVEL_DOES_NEXT_EXIST"), "Event 2"); + logger.log("LEVEL_DOES_NOT_EXIST", "Event 1"); + logger.log(log4js.levels.getLevel("LEVEL_DOES_NOT_EXIST"), "Event 2"); + logger.log("Event 3"); const events = recording.replay(); + t.equal(events[0].level.toString(), "WARN", "should log warning"); + t.equal(events[0].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); + t.equal(events[0].data[1], "LEVEL_DOES_NOT_EXIST"); t.equal(events[1].level.toString(), "INFO", "should fall back to INFO"); + t.equal(events[1].data[0], "LEVEL_DOES_NOT_EXIST"); + t.equal(events[1].data[1], "Event 1"); + t.equal(events[2].level.toString(), "WARN", "should log warning"); + t.equal(events[2].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); + t.equal(events[2].data[1], undefined); t.equal(events[3].level.toString(), "INFO", "should fall back to INFO"); + t.equal(events[3].data[0], undefined); + t.equal(events[3].data[1], "Event 2"); + + t.equal(events[4].level.toString(), "WARN", "should log warning"); + t.equal(events[4].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); + t.equal(events[4].data[1], "Event 3"); + t.equal(events[5].level.toString(), "INFO", "should fall back to INFO"); + t.equal(events[5].data[0], "Event 3"); + t.end(); }); From e20e24f13647de1910abd6f5743ff56dd0b48d1f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 20 May 2022 01:30:26 +0800 Subject: [PATCH 260/454] docs: updated fileAppender maxLogSize documentation --- docs/file.md | 4 ++-- types/log4js.d.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/file.md b/docs/file.md index 22797238..f576ee41 100644 --- a/docs/file.md +++ b/docs/file.md @@ -6,8 +6,8 @@ The file appender writes log events to a file. It supports an optional maximum f * `type` - `"file"` * `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional, defaults to MAX_SAFE_INTEGER) - the maximum size (in bytes) for the log file. - `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. +* `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. + `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. * `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). * `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 2b69dc9f..6d28958a 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -133,7 +133,7 @@ export interface FileAppender { type: 'file'; // the path of the file where you want your logs written. filename: string; - // (defaults to MAX_SAFE_INTEGER) the maximum size (in bytes) for the log file. + // (defaults to undefined) the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. maxLogSize?: number | string; // (defaults to 5) the number of old log files to keep (excluding the hot file). backups?: number; From 505204addc02831f248a5aae9fe71f611125c611 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 15:47:00 +0800 Subject: [PATCH 261/454] style: white-space --- lib/appenders/fileSync.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 16dc538e..763da339 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -14,7 +14,7 @@ function touchFile(file, options) { // attempt to create the directory const mkdir = (dir) => { try { - return fs.mkdirSync(dir, {recursive: true}); + return fs.mkdirSync(dir, { recursive: true }); } // backward-compatible fs.mkdirSync for nodejs pre-10.12.0 (without recursive option) catch (e) { From 6de1da298e7745fe036a523181a278d0ad66184a Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 15:49:51 +0800 Subject: [PATCH 262/454] refactor: code flow and readability --- lib/appenders/fileSync.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 763da339..7519de5f 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -6,11 +6,6 @@ const os = require('os'); const eol = os.EOL; function touchFile(file, options) { - // if the file exists, nothing to do - if (fs.existsSync(file)) { - return; - } - // attempt to create the directory const mkdir = (dir) => { try { @@ -45,9 +40,8 @@ function touchFile(file, options) { }; mkdir(path.dirname(file)); - // touch the file to apply flags (like w to truncate the file) - const id = fs.openSync(file, options.flags, options.mode); - fs.closeSync(id); + // try to throw EISDIR, EROFS, EACCES + fs.appendFileSync(file, "", { mode: options.mode, flags: options.flag }); } class RollingFileSync { From d182204079eaa7ef8df8965c5b8045b559eb1a55 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 15:48:09 +0800 Subject: [PATCH 263/454] fix: filename validation (cannot be directory) --- lib/appenders/file.js | 2 ++ lib/appenders/fileSync.js | 2 ++ test/tap/fileAppender-test.js | 19 +++++++++++++++++-- test/tap/fileSyncAppender-test.js | 19 +++++++++++++++++-- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 73dad716..673e3484 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -29,6 +29,8 @@ function mainSighupHandler() { function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { if (typeof file !== "string" || file.length === 0) { throw new Error(`Invalid filename: ${file}`); + } else if (file.endsWith(path.sep)) { + throw new Error(`Filename is a directory: ${file}`); } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 7519de5f..24b3f9a9 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -164,6 +164,8 @@ class RollingFileSync { function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { if (typeof file !== "string" || file.length === 0) { throw new Error(`Invalid filename: ${file}`); + } else if (file.endsWith(path.sep)) { + throw new Error(`Filename is a directory: ${file}`); } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 5ca1f6a3..ebc298bf 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -50,7 +50,6 @@ test("log4js fileAppender", batch => { batch.test("should give error if invalid filename", async t => { const file = ""; - const expectedError = new Error(`Invalid filename: ${file}`); t.throws( () => log4js.configure({ @@ -64,7 +63,23 @@ test("log4js fileAppender", batch => { default: { appenders: ["file"], level: "debug" } } }), - expectedError + new Error(`Invalid filename: ${file}`) + ); + const dir = `.${path.sep}`; + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "file", + filename: dir + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + new Error(`Filename is a directory: ${dir}`) ); t.end(); }); diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index b36e3b06..4ea96ac3 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -78,7 +78,6 @@ test("log4js fileSyncAppender", batch => { batch.test("should give error if invalid filename", async t => { const file = ""; - const expectedError = new Error(`Invalid filename: ${file}`); t.throws( () => log4js.configure({ @@ -92,7 +91,23 @@ test("log4js fileSyncAppender", batch => { default: { appenders: ["file"], level: "debug" } } }), - expectedError + new Error(`Invalid filename: ${file}`) + ); + const dir = `.${path.sep}`; + t.throws( + () => + log4js.configure({ + appenders: { + file: { + type: "fileSync", + filename: dir + } + }, + categories: { + default: { appenders: ["file"], level: "debug" } + } + }), + new Error(`Filename is a directory: ${dir}`) ); t.end(); }); From a0eceefed1559ce77eb21cfd98a2ed99a7087fe0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 16:40:06 +0800 Subject: [PATCH 264/454] feat: tilde expansion for filename --- lib/appenders/file.js | 4 ++++ lib/appenders/fileSync.js | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 673e3484..789a9321 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -31,6 +31,10 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset throw new Error(`Invalid filename: ${file}`); } else if (file.endsWith(path.sep)) { throw new Error(`Filename is a directory: ${file}`); + } else { + // handle ~ expansion: https://github.com/nodejs/node/issues/684 + // exclude ~ and ~filename as these can be valid files + file = file.replace(new RegExp(`^~(?=${path.sep}.+)`), os.homedir()); } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index 24b3f9a9..b2f11069 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -166,6 +166,10 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset throw new Error(`Invalid filename: ${file}`); } else if (file.endsWith(path.sep)) { throw new Error(`Filename is a directory: ${file}`); + } else { + // handle ~ expansion: https://github.com/nodejs/node/issues/684 + // exclude ~ and ~filename as these can be valid files + file = file.replace(new RegExp(`^~(?=${path.sep}.+)`), os.homedir()); } file = path.normalize(file); numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; From ada6e7922d218df85ebe9cd585d2eba765948eee Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 17:01:29 +0800 Subject: [PATCH 265/454] ci: enforced 100% test coverage --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 467330b4..e42d4c07 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ } }, "tap": { - "check-coverage": false + "check-coverage": true }, "nyc": { "all": true, From 8b19c57095a92e64a754038e8ec60b8f92695273 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 17:25:40 +0800 Subject: [PATCH 266/454] chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e42d4c07..c6664925 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "callsites": "^3.1.0", "codecov": "^3.8.3", "deep-freeze": "0.0.1", - "eslint": "^8.15.0", + "eslint": "^8.16.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From 2825f7c9e44312e95fad3e2e1916dc1972499a72 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 17:35:58 +0800 Subject: [PATCH 267/454] feat: `logger.log()` to be synonym of `logger.info()` --- lib/logger.js | 10 ++++++++-- test/tap/newLevel-test.js | 22 ++++++++++++++-------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/logger.js b/lib/logger.js index 1d117656..f52da4bd 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -82,9 +82,15 @@ class Logger { log(level, ...args) { let logLevel = levels.getLevel(level); if (!logLevel) { - this._log(levels.WARN, ['log4js:logger.log: invalid value for log-level as first parameter given:', level]); + // allow LOG to be synonym of INFO + if ((level && level.trim().indexOf(" ") !== -1) || args.length === 0) { + args = [level, ...args]; + } else { + this._log(levels.WARN, ['log4js:logger.log: invalid value for log-level as first parameter given:', level]); + args = [`[${level}]`, ...args]; + } + // fallback to INFO logLevel = levels.INFO; - args = [level, ...args]; } if (this.isLevelEnabled(logLevel)) { this._log(logLevel, args); diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index 957b317e..d89f1066 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -232,9 +232,13 @@ test("../../lib/logger", batch => { const logger = log4js.getLogger(); + // fallback behavior logger.log("LEVEL_DOES_NOT_EXIST", "Event 1"); - logger.log(log4js.levels.getLevel("LEVEL_DOES_NOT_EXIST"), "Event 2"); + logger.log(log4js.levels.getLevel("LEVEL_DOES_NOT_EXIST"), "Event 2", "2 Text"); + + // synonym behavior logger.log("Event 3"); + logger.log("Event 4", "4 Text"); const events = recording.replay(); @@ -242,21 +246,23 @@ test("../../lib/logger", batch => { t.equal(events[0].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); t.equal(events[0].data[1], "LEVEL_DOES_NOT_EXIST"); t.equal(events[1].level.toString(), "INFO", "should fall back to INFO"); - t.equal(events[1].data[0], "LEVEL_DOES_NOT_EXIST"); + t.equal(events[1].data[0], "[LEVEL_DOES_NOT_EXIST]"); t.equal(events[1].data[1], "Event 1"); t.equal(events[2].level.toString(), "WARN", "should log warning"); t.equal(events[2].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); t.equal(events[2].data[1], undefined); t.equal(events[3].level.toString(), "INFO", "should fall back to INFO"); - t.equal(events[3].data[0], undefined); + t.equal(events[3].data[0], "[undefined]"); t.equal(events[3].data[1], "Event 2"); + t.equal(events[3].data[2], "2 Text"); + + t.equal(events[4].level.toString(), "INFO", "LOG is synonym of INFO"); + t.equal(events[4].data[0], "Event 3"); - t.equal(events[4].level.toString(), "WARN", "should log warning"); - t.equal(events[4].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); - t.equal(events[4].data[1], "Event 3"); - t.equal(events[5].level.toString(), "INFO", "should fall back to INFO"); - t.equal(events[5].data[0], "Event 3"); + t.equal(events[5].level.toString(), "INFO", "LOG is synonym of INFO"); + t.equal(events[5].data[0], "Event 4"); + t.equal(events[5].data[1], "4 Text"); t.end(); }); From 18d3f7e3f5470b3131db32d1485646820f02c38b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 18:48:39 +0800 Subject: [PATCH 268/454] chore(deps): bump streamroller from 3.0.0 to 3.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c6664925..99cb0f57 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.0.9" + "streamroller": "^3.1.0" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From b1a053573eadd60026daf83e42451b381bc53454 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 18:17:47 +0800 Subject: [PATCH 269/454] chore(deps): updated package-lock.json --- package-lock.json | 149 +++++++++++++++++++++++++--------------------- 1 file changed, 81 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27f7617e..1828f1f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,21 +30,21 @@ "dev": true }, "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", + "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", + "@babel/generator": "^7.18.0", "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.0", + "@babel/parser": "^7.18.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -61,14 +61,27 @@ } }, "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", + "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", "dev": true, "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", + "@babel/types": "^7.18.0", + "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-compilation-targets": { @@ -121,9 +134,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", @@ -132,8 +145,8 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-simple-access": { @@ -167,20 +180,20 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", + "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -247,9 +260,9 @@ } }, "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==", "dev": true }, "@babel/template": { @@ -264,19 +277,19 @@ } }, "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", + "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", + "@babel/generator": "^7.18.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -290,9 +303,9 @@ } }, "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", + "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -300,15 +313,15 @@ } }, "@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.2", - "globals": "^13.9.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -483,7 +496,7 @@ "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "acorn": { @@ -566,7 +579,7 @@ "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "argparse": { @@ -581,7 +594,7 @@ "argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "integrity": "sha512-dEamhpPEwRUBpLNHeuCm/v+g0anFByHahxodVO/BbAarHVBBg2MccCwf9K+o1Pof+2btdnkJelYVUWjW/VrATw==", "dev": true }, "array-includes": { @@ -706,9 +719,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "version": "1.0.30001342", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001342.tgz", + "integrity": "sha512-bn6sOCu7L7jcbBbyNhLg0qzXdJ/PMbybZTH/BA6Roet9wxYRm6Tr9D0s0uhLkOZ6MSG+QU6txUgdpr3MXIVqjA==", "dev": true }, "chalk": { @@ -941,9 +954,9 @@ "dev": true }, "es-abstract": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", - "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -965,7 +978,7 @@ "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -1010,12 +1023,12 @@ "dev": true }, "eslint": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", - "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", + "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.3", + "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1033,7 +1046,7 @@ "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -1510,9 +1523,9 @@ } }, "glob": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.2.tgz", - "integrity": "sha512-NzDgHDiJwKYByLrL5lONmQFpK/2G78SMMfo+E9CuGlX4IkvfKDsiQSNPwAYxEy+e6p7ZQ3uslSLlwlJcqezBmQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2281,9 +2294,9 @@ } }, "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", + "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==", "dev": true }, "object-keys": { @@ -2776,9 +2789,9 @@ } }, "streamroller": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.9.tgz", - "integrity": "sha512-Y46Aq/ftqFP6Wb6sK79hgnZeRfEVz2F0nquBy4lMftUuJoTiwKa6Y96AWAUGV1F3CjhFark9sQmzL9eDpltkRw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.0.tgz", + "integrity": "sha512-9+fOFZX3qeo5lEdq9AnPxyRqdrh0MhlX5uqDN6+OLGuGK0PnyyKjMicwcUYIzjYRut5Pfbc0AV6WKdv6di3YGA==", "requires": { "date-format": "^4.0.10", "debug": "^4.3.4", @@ -4293,7 +4306,7 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "punycode": { From 5891f66b45e7e5daa331915ae5ad4da75066240c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 22 May 2022 18:28:32 +0800 Subject: [PATCH 270/454] docs: updated changelog for 6.5.0 --- CHANGELOG.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9cc5a4d..93481bb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # log4js-node Changelog +## 6.5.0 + +- [feat: logger.log() to be synonym of logger.info()](https://github.com/log4js-node/log4js-node/pull/1254) - thanks [@peteriman](https://github.com/peteriman) +- [feat: tilde expansion for filename](https://github.com/log4js-node/log4js-node/pull/1252) - thanks [@peteriman](https://github.com/peteriman) +- [fix: better file validation](https://github.com/log4js-node/log4js-node/pull/1251) - thanks [@peteriman](https://github.com/peteriman) +- [fix: fallback for logger.log outputs nothing](https://github.com/log4js-node/log4js-node/pull/1247) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated fileAppender maxLogSize documentation](https://github.com/log4js-node/log4js-node/pull/1248) - thanks [@peteriman](https://github.com/peteriman) +- [ci: enforced 100% test coverage tests](https://github.com/log4js-node/log4js-node/pull/1253) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1256) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 + - chore(deps): bump streamroller from 3.0.9 to 3.1.0 + - chore(deps): updated package-lock.json + ## 6.4.7 - [fix: dateFileAppender unable to use units in maxLogSize](https://github.com/log4js-node/log4js-node/pull/1243) - thanks [@peteriman](https://github.com/peteriman) @@ -132,6 +145,8 @@ New default file permissions may cause external applications unable to read logs. A [manual code/configuration change](https://github.com/log4js-node/log4js-node/pull/1141#issuecomment-1076224470) is required. +- [feat: added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) +- [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) - [fix: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) - [docs: updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) - [fix: file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@peteriman](https://github.com/peteriman) @@ -142,8 +157,6 @@ A [manual code/configuration change](https://github.com/log4js-node/log4js-node/ - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@peteriman](https://github.com/peteriman) - [fix: TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) - [fix: multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) -- [feat: added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) -- [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) - [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@peteriman](https://github.com/peteriman) - [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@peteriman](https://github.com/peteriman) - test: added tap.tearDown() to clean up test files From a46871eaedc3edcec849672b6c5b09ebb8b4f699 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 22 May 2022 11:03:49 +0000 Subject: [PATCH 271/454] 6.5.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1828f1f1..3c081216 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.7", + "version": "6.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 99cb0f57..57ef05df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.4.7", + "version": "6.5.0", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From d718d84359b8c35b59ef16745408d4e482b24611 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 23 May 2022 14:22:34 +0800 Subject: [PATCH 272/454] fix: fs.appendFileSync should use flag instead of flags --- lib/appenders/fileSync.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index b2f11069..fa8b4089 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -41,7 +41,7 @@ function touchFile(file, options) { mkdir(path.dirname(file)); // try to throw EISDIR, EROFS, EACCES - fs.appendFileSync(file, "", { mode: options.mode, flags: options.flag }); + fs.appendFileSync(file, "", { mode: options.mode, flag: options.flags }); } class RollingFileSync { From 1dc718eac9766aff02b29be16548b08968ee3262 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 23 May 2022 14:44:42 +0800 Subject: [PATCH 273/454] chore(deps): bump streamroller from 3.1.0 to 3.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 57ef05df..b2991eca 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", - "streamroller": "^3.1.0" + "streamroller": "^3.1.1" }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", From ff521d7561c5db2cdec0679a0cb157873550928c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 23 May 2022 14:44:58 +0800 Subject: [PATCH 274/454] chore(deps): updated package-lock.json --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c081216..939c9bf9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2789,9 +2789,9 @@ } }, "streamroller": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.0.tgz", - "integrity": "sha512-9+fOFZX3qeo5lEdq9AnPxyRqdrh0MhlX5uqDN6+OLGuGK0PnyyKjMicwcUYIzjYRut5Pfbc0AV6WKdv6di3YGA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", "requires": { "date-format": "^4.0.10", "debug": "^4.3.4", From c64d2c591b4d731a2eee68847356fb92d0e20a8b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 23 May 2022 14:51:10 +0800 Subject: [PATCH 275/454] docs: updated changelog for 6.5.1 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93481bb4..6cdece7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # log4js-node Changelog +## 6.5.1 + +- [fix: fs.appendFileSync should use flag instead of flags](https://github.com/log4js-node/log4js-node/pull/1257) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1258) - thanks [@peteriman](https://github.com/peteriman) + - chore(deps): bump streamroller from 3.1.0 to 3.1.1 + - chore(deps): updated package-lock.json + ## 6.5.0 - [feat: logger.log() to be synonym of logger.info()](https://github.com/log4js-node/log4js-node/pull/1254) - thanks [@peteriman](https://github.com/peteriman) From d7d056f372e86945b55faef7b851bb5dfec1b4c6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 23 May 2022 06:59:42 +0000 Subject: [PATCH 276/454] 6.5.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 939c9bf9..15ab0622 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.5.0", + "version": "6.5.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b2991eca..50fe164e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.5.0", + "version": "6.5.1", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From 184986816f1653c09662cab7428b58184fdaaa56 Mon Sep 17 00:00:00 2001 From: marrowleaves Date: Wed, 25 May 2022 11:20:05 +0800 Subject: [PATCH 277/454] fix(types): add LogEvent.serialise --- types/log4js.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 6d28958a..a0a8b6f6 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -71,6 +71,7 @@ export interface LoggingEvent { lineNumber?: number; columnNumber?: number; callStack?: string; + serialise(): string; } export type Token = ((logEvent: LoggingEvent) => string) | string; From e9e7133baf268d99e6759b0e38e4d1db3eca15a4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 27 May 2022 12:04:15 +0800 Subject: [PATCH 278/454] docs: updated changelog for 6.5.2 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cdece7c..8ac0db9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # log4js-node Changelog +## 6.5.2 + +- [fix(types): add LogEvent.serialise](https://github.com/log4js-node/log4js-node/pull/1260) - thanks [@marrowleaves](https://github.com/marrowleaves) + ## 6.5.1 - [fix: fs.appendFileSync should use flag instead of flags](https://github.com/log4js-node/log4js-node/pull/1257) - thanks [@peteriman](https://github.com/peteriman) From 505b21a5a793570ca189f44d7478bccc8b15a8a1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 27 May 2022 06:12:13 +0000 Subject: [PATCH 279/454] 6.5.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15ab0622..e3d96473 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.5.1", + "version": "6.5.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 50fe164e..4242ca32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.5.1", + "version": "6.5.2", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From e6eee6d2cf4ad10a916928377307f4fca3be72d5 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 29 May 2022 12:06:04 +0800 Subject: [PATCH 280/454] refactor: clearer logic for invalid level and LOG synonym --- lib/logger.js | 18 ++++++++---------- test/tap/newLevel-test.js | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/logger.js b/lib/logger.js index f52da4bd..c899dd33 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -80,19 +80,17 @@ class Logger { } log(level, ...args) { - let logLevel = levels.getLevel(level); + const logLevel = levels.getLevel(level); if (!logLevel) { - // allow LOG to be synonym of INFO - if ((level && level.trim().indexOf(" ") !== -1) || args.length === 0) { - args = [level, ...args]; + if (configuration.validIdentifier(level) && args.length > 0) { + // logLevel not found but of valid signature, WARN before fallback to INFO + this.log(levels.WARN, 'log4js:logger.log: valid log-level not found as first parameter given:', level); + this.log(levels.INFO, `[${level}]`, ...args); } else { - this._log(levels.WARN, ['log4js:logger.log: invalid value for log-level as first parameter given:', level]); - args = [`[${level}]`, ...args]; + // apart from fallback, allow .log(...args) to be synonym with .log("INFO", ...args) + this.log(levels.INFO, level, ...args); } - // fallback to INFO - logLevel = levels.INFO; - } - if (this.isLevelEnabled(logLevel)) { + } else if (this.isLevelEnabled(logLevel)) { this._log(logLevel, args); } } diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index d89f1066..ffae2bc0 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -243,14 +243,14 @@ test("../../lib/logger", batch => { const events = recording.replay(); t.equal(events[0].level.toString(), "WARN", "should log warning"); - t.equal(events[0].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); + t.equal(events[0].data[0], "log4js:logger.log: valid log-level not found as first parameter given:"); t.equal(events[0].data[1], "LEVEL_DOES_NOT_EXIST"); t.equal(events[1].level.toString(), "INFO", "should fall back to INFO"); t.equal(events[1].data[0], "[LEVEL_DOES_NOT_EXIST]"); t.equal(events[1].data[1], "Event 1"); t.equal(events[2].level.toString(), "WARN", "should log warning"); - t.equal(events[2].data[0], "log4js:logger.log: invalid value for log-level as first parameter given:"); + t.equal(events[2].data[0], "log4js:logger.log: valid log-level not found as first parameter given:"); t.equal(events[2].data[1], undefined); t.equal(events[3].level.toString(), "INFO", "should fall back to INFO"); t.equal(events[3].data[0], "[undefined]"); From 1e5d34c2a2b63ae2e9dc241d444a68a7f24ec254 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 1 Jun 2022 01:39:29 +0800 Subject: [PATCH 281/454] chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4242ca32..745d16f1 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.2.0", - "typescript": "^4.6.4", + "typescript": "^4.7.2", "validate-commit-msg": "^2.14.0" }, "browser": { From 2c11c2fa491d2db724ee84fd63018b74b1cf1016 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 2 Jun 2022 12:07:48 +0800 Subject: [PATCH 282/454] chore(deps): bump date-format from 4.0.10 to 4.0.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 745d16f1..294477d2 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.10", + "date-format": "^4.0.11", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 6f6212603662cb80039fb01c51bbb7d20159342f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 2 Jun 2022 12:12:53 +0800 Subject: [PATCH 283/454] chore(deps): updated package-lock.json --- package-lock.json | 195 +++++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 99 deletions(-) diff --git a/package-lock.json b/package-lock.json index e3d96473..14d5a98c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,21 +30,21 @@ "dev": true }, "@babel/core": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", - "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", + "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-compilation-targets": "^7.17.10", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.0", + "@babel/helpers": "^7.18.2", "@babel/parser": "^7.18.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -61,12 +61,12 @@ } }, "@babel/generator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", - "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "requires": { - "@babel/types": "^7.18.0", + "@babel/types": "^7.18.2", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, @@ -85,9 +85,9 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", @@ -97,13 +97,10 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true }, "@babel/helper-function-name": { "version": "7.17.9", @@ -150,12 +147,12 @@ } }, "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.2" } }, "@babel/helper-split-export-declaration": { @@ -180,14 +177,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", - "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@babel/highlight": { @@ -233,19 +230,19 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -260,9 +257,9 @@ } }, "@babel/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", "dev": true }, "@babel/template": { @@ -277,19 +274,19 @@ } }, "@babel/traverse": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", - "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", + "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-environment-visitor": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.0", + "@babel/types": "^7.18.2", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -303,9 +300,9 @@ } }, "@babel/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", - "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -719,9 +716,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001342", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001342.tgz", - "integrity": "sha512-bn6sOCu7L7jcbBbyNhLg0qzXdJ/PMbybZTH/BA6Roet9wxYRm6Tr9D0s0uhLkOZ6MSG+QU6txUgdpr3MXIVqjA==", + "version": "1.0.30001344", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", + "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", "dev": true }, "chalk": { @@ -815,25 +812,25 @@ "colors": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", "dev": true }, "commander": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", "dev": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "confusing-browser-globals": { @@ -869,9 +866,9 @@ } }, "date-format": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.10.tgz", - "integrity": "sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA==" + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==" }, "debug": { "version": "4.3.4", @@ -884,13 +881,13 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", "dev": true }, "deep-is": { @@ -942,9 +939,9 @@ } }, "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "version": "1.4.144", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", + "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", "dev": true }, "emoji-regex": { @@ -1184,7 +1181,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } @@ -1281,7 +1278,7 @@ "events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", "dev": true }, "fast-deep-equal": { @@ -1305,13 +1302,13 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dev": true, "requires": { "punycode": "^1.3.2" @@ -1329,7 +1326,7 @@ "fill-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", "dev": true, "requires": { "is-object": "~1.0.1", @@ -1365,7 +1362,7 @@ "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { "locate-path": "^2.0.0" @@ -1374,13 +1371,13 @@ "findit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", + "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", "dev": true }, "findup": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", "dev": true, "requires": { "colors": "~0.6.0-1", @@ -1421,7 +1418,7 @@ "fs-exists-cached": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", "dev": true }, "fs-extra": { @@ -1437,7 +1434,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { @@ -1474,7 +1471,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "functions-have-names": { @@ -1683,7 +1680,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { @@ -1695,7 +1692,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -1774,7 +1771,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { @@ -1865,7 +1862,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-weakref": { @@ -1886,7 +1883,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "istanbul-lib-coverage": { @@ -2035,7 +2032,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json5": { @@ -2090,7 +2087,7 @@ "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -2100,7 +2097,7 @@ "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "lodash.merge": { @@ -2121,7 +2118,7 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, "minimatch": { @@ -2157,7 +2154,7 @@ "module-not-found-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", "dev": true }, "ms": { @@ -2168,7 +2165,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node-fetch": { @@ -2190,9 +2187,9 @@ } }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "normalize-path": { @@ -2294,9 +2291,9 @@ } }, "object-inspect": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", - "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "object-keys": { @@ -2342,7 +2339,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -2371,7 +2368,7 @@ "own-or": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", + "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", "dev": true }, "own-or-env": { @@ -2395,7 +2392,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -2413,7 +2410,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "package-hash": { @@ -2440,13 +2437,13 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -2577,7 +2574,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, "readdirp": { @@ -4276,9 +4273,9 @@ } }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", + "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", "dev": true }, "unbox-primitive": { From e2640f234b94a7bbb6dde11a25317afd1b8a2f59 Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 9 Jun 2022 11:21:17 -0500 Subject: [PATCH 284/454] feat(types): Make Appender type extensible via Appenders --- types/log4js.d.ts | 122 ++++++++++++++++++++++++++++++++-------------- types/test.ts | 109 ++++++++++++++++++++++++++--------------- 2 files changed, 154 insertions(+), 77 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index a0a8b6f6..5f4f76f5 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -1,13 +1,21 @@ // Type definitions for log4js -type Format = string | ((req: any, res: any, formatter: ((str: string) => string)) => string); +type Format = + | string + | ((req: any, res: any, formatter: (str: string) => string) => string); export interface Log4js { getLogger(category?: string): Logger; configure(filename: string): Log4js; configure(config: Configuration): Log4js; - addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => string): void; - connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; }): any; // express.Handler; + addLayout( + name: string, + config: (a: any) => (logEvent: LoggingEvent) => string + ): void; + connectLogger( + logger: Logger, + options: { format?: Format; level?: string; nolog?: any } + ): any; // express.Handler; levels: Levels; shutdown(cb: (error: Error) => void): void | null; } @@ -17,9 +25,21 @@ export function getLogger(category?: string): Logger; export function configure(filename: string): Log4js; export function configure(config: Configuration): Log4js; -export function addLayout(name: string, config: (a: any) => (logEvent: LoggingEvent) => any): void; - -export function connectLogger(logger: Logger, options: { format?: Format; level?: string; nolog?: any; statusRules?: any[], context?: boolean }): any; // express.Handler; +export function addLayout( + name: string, + config: (a: any) => (logEvent: LoggingEvent) => any +): void; + +export function connectLogger( + logger: Logger, + options: { + format?: Format; + level?: string; + nolog?: any; + statusRules?: any[]; + context?: boolean; + } +): any; // express.Handler; export function recording(): Recording; @@ -56,9 +76,9 @@ export interface Level { } export interface LoggingEvent { - categoryName: string; // name of category - level: Level; // level of message - data: any[]; // objects to log + categoryName: string; // name of category + level: Level; // level of message + data: any[]; // objects to log startTime: Date; pid: number; context: any; @@ -89,7 +109,13 @@ export interface CustomLayout { type: string; } -export type Layout = BasicLayout | ColoredLayout | MessagePassThroughLayout | DummyLayout | PatternLayout | CustomLayout; +export type Layout = + | BasicLayout + | ColoredLayout + | MessagePassThroughLayout + | DummyLayout + | PatternLayout + | CustomLayout; /** * Category Filter @@ -97,7 +123,7 @@ export type Layout = BasicLayout | ColoredLayout | MessagePassThroughLayout | Du * @see https://log4js-node.github.io/log4js-node/categoryFilter.html */ export interface CategoryFilterAppender { - type: "categoryFilter"; + type: 'categoryFilter'; // the category (or categories if you provide an array of values) that will be excluded from the appender. exclude?: string | string[]; // the name of the appender to filter. see https://log4js-node.github.io/log4js-node/layouts.html @@ -110,7 +136,7 @@ export interface CategoryFilterAppender { * @see https://log4js-node.github.io/log4js-node/noLogFilter.html */ export interface NoLogFilterAppender { - type: "noLogFilter"; + type: 'noLogFilter'; // the regular expression (or the regular expressions if you provide an array of values) // will be used for evaluating the events to pass to the appender. // The events, which will match the regular expression, will be excluded and so not logged. @@ -265,11 +291,11 @@ export interface StandardOutputAppender { export interface TCPAppender { type: 'tcp'; // (defaults to 5000) - port?: number + port?: number; // (defaults to localhost) - host?: string + host?: string; // (defaults to __LOG4JS__) - endMsg?: string + endMsg?: string; // (defaults to a serialized log event) layout?: Layout; } @@ -279,6 +305,35 @@ export interface CustomAppender { [key: string]: any; } +/** + * Mapping of all Appenders to allow for declaration merging + * @example + * declare module 'log4js' { + * interface Appenders { + * StorageTestAppender: { + * type: 'storageTest'; + * storageMedium: 'dvd' | 'usb' | 'hdd'; + * }; + * } + * } + */ +export interface Appenders { + CategoryFilterAppender: CategoryFilterAppender; + ConsoleAppender: ConsoleAppender; + FileAppender: FileAppender; + SyncfileAppender: SyncfileAppender; + DateFileAppender: DateFileAppender; + LogLevelFilterAppender: LogLevelFilterAppender; + NoLogFilterAppender: NoLogFilterAppender; + MultiFileAppender: MultiFileAppender; + MultiprocessAppender: MultiprocessAppender; + RecordingAppender: RecordingAppender; + StandardErrorAppender: StandardErrorAppender; + StandardOutputAppender: StandardOutputAppender; + TCPAppender: TCPAppender; + CustomAppender: CustomAppender; +} + export interface AppenderModule { configure: (config: Config, layouts: LayoutsParam) => AppenderFunction; } @@ -287,7 +342,7 @@ export type AppenderFunction = (loggingEvent: LoggingEvent) => void; // TODO: Actually add types here... // It's supposed to be the full config element -export type Config = any +export type Config = any; export interface LayoutsParam { basicLayout: LayoutFunction; @@ -307,20 +362,7 @@ export interface PatternToken { export type LayoutFunction = (loggingEvent: LoggingEvent) => string; -export type Appender = CategoryFilterAppender - | ConsoleAppender - | FileAppender - | SyncfileAppender - | DateFileAppender - | LogLevelFilterAppender - | NoLogFilterAppender - | MultiFileAppender - | MultiprocessAppender - | RecordingAppender - | StandardErrorAppender - | StandardOutputAppender - | TCPAppender - | CustomAppender; +export type Appender = Appenders[keyof Appenders]; export interface Levels { ALL: Level; @@ -338,8 +380,14 @@ export interface Levels { } export interface Configuration { - appenders: { [name: string]: Appender; }; - categories: { [name: string]: { appenders: string[]; level: string; enableCallStack?: boolean; } }; + appenders: { [name: string]: Appender }; + categories: { + [name: string]: { + appenders: string[]; + level: string; + enableCallStack?: boolean; + }; + }; pm2?: boolean; pm2InstanceVar?: string; levels?: Levels; @@ -347,11 +395,11 @@ export interface Configuration { } export interface Recording { - configure(loggingEvent: LoggingEvent): void - replay(): LoggingEvent[] - playback(): LoggingEvent[] - reset(): void - erase(): void + configure(loggingEvent: LoggingEvent): void; + replay(): LoggingEvent[]; + playback(): LoggingEvent[]; + reset(): void; + erase(): void; } export class Logger { diff --git a/types/test.ts b/types/test.ts index b7bb8f3e..ad6ae4af 100644 --- a/types/test.ts +++ b/types/test.ts @@ -3,10 +3,10 @@ import * as log4js from './log4js'; log4js.configure('./filename'); const logger1 = log4js.getLogger(); logger1.level = 'debug'; -logger1.debug("Some debug messages"); +logger1.debug('Some debug messages'); logger1.fatal({ - whatever: 'foo' -}) + whatever: 'foo', +}); const logger3 = log4js.getLogger('cheese'); logger3.trace('Entering cheese testing'); @@ -18,40 +18,44 @@ logger3.fatal('Cheese was breeding ground for listeria.'); log4js.configure({ appenders: { cheese: { type: 'console', filename: 'cheese.log' } }, - categories: { default: { appenders: ['cheese'], level: 'error' } } + categories: { default: { appenders: ['cheese'], level: 'error' } }, }); log4js.configure({ appenders: { - out: { type: 'file', filename: 'pm2logs.log' } + out: { type: 'file', filename: 'pm2logs.log' }, }, categories: { - default: { appenders: ['out'], level: 'info' } + default: { appenders: ['out'], level: 'info' }, }, pm2: true, - pm2InstanceVar: 'INSTANCE_ID' + pm2InstanceVar: 'INSTANCE_ID', }); -log4js.addLayout('json', config => function (logEvent) { - return JSON.stringify(logEvent) + config.separator; -}); +log4js.addLayout( + 'json', + (config) => + function (logEvent) { + return JSON.stringify(logEvent) + config.separator; + } +); log4js.configure({ appenders: { - out: { type: 'stdout', layout: { type: 'json', separator: ',' } } + out: { type: 'stdout', layout: { type: 'json', separator: ',' } }, }, categories: { - default: { appenders: ['out'], level: 'info' } - } + default: { appenders: ['out'], level: 'info' }, + }, }); log4js.configure({ appenders: { - file: { type: 'dateFile', filename: 'thing.log', pattern: '.mm' } + file: { type: 'dateFile', filename: 'thing.log', pattern: '.mm' }, }, categories: { - default: { appenders: ['file'], level: 'debug' } - } + default: { appenders: ['file'], level: 'debug' }, + }, }); const logger4 = log4js.getLogger('thing'); @@ -66,13 +70,13 @@ log4js.shutdown(); log4js.configure({ appenders: { cheeseLogs: { type: 'file', filename: 'cheese.log' }, - console: { type: 'console' } + console: { type: 'console' }, }, categories: { cheese: { appenders: ['cheeseLogs'], level: 'error' }, another: { appenders: ['console'], level: 'trace' }, - default: { appenders: ['console', 'cheeseLogs'], level: 'trace' } - } + default: { appenders: ['console', 'cheeseLogs'], level: 'trace' }, + }, }); const logger6 = log4js.getLogger('cheese'); @@ -80,7 +84,10 @@ const logger6 = log4js.getLogger('cheese'); const otherLogger = log4js.getLogger(); // this will get coloured output on console, and appear in cheese.log -otherLogger.error('AAArgh! Something went wrong', { some: 'otherObject', useful_for: 'debug purposes' }); +otherLogger.error('AAArgh! Something went wrong', { + some: 'otherObject', + useful_for: 'debug purposes', +}); otherLogger.log('This should appear as info output'); // these will not appear (logging level beneath error) @@ -101,22 +108,21 @@ anotherLogger.debug('Just checking'); const pantsLog = log4js.getLogger('pants'); pantsLog.debug('Something for pants'); - import { configure, getLogger } from './log4js'; configure('./filename'); const logger2 = getLogger(); logger2.level = 'debug'; -logger2.debug("Some debug messages"); +logger2.debug('Some debug messages'); configure({ appenders: { cheese: { type: 'file', filename: 'cheese.log' } }, - categories: { default: { appenders: ['cheese'], level: 'error' } } + categories: { default: { appenders: ['cheese'], level: 'error' } }, }); log4js.configure('./filename').getLogger(); const logger7 = log4js.getLogger(); logger7.level = 'debug'; -logger7.debug("Some debug messages"); +logger7.debug('Some debug messages'); const levels: log4js.Levels = log4js.levels; const level: log4js.Level = levels.getLevel('info'); @@ -124,40 +130,63 @@ const level: log4js.Level = levels.getLevel('info'); log4js.connectLogger(logger1, { format: ':x, :y', level: 'info', - context: true + context: true, }); log4js.connectLogger(logger2, { - format: (req, _res, format) => format(`:remote-addr - ${req.id} - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"`) + format: (req, _res, format) => + format( + `:remote-addr - ${req.id} - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"` + ), }); //support for passing in an appender module log4js.configure({ - appenders: { thing: { type: { configure: () => () => {} }}}, - categories: { default: { appenders: ['thing'], level: 'debug'}} + appenders: { thing: { type: { configure: () => () => {} } } }, + categories: { default: { appenders: ['thing'], level: 'debug' } }, +}); + +declare module './log4js' { + interface Appenders { + StorageTestAppender: { + type: 'storageTest'; + storageMedium: 'dvd' | 'usb' | 'hdd'; + }; + } +} + +log4js.configure({ + appenders: { test: { type: 'storageTest', storageMedium: 'dvd' } }, + categories: { default: { appenders: ['test'], level: 'debug' } }, }); log4js.configure({ appenders: { rec: { type: 'recording' } }, - categories: { default: { appenders: ['rec'], 'level': 'debug' } } + categories: { default: { appenders: ['rec'], level: 'debug' } }, }); const logger8 = log4js.getLogger(); -logger8.level = 'debug' -logger8.debug('This will go to the recording!') -logger8.debug('Another one') -const recording = log4js.recording() -const loggingEvents = recording.playback() +logger8.level = 'debug'; +logger8.debug('This will go to the recording!'); +logger8.debug('Another one'); +const recording = log4js.recording(); +const loggingEvents = recording.playback(); if (loggingEvents.length !== 2) { - throw new Error(`Expected 2 recorded events, got ${loggingEvents.length}`) + throw new Error(`Expected 2 recorded events, got ${loggingEvents.length}`); } if (loggingEvents[0].data[0] !== 'This will go to the recording!') { - throw new Error(`Expected message 'This will go to the recording!', got ${loggingEvents[0].data[0]}`) + throw new Error( + `Expected message 'This will go to the recording!', got ${loggingEvents[0].data[0]}` + ); } if (loggingEvents[1].data[0] !== 'Another one') { - throw new Error(`Expected message 'Another one', got ${loggingEvents[1].data[0]}`) + throw new Error( + `Expected message 'Another one', got ${loggingEvents[1].data[0]}` + ); } -recording.reset() -const loggingEventsPostReset = recording.playback() +recording.reset(); +const loggingEventsPostReset = recording.playback(); if (loggingEventsPostReset.length !== 0) { - throw new Error(`Expected 0 recorded events after reset, got ${loggingEventsPostReset.length}`) + throw new Error( + `Expected 0 recorded events after reset, got ${loggingEventsPostReset.length}` + ); } From 3eee2e1280b20a23564c49f7f4af8fa28251c35a Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 9 Jun 2022 11:22:21 -0500 Subject: [PATCH 285/454] chore(format): make all js/ts files and variants prettier properly --- .editorconfig | 2 +- .gitattributes | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 3361fd10..0835e8ee 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,7 +9,7 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[*.js] +[*.{js,ts,[cm]js,[cm]ts}] quote_type = single curly_bracket_next_line = true indent_brace_style = Allman diff --git a/.gitattributes b/.gitattributes index 70d5e00f..5322b173 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,11 @@ *.css text eol=lf *.html text eol=lf *.js text eol=lf +*.cjs text eol=lf +*.mjs text eol=lf +*.ts text eol=lf +*.cts text eol=lf +*.mts text eol=lf *.json text eol=lf *.md text eol=lf *.sh text eol=lf From 6ba2b0c6cc77a2a0f7780461b6f55ccda5b7c9be Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 9 Jun 2022 11:30:40 -0500 Subject: [PATCH 286/454] chore: don't publish the test.ts file --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 294477d2..89a96960 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ "lib", - "types", + "types/*.d.ts", "CHANGELOG.md", "SECURITY.md" ], From cc722e301c9866787c171e4d1cce23618933ab91 Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Mon, 20 Jun 2022 23:25:55 +0800 Subject: [PATCH 287/454] chore: added more .gitattributes to fix line endings --- .gitattributes | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index 5322b173..5af187f0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,18 +8,20 @@ # for example, after the build script is run) .* text eol=lf *.css text eol=lf +*.scss text eol=lf *.html text eol=lf *.js text eol=lf -*.cjs text eol=lf -*.mjs text eol=lf +*.cjs text eol=lf +*.mjs text eol=lf *.ts text eol=lf -*.cts text eol=lf -*.mts text eol=lf +*.cts text eol=lf +*.mts text eol=lf *.json text eol=lf *.md text eol=lf *.sh text eol=lf *.txt text eol=lf *.xml text eol=lf +*.yml text eol=lf # Exclude the `.htaccess` file from GitHub's language statistics # https://github.com/github/linguist#using-gitattributes From 0a67b7c1bd62d32f3bae704781476d81594fecdb Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Mon, 20 Jun 2022 10:27:10 -0500 Subject: [PATCH 288/454] style: add prettier requirement --- .prettierignore | 3 +++ package.json | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..3ff683f2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +coverage +.github +.nyc_output diff --git a/package.json b/package.json index 89a96960..f0d2e3d4 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "node": ">=8.0" }, "scripts": { - "pretest": "eslint \"lib/**/*.js\" \"test/**/*.js\"", + "pretest": "prettier --check . && eslint \"lib/**/*.js\" \"test/**/*.js\"", + "prettier:fix": "prettier --write .", "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", "typings": "tsc -p types/tsconfig.json", "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" From e378b597a6ae4b90638371c8eb4e67aa88a8f533 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Thu, 23 Jun 2022 00:34:30 +0800 Subject: [PATCH 289/454] style: prepare for prettier:fix --- lib/appenders/index.js | 5 ++++- lib/configuration.js | 7 +++++-- lib/logger.js | 3 ++- test/tap/dateFileAppender-test.js | 6 ++++-- test/tap/fileAppender-test.js | 6 ++++-- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index 7069d9e0..d89a77f2 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -86,7 +86,10 @@ const createAppender = (name, config) => { } debug(`${name}: clustering.isMaster ? ${clustering.isMaster()}`); - debug(`${name}: appenderModule is ${require('util').inspect(appenderModule)}`); // eslint-disable-line global-require + debug( + // eslint-disable-next-line global-require + `${name}: appenderModule is ${require('util').inspect(appenderModule)}` + ); return clustering.onlyOnMaster(() => { debug(`calling appenderModule.configure for ${name} / ${appenderConfig.type}`); return appenderModule.configure( diff --git a/lib/configuration.js b/lib/configuration.js index 0fd6250a..e3170c35 100644 --- a/lib/configuration.js +++ b/lib/configuration.js @@ -28,8 +28,11 @@ const throwExceptionIf = (config, checks, message) => { const tests = Array.isArray(checks) ? checks : [checks]; tests.forEach((test) => { if (test) { - throw new Error(`Problem with log4js configuration: (${util.inspect(config, { depth: 5 })})` - + ` - ${message}`); + throw new Error( + `Problem with log4js configuration: (${util.inspect(config, { + depth: 5, + })}) - ${message}` + ); } }); }; diff --git a/lib/logger.js b/lib/logger.js index c899dd33..0116d3b1 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -22,7 +22,8 @@ function defaultParseCallStack(data, skipIdx = 4) { columnNumber: parseInt(lineMatch[4], 10), callStack: stacklines.join("\n") }; - } else { // eslint-disable-line no-else-return + // eslint-disable-next-line no-else-return + } else { // will never get here unless nodejs has changes to Error console.error('log4js.logger - defaultParseCallStack error'); // eslint-disable-line no-console } diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index fa5e0285..e1b0a120 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -201,10 +201,12 @@ test("../../lib/appenders/dateFile", batch => { return true; } - on() { // eslint-disable-line class-methods-use-this + // eslint-disable-next-line class-methods-use-this + on() { } - get writable() { // eslint-disable-line class-methods-use-this + // eslint-disable-next-line class-methods-use-this + get writable() { return writable; } }; diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index ebc298bf..a2b1efd3 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -358,10 +358,12 @@ test("log4js fileAppender", batch => { return true; } - on() { // eslint-disable-line class-methods-use-this + // eslint-disable-next-line class-methods-use-this + on() { } - get writable() { // eslint-disable-line class-methods-use-this + // eslint-disable-next-line class-methods-use-this + get writable() { return writable; } }; From cad9555948af1b9578c85a8a0571373a12ae3b93 Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Mon, 20 Jun 2022 10:33:44 -0500 Subject: [PATCH 290/454] style: run prettier:fix --- CHANGELOG.md | 6 +- README.md | 7 +- SECURITY.md | 6 +- docs/_layouts/default.html | 106 ++- docs/api.md | 39 +- docs/appenders.md | 82 +-- docs/assets/css/style.scss | 2 +- docs/categories.md | 59 +- docs/categoryFilter.md | 40 +- docs/clustering.md | 10 +- docs/connect-logger.md | 113 ++-- docs/console.md | 9 +- docs/contrib-guidelines.md | 8 +- docs/contributors.md | 2 +- docs/dateFile.md | 52 +- docs/faq.md | 45 +- docs/file.md | 56 +- docs/fileSync.md | 40 +- docs/layouts.md | 200 +++--- docs/logLevelFilter.md | 9 +- docs/migration-guide.md | 40 +- docs/multiFile.md | 50 +- docs/multiprocess.md | 38 +- docs/noLogFilter.md | 61 +- docs/recording.md | 18 +- docs/stderr.md | 8 +- docs/stdout.md | 9 +- docs/tcp-server.md | 16 +- docs/tcp.md | 18 +- docs/terms.md | 2 +- docs/v3-changes.md | 25 +- docs/webpack.md | 3 +- docs/writing-appenders.md | 16 +- examples/cluster.js | 4 +- examples/custom-layout.js | 16 +- examples/date-file-rolling.js | 11 +- examples/example-connect-logger.js | 6 +- examples/example-socket.js | 14 +- examples/example.js | 11 +- examples/flush-on-exit.js | 30 +- examples/fromreadme.js | 2 +- examples/hipchat-appender.js | 23 +- examples/layouts.js | 6 +- examples/log-rolling-bug.js | 16 +- examples/log-rolling.js | 10 +- examples/log-to-files.js | 52 +- examples/logFaces-appender.js | 11 +- examples/loggly-appender.js | 10 +- examples/logstashHTTP.js | 12 +- examples/logstashUDP.js | 17 +- examples/memory-test.js | 46 +- examples/patternLayout-tokens.js | 14 +- examples/pm2.js | 6 +- examples/pm2.json | 18 +- examples/rabbitmq-appender.js | 14 +- examples/redis-appender.js | 14 +- examples/slack-appender.js | 8 +- examples/smtp-appender.js | 14 +- examples/stacktrace.js | 32 +- lib/LoggingEvent.js | 27 +- lib/appenders/adapters.js | 7 +- lib/appenders/dateFile.js | 28 +- lib/appenders/file.js | 44 +- lib/appenders/fileSync.js | 73 ++- lib/appenders/index.js | 69 +- lib/appenders/logLevelFilter.js | 5 +- lib/appenders/multiFile.js | 10 +- lib/appenders/multiprocess.js | 35 +- lib/appenders/noLogFilter.js | 10 +- lib/appenders/recording.js | 8 +- lib/appenders/stderr.js | 2 - lib/appenders/stdout.js | 2 - lib/appenders/tcp-server.js | 10 +- lib/appenders/tcp.js | 13 +- lib/categories.js | 47 +- lib/clustering.js | 57 +- lib/configuration.js | 22 +- lib/connect-logger.js | 86 +-- lib/layouts.js | 88 ++- lib/levels.js | 21 +- lib/log4js.js | 50 +- lib/logger.js | 29 +- test/.eslintrc | 6 +- test/multiprocess-worker.js | 2 +- test/sandbox-coverage.js | 14 +- test/tap/LoggingEvent-test.js | 93 +-- test/tap/appender-dependencies-test.js | 113 ++-- test/tap/categoryFilter-test.js | 98 +-- test/tap/cluster-test.js | 78 +-- test/tap/configuration-inheritance-test.js | 333 +++++----- test/tap/configuration-test.js | 70 +- test/tap/configuration-validation-test.js | 316 ++++----- test/tap/connect-context-test.js | 44 +- test/tap/connect-logger-test.js | 264 ++++---- test/tap/connect-nolog-test.js | 248 +++---- test/tap/consoleAppender-test.js | 46 +- test/tap/dateFileAppender-test.js | 194 +++--- test/tap/default-settings-test.js | 192 +++--- test/tap/disable-cluster-test.js | 46 +- test/tap/dummy-appender.js | 3 +- test/tap/file-descriptor-leak-test.js | 118 ++-- test/tap/file-sighup-test.js | 110 ++-- test/tap/fileAppender-test.js | 391 ++++++------ test/tap/fileSyncAppender-test.js | 601 ++++++++--------- test/tap/layouts-test.js | 710 +++++++++++---------- test/tap/levels-before-configure-test.js | 8 +- test/tap/levels-test.js | 170 ++--- test/tap/log4js.json | 18 +- test/tap/logLevelFilter-test.js | 142 ++--- test/tap/logger-test.js | 376 ++++++----- test/tap/logging-test.js | 277 ++++---- test/tap/multi-file-appender-test.js | 398 ++++++------ test/tap/multiprocess-shutdown-test.js | 76 +-- test/tap/multiprocess-test.js | 321 +++++----- test/tap/newLevel-test.js | 240 +++---- test/tap/no-cluster-test.js | 18 +- test/tap/noLogFilter-test.js | 168 ++--- test/tap/passenger-test.js | 28 +- test/tap/pause-test.js | 171 ++--- test/tap/pm2-support-test.js | 68 +- test/tap/recordingAppender-test.js | 20 +- test/tap/server-test.js | 269 ++++---- test/tap/setLevel-asymmetry-test.js | 22 +- test/tap/stacktraces-test.js | 20 +- test/tap/stderrAppender-test.js | 50 +- test/tap/stdoutAppender-test.js | 26 +- test/tap/subcategories-test.js | 115 ++-- test/tap/tcp-appender-test.js | 238 +++---- test/tap/test-config.json | 4 +- v2-changes.md | 3 +- 130 files changed, 5189 insertions(+), 4502 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ac0db9b..020f90ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,7 +76,7 @@ ## 6.4.4 -- [fix: set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) +- [fix: set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) - [docs: updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) - [docs: broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) - [docs: updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) @@ -89,7 +89,6 @@ ## 6.4.3 - - [fix: added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@peteriman](https://github.com/peteriman) - [refactor: do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@peteriman](https://github.com/peteriman) - [refactor: defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@peteriman](https://github.com/peteriman) @@ -153,6 +152,7 @@ - [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@peteriman](https://github.com/peteriman) ## 6.4.0 - BREAKING CHANGE 💥 + New default file permissions may cause external applications unable to read logs. A [manual code/configuration change](https://github.com/log4js-node/log4js-node/pull/1141#issuecomment-1076224470) is required. @@ -199,7 +199,7 @@ A [manual code/configuration change](https://github.com/log4js-node/log4js-node/ - chore(deps-dev): bump eslint-plugin-prettier from 3.4.1 to 4.0.0 - chore(deps-dev): bump husky from 3.1.0 to 7.0.4 - chore(deps-dev): bump prettier from 1.19.0 to 2.5.1 - - chore(deps-dev): bump typescript from 3.9.10 to 4.5.4 + - chore(deps-dev): bump typescript from 3.9.10 to 4.5.4 - [chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0](https://github.com/log4js-node/log4js-node/pull/1129) - thanks [@peteriman](https://github.com/peteriman) - [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@peteriman](https://github.com/peteriman) - chore(deps-dev): bump codecov from 3.6.1 to 3.8.3 diff --git a/README.md b/README.md index 68dc4211..948f5770 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -log4js-node [![CodeQL](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml) [![Node.js CI](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml) -=========== +# log4js-node [![CodeQL](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/codeql-analysis.yml) [![Node.js CI](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml/badge.svg)](https://github.com/log4js-node/log4js-node/actions/workflows/node.js.yml) [![NPM](https://nodei.co/npm/log4js.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/log4js/) @@ -67,7 +66,7 @@ See example.js for a full example, but here's a snippet (also in `examples/fromr const log4js = require("log4js"); log4js.configure({ appenders: { cheese: { type: "file", filename: "cheese.log" } }, - categories: { default: { appenders: ["cheese"], level: "error" } } + categories: { default: { appenders: ["cheese"], level: "error" } }, }); const logger = log4js.getLogger("cheese"); @@ -102,7 +101,7 @@ There's also [an example application](https://github.com/log4js-node/log4js-exam import log4js from "log4js"; log4js.configure({ appenders: { cheese: { type: "file", filename: "cheese.log" } }, - categories: { default: { appenders: ["cheese"], level: "error" } } + categories: { default: { appenders: ["cheese"], level: "error" } }, }); const logger = log4js.getLogger(); diff --git a/SECURITY.md b/SECURITY.md index f872565b..83060309 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Supported Versions -We're aiming to only support the latest major version of log4js. Older than that is usually *very* old. +We're aiming to only support the latest major version of log4js. Older than that is usually _very_ old. | Version | Supported | | ------- | ------------------ | @@ -13,7 +13,7 @@ We're aiming to only support the latest major version of log4js. Older than that Report vulnerabilities via email to: -* Gareth Jones -* Lam Wei Li +- Gareth Jones +- Lam Wei Li Please put "[log4js:security]" in the subject line. We will aim to respond within a day or two. diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 956b15be..ba8235bb 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -1,14 +1,20 @@ - + - - - {{ site.title | default: site.github.repository_name }} by {{ site.github.owner_name }} + + + + {{ site.title | default: site.github.repository_name }} by {{ + site.github.owner_name }} + - - + + @@ -18,7 +24,11 @@

    {{ site.title | default: site.github.repository_name }}

    {{ site.description | default: site.github.project_tagline }}

    {% if site.github.is_project_page %} -

    View the Project on GitHub {{ github_name }}

    +

    + View the Project on GitHub {{ github_name }} +

    {% endif %}
      @@ -34,42 +44,72 @@

      {{ site.title | default: site.github.repository_name }}

    {% if site.github.is_user_page %} -

    View My GitHub Profile

    - {% endif %} - - {% if site.show_downloads %} - +

    + View My GitHub Profile +

    + {% endif %} {% if site.show_downloads %} + {% endif %} -
    - - {{ content }} - -
    +
    {{ content }}
    - - {% if site.google_analytics %} + {% if site.google_analytics %} - {% endif %} + {% endif %} diff --git a/docs/api.md b/docs/api.md index 98eeabae..3e64d658 100644 --- a/docs/api.md +++ b/docs/api.md @@ -13,34 +13,39 @@ Configuration objects must define at least one appender, and a default category. `configure` method call returns the configured log4js object. ### Configuration Object + Properties: -* `levels` (optional, object) - used for defining custom log levels, or redefining existing ones; this is a map with the level name as the key (string, case insensitive), and an object as the value. The object should have two properties: the level value (integer) as the value, and the colour. Log levels are used to assign importance to log messages, with the integer value being used to sort them. If you do not specify anything in your configuration, the default values are used (ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF - note that OFF is intended to be used to turn off logging, not as a level for actual logging, i.e. you would never call `logger.off('some log message')`). Levels defined here are used in addition to the default levels, with the integer value being used to determine their relation to the default levels. If you define a level with the same name as a default level, then the integer value in the config takes precedence. Level names must begin with a letter, and can only contain letters, numbers and underscores. -* `appenders` (object) - a map of named appenders (string) to appender definitions (object); appender definitions must have a property `type` (string) - other properties depend on the appender type. -* `categories` (object) - a map of named categories (string) to category definitions (object). You must define the `default` category which is used for all log events that do not match a specific category. Category definitions have two properties: - * `appenders` (array of strings) - the list of appender names to be used for this category. A category must have at least one appender. - * `level` (string, case insensitive) - the minimum log level that this category will send to the appenders. For example, if set to 'error' then the appenders will only receive log events of level 'error', 'fatal', 'mark' - log events of 'info', 'warn', 'debug', or 'trace' will be ignored. - * `enableCallStack` (boolean, optional, defaults to `false`) - setting this to `true` will make log events for this category use the call stack to generate line numbers and file names in the event. See [pattern layout](layouts.md) for how to output these values in your appenders. -* `pm2` (boolean) (optional) - set this to true if you're running your app using [pm2](http://pm2.keymetrics.io), otherwise logs will not work (you'll also need to install pm2-intercom as pm2 module: `pm2 install pm2-intercom`) -* `pm2InstanceVar` (string) (optional, defaults to 'NODE_APP_INSTANCE') - set this if you're using pm2 and have changed the default name of the NODE_APP_INSTANCE variable. -* `disableClustering` (boolean) (optional) - set this to true if you liked the way log4js used to just ignore clustered environments, or you're having trouble with PM2 logging. Each worker process will do its own logging. Be careful with this if you're logging to files, weirdness can occur. + +- `levels` (optional, object) - used for defining custom log levels, or redefining existing ones; this is a map with the level name as the key (string, case insensitive), and an object as the value. The object should have two properties: the level value (integer) as the value, and the colour. Log levels are used to assign importance to log messages, with the integer value being used to sort them. If you do not specify anything in your configuration, the default values are used (ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF - note that OFF is intended to be used to turn off logging, not as a level for actual logging, i.e. you would never call `logger.off('some log message')`). Levels defined here are used in addition to the default levels, with the integer value being used to determine their relation to the default levels. If you define a level with the same name as a default level, then the integer value in the config takes precedence. Level names must begin with a letter, and can only contain letters, numbers and underscores. +- `appenders` (object) - a map of named appenders (string) to appender definitions (object); appender definitions must have a property `type` (string) - other properties depend on the appender type. +- `categories` (object) - a map of named categories (string) to category definitions (object). You must define the `default` category which is used for all log events that do not match a specific category. Category definitions have two properties: + - `appenders` (array of strings) - the list of appender names to be used for this category. A category must have at least one appender. + - `level` (string, case insensitive) - the minimum log level that this category will send to the appenders. For example, if set to 'error' then the appenders will only receive log events of level 'error', 'fatal', 'mark' - log events of 'info', 'warn', 'debug', or 'trace' will be ignored. + - `enableCallStack` (boolean, optional, defaults to `false`) - setting this to `true` will make log events for this category use the call stack to generate line numbers and file names in the event. See [pattern layout](layouts.md) for how to output these values in your appenders. +- `pm2` (boolean) (optional) - set this to true if you're running your app using [pm2](http://pm2.keymetrics.io), otherwise logs will not work (you'll also need to install pm2-intercom as pm2 module: `pm2 install pm2-intercom`) +- `pm2InstanceVar` (string) (optional, defaults to 'NODE_APP_INSTANCE') - set this if you're using pm2 and have changed the default name of the NODE_APP_INSTANCE variable. +- `disableClustering` (boolean) (optional) - set this to true if you liked the way log4js used to just ignore clustered environments, or you're having trouble with PM2 logging. Each worker process will do its own logging. Be careful with this if you're logging to files, weirdness can occur. ## Loggers - `log4js.getLogger([category])` This function takes a single optional string argument to denote the category to be used for log events on this logger. If no category is specified, the events will be routed to the appender for the `default` category. The function returns a `Logger` object which has its level set to the level specified for that category in the config and implements the following functions: -* `(args...)` - where `` can be any of the lower case names of the levels (including any custom levels defined). For example: `logger.info('some info')` will dispatch a log event with a level of info. If you're using the basic, coloured or message pass-through [layouts](layouts.md), the logged string will have its formatting (placeholders like `%s`, `%d`, etc) delegated to [util.format](https://nodejs.org/api/util.html#util_util_format_format_args). -* `isEnabled()` - returns true if a log event of level (camel case) would be dispatched to the appender defined for the logger's category. For example: `logger.isInfoEnabled()` will return true if the level for the logger is INFO or lower. -* `addContext(,)` - where `` is a string, `` can be anything. This stores a key-value pair that is added to all log events generated by the logger. Uses would be to add ids for tracking a user through your application. Currently only the `logFaces` appenders make use of the context values. -* `removeContext()` - removes a previously defined key-value pair from the context. -* `clearContext()` - removes all context pairs from the logger. -* `setParseCallStackFunction(function)` - Allow to override the default way to parse the callstack data for the layout pattern, a generic javascript Error object is passed to the function. Must return an object with properties : `functionName` / `fileName` / `lineNumber` / `columnNumber` / `callStack`. Can for example be used if all of your log call are made from one "debug" class and you would to "erase" this class from the callstack to only show the function which called your "debug" class. + +- `(args...)` - where `` can be any of the lower case names of the levels (including any custom levels defined). For example: `logger.info('some info')` will dispatch a log event with a level of info. If you're using the basic, coloured or message pass-through [layouts](layouts.md), the logged string will have its formatting (placeholders like `%s`, `%d`, etc) delegated to [util.format](https://nodejs.org/api/util.html#util_util_format_format_args). +- `isEnabled()` - returns true if a log event of level (camel case) would be dispatched to the appender defined for the logger's category. For example: `logger.isInfoEnabled()` will return true if the level for the logger is INFO or lower. +- `addContext(,)` - where `` is a string, `` can be anything. This stores a key-value pair that is added to all log events generated by the logger. Uses would be to add ids for tracking a user through your application. Currently only the `logFaces` appenders make use of the context values. +- `removeContext()` - removes a previously defined key-value pair from the context. +- `clearContext()` - removes all context pairs from the logger. +- `setParseCallStackFunction(function)` - Allow to override the default way to parse the callstack data for the layout pattern, a generic javascript Error object is passed to the function. Must return an object with properties : `functionName` / `fileName` / `lineNumber` / `columnNumber` / `callStack`. Can for example be used if all of your log call are made from one "debug" class and you would to "erase" this class from the callstack to only show the function which called your "debug" class. The `Logger` object has the following properties: -* `level` - where `level` is a log4js level or a string that matches a level (e.g. 'info', 'INFO', etc). This allows overriding the configured level for this logger. Changing this value applies to all loggers of the same category. -* `useCallStack` - where `useCallStack` is a boolean to indicate if log events for this category use the call stack to generate line numbers and file names in the event. This allows overriding the configured useCallStack for this logger. Changing this value applies to all loggers of the same category. + +- `level` - where `level` is a log4js level or a string that matches a level (e.g. 'info', 'INFO', etc). This allows overriding the configured level for this logger. Changing this value applies to all loggers of the same category. +- `useCallStack` - where `useCallStack` is a boolean to indicate if log events for this category use the call stack to generate line numbers and file names in the event. This allows overriding the configured useCallStack for this logger. Changing this value applies to all loggers of the same category. ## Shutdown - `log4js.shutdown(cb)` `shutdown` accepts a callback that will be called when log4js has closed all appenders and finished writing log events. Use this when your programme exits to make sure all your logs are written to files, sockets are closed, etc. ## Custom Layouts - `log4js.addLayout(type, fn)` + This function is used to add user-defined layout functions. See [layouts](layouts.md) for more details and an example. diff --git a/docs/appenders.md b/docs/appenders.md index a34c6b72..1619952a 100644 --- a/docs/appenders.md +++ b/docs/appenders.md @@ -1,73 +1,79 @@ # Log4js - Appenders Appenders serialise log events to some form of output. They can write to files, send emails, send data over the network. All appenders have a `type` which determines which appender gets used. For example: + ```javascript -const log4js = require('log4js'); +const log4js = require("log4js"); log4js.configure({ appenders: { - out: { type: 'stdout' }, - app: { type: 'file', filename: 'application.log' } + out: { type: "stdout" }, + app: { type: "file", filename: "application.log" }, }, categories: { - default: { appenders: [ 'out', 'app' ], level: 'debug' } - } + default: { appenders: ["out", "app"], level: "debug" }, + }, }); ``` + This defines two appenders named 'out' and 'app'. 'out' uses the [stdout](stdout.md) appender which writes to standard out. 'app' uses the [file](file.md) appender, configured to write to 'application.log'. ## Core Appenders The following appenders are included with log4js. Some require extra dependencies that are not included as part of log4js (the [smtp](https://github.com/log4js-node/smtp) appender needs [nodemailer](https://www.npmjs.com/package/nodemailer) for example), and these will be noted in the docs for that appender. If you don't use those appenders, then you don't need the extra dependencies. -* [categoryFilter](categoryFilter.md) -* [console](console.md) -* [dateFile](dateFile.md) -* [file](file.md) -* [fileSync](fileSync.md) -* [logLevelFilter](logLevelFilter.md) -* [multiFile](multiFile.md) -* [multiprocess](multiprocess.md) -* [noLogFilter](noLogFilter.md) -* [recording](recording.md) -* [stderr](stderr.md) -* [stdout](stdout.md) -* [tcp](tcp.md) -* [tcp-server](tcp-server.md) +- [categoryFilter](categoryFilter.md) +- [console](console.md) +- [dateFile](dateFile.md) +- [file](file.md) +- [fileSync](fileSync.md) +- [logLevelFilter](logLevelFilter.md) +- [multiFile](multiFile.md) +- [multiprocess](multiprocess.md) +- [noLogFilter](noLogFilter.md) +- [recording](recording.md) +- [stderr](stderr.md) +- [stdout](stdout.md) +- [tcp](tcp.md) +- [tcp-server](tcp-server.md) ## Optional Appenders The following appenders are supported by log4js, but are no longer distributed with log4js core from version 3 onwards. -* [gelf](https://github.com/log4js-node/gelf) -* [hipchat](https://github.com/log4js-node/hipchat) -* [logFaces-HTTP](https://github.com/log4js-node/logFaces-HTTP) -* [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP) -* [loggly](https://github.com/log4js-node/loggly) -* [logstashHTTP](https://github.com/log4js-node/logstashHTTP) -* [logstashUDP](https://github.com/log4js-node/logstashUDP) -* [mailgun](https://github.com/log4js-node/mailgun) -* [rabbitmq](https://github.com/log4js-node/rabbitmq) -* [redis](https://github.com/log4js-node/redis) -* [slack](https://github.com/log4js-node/slack) -* [smtp](https://github.com/log4js-node/smtp) +- [gelf](https://github.com/log4js-node/gelf) +- [hipchat](https://github.com/log4js-node/hipchat) +- [logFaces-HTTP](https://github.com/log4js-node/logFaces-HTTP) +- [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP) +- [loggly](https://github.com/log4js-node/loggly) +- [logstashHTTP](https://github.com/log4js-node/logstashHTTP) +- [logstashUDP](https://github.com/log4js-node/logstashUDP) +- [mailgun](https://github.com/log4js-node/mailgun) +- [rabbitmq](https://github.com/log4js-node/rabbitmq) +- [redis](https://github.com/log4js-node/redis) +- [slack](https://github.com/log4js-node/slack) +- [smtp](https://github.com/log4js-node/smtp) For example, if you were previously using the gelf appender (`type: 'gelf'`) then you should add `@log4js-node/gelf` to your dependencies and change the type to `type: '@log4js-node/gelf'`. ## Other Appenders These appenders are maintained by its own authors and may be useful for you: -* [udp](https://github.com/iassasin/log4js-udp-appender) + +- [udp](https://github.com/iassasin/log4js-udp-appender) ## Custom Appenders Log4js can load appenders from outside the core appenders. The `type` config value is used as a require path if no matching appender can be found. For example, the following configuration will attempt to load an appender from the module 'cheese/appender', passing the rest of the config for the appender to that module: + ```javascript log4js.configure({ - appenders: { gouda: { type: 'cheese/appender', flavour: 'tasty' } }, - categories: { default: { appenders: ['gouda'], level: 'debug' }} + appenders: { gouda: { type: "cheese/appender", flavour: "tasty" } }, + categories: { default: { appenders: ["gouda"], level: "debug" } }, }); ``` + Log4js checks the following places (in this order) for appenders based on the type value: + 1. The core appenders: `require('./appenders/' + type)` 2. node_modules: `require(type)` 3. relative to the main file of your application: `require(path.dirname(require.main.filename) + '/' + type)` @@ -76,14 +82,18 @@ Log4js checks the following places (in this order) for appenders based on the ty If you want to write your own appender, read the [documentation](writing-appenders.md) first. ## Advanced configuration + If you've got a custom appender of your own, or are using webpack (or some other bundler), you may find it easier to pass in the appender module in the config instead of loading from the node.js require path. Here's an example: + ```javascript const myAppenderModule = { - configure: (config, layouts, findAppender, levels) => { /* ...your appender config... */ } + configure: (config, layouts, findAppender, levels) => { + /* ...your appender config... */ + }, }; log4js.configure({ appenders: { custom: { type: myAppenderModule } }, - categories: { default: { appenders: ['custom'], level: 'debug' } } + categories: { default: { appenders: ["custom"], level: "debug" } }, }); ``` diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss index 94dc5fd9..6cf088a4 100644 --- a/docs/assets/css/style.scss +++ b/docs/assets/css/style.scss @@ -8,7 +8,7 @@ header ul { height: auto; padding: 0; list-style: disc; - clear:both; + clear: both; margin-left: 20px; } diff --git a/docs/categories.md b/docs/categories.md index 8372a4ff..ed16e0de 100644 --- a/docs/categories.md +++ b/docs/categories.md @@ -1,55 +1,64 @@ # Categories + Categories are groups of log events. The category for log events is defined when you get a _Logger_ from log4js (`log4js.getLogger('somecategory')`). Log events with the same _category_ will go to the same _appenders_. ## Default configuration + When defining your appenders through a configuration, at least one category must be defined. ```javascript -const log4js = require('log4js'); +const log4js = require("log4js"); log4js.configure({ appenders: { - out: { type: 'stdout' }, - app: { type: 'file', filename: 'application.log' } + out: { type: "stdout" }, + app: { type: "file", filename: "application.log" }, }, categories: { - default: { appenders: [ 'out' ], level: 'trace' }, - app: { appenders: ['app'], level: 'trace' } - } + default: { appenders: ["out"], level: "trace" }, + app: { appenders: ["app"], level: "trace" }, + }, }); const logger = log4js.getLogger(); -logger.trace('This will use the default category and go to stdout'); -const logToFile = log4js.getLogger('app'); -logToFile.trace('This will go to a file'); +logger.trace("This will use the default category and go to stdout"); +const logToFile = log4js.getLogger("app"); +logToFile.trace("This will go to a file"); ``` ## Categories inheritance -Log4js supports a hierarchy for categories, using dots to separate layers - for example, log events in the category 'myapp.submodule' will use the level for 'myapp' if none is defined for 'myapp.submodule', and also any appenders defined for 'myapp'. -This behaviour can be disabled by setting inherit=false on the sub-category. + +Log4js supports a hierarchy for categories, using dots to separate layers - for example, log events in the category 'myapp.submodule' will use the level for 'myapp' if none is defined for 'myapp.submodule', and also any appenders defined for 'myapp'. +This behaviour can be disabled by setting inherit=false on the sub-category. ```javascript -const log4js = require('log4js'); +const log4js = require("log4js"); log4js.configure({ appenders: { - console: { type: 'console' }, - app: { type: 'file', filename: 'application.log' } + console: { type: "console" }, + app: { type: "file", filename: "application.log" }, }, categories: { - default: { appenders: [ 'console' ], level: 'trace' }, - catA: { appenders: ['console'], level: 'error' }, - 'catA.catB': { appenders: ['app'], level: 'trace' }, - } + default: { appenders: ["console"], level: "trace" }, + catA: { appenders: ["console"], level: "error" }, + "catA.catB": { appenders: ["app"], level: "trace" }, + }, }); -const loggerA = log4js.getLogger('catA'); -loggerA.error('This will be written to console with log level ERROR'); -loggerA.trace('This will not be written'); -const loggerAB = log4js.getLogger('catA.catB'); -loggerAB.error('This will be written with log level ERROR to console and to a file'); -loggerAB.trace('This will be written with log level TRACE to console and to a file'); +const loggerA = log4js.getLogger("catA"); +loggerA.error("This will be written to console with log level ERROR"); +loggerA.trace("This will not be written"); +const loggerAB = log4js.getLogger("catA.catB"); +loggerAB.error( + "This will be written with log level ERROR to console and to a file" +); +loggerAB.trace( + "This will be written with log level TRACE to console and to a file" +); ``` + Two categories are defined: + - Log events with category 'catA' will go to appender 'console' only. -- Log events with category 'catA.catB' will go to appenders 'console' and 'app'. +- Log events with category 'catA.catB' will go to appenders 'console' and 'app'. Appenders will see and log an event only if the category level is less than or equal to the event's level. diff --git a/docs/categoryFilter.md b/docs/categoryFilter.md index 20e4cf87..e9c3aaee 100644 --- a/docs/categoryFilter.md +++ b/docs/categoryFilter.md @@ -4,44 +4,50 @@ This is not strictly an appender - it wraps around another appender and stops lo ## Configuration -* `type` - `"categoryFilter"` -* `exclude` - `string | Array` - the category (or categories if you provide an array of values) that will be excluded from the appender. -* `appender` - `string` - the name of the appender to filter. +- `type` - `"categoryFilter"` +- `exclude` - `string | Array` - the category (or categories if you provide an array of values) that will be excluded from the appender. +- `appender` - `string` - the name of the appender to filter. ## Example ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' }, - 'no-noise': { type: 'categoryFilter', exclude: 'noisy.component', appender: 'everything' } + everything: { type: "file", filename: "all-the-logs.log" }, + "no-noise": { + type: "categoryFilter", + exclude: "noisy.component", + appender: "everything", + }, }, categories: { - default: { appenders: [ 'no-noise' ], level: 'debug' } - } + default: { appenders: ["no-noise"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -const noisyLogger = log4js.getLogger('noisy.component'); -logger.debug('I will be logged in all-the-logs.log'); -noisyLogger.debug('I will not be logged.'); +const noisyLogger = log4js.getLogger("noisy.component"); +logger.debug("I will be logged in all-the-logs.log"); +noisyLogger.debug("I will not be logged."); ``` Note that you can achieve the same outcome without using the category filter, like this: + ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' } + everything: { type: "file", filename: "all-the-logs.log" }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug' }, - 'noisy.component': { appenders: ['everything'], level: 'off' } - } + default: { appenders: ["everything"], level: "debug" }, + "noisy.component": { appenders: ["everything"], level: "off" }, + }, }); const logger = log4js.getLogger(); -const noisyLogger = log4js.getLogger('noisy.component'); -logger.debug('I will be logged in all-the-logs.log'); -noisyLogger.debug('I will not be logged.'); +const noisyLogger = log4js.getLogger("noisy.component"); +logger.debug("I will be logged in all-the-logs.log"); +noisyLogger.debug("I will not be logged."); ``` + Category filter becomes useful when you have many categories you want to exclude, passing them as an array. diff --git a/docs/clustering.md b/docs/clustering.md index 31cb9e74..6696bdb6 100644 --- a/docs/clustering.md +++ b/docs/clustering.md @@ -5,17 +5,21 @@ If you're running log4js in an application that uses [node's core cluster](https This can cause problems in some rare circumstances, if you're experiencing weird logging problems, then use the `disableClustering: true` option in your log4js configuration to have every process behave as if it were the master process. Be careful if you're logging to files. ## I'm using PM2, but I'm not getting any logs! + To get log4js working with [PM2](http://pm2.keymetrics.io), you'll need to install the [pm2-intercom](https://www.npmjs.com/package/pm2-intercom) module. + ```bash pm2 install pm2-intercom ``` + Then add the value `pm2: true` to your log4js configuration. If you're also using `node-config`, then you'll probably have renamed your `NODE_APP_INSTANCE` environment variable. If so, you'll also need to add `pm2InstanceVar: ''` where `` should be replaced with the new name you gave the instance environment variable. + ```javascript log4js.configure({ - appenders: { out: { type: 'stdout'}}, - categories: { default: { appenders: ['out'], level: 'info'}}, + appenders: { out: { type: "stdout" } }, + categories: { default: { appenders: ["out"], level: "info" } }, pm2: true, - pm2InstanceVar: 'INSTANCE_ID' + pm2InstanceVar: "INSTANCE_ID", }); ``` diff --git a/docs/connect-logger.md b/docs/connect-logger.md index d7f428da..e63e420a 100644 --- a/docs/connect-logger.md +++ b/docs/connect-logger.md @@ -3,30 +3,31 @@ The connect/express logger was added to log4js by [danbell](https://github.com/danbell). This allows connect/express servers to log using log4js. See `example-connect-logger.js`. ```javascript -var log4js = require('log4js'); -var express = require('express'); +var log4js = require("log4js"); +var express = require("express"); log4js.configure({ - appenders: { - console: { type: 'console' }, - file: { type: 'file', filename: 'cheese.log' } - }, - categories: { - cheese: { appenders: ['file'], level: 'info' }, - default: { appenders: ['console'], level: 'info' } - } + appenders: { + console: { type: "console" }, + file: { type: "file", filename: "cheese.log" }, + }, + categories: { + cheese: { appenders: ["file"], level: "info" }, + default: { appenders: ["console"], level: "info" }, + }, }); -var logger = log4js.getLogger('cheese'); +var logger = log4js.getLogger("cheese"); var app = express(); -app.use(log4js.connectLogger(logger, { level: 'info' })); -app.get('/', function(req,res) { - res.send('hello world'); +app.use(log4js.connectLogger(logger, { level: "info" })); +app.get("/", function (req, res) { + res.send("hello world"); }); app.listen(5000); ``` The log4js.connectLogger supports the passing of an options object that can be used to set the following: + - log level - log format string or function (the same as the connect/express logger) - nolog expressions (represented as a string, regexp, or array) @@ -35,54 +36,77 @@ The log4js.connectLogger supports the passing of an options object that can be u For example: ```javascript -app.use(log4js.connectLogger(logger, { level: log4js.levels.INFO, format: ':method :url' })); +app.use( + log4js.connectLogger(logger, { + level: log4js.levels.INFO, + format: ":method :url", + }) +); ``` or: ```javascript -app.use(log4js.connectLogger(logger, { - level: 'auto', - // include the Express request ID in the logs - format: (req, res, format) => format(`:remote-addr - ${req.id} - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"`) -})); +app.use( + log4js.connectLogger(logger, { + level: "auto", + // include the Express request ID in the logs + format: (req, res, format) => + format( + `:remote-addr - ${req.id} - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"` + ), + }) +); ``` When you request of POST, you want to log the request body parameter like JSON. The log format function is very useful. Please use log format function instead "tokens" property for use express's request or response. - ```javascript -app.use(log4js.connectLogger(logger, { - level: 'info', - format: (req, res, format) => format(`:remote-addr :method :url ${JSON.stringify(req.body)}`) -})); +app.use( + log4js.connectLogger(logger, { + level: "info", + format: (req, res, format) => + format(`:remote-addr :method :url ${JSON.stringify(req.body)}`), + }) +); ``` Added automatic level detection to connect-logger, depends on http status response, compatible with express 3.x and 4.x. -* http responses 3xx, level = WARN -* http responses 4xx & 5xx, level = ERROR -* else, level = INFO +- http responses 3xx, level = WARN +- http responses 4xx & 5xx, level = ERROR +- else, level = INFO ```javascript -app.use(log4js.connectLogger(logger, { level: 'auto' })); +app.use(log4js.connectLogger(logger, { level: "auto" })); ``` The levels of returned status codes can be configured via status code rulesets. ```javascript -app.use(log4js.connectLogger(logger, { level: 'auto', statusRules: [ - { from: 200, to: 299, level: 'debug' }, - { codes: [303, 304], level: 'info' } -]})); +app.use( + log4js.connectLogger(logger, { + level: "auto", + statusRules: [ + { from: 200, to: 299, level: "debug" }, + { codes: [303, 304], level: "info" }, + ], + }) +); ``` The log4js.connectLogger also supports a nolog option where you can specify a string, regexp, or array to omit certain log messages. Example of 1.2 below. ```javascript -app.use(log4js.connectLogger(logger, { level: 'auto', format: ':method :url', nolog: '\\.gif|\\.jpg$' })); +app.use( + log4js.connectLogger(logger, { + level: "auto", + format: ":method :url", + nolog: "\\.gif|\\.jpg$", + }) +); ``` The log4js.connectLogger can add a response of express to context if `context` flag is set to `true`. @@ -97,20 +121,23 @@ app.use(log4js.connectLogger(logger, { context: true })); In layout: ```javascript -log4js.addLayout('customLayout', () => { +log4js.addLayout("customLayout", () => { return (loggingEvent) => { const res = loggingEvent.context.res; - return util.format(...loggingEvent.data, res ? `status: ${res.statusCode}` : ''); + return util.format( + ...loggingEvent.data, + res ? `status: ${res.statusCode}` : "" + ); }; }); ``` ## Example nolog values -| nolog value | Will Not Log | Will Log | -|-------------|--------------|----------| -| `"\\.gif"` | http://example.com/hoge.gif http://example.com/hoge.gif?fuga | http://example.com/hoge.agif | -| `"\\.gif\|\\.jpg$"` | http://example.com/hoge.gif http://example.com/hoge.gif?fuga http://example.com/hoge.jpg?fuga | http://example.com/hoge.agif http://example.com/hoge.ajpg http://example.com/hoge.jpg?hoge | -| `"\\.(gif\|jpe?g\|png)$"` | http://example.com/hoge.gif http://example.com/hoge.jpeg | http://example.com/hoge.gif?uid=2 http://example.com/hoge.jpg?pid=3 | -| `/\.(gif\|jpe?g\|png)$/` | as above | as above | -| `["\\.jpg$", "\\.png", "\\.gif"]` | same as `"\\.jpg\|\\.png\|\\.gif"` | same as `"\\.jpg\|\\.png\|\\.gif"` | +| nolog value | Will Not Log | Will Log | +| --------------------------------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | +| `"\\.gif"` | http://example.com/hoge.gif http://example.com/hoge.gif?fuga | http://example.com/hoge.agif | +| `"\\.gif\|\\.jpg$"` | http://example.com/hoge.gif http://example.com/hoge.gif?fuga http://example.com/hoge.jpg?fuga | http://example.com/hoge.agif http://example.com/hoge.ajpg http://example.com/hoge.jpg?hoge | +| `"\\.(gif\|jpe?g\|png)$"` | http://example.com/hoge.gif http://example.com/hoge.jpeg | http://example.com/hoge.gif?uid=2 http://example.com/hoge.jpg?pid=3 | +| `/\.(gif\|jpe?g\|png)$/` | as above | as above | +| `["\\.jpg$", "\\.png", "\\.gif"]` | same as `"\\.jpg\|\\.png\|\\.gif"` | same as `"\\.jpg\|\\.png\|\\.gif"` | diff --git a/docs/console.md b/docs/console.md index 8fb84b33..abce5ac3 100644 --- a/docs/console.md +++ b/docs/console.md @@ -4,15 +4,16 @@ This appender uses node's console object to write log events. It can also be use # Configuration -* `type` - `console` -* `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) +- `type` - `console` +- `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) Note that all log events are output using `console.log` regardless of the event's level (so `ERROR` events will not be logged using `console.error`). # Example + ```javascript log4js.configure({ - appenders: { console: { type: 'console' } }, - categories: { default: { appenders: [ 'console' ], level: 'info' } } + appenders: { console: { type: "console" } }, + categories: { default: { appenders: ["console"], level: "info" } }, }); ``` diff --git a/docs/contrib-guidelines.md b/docs/contrib-guidelines.md index 07f8c9d2..67a55615 100644 --- a/docs/contrib-guidelines.md +++ b/docs/contrib-guidelines.md @@ -2,7 +2,7 @@ I love pull requests, and I need all the help I can get. However, there are a few rules to follow if you want a better chance of having your pull request merged: -* Fork the repo, make a feature branch just for your changes -* On the branch, only commit changes for the feature you're adding. Each pull request should concentrate on a single change - don't mix multiple features. -* Your feature should be covered by tests. Run the tests with npm test. This is very important - without tests, your feature may be broken by subsequent changes and I may never know. Plus it's always nice to know that your changes work :-) -* Don't bump the npm version - yours may not be the only feature that makes it into a version, and you don't know when your pull request may get merged (the version may have changed by then). +- Fork the repo, make a feature branch just for your changes +- On the branch, only commit changes for the feature you're adding. Each pull request should concentrate on a single change - don't mix multiple features. +- Your feature should be covered by tests. Run the tests with npm test. This is very important - without tests, your feature may be broken by subsequent changes and I may never know. Plus it's always nice to know that your changes work :-) +- Don't bump the npm version - yours may not be the only feature that makes it into a version, and you don't know when your pull request may get merged (the version may have changed by then). diff --git a/docs/contributors.md b/docs/contributors.md index ab719ce0..edac88f6 100644 --- a/docs/contributors.md +++ b/docs/contributors.md @@ -1,6 +1,6 @@ # Contributors -Many people have helped make log4js what it is today. Here's a list of everyone who has contributed to the code. There are lots of people who've helped by submitting bug reports or pull requests that I haven't merged, but I have used their ideas to implement a different way. Thanks to you all. This library also owes a huge amount to the [original log4js project](https://github.com/stritti/log4js). If you'd like to help out, take a look at the [contributor guidelines](contrib-guidelines.md). +Many people have helped make log4js what it is today. Here's a list of everyone who has contributed to the code. There are lots of people who've helped by submitting bug reports or pull requests that I haven't merged, but I have used their ideas to implement a different way. Thanks to you all. This library also owes a huge amount to the [original log4js project](https://github.com/stritti/log4js). If you'd like to help out, take a look at the [contributor guidelines](contrib-guidelines.md).
      {% for contributor in site.github.contributors %} diff --git a/docs/dateFile.md b/docs/dateFile.md index 6ec289f4..35eea3c4 100644 --- a/docs/dateFile.md +++ b/docs/dateFile.md @@ -4,67 +4,75 @@ This is a file appender that rolls log files based on a configurable time, rathe ## Configuration -* `type` - `"dateFile"` -* `filename` - `string` - the path of the file where you want your logs written. -* `pattern` - `string` (optional, defaults to `yyyy-MM-dd`) - the pattern to use to determine when to roll the logs. -* `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) +- `type` - `"dateFile"` +- `filename` - `string` - the path of the file where you want your logs written. +- `pattern` - `string` (optional, defaults to `yyyy-MM-dd`) - the pattern to use to determine when to roll the logs. +- `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): -* `encoding` - `string` (default "utf-8") -* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) -* `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) -* `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) -* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). -* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) -* `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file. -* `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). + +- `encoding` - `string` (default "utf-8") +- `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +- `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) +- `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) +- `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.2017-05-30.log` instead of `file.log.2017-05-30`). +- `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`2013-08-30 or abc`.`2013-08-30.log (keepFileExt) +- `alwaysIncludePattern` - `boolean` (default false) - include the pattern in the name of the current log file. +- `numBackups` - `integer` (default 1) - the number of old files that matches the pattern to keep (excluding the hot file). The `pattern` is used to determine when the current log file should be renamed and a new log file created. For example, with a filename of 'cheese.log', and the default pattern of `.yyyy-MM-dd` - on startup this will result in a file called `cheese.log` being created and written to until the next write after midnight. When this happens, `cheese.log` will be renamed to `cheese.log.2017-04-30` and a new `cheese.log` file created. The appender uses the [date-format](https://github.com/nomiddlename/date-format) library to parse the `pattern`, and any of the valid formats can be used. Also note that there is no timer controlling the log rolling - changes in the pattern are determined on every log write. If no writes occur, then no log rolling will happen. If your application logs infrequently this could result in no log file being written for a particular time period. Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [file appender](file.md) as well. So you could roll files by both date and size. - ## Example (default daily log rolling) ```javascript log4js.configure({ appenders: { - everything: { type: 'dateFile', filename: 'all-the-logs.log' } + everything: { type: "dateFile", filename: "all-the-logs.log" }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug' } - } + default: { appenders: ["everything"], level: "debug" }, + }, }); ``` This example will result in files being rolled every day. The initial file will be `all-the-logs.log`, with the daily backups being `all-the-logs.log.2017-04-30`, etc. ## Example with hourly log rolling (and compressed backups) + ```javascript log4js.configure({ appenders: { - everything: { type: 'dateFile', filename: 'all-the-logs.log', pattern: 'yyyy-MM-dd-hh', compress: true } + everything: { + type: "dateFile", + filename: "all-the-logs.log", + pattern: "yyyy-MM-dd-hh", + compress: true, + }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug'} - } + default: { appenders: ["everything"], level: "debug" }, + }, }); ``` + This will result in one current log file (`all-the-logs.log`). Every hour this file will be compressed and renamed to `all-the-logs.log.2017-04-30-08.gz` (for example) and a new `all-the-logs.log` created. ## Memory usage If your application logs a large volume of messages, and find memory usage increasing due to buffering log messages before being written to a file, then you can listen for "log4js:pause" events emitted by the file appenders. Your application should stop logging when it receives one of these events with a value of `true` and resume when it receives an event with a value of `false`. + ```javascript log4js.configure({ appenders: { - output: { type: 'dateFile', filename: 'out.log' } + output: { type: "dateFile", filename: "out.log" }, }, - categories: { default: { appenders: ['output'], level: 'debug'}} + categories: { default: { appenders: ["output"], level: "debug" } }, }); let paused = false; -process.on("log4js:pause", (value) => paused = value); +process.on("log4js:pause", (value) => (paused = value)); const logger = log4js.getLogger(); while (!paused) { diff --git a/docs/faq.md b/docs/faq.md index 9730a496..667f8691 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -3,23 +3,27 @@ ## I want errors to go to a special file, but still want everything written to another file - how do I do that? You'll need to use the [logLevelFilter](logLevelFilter.md). Here's an example configuration: + ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' }, - emergencies: { type: 'file', filename: 'oh-no-not-again.log' }, - 'just-errors': { type: 'logLevelFilter', appender: 'emergencies', level: 'error' } + everything: { type: "file", filename: "all-the-logs.log" }, + emergencies: { type: "file", filename: "oh-no-not-again.log" }, + "just-errors": { + type: "logLevelFilter", + appender: "emergencies", + level: "error", + }, }, categories: { - default: { appenders: ['just-errors', 'everything'], level: 'debug' } - } + default: { appenders: ["just-errors", "everything"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('This goes to all-the-logs.log'); -logger.info('As does this.'); -logger.error('This goes to all-the-logs.log and oh-no-not-again.log'); - +logger.debug("This goes to all-the-logs.log"); +logger.info("As does this."); +logger.error("This goes to all-the-logs.log and oh-no-not-again.log"); ``` ## I want to reload the configuration when I change my config file - how do I do that? @@ -29,6 +33,7 @@ Previous versions of log4js used to watch for changes in the configuration file ## What happened to `replaceConsole` - it doesn't work any more? I removed `replaceConsole` - it caused a few weird errors, and I wasn't entirely comfortable with messing around with a core part of node. If you still want to do this, then code like this should do the trick: + ```javascript log4js.configure(...); // set up your categories and appenders const logger = log4js.getLogger('console'); @@ -46,25 +51,29 @@ Nodemailer version 4.0.1 (the not-deprecated version) requires a node version >= ## I want line numbers in my logs! You need to enable call stack for the category, and use pattern layout to output the values. e.g. + ```javascript -const log4js = require('log4js'); +const log4js = require("log4js"); log4js.configure({ appenders: { out: { - type: 'stdout', + type: "stdout", layout: { - type: 'pattern', pattern: '%d %p %c %f:%l %m%n' - } - } + type: "pattern", + pattern: "%d %p %c %f:%l %m%n", + }, + }, }, categories: { - default: { appenders: ['out'], level: 'info', enableCallStack: true } - } + default: { appenders: ["out"], level: "info", enableCallStack: true }, + }, }); -const logger = log4js.getLogger('thing'); -logger.info('this should give me a line number now'); +const logger = log4js.getLogger("thing"); +logger.info("this should give me a line number now"); ``` + Would output something like this: + ```bash 2019-05-22T08:41:07.312 INFO thing index.js:16 this should give me a line number now ``` diff --git a/docs/file.md b/docs/file.md index f576ee41..b3abfda0 100644 --- a/docs/file.md +++ b/docs/file.md @@ -4,20 +4,21 @@ The file appender writes log events to a file. It supports an optional maximum f ## Configuration -* `type` - `"file"` -* `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. - `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. -* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). -* `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) +- `type` - `"file"` +- `filename` - `string` - the path of the file where you want your logs written. +- `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. + `maxLogSize` can also accept `string` with the size suffixes: **_K_**, **_M_**, **_G_** such as `1K`, `1M`, `1G`. +- `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). +- `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying [streamroller](https://github.com/nomiddlename/streamroller) implementation (see also node.js core file streams): -* `encoding` - `string` (default "utf-8") -* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) -* `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) -* `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) -* `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). -* `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`1 or abc`.`1.log (keepFileExt) + +- `encoding` - `string` (default "utf-8") +- `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +- `flags` - `string` (default 'a' - [node.js file flags](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_system_flags)) +- `compress` - `boolean` (default false) - compress the backup files using gzip (backup files will have `.gz` extension) +- `keepFileExt` - `boolean` (default false) - preserve the file extension when rotating log files (`file.log` becomes `file.1.log` instead of `file.log.1`). +- `fileNameSep` - `string` (default '.') - the filename separator when rolling. e.g.: abc.log`.`1 or abc`.`1.log (keepFileExt) Note that, from version 4.x of log4js onwards, the file appender can take any of the options for the [dateFile appender](dateFile.md) as well. So you could roll files by both date and size. @@ -26,45 +27,54 @@ Note that, from version 4.x of log4js onwards, the file appender can take any of ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' } + everything: { type: "file", filename: "all-the-logs.log" }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug' } - } + default: { appenders: ["everything"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('I will be logged in all-the-logs.log'); +logger.debug("I will be logged in all-the-logs.log"); ``` This example will result in a single log file (`all-the-logs.log`) containing the log messages. ## Example with log rolling (and compressed backups) + ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log', maxLogSize: 10485760, backups: 3, compress: true } + everything: { + type: "file", + filename: "all-the-logs.log", + maxLogSize: 10485760, + backups: 3, + compress: true, + }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug'} - } + default: { appenders: ["everything"], level: "debug" }, + }, }); ``` + This will result in one current log file (`all-the-logs.log`). When that reaches 10Mb in size, it will be renamed and compressed to `all-the-logs.log.1.gz` and a new file opened called `all-the-logs.log`. When `all-the-logs.log` reaches 10Mb again, then `all-the-logs.log.1.gz` will be renamed to `all-the-logs.log.2.gz`, and so on. ## Memory usage -If your application logs a large volume of messages, and find memory usage increasing due to buffering log messages before being written to a file, then you can listen for "log4js:pause" events emitted by the file appenders. Your application should stop logging when it receives one of these events with a value of `true` and resume when it receives an event with a value of `false`. +If your application logs a large volume of messages, and find memory usage increasing due to buffering log messages before being written to a file, then you can listen for "log4js:pause" events emitted by the file appenders. Your application should stop logging when it receives one of these events with a value of `true` and resume when it receives an event with a value of `false`. + ```javascript log4js.configure({ appenders: { - output: { type: 'file', filename: 'out.log' } + output: { type: "file", filename: "out.log" }, }, - categories: { default: { appenders: ['output'], level: 'debug'}} + categories: { default: { appenders: ["output"], level: "debug" } }, }); let paused = false; -process.on("log4js:pause", (value) => paused = value); +process.on("log4js:pause", (value) => (paused = value)); const logger = log4js.getLogger(); while (!paused) { diff --git a/docs/fileSync.md b/docs/fileSync.md index a8f75c0b..a3ca50fc 100644 --- a/docs/fileSync.md +++ b/docs/fileSync.md @@ -4,45 +4,53 @@ The sync file appender writes log events to a file, the only difference to the n ## Configuration -* `type` - `"fileSync"` -* `filename` - `string` - the path of the file where you want your logs written. -* `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. - `maxLogSize` can also accept `string` with the size suffixes: ***K***, ***M***, ***G*** such as `1K`, `1M`, `1G`. -* `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). -* `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) +- `type` - `"fileSync"` +- `filename` - `string` - the path of the file where you want your logs written. +- `maxLogSize` - `integer` (optional, defaults to undefined) - the maximum size (in bytes) for the log file. If not specified or 0, then no log rolling will happen. + `maxLogSize` can also accept `string` with the size suffixes: **_K_**, **_M_**, **_G_** such as `1K`, `1M`, `1G`. +- `backups` - `integer` (optional, defaults to 5) - the number of old log files to keep during log rolling (excluding the hot file). +- `layout` - (optional, defaults to basic layout) - see [layouts](layouts.md) Any other configuration parameters will be passed to the underlying node.js core stream implementation: -* `encoding` - `string` (default "utf-8") -* `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) -* `flags` - `string` (default 'a') + +- `encoding` - `string` (default "utf-8") +- `mode` - `integer` (default 0o600 - [node.js file modes](https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_file_modes)) +- `flags` - `string` (default 'a') ## Example ```javascript log4js.configure({ appenders: { - everything: { type: 'fileSync', filename: 'all-the-logs.log' } + everything: { type: "fileSync", filename: "all-the-logs.log" }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug' } - } + default: { appenders: ["everything"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('I will be logged in all-the-logs.log'); +logger.debug("I will be logged in all-the-logs.log"); ``` This example will result in a single log file (`all-the-logs.log`) containing the log messages. ## Example with log rolling + ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log', maxLogSize: 10458760, backups: 3 } + everything: { + type: "file", + filename: "all-the-logs.log", + maxLogSize: 10458760, + backups: 3, + }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug'} - } + default: { appenders: ["everything"], level: "debug" }, + }, }); ``` + This will result in one current log file (`all-the-logs.log`). When that reaches 10Mb in size, it will be renamed and compressed to `all-the-logs.log.1.gz` and a new file opened called `all-the-logs.log`. When `all-the-logs.log` reaches 10Mb again, then `all-the-logs.log.1.gz` will be renamed to `all-the-logs.log.2.gz`, and so on. diff --git a/docs/layouts.md b/docs/layouts.md index c3ae8d13..5a8964dc 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -9,171 +9,203 @@ For most use cases you will not need to configure layouts - there are some appen Most appender configuration will take a field called `layout`, which is an object - typically with a single field `type` which is the name of a layout defined below. Some layouts require extra configuration options, which should be included in the same object. ## Example + ```javascript log4js.configure({ - appenders: { out: { type: 'stdout', layout: { type: 'basic' } } }, - categories: { default: { appenders: ['out'], level: 'info' } } + appenders: { out: { type: "stdout", layout: { type: "basic" } } }, + categories: { default: { appenders: ["out"], level: "info" } }, }); ``` + This configuration replaces the [stdout](stdout.md) appender's default `coloured` layout with `basic` layout. # Built-in Layouts ## Basic -* `type` - `basic` +- `type` - `basic` Basic layout will output the timestamp, level, category, followed by the formatted log event data. ## Example + ```javascript log4js.configure({ - appenders: { 'out': { type: 'stdout', layout: { type: 'basic' } } }, - categories: { default: { appenders: ['out'], level: 'info' } } + appenders: { out: { type: "stdout", layout: { type: "basic" } } }, + categories: { default: { appenders: ["out"], level: "info" } }, }); -const logger = log4js.getLogger('cheese'); -logger.error('Cheese is too ripe!'); +const logger = log4js.getLogger("cheese"); +logger.error("Cheese is too ripe!"); ``` + This will output: + ``` [2017-03-30 07:57:00.113] [ERROR] cheese - Cheese is too ripe! ``` ## Coloured -* `type` - `coloured` (or `colored`) +- `type` - `coloured` (or `colored`) This layout is the same as `basic`, except that the timestamp, level and category will be coloured according to the log event's level (if your terminal/file supports it - if you see some weird characters in your output and no colour then you should probably switch to `basic`). The colours used are: -* `TRACE` - 'blue' -* `DEBUG` - 'cyan' -* `INFO` - 'green' -* `WARN` - 'yellow' -* `ERROR` - 'red' -* `FATAL` - 'magenta' + +- `TRACE` - 'blue' +- `DEBUG` - 'cyan' +- `INFO` - 'green' +- `WARN` - 'yellow' +- `ERROR` - 'red' +- `FATAL` - 'magenta' ## Message Pass-Through -* `type` - `messagePassThrough` + +- `type` - `messagePassThrough` This layout just formats the log event data, and does not output a timestamp, level or category. It is typically used in appenders that serialise the events using a specific format (e.g. [gelf](https://github.com/log4js-node/gelf)). ## Example + ```javascript log4js.configure({ - appenders: { out: { type: 'stdout', layout: { type: 'messagePassThrough' } } }, - categories: { default: { appenders: [ 'out' ], level: 'info' } } + appenders: { + out: { type: "stdout", layout: { type: "messagePassThrough" } }, + }, + categories: { default: { appenders: ["out"], level: "info" } }, }); -const logger = log4js.getLogger('cheese'); -const cheeseName = 'gouda'; -logger.error('Cheese is too ripe! Cheese was: ', cheeseName); +const logger = log4js.getLogger("cheese"); +const cheeseName = "gouda"; +logger.error("Cheese is too ripe! Cheese was: ", cheeseName); ``` + This will output: + ``` Cheese is too ripe! Cheese was: gouda ``` ## Dummy -* `type` - `dummy` +- `type` - `dummy` This layout only outputs the first value in the log event's data. It was added for the [logstashUDP](https://github.com/log4js-node/logstashUDP) appender, and I'm not sure there's much use for it outside that. ## Example + ```javascript log4js.configure({ - appenders: { out: { type: 'stdout', layout: { type: 'dummy' } } }, - categories: { default: { appenders: [ 'out' ], level: 'info' } } + appenders: { out: { type: "stdout", layout: { type: "dummy" } } }, + categories: { default: { appenders: ["out"], level: "info" } }, }); -const logger = log4js.getLogger('cheese'); -const cheeseName = 'gouda'; -logger.error('Cheese is too ripe! Cheese was: ', cheeseName); +const logger = log4js.getLogger("cheese"); +const cheeseName = "gouda"; +logger.error("Cheese is too ripe! Cheese was: ", cheeseName); ``` + This will output: + ``` Cheese is too ripe! Cheese was: ``` ## Pattern -* `type` - `pattern` -* `pattern` - `string` - specifier for the output format, using placeholders as described below -* `tokens` - `object` (optional) - user-defined tokens to be used in the pattern + +- `type` - `pattern` +- `pattern` - `string` - specifier for the output format, using placeholders as described below +- `tokens` - `object` (optional) - user-defined tokens to be used in the pattern ## Pattern format + The pattern string can contain any characters, but sequences beginning with `%` will be replaced with values taken from the log event, and other environmental values. Format for specifiers is `%[padding].[truncation][field]{[format]}` - padding and truncation are optional, and format only applies to a few tokens (notably, date). Both padding and truncation values can be negative. -* Positive truncation - truncate the string starting from the beginning -* Negative truncation - truncate the string starting from the end of the string -* Positive padding - left pad the string to make it this length, if the string is longer than the padding value then nothing happens -* Negative padding - right pad the string to make it this length, if the string is longer than the padding value then nothing happens -To make fixed-width columns in your log output, set padding and truncation to the same size (they don't have to have the same sign though, you could have right truncated, left padded columns that are always 10 characters wide with a pattern like "%10.-10m"). + +- Positive truncation - truncate the string starting from the beginning +- Negative truncation - truncate the string starting from the end of the string +- Positive padding - left pad the string to make it this length, if the string is longer than the padding value then nothing happens +- Negative padding - right pad the string to make it this length, if the string is longer than the padding value then nothing happens + To make fixed-width columns in your log output, set padding and truncation to the same size (they don't have to have the same sign though, you could have right truncated, left padded columns that are always 10 characters wide with a pattern like "%10.-10m"). e.g. %5.10p - left pad the log level by up to 5 characters, keep the whole string to a max length of 10. So, for a log level of INFO the output would be " INFO", for DEBUG it would be "DEBUG" and for a (custom) log level of CATASTROPHIC it would be "CATASTROPH". - Fields can be any of: -* `%r` time in toLocaleTimeString format -* `%p` log level -* `%c` log category -* `%h` hostname -* `%m` log data -* `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTETIME`, `DATETIME`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATETIME}`, `%d{yyyy/MM/dd-hh.mm.ss}` -* `%%` % - for when you want a literal `%` in your output -* `%n` newline -* `%z` process id (from `process.pid`) -* `%f` full path of filename (requires `enableCallStack: true` on the category, see [configuration object](api.md)) -* `%f{depth}` path's depth let you chose to have only filename (`%f{1}`) or a chosen number of directories -* `%l` line number (requires `enableCallStack: true` on the category, see [configuration object](api.md)) -* `%o` column postion (requires `enableCallStack: true` on the category, see [configuration object](api.md)) -* `%s` call stack (requires `enableCallStack: true` on the category, see [configuration object](api.md)) -* `%x{}` add dynamic tokens to your log. Tokens are specified in the tokens parameter. -* `%X{}` add values from the Logger context. Tokens are keys into the context values. -* `%[` start a coloured block (colour will be taken from the log level, similar to `colouredLayout`) -* `%]` end a coloured block + +- `%r` time in toLocaleTimeString format +- `%p` log level +- `%c` log category +- `%h` hostname +- `%m` log data +- `%d` date, formatted - default is `ISO8601`, format options are: `ISO8601`, `ISO8601_WITH_TZ_OFFSET`, `ABSOLUTETIME`, `DATETIME`, or any string compatible with the [date-format](https://www.npmjs.com/package/date-format) library. e.g. `%d{DATETIME}`, `%d{yyyy/MM/dd-hh.mm.ss}` +- `%%` % - for when you want a literal `%` in your output +- `%n` newline +- `%z` process id (from `process.pid`) +- `%f` full path of filename (requires `enableCallStack: true` on the category, see [configuration object](api.md)) +- `%f{depth}` path's depth let you chose to have only filename (`%f{1}`) or a chosen number of directories +- `%l` line number (requires `enableCallStack: true` on the category, see [configuration object](api.md)) +- `%o` column postion (requires `enableCallStack: true` on the category, see [configuration object](api.md)) +- `%s` call stack (requires `enableCallStack: true` on the category, see [configuration object](api.md)) +- `%x{}` add dynamic tokens to your log. Tokens are specified in the tokens parameter. +- `%X{}` add values from the Logger context. Tokens are keys into the context values. +- `%[` start a coloured block (colour will be taken from the log level, similar to `colouredLayout`) +- `%]` end a coloured block ## Tokens + User-defined tokens can be either a string or a function. Functions will be passed the log event, and should return a string. For example, you could define a custom token that outputs the log event's context value for 'user' like so: + ```javascript log4js.configure({ appenders: { - out: { type: 'stdout', layout: { - type: 'pattern', - pattern: '%d %p %c %x{user} %m%n', - tokens: { - user: function(logEvent) { - return AuthLibrary.currentUser(); - } - } - }} + out: { + type: "stdout", + layout: { + type: "pattern", + pattern: "%d %p %c %x{user} %m%n", + tokens: { + user: function (logEvent) { + return AuthLibrary.currentUser(); + }, + }, + }, + }, }, - categories: { default: { appenders: ['out'], level: 'info' } } + categories: { default: { appenders: ["out"], level: "info" } }, }); const logger = log4js.getLogger(); -logger.info('doing something.'); +logger.info("doing something."); ``` + This would output: + ``` 2017-06-01 08:32:56.283 INFO default charlie doing something. ``` You can also use the Logger context to store tokens (sometimes called Nested Diagnostic Context, or Mapped Diagnostic Context) and use them in your layouts. + ```javascript log4js.configure({ appenders: { - out: { type: 'stdout', layout: { - type: 'pattern', - pattern: '%d %p %c %X{user} %m%n' - }} + out: { + type: "stdout", + layout: { + type: "pattern", + pattern: "%d %p %c %X{user} %m%n", + }, + }, }, - categories: { default: { appenders: ['out'], level: 'info' } } + categories: { default: { appenders: ["out"], level: "info" } }, }); const logger = log4js.getLogger(); -logger.addContext('user', 'charlie'); -logger.info('doing something.'); +logger.addContext("user", "charlie"); +logger.info("doing something."); ``` + This would output: + ``` 2017-06-01 08:32:56.283 INFO default charlie doing something. ``` + Note that you can also add functions to the Logger Context, and they will be passed the logEvent as well. # Adding your own layouts @@ -181,30 +213,36 @@ Note that you can also add functions to the Logger Context, and they will be pas You can add your own layouts by calling `log4js.addLayout(type, fn)` before calling `log4js.configure`. `type` is the label you want to use to refer to your layout in appender configuration. `fn` is a function that takes a single object argument, which will contain the configuration for the layout instance, and returns a layout function. A layout function takes a log event argument and returns a string (usually, although you could return anything as long as the appender knows what to do with it). ## Custom Layout Example + This example can also be found in examples/custom-layout.js. + ```javascript -const log4js = require('log4js'); +const log4js = require("log4js"); -log4js.addLayout('json', function(config) { - return function(logEvent) { return JSON.stringify(logEvent) + config.separator; } +log4js.addLayout("json", function (config) { + return function (logEvent) { + return JSON.stringify(logEvent) + config.separator; + }; }); log4js.configure({ appenders: { - out: { type: 'stdout', layout: { type: 'json', separator: ',' } } + out: { type: "stdout", layout: { type: "json", separator: "," } }, }, categories: { - default: { appenders: ['out'], level: 'info' } - } + default: { appenders: ["out"], level: "info" }, + }, }); -const logger = log4js.getLogger('json-test'); -logger.info('this is just a test'); -logger.error('of a custom appender'); -logger.warn('that outputs json'); +const logger = log4js.getLogger("json-test"); +logger.info("this is just a test"); +logger.error("of a custom appender"); +logger.warn("that outputs json"); log4js.shutdown(() => {}); ``` + This example outputs the following: + ```javascript {"startTime":"2017-06-05T22:23:08.479Z","categoryName":"json-test","data":["this is just a test"],"level":{"level":20000,"levelStr":"INFO"},"context":{}}, {"startTime":"2017-06-05T22:23:08.483Z","categoryName":"json-test","data":["of a custom appender"],"level":{"level":40000,"levelStr":"ERROR"},"context":{}}, diff --git a/docs/logLevelFilter.md b/docs/logLevelFilter.md index 22956626..fb3cf381 100644 --- a/docs/logLevelFilter.md +++ b/docs/logLevelFilter.md @@ -4,10 +4,10 @@ The log level filter allows you to restrict the log events that an appender will ## Configuration -* `type` - `logLevelFilter` -* `appender` - `string` - the name of an appender, defined in the same configuration, that you want to filter -* `level` - `string` - the minimum level of event to allow through the filter -* `maxLevel` - `string` (optional, defaults to `FATAL`) - the maximum level of event to allow through the filter +- `type` - `logLevelFilter` +- `appender` - `string` - the name of an appender, defined in the same configuration, that you want to filter +- `level` - `string` - the minimum level of event to allow through the filter +- `maxLevel` - `string` (optional, defaults to `FATAL`) - the maximum level of event to allow through the filter If an event's level is greater than or equal to `level` and less than or equal to `maxLevel` then it will be sent to the appender. @@ -25,4 +25,5 @@ log4js.configure({ } }); ``` + Log events of `debug`, `info`, `error`, and `fatal` will go to `all-the-logs.log`. Events of `error` and `fatal` will also go to `panic-now.log`. diff --git a/docs/migration-guide.md b/docs/migration-guide.md index 8be8e4f8..f329d628 100644 --- a/docs/migration-guide.md +++ b/docs/migration-guide.md @@ -1,20 +1,26 @@ # Migrating from log4js versions older than 2.x ## Configuration + If you try to use your v1 configuration with v2 code, you'll most likely get an error that says something like 'must have property "appenders" of type object'. The format of the configuration object has changed (see the [api](api.md) docs for details). The main changes are a need for you to name your appenders, and you also have to define the default category. For example, if your v1 config looked like this: + ```javascript -{ appenders: [ - { type: 'console' }, - { - type: 'dateFile', - filename: 'logs/task', - pattern:"-dd.log", - alwaysIncludePattern: true, - category: 'task' - } -] } +{ + appenders: [ + { type: "console" }, + { + type: "dateFile", + filename: "logs/task", + pattern: "-dd.log", + alwaysIncludePattern: true, + category: "task", + }, + ]; +} ``` + Then your v2 config should be something like this: + ```javascript { appenders: { @@ -36,7 +42,9 @@ Then your v2 config should be something like this: The functions to define the configuration programmatically have been remove (`addAppender`, `loadAppender`, etc). All configuration should now be done through the single `configure` function, passing in a filename or object. ## Console replacement + V1 used to allow you to replace the node.js console functions with versions that would log to a log4js appender. This used to cause some weird errors, so I decided it was better to remove it from the log4js core functionality. If you still want to do this, you can replicate the behaviour with code similar to this: + ```javascript log4js.configure(...); // set up your categories and appenders const logger = log4js.getLogger('console'); // any category will work @@ -44,9 +52,11 @@ console.log = logger.info.bind(logger); // do the same for others - console.debu ``` ## Config Reloading + Previous versions of log4js used to watch for changes in the configuration file and reload when it changed. It didn't always work well, sometimes leaving file handles or sockets open. This feature was removed in version 2.x. As a replacement, I'd suggest using a library like [watchr](https://www.npmjs.com/package/watchr) to notify you of file changes. Then you can call `log4js.shutdown` followed by `log4js.configure` again. ## Appenders + If you have written your own custom appenders, they will not work without modification in v2. See the guide to [writing appenders](writing-appenders.md) for details on how appenders work in 2.x. Note that if you want to write your appender to work with both 1.x and 2.x, then you can tell what version you're running in by examining the number of arguments passed to the `configure` function of your appender: 2 arguments means v1, 4 arguments means v2. All the core appenders have been upgraded to work with v2, except for the clustered appender which has been removed. The core log4js code handles cluster mode transparently. @@ -54,10 +64,12 @@ All the core appenders have been upgraded to work with v2, except for the cluste The `logFaces` appender was split into two versions to make testing easier and the code simpler; one has HTTP support, the other UDP. ## Exit listeners + Some appenders used to define their own `exit` listeners, and it was never clear whose responsibility it was to clean up resources. Now log4js does not define any `exit` listeners. Instead your application should register an `exit` listener, and call `log4js.shutdown` to be sure that all log messages get written before your application terminates. ## New Features -* MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender, and the [multi-file appender](multiFile.md). -* Automatic cluster support - log4js now handles clusters transparently -* Custom levels - you can define your own log levels in the configuration object, including the colours -* Improved performance - several changes have been made to improve performance, especially for the file appenders. + +- MDC contexts - you can now add key-value pairs to a logger (for grouping all log messages from a particular user, for example). Support for these values exists in the [pattern layout](layouts.md), the logFaces ([UDP](https://github.com/log4js-node/logFaces-UDP) and [HTTP](https://github.com/log4js-node/logFaces-HTTP)) appender, and the [multi-file appender](multiFile.md). +- Automatic cluster support - log4js now handles clusters transparently +- Custom levels - you can define your own log levels in the configuration object, including the colours +- Improved performance - several changes have been made to improve performance, especially for the file appenders. diff --git a/docs/multiFile.md b/docs/multiFile.md index 17ef00de..c69a04c6 100644 --- a/docs/multiFile.md +++ b/docs/multiFile.md @@ -4,11 +4,11 @@ The multiFile appender can be used to dynamically write logs to multiple files, ## Configuration -* `type` - `"multiFile"` -* `base` - `string` - the base part of the generated log filename -* `property` - `string` - the value to use to split files (see below). -* `extension` - `string` - the suffix for the generated log filename. -* `timeout` - `integer` - optional activity timeout in ms after which the file will be closed. +- `type` - `"multiFile"` +- `base` - `string` - the base part of the generated log filename +- `property` - `string` - the value to use to split files (see below). +- `extension` - `string` - the suffix for the generated log filename. +- `timeout` - `integer` - optional activity timeout in ms after which the file will be closed. All other properties will be passed to the created [file](file.md) appenders. For the property value, `categoryName` is probably the most useful - although you could use `pid` or `level`. If the property is not found then the appender will look for the value in the context map. If that fails, then the logger will not output the logging event, without an error. This is to allow for dynamic properties which may not exist for all log messages. @@ -17,37 +17,49 @@ All other properties will be passed to the created [file](file.md) appenders. Fo ```javascript log4js.configure({ appenders: { - multi: { type: 'multiFile', base: 'logs/', property: 'categoryName', extension: '.log' } + multi: { + type: "multiFile", + base: "logs/", + property: "categoryName", + extension: ".log", + }, }, categories: { - default: { appenders: [ 'multi' ], level: 'debug' } - } + default: { appenders: ["multi"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('I will be logged in logs/default.log'); -const otherLogger = log4js.getLogger('cheese'); -otherLogger.info('Cheese is cheddar - this will be logged in logs/cheese.log'); +logger.debug("I will be logged in logs/default.log"); +const otherLogger = log4js.getLogger("cheese"); +otherLogger.info("Cheese is cheddar - this will be logged in logs/cheese.log"); ``` This example will result in two log files (`logs/default.log` and `logs/cheese.log`) containing the log messages. ## Example with log rolling (and compressed backups) + ```javascript log4js.configure({ appenders: { everything: { - type: 'multiFile', base: 'logs/', property: 'userID', extension: '.log', - maxLogSize: 10485760, backups: 3, compress: true - } + type: "multiFile", + base: "logs/", + property: "userID", + extension: ".log", + maxLogSize: 10485760, + backups: 3, + compress: true, + }, }, categories: { - default: { appenders: [ 'everything' ], level: 'debug'} - } + default: { appenders: ["everything"], level: "debug" }, + }, }); -const userLogger = log4js.getLogger('user'); -userLogger.addContext('userID', user.getID()); -userLogger.info('this user just logged in'); +const userLogger = log4js.getLogger("user"); +userLogger.addContext("userID", user.getID()); +userLogger.info("this user just logged in"); ``` + This will result in one log file (`logs/u12345.log`), capped at 10Mb in size, with three backups kept when rolling the file. If more users were logged, each user would get their own files, and their own backups. diff --git a/docs/multiprocess.md b/docs/multiprocess.md index a3f31e87..f9a1fd7c 100644 --- a/docs/multiprocess.md +++ b/docs/multiprocess.md @@ -1,43 +1,51 @@ # Multiprocess Appender -*You probably want to use the [tcp server](tcp-server.md) or [tcp appender](tcp.md) instead of this - they are more flexible* +_You probably want to use the [tcp server](tcp-server.md) or [tcp appender](tcp.md) instead of this - they are more flexible_ -*Note that if you're just using node core's `cluster` module then you don't need to use this appender - log4js will handle logging within the cluster transparently.* +_Note that if you're just using node core's `cluster` module then you don't need to use this appender - log4js will handle logging within the cluster transparently._ The multiprocess appender sends log events to a master server over TCP sockets. It can be used as a simple way to centralise logging when you have multiple servers or processes. It uses the node.js core networking modules, and so does not require any extra dependencies. Remember to call `log4js.shutdown` when your application terminates, so that the sockets get closed cleanly. - ## Configuration -* `type` - `multiprocess` -* `mode` - `master|worker` - controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. -* `appender` - `string` (only needed if `mode` == `master`)- the name of the appender to send the log events to -* `loggerPort` - `integer` (optional, defaults to `5000`) - the port to listen on, or send to -* `loggerHost` - `string` (optional, defaults to `localhost`) - the host/IP address to listen on, or send to +- `type` - `multiprocess` +- `mode` - `master|worker` - controls whether the appender listens for log events sent over the network, or is responsible for serialising events and sending them to a server. +- `appender` - `string` (only needed if `mode` == `master`)- the name of the appender to send the log events to +- `loggerPort` - `integer` (optional, defaults to `5000`) - the port to listen on, or send to +- `loggerHost` - `string` (optional, defaults to `localhost`) - the host/IP address to listen on, or send to ## Example (master) + ```javascript log4js.configure({ appenders: { - file: { type: 'file', filename: 'all-the-logs.log' }, - server: { type: 'multiprocess', mode: 'master', appender: 'file', loggerHost: '0.0.0.0' } + file: { type: "file", filename: "all-the-logs.log" }, + server: { + type: "multiprocess", + mode: "master", + appender: "file", + loggerHost: "0.0.0.0", + }, }, categories: { - default: { appenders: ['file'], level: 'info' } - } + default: { appenders: ["file"], level: "info" }, + }, }); ``` + This creates a log server listening on port 5000, on all IP addresses the host has assigned to it. Note that the appender is not included in the appenders listed for the categories. Also note that the multiprocess master appender will send every event it receives to the underlying appender, regardless of level settings. ## Example (worker) + ```javascript log4js.configure({ appenders: { - network: { type: 'multiprocess', mode: 'worker', loggerHost: 'log.server' } + network: { type: "multiprocess", mode: "worker", loggerHost: "log.server" }, }, categories: { - default: { appenders: ['network'], level: 'error' } - } + default: { appenders: ["network"], level: "error" }, + }, }); ``` + This will send all error messages to `log.server:5000`. diff --git a/docs/noLogFilter.md b/docs/noLogFilter.md index 3bae39ba..438f62db 100644 --- a/docs/noLogFilter.md +++ b/docs/noLogFilter.md @@ -1,58 +1,61 @@ # Category Filter -The no log filter allows you to exclude the log events that an appender will record. +The no log filter allows you to exclude the log events that an appender will record. The log events will be excluded depending on the regular expressions provided in the configuration. -This can be useful when you debug your application and you want to exclude some noisily logs that are irrelevant to your investigation. -You can stop to log them through a regular expression. +This can be useful when you debug your application and you want to exclude some noisily logs that are irrelevant to your investigation. +You can stop to log them through a regular expression. ## Configuration -* `type` - `"noLogFilter"` -* `exclude` - `string | Array` - the regular expression (or the regular expressions if you provide an array of values) will be used for evaluating the events to pass to the appender. The events, which will match the regular expression, will be excluded and so not logged. -* `appender` - `string` - the name of an appender, defined in the same configuration, that you want to filter. +- `type` - `"noLogFilter"` +- `exclude` - `string | Array` - the regular expression (or the regular expressions if you provide an array of values) will be used for evaluating the events to pass to the appender. The events, which will match the regular expression, will be excluded and so not logged. +- `appender` - `string` - the name of an appender, defined in the same configuration, that you want to filter. ## Example ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' }, - filtered: { - type: 'noLogFilter', - exclude: 'not', - appender: 'everything' } + everything: { type: "file", filename: "all-the-logs.log" }, + filtered: { + type: "noLogFilter", + exclude: "not", + appender: "everything", + }, }, categories: { - default: { appenders: [ 'filtered' ], level: 'debug' } - } + default: { appenders: ["filtered"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('I will be logged in all-the-logs.log'); -logger.debug('I will be not logged in all-the-logs.log'); +logger.debug("I will be logged in all-the-logs.log"); +logger.debug("I will be not logged in all-the-logs.log"); ``` Note that: -* an array of strings can be specified in the configuration -* a case insensitive match will be done -* empty strings will be not considered and so removed from the array of values + +- an array of strings can be specified in the configuration +- a case insensitive match will be done +- empty strings will be not considered and so removed from the array of values ```javascript log4js.configure({ appenders: { - everything: { type: 'file', filename: 'all-the-logs.log' }, - filtered: { - type: 'noLogFilter', - exclude: ['NOT', '\\d', ''], - appender: 'everything' } + everything: { type: "file", filename: "all-the-logs.log" }, + filtered: { + type: "noLogFilter", + exclude: ["NOT", "\\d", ""], + appender: "everything", + }, }, categories: { - default: { appenders: [ 'filtered' ], level: 'debug' } - } + default: { appenders: ["filtered"], level: "debug" }, + }, }); const logger = log4js.getLogger(); -logger.debug('I will be logged in all-the-logs.log'); -logger.debug('I will be not logged in all-the-logs.log'); -logger.debug('A 2nd message that will be excluded in all-the-logs.log'); -``` \ No newline at end of file +logger.debug("I will be logged in all-the-logs.log"); +logger.debug("I will be not logged in all-the-logs.log"); +logger.debug("A 2nd message that will be excluded in all-the-logs.log"); +``` diff --git a/docs/recording.md b/docs/recording.md index 2d38d3fa..b9e8cc01 100644 --- a/docs/recording.md +++ b/docs/recording.md @@ -4,7 +4,7 @@ This appender stores the log events in memory. It is mainly useful for testing ( ## Configuration -* `type` - `recording` +- `type` - `recording` There is no other configuration for this appender. @@ -12,19 +12,19 @@ There is no other configuration for this appender. The array that stores log events is shared across all recording appender instances, and is accessible from the recording module. `require('/appenders/recording')` returns a module with the following functions exported: -* `replay` - returns `Array` - get all the events recorded. -* `playback` - synonym for `replay` -* `reset` - clears the array of events recorded. -* `erase` - synonyms for `reset` +- `replay` - returns `Array` - get all the events recorded. +- `playback` - synonym for `replay` +- `reset` - clears the array of events recorded. +- `erase` - synonyms for `reset` ## Example ```javascript -const recording = require('log4js/lib/appenders/recording'); -const log4js = require('log4js'); +const recording = require("log4js/lib/appenders/recording"); +const log4js = require("log4js"); log4js.configure({ - appenders: { vcr: { type: 'recording' } }, - categories: { default: { appenders: ['vcr'], level: 'info' } } + appenders: { vcr: { type: "recording" } }, + categories: { default: { appenders: ["vcr"], level: "info" } }, }); const logger = log4js.getLogger(); diff --git a/docs/stderr.md b/docs/stderr.md index ee54c192..396b73d3 100644 --- a/docs/stderr.md +++ b/docs/stderr.md @@ -4,14 +4,14 @@ This appender writes all log events to the standard error stream. # Configuration -* `type` - `stderr` -* `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) +- `type` - `stderr` +- `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) # Example ```javascript log4js.configure({ - appenders: { err: { type: 'stderr' } }, - categories: { default: { appenders: ['err'], level: 'ERROR' } } + appenders: { err: { type: "stderr" } }, + categories: { default: { appenders: ["err"], level: "ERROR" } }, }); ``` diff --git a/docs/stdout.md b/docs/stdout.md index e21233e6..e8cd9275 100644 --- a/docs/stdout.md +++ b/docs/stdout.md @@ -4,13 +4,14 @@ This appender writes all log events to the standard output stream. It is the def # Configuration -* `type` - `stdout` -* `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) +- `type` - `stdout` +- `layout` - `object` (optional, defaults to colouredLayout) - see [layouts](layouts.md) # Example + ```javascript log4js.configure({ - appenders: { 'out': { type: 'stdout' } }, - categories: { default: { appenders: ['out'], level: 'info' } } + appenders: { out: { type: "stdout" } }, + categories: { default: { appenders: ["out"], level: "info" } }, }); ``` diff --git a/docs/tcp-server.md b/docs/tcp-server.md index 62a90d94..28f0f786 100644 --- a/docs/tcp-server.md +++ b/docs/tcp-server.md @@ -4,20 +4,22 @@ Strictly speaking, this is not an appender - but it is configured as one. The TC ## Configuration -* `type` - `tcp-server` -* `port` - `integer` (optional, defaults to `5000`) - the port to listen on -* `host` - `string` (optional, defaults to `localhost`) - the host/IP address to listen on +- `type` - `tcp-server` +- `port` - `integer` (optional, defaults to `5000`) - the port to listen on +- `host` - `string` (optional, defaults to `localhost`) - the host/IP address to listen on ## Example (master) + ```javascript log4js.configure({ appenders: { - file: { type: 'file', filename: 'all-the-logs.log' }, - server: { type: 'tcp-server', host: '0.0.0.0' } + file: { type: "file", filename: "all-the-logs.log" }, + server: { type: "tcp-server", host: "0.0.0.0" }, }, categories: { - default: { appenders: ['file'], level: 'info' } - } + default: { appenders: ["file"], level: "info" }, + }, }); ``` + This creates a log server listening on port 5000, on all IP addresses the host has assigned to it. Note that the appender is not included in the appenders listed for the categories. All events received on the socket will be forwarded to the other appenders, as if they had originated on the same server. diff --git a/docs/tcp.md b/docs/tcp.md index 9d5302bd..1a2e70c6 100644 --- a/docs/tcp.md +++ b/docs/tcp.md @@ -4,21 +4,23 @@ The TCP appender sends log events to a master server over TCP sockets. It can be ## Configuration -* `type` - `tcp` -* `port` - `integer` (optional, defaults to `5000`) - the port to send to -* `host` - `string` (optional, defaults to `localhost`) - the host/IP address to send to -* `endMsg` - `string` (optional, defaults to `__LOG4JS__`) - the delimiter that marks the end of a log message -* `layout` - `object` (optional, defaults to a serialized log event) - see [layouts](layouts.md) +- `type` - `tcp` +- `port` - `integer` (optional, defaults to `5000`) - the port to send to +- `host` - `string` (optional, defaults to `localhost`) - the host/IP address to send to +- `endMsg` - `string` (optional, defaults to `__LOG4JS__`) - the delimiter that marks the end of a log message +- `layout` - `object` (optional, defaults to a serialized log event) - see [layouts](layouts.md) ## Example + ```javascript log4js.configure({ appenders: { - network: { type: 'tcp', host: 'log.server' } + network: { type: "tcp", host: "log.server" }, }, categories: { - default: { appenders: ['network'], level: 'error' } - } + default: { appenders: ["network"], level: "error" }, + }, }); ``` + This will send all error messages to `log.server:5000`. diff --git a/docs/terms.md b/docs/terms.md index 5e539db1..dc7371e1 100644 --- a/docs/terms.md +++ b/docs/terms.md @@ -2,7 +2,7 @@ `Level` - a log level is the severity or priority of a log event (debug, info, etc). Whether an _appender_ will see the event or not is determined by the _category_'s level. If this is less than or equal to the event's level, it will be sent to the category's appender(s). -`Category` - a label for grouping log events. This can be based on module (e.g. 'auth', 'payment', 'http'), or anything you like. Log events with the same _category_ will go to the same _appenders_. Log4js supports a hierarchy for categories, using dots to separate layers - for example, log events in the category 'myapp.submodule' will use the level for 'myapp' if none is defined for 'myapp.submodule', and also any appenders defined for 'myapp'. (This behaviour can be disabled by setting inherit=false on the sub-category.) The category for log events is defined when you get a _Logger_ from log4js (`log4js.getLogger('somecategory')`). +`Category` - a label for grouping log events. This can be based on module (e.g. 'auth', 'payment', 'http'), or anything you like. Log events with the same _category_ will go to the same _appenders_. Log4js supports a hierarchy for categories, using dots to separate layers - for example, log events in the category 'myapp.submodule' will use the level for 'myapp' if none is defined for 'myapp.submodule', and also any appenders defined for 'myapp'. (This behaviour can be disabled by setting inherit=false on the sub-category.) The category for log events is defined when you get a _Logger_ from log4js (`log4js.getLogger('somecategory')`). `Appender` - appenders are responsible for output of log events. They may write events to files, send emails, store them in a database, or anything. Most appenders use _layouts_ to serialise the events to strings for output. diff --git a/docs/v3-changes.md b/docs/v3-changes.md index ef9698a9..9016e960 100644 --- a/docs/v3-changes.md +++ b/docs/v3-changes.md @@ -3,18 +3,19 @@ log4js no longer supports node versions less than 6. The following appenders have been removed from the core, and moved to their own projects: -* [gelf](https://github.com/log4js-node/gelf) -* [hipchat](https://github.com/log4js-node/hipchat) -* [logFaces-HTTP](https://github.com/log4js-node/logFaces-HTTP) -* [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP) -* [loggly](https://github.com/log4js-node/loggly) -* [logstashHTTP](https://github.com/log4js-node/logstashHTTP) -* [logstashUDP](https://github.com/log4js-node/logstashUDP) -* [mailgun](https://github.com/log4js-node/mailgun) -* [rabbitmq](https://github.com/log4js-node/rabbitmq) -* [redis](https://github.com/log4js-node/redis) -* [slack](https://github.com/log4js-node/slack) -* [smtp](https://github.com/log4js-node/smtp) + +- [gelf](https://github.com/log4js-node/gelf) +- [hipchat](https://github.com/log4js-node/hipchat) +- [logFaces-HTTP](https://github.com/log4js-node/logFaces-HTTP) +- [logFaces-UDP](https://github.com/log4js-node/logFaces-UDP) +- [loggly](https://github.com/log4js-node/loggly) +- [logstashHTTP](https://github.com/log4js-node/logstashHTTP) +- [logstashUDP](https://github.com/log4js-node/logstashUDP) +- [mailgun](https://github.com/log4js-node/mailgun) +- [rabbitmq](https://github.com/log4js-node/rabbitmq) +- [redis](https://github.com/log4js-node/redis) +- [slack](https://github.com/log4js-node/slack) +- [smtp](https://github.com/log4js-node/smtp) If you were using them, you'll need to `npm i @log4js-node/`. diff --git a/docs/webpack.md b/docs/webpack.md index dd0f68a2..6d1fec7b 100644 --- a/docs/webpack.md +++ b/docs/webpack.md @@ -1,4 +1,4 @@ -# Working with webpack +# Working with webpack Log4js uses dynamic require for loading appenders. Webpack doesn't know at build time which appender will be used at runtime so a small workaround is necessary. @@ -10,4 +10,3 @@ Configuration.prototype.loadAppenderModule = function(type) { return stdout; }; ``` - diff --git a/docs/writing-appenders.md b/docs/writing-appenders.md index 7f81b2ae..b1a0648d 100644 --- a/docs/writing-appenders.md +++ b/docs/writing-appenders.md @@ -7,6 +7,7 @@ Log4js can load appenders from outside its core set. To add a custom appender, t When log4js parses your configuration, it loops through the defined appenders. For each one, it will `require` the appender initially using the `type` value prepended with './appenders' as the module identifier - this is to try loading from the core appenders first. If that fails (the module could not be found in the core appenders), then log4js will try to require the module using variations of the `type` value. Log4js checks the following places (in this order) for appenders based on the type value: + 1. Bundled core appenders (within appenders directory): `require('./' + type)` 2. node_modules: `require(type)` 3. relative to the main file of your application: `require(path.dirname(require.main.filename) + '/' + type)` @@ -17,15 +18,17 @@ If that fails, an error will be raised. ## Appender Modules An appender module should export a single function called `configure`. The function should accept the following arguments: -* `config` - `object` - the appender's configuration object -* `layouts` - `module` - gives access to the [layouts](layouts.md) module, which most appenders will need - * `layout` - `function(type, config)` - this is the main function that appenders will use to find a layout -* `findAppender` - `function(name)` - if your appender is a wrapper around another appender (like the [logLevelFilter](logLevelFilter.md) for example), this function can be used to find another appender by name -* `levels` - `module` - gives access to the [levels](levels.md) module, which most appenders will need + +- `config` - `object` - the appender's configuration object +- `layouts` - `module` - gives access to the [layouts](layouts.md) module, which most appenders will need + - `layout` - `function(type, config)` - this is the main function that appenders will use to find a layout +- `findAppender` - `function(name)` - if your appender is a wrapper around another appender (like the [logLevelFilter](logLevelFilter.md) for example), this function can be used to find another appender by name +- `levels` - `module` - gives access to the [levels](levels.md) module, which most appenders will need `configure` should return a function which accepts a logEvent, which is the appender itself. One of the simplest examples is the [stdout](stdout.md) appender. Let's run through the code. ## Example + ```javascript // This is the function that generates an appender function function stdoutAppender(layout, timezoneOffset) { @@ -57,6 +60,7 @@ exports.configure = configure; It's a good idea to implement a `shutdown` function on your appender instances. This function will get called by `log4js.shutdown` and signals that `log4js` has been asked to stop logging. Usually this is because of a fatal exception, or the application is being stopped. Your shutdown function should make sure that all asynchronous operations finish, and that any resources are cleaned up. The function must be named `shutdown`, take one callback argument, and be a property of the appender instance. Let's add a shutdown function to the `stdout` appender as an example. ## Example (shutdown) + ```javascript // This is the function that generates an appender function function stdoutAppender(layout, timezoneOffset) { @@ -67,7 +71,7 @@ function stdoutAppender(layout, timezoneOffset) { // add a shutdown function. appender.shutdown = (done) => { - process.stdout.write('', done); + process.stdout.write("", done); }; return appender; diff --git a/examples/cluster.js b/examples/cluster.js index c4de8101..12d9a44b 100644 --- a/examples/cluster.js +++ b/examples/cluster.js @@ -5,9 +5,9 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { - out: { type: 'stdout' } + out: { type: 'stdout' }, }, - categories: { default: { appenders: ['out'], level: 'debug' } } + categories: { default: { appenders: ['out'], level: 'debug' } }, }); let logger; diff --git a/examples/custom-layout.js b/examples/custom-layout.js index 8447c5a3..42b78d0e 100644 --- a/examples/custom-layout.js +++ b/examples/custom-layout.js @@ -1,16 +1,20 @@ const log4js = require('../lib/log4js'); -log4js.addLayout('json', config => function (logEvent) { - return JSON.stringify(logEvent) + config.separator; -}); +log4js.addLayout( + 'json', + (config) => + function (logEvent) { + return JSON.stringify(logEvent) + config.separator; + } +); log4js.configure({ appenders: { - out: { type: 'stdout', layout: { type: 'json', separator: ',' } } + out: { type: 'stdout', layout: { type: 'json', separator: ',' } }, }, categories: { - default: { appenders: ['out'], level: 'info' } - } + default: { appenders: ['out'], level: 'info' }, + }, }); const logger = log4js.getLogger('json-test'); diff --git a/examples/date-file-rolling.js b/examples/date-file-rolling.js index 04f90e9b..7cba62b2 100644 --- a/examples/date-file-rolling.js +++ b/examples/date-file-rolling.js @@ -5,12 +5,15 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { file: { - type: 'dateFile', filename: 'thing.log', numBackups: 3, pattern: '.mm' - } + type: 'dateFile', + filename: 'thing.log', + numBackups: 3, + pattern: '.mm', + }, }, categories: { - default: { appenders: ['file'], level: 'debug' } - } + default: { appenders: ['file'], level: 'debug' }, + }, }); const logger = log4js.getLogger('thing'); diff --git a/examples/example-connect-logger.js b/examples/example-connect-logger.js index ca585f13..95bd2d1b 100644 --- a/examples/example-connect-logger.js +++ b/examples/example-connect-logger.js @@ -11,12 +11,12 @@ const app = express(); log4js.configure({ appenders: { console: { type: 'console' }, - file: { type: 'file', filename: 'logs/log4jsconnect.log' } + file: { type: 'file', filename: 'logs/log4jsconnect.log' }, }, categories: { default: { appenders: ['console'], level: 'debug' }, - log4jslog: { appenders: ['file'], level: 'debug' } - } + log4jslog: { appenders: ['file'], level: 'debug' }, + }, }); // define logger diff --git a/examples/example-socket.js b/examples/example-socket.js index 56f24bf9..d88d2986 100644 --- a/examples/example-socket.js +++ b/examples/example-socket.js @@ -11,12 +11,12 @@ if (cluster.isMaster) { master: { type: 'multiprocess', mode: 'master', - appender: 'console' - } + appender: 'console', + }, }, categories: { - default: { appenders: ['console'], level: 'info' } - } + default: { appenders: ['console'], level: 'info' }, + }, }); console.info('Master creating %d workers', numCPUs); @@ -30,11 +30,11 @@ if (cluster.isMaster) { } else { log4js.configure({ appenders: { - worker: { type: 'multiprocess', mode: 'worker' } + worker: { type: 'multiprocess', mode: 'worker' }, }, categories: { - default: { appenders: ['worker'], level: 'info' } - } + default: { appenders: ['worker'], level: 'info' }, + }, }); const logger = log4js.getLogger('example-socket'); diff --git a/examples/example.js b/examples/example.js index 74070c79..440ff1c5 100644 --- a/examples/example.js +++ b/examples/example.js @@ -5,13 +5,13 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { cheeseLogs: { type: 'file', filename: 'cheese.log' }, - console: { type: 'console' } + console: { type: 'console' }, }, categories: { cheese: { appenders: ['cheeseLogs'], level: 'error' }, another: { appenders: ['console'], level: 'trace' }, - default: { appenders: ['console', 'cheeseLogs'], level: 'trace' } - } + default: { appenders: ['console', 'cheeseLogs'], level: 'trace' }, + }, }); // a custom logger outside of the log4js/lib/appenders directory can be accessed like so @@ -25,7 +25,10 @@ const logger = log4js.getLogger('cheese'); const otherLogger = log4js.getLogger(); // this will get coloured output on console, and appear in cheese.log -otherLogger.error('AAArgh! Something went wrong', { some: 'otherObject', useful_for: 'debug purposes' }); +otherLogger.error('AAArgh! Something went wrong', { + some: 'otherObject', + useful_for: 'debug purposes', +}); otherLogger.log('This should appear as info output'); // these will not appear (logging level beneath error) diff --git a/examples/flush-on-exit.js b/examples/flush-on-exit.js index c4c55203..d27ffd9d 100644 --- a/examples/flush-on-exit.js +++ b/examples/flush-on-exit.js @@ -6,23 +6,27 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { - cheese: { type: 'file', filename: 'cheese.log' } + cheese: { type: 'file', filename: 'cheese.log' }, }, categories: { - default: { appenders: ['cheese'], level: 'debug' } - } + default: { appenders: ['cheese'], level: 'debug' }, + }, }); const logger = log4js.getLogger('cheese'); const http = require('http'); -http.createServer((request, response) => { - response.writeHead(200, { 'Content-Type': 'text/plain' }); - const rd = Math.random() * 50; - logger.info(`hello ${rd}`); - response.write('hello '); - if (Math.floor(rd) === 30) { - log4js.shutdown(() => { process.exit(1); }); - } - response.end(); -}).listen(4444); +http + .createServer((request, response) => { + response.writeHead(200, { 'Content-Type': 'text/plain' }); + const rd = Math.random() * 50; + logger.info(`hello ${rd}`); + response.write('hello '); + if (Math.floor(rd) === 30) { + log4js.shutdown(() => { + process.exit(1); + }); + } + response.end(); + }) + .listen(4444); diff --git a/examples/fromreadme.js b/examples/fromreadme.js index 37c97756..f9f0017b 100644 --- a/examples/fromreadme.js +++ b/examples/fromreadme.js @@ -3,7 +3,7 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { cheese: { type: 'file', filename: 'cheese.log' } }, - categories: { default: { appenders: ['cheese'], level: 'error' } } + categories: { default: { appenders: ['cheese'], level: 'error' } }, }); const logger = log4js.getLogger('cheese'); diff --git a/examples/hipchat-appender.js b/examples/hipchat-appender.js index a9e0764e..8e04ba83 100644 --- a/examples/hipchat-appender.js +++ b/examples/hipchat-appender.js @@ -10,13 +10,15 @@ log4js.configure({ appenders: { hipchat: { type: 'hipchat', - hipchat_token: process.env.HIPCHAT_TOKEN || '< User token with Notification Privileges >', - hipchat_room: process.env.HIPCHAT_ROOM || '< Room ID or Name >' - } + hipchat_token: + process.env.HIPCHAT_TOKEN || + '< User token with Notification Privileges >', + hipchat_room: process.env.HIPCHAT_ROOM || '< Room ID or Name >', + }, }, categories: { - default: { appenders: ['hipchat'], level: 'trace' } - } + default: { appenders: ['hipchat'], level: 'trace' }, + }, }); const logger = log4js.getLogger('hipchat'); @@ -27,7 +29,6 @@ logger.trace('Test Trace Message'); logger.fatal('Test Fatal Message'); logger.error('Test Error Message'); - // alternative configuration demonstrating callback + custom layout // ///////////////////////////////////////////////////////////////// @@ -37,7 +38,9 @@ log4js.configure({ appenders: { hipchat: { type: 'hipchat', - hipchat_token: process.env.HIPCHAT_TOKEN || '< User token with Notification Privileges >', + hipchat_token: + process.env.HIPCHAT_TOKEN || + '< User token with Notification Privileges >', hipchat_room: process.env.HIPCHAT_ROOM || '< Room ID or Name >', hipchat_from: 'Mr. Semantics', hipchat_notify: false, @@ -47,10 +50,10 @@ log4js.configure({ } console.log('mr semantics callback success'); }, - layout: { type: 'basic' } - } + layout: { type: 'basic' }, + }, }, - categories: { default: { appenders: ['hipchat'], level: 'trace' } } + categories: { default: { appenders: ['hipchat'], level: 'trace' } }, }); logger.info('Test customLayout from Mr. Semantics'); diff --git a/examples/layouts.js b/examples/layouts.js index 0d47444f..338a505c 100644 --- a/examples/layouts.js +++ b/examples/layouts.js @@ -2,11 +2,11 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { - out: { type: 'stdout', layout: { type: 'messagePassThrough' } } + out: { type: 'stdout', layout: { type: 'messagePassThrough' } }, }, categories: { - default: { appenders: ['out'], level: 'info' } - } + default: { appenders: ['out'], level: 'info' }, + }, }); const logger = log4js.getLogger('thing'); diff --git a/examples/log-rolling-bug.js b/examples/log-rolling-bug.js index 5bdba3a0..a23e62a2 100644 --- a/examples/log-rolling-bug.js +++ b/examples/log-rolling-bug.js @@ -8,24 +8,24 @@ log4js.configure({ maxLogSize: 100000, backups: 5, keepFileExt: true, - compress: true - } + compress: true, + }, }, categories: { default: { appenders: ['handler'], level: 'debug' }, handler: { appenders: ['handler'], level: 'debug' }, - } + }, }); -const logsToTest = [ - 'handler' -]; +const logsToTest = ['handler']; const logStartDate = new Date(); -const loggers = logsToTest.map(log => log4js.getLogger(log)); +const loggers = logsToTest.map((log) => log4js.getLogger(log)); // write out a lot setInterval(() => { - loggers.forEach(logger => logger.info(`TESTING LOGGER!!!!!!${logStartDate}`)); + loggers.forEach((logger) => + logger.info(`TESTING LOGGER!!!!!!${logStartDate}`) + ); }, 10); diff --git a/examples/log-rolling.js b/examples/log-rolling.js index 4481b024..7f1cc880 100644 --- a/examples/log-rolling.js +++ b/examples/log-rolling.js @@ -3,18 +3,18 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { console: { - type: 'console' + type: 'console', }, file: { type: 'file', filename: 'tmp-test.log', maxLogSize: 1024, - backups: 3 - } + backups: 3, + }, }, categories: { - default: { appenders: ['console', 'file'], level: 'info' } - } + default: { appenders: ['console', 'file'], level: 'info' }, + }, }); const log = log4js.getLogger('test'); diff --git a/examples/log-to-files.js b/examples/log-to-files.js index 15d66cbd..fc19d897 100644 --- a/examples/log-to-files.js +++ b/examples/log-to-files.js @@ -1,33 +1,31 @@ const log4js = require('../lib/log4js'); -log4js.configure( - { - appenders: { - file: { - type: 'file', - filename: 'important-things.log', - maxLogSize: 10 * 1024 * 1024, // = 10Mb - backups: 5, // keep five backup files - compress: true, // compress the backups - encoding: 'utf-8', - mode: 0o0640, - flags: 'w+' - }, - dateFile: { - type: 'dateFile', - filename: 'more-important-things.log', - pattern: 'yyyy-MM-dd-hh', - compress: true - }, - out: { - type: 'stdout' - } +log4js.configure({ + appenders: { + file: { + type: 'file', + filename: 'important-things.log', + maxLogSize: 10 * 1024 * 1024, // = 10Mb + backups: 5, // keep five backup files + compress: true, // compress the backups + encoding: 'utf-8', + mode: 0o0640, + flags: 'w+', }, - categories: { - default: { appenders: ['file', 'dateFile', 'out'], level: 'trace' } - } - } -); + dateFile: { + type: 'dateFile', + filename: 'more-important-things.log', + pattern: 'yyyy-MM-dd-hh', + compress: true, + }, + out: { + type: 'stdout', + }, + }, + categories: { + default: { appenders: ['file', 'dateFile', 'out'], level: 'trace' }, + }, +}); const logger = log4js.getLogger('things'); logger.debug('This little thing went to market'); diff --git a/examples/logFaces-appender.js b/examples/logFaces-appender.js index 62f10056..12a8b15c 100644 --- a/examples/logFaces-appender.js +++ b/examples/logFaces-appender.js @@ -12,13 +12,14 @@ log4js.configure({ application: 'MY-NODEJS', // (optional) name of the application (domain) remoteHost: 'localhost', // (optional) logFaces server host or IP address port: 55201, // (optional) logFaces UDP receiver port (must use JSON format) - layout: { // (optional) the layout to use for messages + layout: { + // (optional) the layout to use for messages type: 'pattern', - pattern: '%m' - } - } + pattern: '%m', + }, + }, }, - categories: { default: { appenders: ['logFaces'], level: 'info' } } + categories: { default: { appenders: ['logFaces'], level: 'info' } }, }); const logger = log4js.getLogger('myLogger'); diff --git a/examples/loggly-appender.js b/examples/loggly-appender.js index cb806d65..a03b7aa8 100644 --- a/examples/loggly-appender.js +++ b/examples/loggly-appender.js @@ -6,19 +6,19 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { console: { - type: 'console' + type: 'console', }, loggly: { type: 'loggly', token: '12345678901234567890', subdomain: 'your-subdomain', - tags: ['test'] - } + tags: ['test'], + }, }, categories: { default: { appenders: ['console'], level: 'info' }, - loggly: { appenders: ['loggly'], level: 'info' } - } + loggly: { appenders: ['loggly'], level: 'info' }, + }, }); const logger = log4js.getLogger('loggly'); diff --git a/examples/logstashHTTP.js b/examples/logstashHTTP.js index b15df947..ab48f6d0 100644 --- a/examples/logstashHTTP.js +++ b/examples/logstashHTTP.js @@ -3,7 +3,7 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { console: { - type: 'console' + type: 'console', }, logstash: { url: 'http://172.17.0.5:9200/_bulk', @@ -13,13 +13,13 @@ log4js.configure({ application: 'logstash-log4js', layout: { type: 'pattern', - pattern: '%m' - } - } + pattern: '%m', + }, + }, }, categories: { - default: { appenders: ['console', 'logstash'], level: 'info' } - } + default: { appenders: ['console', 'logstash'], level: 'info' }, + }, }); const logger = log4js.getLogger('myLogger'); diff --git a/examples/logstashUDP.js b/examples/logstashUDP.js index 83c6c907..2322dfa0 100644 --- a/examples/logstashUDP.js +++ b/examples/logstashUDP.js @@ -14,26 +14,27 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { console: { - type: 'console' + type: 'console', }, logstash: { host: '127.0.0.1', port: 10001, type: 'logstashUDP', logType: 'myAppType', // Optional, defaults to 'category' - fields: { // Optional, will be added to the 'fields' object in logstash + fields: { + // Optional, will be added to the 'fields' object in logstash field1: 'value1', - field2: 'value2' + field2: 'value2', }, layout: { type: 'pattern', - pattern: '%m' - } - } + pattern: '%m', + }, + }, }, categories: { - default: { appenders: ['console', 'logstash'], level: 'info' } - } + default: { appenders: ['console', 'logstash'], level: 'info' }, + }, }); const logger = log4js.getLogger('myLogger'); diff --git a/examples/memory-test.js b/examples/memory-test.js index e6b53bd4..256cc812 100644 --- a/examples/memory-test.js +++ b/examples/memory-test.js @@ -1,35 +1,33 @@ const log4js = require('../lib/log4js'); -log4js.configure( - { - appenders: { - logs: { - type: 'file', - filename: 'memory-test.log' - }, - console: { - type: 'stdout', +log4js.configure({ + appenders: { + logs: { + type: 'file', + filename: 'memory-test.log', + }, + console: { + type: 'stdout', + }, + file: { + type: 'file', + filename: 'memory-usage.log', + layout: { + type: 'messagePassThrough', }, - file: { - type: 'file', - filename: 'memory-usage.log', - layout: { - type: 'messagePassThrough' - } - } }, - categories: { - default: { appenders: ['console'], level: 'info' }, - 'memory-test': { appenders: ['logs'], level: 'info' }, - 'memory-usage': { appenders: ['console', 'file'], level: 'info' } - } - } -); + }, + categories: { + default: { appenders: ['console'], level: 'info' }, + 'memory-test': { appenders: ['logs'], level: 'info' }, + 'memory-usage': { appenders: ['console', 'file'], level: 'info' }, + }, +}); const logger = log4js.getLogger('memory-test'); const usage = log4js.getLogger('memory-usage'); for (let i = 0; i < 1000000; i += 1) { - if ((i % 5000) === 0) { + if (i % 5000 === 0) { usage.info('%d %d', i, process.memoryUsage().rss); } logger.info('Doing something.'); diff --git a/examples/patternLayout-tokens.js b/examples/patternLayout-tokens.js index e2aebd8e..764508b1 100644 --- a/examples/patternLayout-tokens.js +++ b/examples/patternLayout-tokens.js @@ -8,14 +8,16 @@ log4js.configure({ type: 'pattern', pattern: '%[%r (%x{pid}) %p %c -%] %m%n', tokens: { - pid: function () { return process.pid; } - } - } - } + pid: function () { + return process.pid; + }, + }, + }, + }, }, categories: { - default: { appenders: ['out'], level: 'info' } - } + default: { appenders: ['out'], level: 'info' }, + }, }); const logger = log4js.getLogger('app'); diff --git a/examples/pm2.js b/examples/pm2.js index ce1fe153..910969e0 100644 --- a/examples/pm2.js +++ b/examples/pm2.js @@ -4,13 +4,13 @@ const log4js = require('../lib/log4js'); // `pm2 install pm2-intercom` log4js.configure({ appenders: { - out: { type: 'file', filename: 'pm2logs.log' } + out: { type: 'file', filename: 'pm2logs.log' }, }, categories: { - default: { appenders: ['out'], level: 'info' } + default: { appenders: ['out'], level: 'info' }, }, pm2: true, - pm2InstanceVar: 'INSTANCE_ID' + pm2InstanceVar: 'INSTANCE_ID', }); const logger = log4js.getLogger('app'); logger.info("I'm forever blowing bubbles ", process.env.INSTANCE_ID); diff --git a/examples/pm2.json b/examples/pm2.json index 45ba25b3..e03a0711 100644 --- a/examples/pm2.json +++ b/examples/pm2.json @@ -1,9 +1,11 @@ -{ "apps": [ - { "name": "testing", - "script": "pm2.js", - "instances": 0, - "instance_var": "INSTANCE_ID", - "exec_mode": "cluster" +{ + "apps": [ + { + "name": "testing", + "script": "pm2.js", + "instances": 0, + "instance_var": "INSTANCE_ID", + "exec_mode": "cluster" } - ] - } + ] +} diff --git a/examples/rabbitmq-appender.js b/examples/rabbitmq-appender.js index f9fde1af..23c60112 100755 --- a/examples/rabbitmq-appender.js +++ b/examples/rabbitmq-appender.js @@ -5,13 +5,13 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { out: { - type: 'console' + type: 'console', }, file: { type: 'dateFile', filename: 'logs/log.txt', pattern: 'yyyyMMdd', - alwaysIncludePattern: false + alwaysIncludePattern: false, }, mq: { type: '@log4js-node/rabbitmq', @@ -25,15 +25,15 @@ log4js.configure({ durable: true, layout: { type: 'pattern', - pattern: '%d{yyyy-MM-dd hh:mm:ss:SSS}#%p#%m' - } - } + pattern: '%d{yyyy-MM-dd hh:mm:ss:SSS}#%p#%m', + }, + }, }, categories: { default: { appenders: ['out'], level: 'info' }, dateFile: { appenders: ['file'], level: 'info' }, - rabbitmq: { appenders: ['mq'], level: 'info' } - } + rabbitmq: { appenders: ['mq'], level: 'info' }, + }, }); const log = log4js.getLogger('console'); diff --git a/examples/redis-appender.js b/examples/redis-appender.js index 5e8e1208..d45d5936 100644 --- a/examples/redis-appender.js +++ b/examples/redis-appender.js @@ -5,13 +5,13 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { out: { - type: 'console' + type: 'console', }, file: { type: 'dateFile', filename: 'logs/log.txt', pattern: 'yyyyMMdd', - alwaysIncludePattern: false + alwaysIncludePattern: false, }, db: { type: '@log4js-node/redis', @@ -21,15 +21,15 @@ log4js.configure({ channel: 'q_log', layout: { type: 'pattern', - pattern: '%d{yyyy-MM-dd hh:mm:ss:SSS}#%p#%m' - } - } + pattern: '%d{yyyy-MM-dd hh:mm:ss:SSS}#%p#%m', + }, + }, }, categories: { default: { appenders: ['out'], level: 'info' }, dateFile: { appenders: ['file'], level: 'info' }, - redis: { appenders: ['db'], level: 'info' } - } + redis: { appenders: ['db'], level: 'info' }, + }, }); const log = log4js.getLogger('console'); diff --git a/examples/slack-appender.js b/examples/slack-appender.js index 5847c49d..0f11967d 100644 --- a/examples/slack-appender.js +++ b/examples/slack-appender.js @@ -9,12 +9,12 @@ log4js.configure({ channel_id: '#CHANNEL', username: 'USERNAME', format: 'text', - icon_url: 'ICON_URL' - } + icon_url: 'ICON_URL', + }, }, categories: { - default: { appenders: ['slack'], level: 'info' } - } + default: { appenders: ['slack'], level: 'info' }, + }, }); const logger = log4js.getLogger('slack'); diff --git a/examples/smtp-appender.js b/examples/smtp-appender.js index 32745165..716b3991 100644 --- a/examples/smtp-appender.js +++ b/examples/smtp-appender.js @@ -6,7 +6,7 @@ const log4js = require('../lib/log4js'); log4js.configure({ appenders: { out: { - type: 'console' + type: 'console', }, mail: { type: '@log4js-node/smtp', @@ -19,16 +19,16 @@ log4js.configure({ port: 465, auth: { user: 'someone@gmail', - pass: '********************' + pass: '********************', }, - debug: true - } - } + debug: true, + }, + }, }, categories: { default: { appenders: ['out'], level: 'info' }, - mailer: { appenders: ['mail'], level: 'info' } - } + mailer: { appenders: ['mail'], level: 'info' }, + }, }); const log = log4js.getLogger('test'); const logmailer = log4js.getLogger('mailer'); diff --git a/examples/stacktrace.js b/examples/stacktrace.js index db3f2f93..ff3abf49 100644 --- a/examples/stacktrace.js +++ b/examples/stacktrace.js @@ -1,22 +1,22 @@ const log4js = require('../lib/log4js'); log4js.configure({ - "appenders": { - "console-appender": { - "type": "console", - "layout": { - "type": "pattern", - "pattern": "%[[%p]%] - %10.-100f{2} | %7.12l:%7.12o - %[%m%]" - } - } + appenders: { + 'console-appender': { + type: 'console', + layout: { + type: 'pattern', + pattern: '%[[%p]%] - %10.-100f{2} | %7.12l:%7.12o - %[%m%]', + }, + }, }, - "categories": { - "default": { - "appenders": ["console-appender"], - "enableCallStack": true, - "level": "info" - } - } -}) + categories: { + default: { + appenders: ['console-appender'], + enableCallStack: true, + level: 'info', + }, + }, +}); log4js.getLogger().info('This should not cause problems'); diff --git a/lib/LoggingEvent.js b/lib/LoggingEvent.js index f30e5ee1..a3dff7ac 100644 --- a/lib/LoggingEvent.js +++ b/lib/LoggingEvent.js @@ -38,11 +38,17 @@ class LoggingEvent { // duck-typing for Error object if (value && value.message && value.stack) { // eslint-disable-next-line prefer-object-spread - value = Object.assign({message: value.message, stack: value.stack}, value); + value = Object.assign( + { message: value.message, stack: value.stack }, + value + ); } // JSON.stringify({a: parseInt('abc'), b: 1/0, c: -1/0}) returns {a: null, b: null, c: null}. // The following allows us to serialize to NaN, Infinity and -Infinity correctly. - else if (typeof value === 'number' && (Number.isNaN(value) || !Number.isFinite(value))) { + else if ( + typeof value === 'number' && + (Number.isNaN(value) || !Number.isFinite(value)) + ) { value = value.toString(); } // JSON.stringify([undefined]) returns [null]. @@ -60,7 +66,9 @@ class LoggingEvent { const rehydratedEvent = flatted.parse(serialised, (key, value) => { if (value && value.message && value.stack) { const fakeError = new Error(value); - Object.keys(value).forEach((k) => { fakeError[k] = value[k]; }); + Object.keys(value).forEach((k) => { + fakeError[k] = value[k]; + }); value = fakeError; } return value; @@ -70,7 +78,7 @@ class LoggingEvent { fileName: rehydratedEvent.fileName, lineNumber: rehydratedEvent.lineNumber, columnNumber: rehydratedEvent.columnNumber, - callStack: rehydratedEvent.callStack + callStack: rehydratedEvent.callStack, }; event = new LoggingEvent( rehydratedEvent.categoryName, @@ -83,11 +91,12 @@ class LoggingEvent { event.pid = rehydratedEvent.pid; event.cluster = rehydratedEvent.cluster; } catch (e) { - event = new LoggingEvent( - 'log4js', - levels.ERROR, - ['Unable to parse log:', serialised, 'because: ', e] - ); + event = new LoggingEvent('log4js', levels.ERROR, [ + 'Unable to parse log:', + serialised, + 'because: ', + e, + ]); } return event; diff --git a/lib/appenders/adapters.js b/lib/appenders/adapters.js index 35dfff26..648c3621 100644 --- a/lib/appenders/adapters.js +++ b/lib/appenders/adapters.js @@ -31,7 +31,7 @@ function adapter(configAdapter, config) { function fileAppenderAdapter(config) { const configAdapter = { - maxLogSize: maxFileSizeUnitTransform + maxLogSize: maxFileSizeUnitTransform, }; return adapter(configAdapter, config); } @@ -39,7 +39,8 @@ function fileAppenderAdapter(config) { const adapters = { dateFile: fileAppenderAdapter, file: fileAppenderAdapter, - fileSync: fileAppenderAdapter + fileSync: fileAppenderAdapter, }; -module.exports.modifyConfig = config => (adapters[config.type] ? adapters[config.type](config) : config); +module.exports.modifyConfig = (config) => + adapters[config.type] ? adapters[config.type](config) : config; diff --git a/lib/appenders/dateFile.js b/lib/appenders/dateFile.js index 76de634c..36811b34 100644 --- a/lib/appenders/dateFile.js +++ b/lib/appenders/dateFile.js @@ -4,17 +4,17 @@ const os = require('os'); const eol = os.EOL; function openTheStream(filename, pattern, options) { - const stream = new streams.DateRollingFileStream( - filename, - pattern, - options - ); + const stream = new streams.DateRollingFileStream(filename, pattern, options); stream.on('error', (err) => { // eslint-disable-next-line no-console - console.error('log4js.dateFileAppender - Writing to file %s, error happened ', filename, err); + console.error( + 'log4js.dateFileAppender - Writing to file %s, error happened ', + filename, + err + ); }); - stream.on("drain", () => { - process.emit("log4js:pause", false); + stream.on('drain', () => { + process.emit('log4js:pause', false); }); return stream; } @@ -28,13 +28,7 @@ function openTheStream(filename, pattern, options) { * @param options - options to be passed to the underlying stream * @param timezoneOffset - optional timezone offset in minutes (default system local) */ -function appender( - filename, - pattern, - layout, - options, - timezoneOffset -) { +function appender(filename, pattern, layout, options, timezoneOffset) { // the options for file appender use maxLogSize, but the docs say any file appender // options should work for dateFile as well. options.maxSize = options.maxLogSize; @@ -45,8 +39,8 @@ function appender( if (!writer.writable) { return; } - if (!writer.write(layout(logEvent, timezoneOffset) + eol, "utf8")) { - process.emit("log4js:pause", true); + if (!writer.write(layout(logEvent, timezoneOffset) + eol, 'utf8')) { + process.emit('log4js:pause', true); } }; diff --git a/lib/appenders/file.js b/lib/appenders/file.js index 789a9321..3f4f8663 100644 --- a/lib/appenders/file.js +++ b/lib/appenders/file.js @@ -26,8 +26,15 @@ function mainSighupHandler() { * @param options - options to be passed to the underlying stream * @param timezoneOffset - optional timezone offset in minutes (default system local) */ -function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { - if (typeof file !== "string" || file.length === 0) { +function fileAppender( + file, + layout, + logSize, + numBackups, + options, + timezoneOffset +) { + if (typeof file !== 'string' || file.length === 0) { throw new Error(`Invalid filename: ${file}`); } else if (file.endsWith(path.sep)) { throw new Error(`Filename is a directory: ${file}`); @@ -37,15 +44,20 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset file = file.replace(new RegExp(`^~(?=${path.sep}.+)`), os.homedir()); } file = path.normalize(file); - numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; + numBackups = !numBackups && numBackups !== 0 ? 5 : numBackups; debug( 'Creating file appender (', - file, ', ', - logSize, ', ', - numBackups, ', ', - options, ', ', - timezoneOffset, ')' + file, + ', ', + logSize, + ', ', + numBackups, + ', ', + options, + ', ', + timezoneOffset, + ')' ); function openTheStream(filePath, fileSize, numFiles, opt) { @@ -57,10 +69,14 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset ); stream.on('error', (err) => { // eslint-disable-next-line no-console - console.error('log4js.fileAppender - Writing to file %s, error happened ', filePath, err); + console.error( + 'log4js.fileAppender - Writing to file %s, error happened ', + filePath, + err + ); }); stream.on('drain', () => { - process.emit("log4js:pause", false); + process.emit('log4js:pause', false); }); return stream; } @@ -74,18 +90,20 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset if (options.removeColor === true) { // eslint-disable-next-line no-control-regex const regex = /\x1b[[0-9;]*m/g; - loggingEvent.data = loggingEvent.data.map(d => { + loggingEvent.data = loggingEvent.data.map((d) => { if (typeof d === 'string') return d.replace(regex, ''); return d; }); } - if (!writer.write(layout(loggingEvent, timezoneOffset) + eol, "utf8")) { + if (!writer.write(layout(loggingEvent, timezoneOffset) + eol, 'utf8')) { process.emit('log4js:pause', true); } }; app.reopen = function () { - writer.end(() => { writer = openTheStream(file, logSize, numBackups, options); }); + writer.end(() => { + writer = openTheStream(file, logSize, numBackups, options); + }); }; app.sighupHandler = function () { diff --git a/lib/appenders/fileSync.js b/lib/appenders/fileSync.js index fa8b4089..12436e72 100755 --- a/lib/appenders/fileSync.js +++ b/lib/appenders/fileSync.js @@ -10,9 +10,8 @@ function touchFile(file, options) { const mkdir = (dir) => { try { return fs.mkdirSync(dir, { recursive: true }); - } - // backward-compatible fs.mkdirSync for nodejs pre-10.12.0 (without recursive option) - catch (e) { + } catch (e) { + // backward-compatible fs.mkdirSync for nodejs pre-10.12.0 (without recursive option) // recursive creation of parent first if (e.code === 'ENOENT') { mkdir(path.dirname(dir)); @@ -41,7 +40,7 @@ function touchFile(file, options) { mkdir(path.dirname(file)); // try to throw EISDIR, EROFS, EACCES - fs.appendFileSync(file, "", { mode: options.mode, flag: options.flags }); + fs.appendFileSync(file, '', { mode: options.mode, flag: options.flags }); } class RollingFileSync { @@ -74,7 +73,11 @@ class RollingFileSync { } shouldRoll() { - debug('should roll with current size %d, and max size %d', this.currentSize, this.size); + debug( + 'should roll with current size %d, and max size %d', + this.currentSize, + this.size + ); return this.currentSize >= this.size; } @@ -87,7 +90,9 @@ class RollingFileSync { } function index(filename_) { - return parseInt(filename_.slice((`${path.basename(filename)}.`).length), 10) || 0; + return ( + parseInt(filename_.slice(`${path.basename(filename)}.`.length), 10) || 0 + ); } function byIndex(a, b) { @@ -109,7 +114,10 @@ class RollingFileSync { } debug(`Renaming ${fileToRename} -> ${filename}.${idx + 1}`); - fs.renameSync(path.join(path.dirname(filename), fileToRename), `${filename}.${idx + 1}`); + fs.renameSync( + path.join(path.dirname(filename), fileToRename), + `${filename}.${idx + 1}` + ); } } @@ -118,7 +126,11 @@ class RollingFileSync { debug('Renaming the old files'); const files = fs.readdirSync(path.dirname(filename)); - files.filter(justTheseFiles).sort(byIndex).reverse().forEach(increaseFileIndex); + files + .filter(justTheseFiles) + .sort(byIndex) + .reverse() + .forEach(increaseFileIndex); } debug('Rolling, rolling, rolling'); @@ -129,7 +141,6 @@ class RollingFileSync { write(chunk, encoding) { const that = this; - function writeTheChunk() { debug('writing the chunk to the file'); that.currentSize += chunk.length; @@ -138,7 +149,6 @@ class RollingFileSync { debug('in write'); - if (this.shouldRoll()) { this.currentSize = 0; this.roll(this.filename); @@ -161,8 +171,15 @@ class RollingFileSync { * @param options - options to be passed to the underlying stream * @param timezoneOffset - optional timezone offset in minutes (default system local) */ -function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset) { - if (typeof file !== "string" || file.length === 0) { +function fileAppender( + file, + layout, + logSize, + numBackups, + options, + timezoneOffset +) { + if (typeof file !== 'string' || file.length === 0) { throw new Error(`Invalid filename: ${file}`); } else if (file.endsWith(path.sep)) { throw new Error(`Filename is a directory: ${file}`); @@ -172,38 +189,38 @@ function fileAppender(file, layout, logSize, numBackups, options, timezoneOffset file = file.replace(new RegExp(`^~(?=${path.sep}.+)`), os.homedir()); } file = path.normalize(file); - numBackups = (!numBackups && numBackups !== 0) ? 5 : numBackups; + numBackups = !numBackups && numBackups !== 0 ? 5 : numBackups; debug( 'Creating fileSync appender (', - file, ', ', - logSize, ', ', - numBackups, ', ', - options, ', ', - timezoneOffset, ')' + file, + ', ', + logSize, + ', ', + numBackups, + ', ', + options, + ', ', + timezoneOffset, + ')' ); function openTheStream(filePath, fileSize, numFiles) { let stream; if (fileSize) { - stream = new RollingFileSync( - filePath, - fileSize, - numFiles, - options - ); + stream = new RollingFileSync(filePath, fileSize, numFiles, options); } else { - stream = (((f) => { + stream = ((f) => { // touch the file to apply flags (like w to truncate the file) touchFile(f, options); return { write(data) { fs.appendFileSync(f, data); - } + }, }; - }))(filePath); + })(filePath); } return stream; @@ -225,7 +242,7 @@ function configure(config, layouts) { const options = { flags: config.flags || 'a', encoding: config.encoding || 'utf8', - mode: config.mode || 0o600 + mode: config.mode || 0o600, }; return fileAppender( diff --git a/lib/appenders/index.js b/lib/appenders/index.js index d89a77f2..3e26c127 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -37,18 +37,22 @@ const tryLoading = (modulePath, config) => { } }; -const loadAppenderModule = (type, config) => coreAppenders.get(type) - || tryLoading(`./${type}`, config) - || tryLoading(type, config) - || (require.main && require.main.filename && tryLoading(path.join(path.dirname(require.main.filename), type), config)) - || tryLoading(path.join(process.cwd(), type), config); +const loadAppenderModule = (type, config) => + coreAppenders.get(type) || + tryLoading(`./${type}`, config) || + tryLoading(type, config) || + (require.main && + require.main.filename && + tryLoading(path.join(path.dirname(require.main.filename), type), config)) || + tryLoading(path.join(process.cwd(), type), config); const appendersLoading = new Set(); const getAppender = (name, config) => { if (appenders.has(name)) return appenders.get(name); if (!config.appenders[name]) return false; - if (appendersLoading.has(name)) throw new Error(`Dependency loop detected for appender ${name}.`); + if (appendersLoading.has(name)) + throw new Error(`Dependency loop detected for appender ${name}.`); appendersLoading.add(name); debug(`Creating appender ${name}`); @@ -62,7 +66,8 @@ const getAppender = (name, config) => { const createAppender = (name, config) => { const appenderConfig = config.appenders[name]; const appenderModule = appenderConfig.type.configure - ? appenderConfig.type : loadAppenderModule(appenderConfig.type, config); + ? appenderConfig.type + : loadAppenderModule(appenderConfig.type, config); configuration.throwExceptionIf( config, configuration.not(appenderModule), @@ -71,18 +76,24 @@ const createAppender = (name, config) => { if (appenderModule.appender) { process.emitWarning( `Appender ${appenderConfig.type} exports an appender function.`, - "DeprecationWarning", "log4js-node-DEP0001" + 'DeprecationWarning', + 'log4js-node-DEP0001' + ); + debug( + '[log4js-node-DEP0001]', + `DEPRECATION: Appender ${appenderConfig.type} exports an appender function.` ); - debug("[log4js-node-DEP0001]", - `DEPRECATION: Appender ${appenderConfig.type} exports an appender function.`); } if (appenderModule.shutdown) { process.emitWarning( `Appender ${appenderConfig.type} exports a shutdown function.`, - "DeprecationWarning", "log4js-node-DEP0002" + 'DeprecationWarning', + 'log4js-node-DEP0002' + ); + debug( + '[log4js-node-DEP0002]', + `DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.` ); - debug("[log4js-node-DEP0002]", - `DEPRECATION: Appender ${appenderConfig.type} exports a shutdown function.`); } debug(`${name}: clustering.isMaster ? ${clustering.isMaster()}`); @@ -90,15 +101,20 @@ const createAppender = (name, config) => { // eslint-disable-next-line global-require `${name}: appenderModule is ${require('util').inspect(appenderModule)}` ); - return clustering.onlyOnMaster(() => { - debug(`calling appenderModule.configure for ${name} / ${appenderConfig.type}`); - return appenderModule.configure( - adapters.modifyConfig(appenderConfig), - layouts, - appender => getAppender(appender, config), - levels - ); - }, /* istanbul ignore next: fn never gets called by non-master yet needed to pass config validation */ () => {}); + return clustering.onlyOnMaster( + () => { + debug( + `calling appenderModule.configure for ${name} / ${appenderConfig.type}` + ); + return appenderModule.configure( + adapters.modifyConfig(appenderConfig), + layouts, + (appender) => getAppender(appender, config), + levels + ); + }, + /* istanbul ignore next: fn never gets called by non-master yet needed to pass config validation */ () => {} + ); }; const setup = (config) => { @@ -109,14 +125,17 @@ const setup = (config) => { } const usedAppenders = []; - Object.values(config.categories).forEach(category => { + Object.values(config.categories).forEach((category) => { usedAppenders.push(...category.appenders); }); Object.keys(config.appenders).forEach((name) => { // dodgy hard-coding of special case for tcp-server and multiprocess which may not have // any categories associated with it, but needs to be started up anyway - if (usedAppenders.includes(name) || config.appenders[name].type === 'tcp-server' - || config.appenders[name].type === 'multiprocess') { + if ( + usedAppenders.includes(name) || + config.appenders[name].type === 'tcp-server' || + config.appenders[name].type === 'multiprocess' + ) { getAppender(name, config); } }); diff --git a/lib/appenders/logLevelFilter.js b/lib/appenders/logLevelFilter.js index 253fedd7..2e759cd0 100644 --- a/lib/appenders/logLevelFilter.js +++ b/lib/appenders/logLevelFilter.js @@ -3,7 +3,10 @@ function logLevelFilter(minLevelString, maxLevelString, appender, levels) { const maxLevel = levels.getLevel(maxLevelString, levels.FATAL); return (logEvent) => { const eventLevel = logEvent.level; - if (minLevel.isLessThanOrEqualTo(eventLevel) && maxLevel.isGreaterThanOrEqualTo(eventLevel)) { + if ( + minLevel.isLessThanOrEqualTo(eventLevel) && + maxLevel.isGreaterThanOrEqualTo(eventLevel) + ) { appender(logEvent); } }; diff --git a/lib/appenders/multiFile.js b/lib/appenders/multiFile.js index 8efb4e14..1a0746fc 100644 --- a/lib/appenders/multiFile.js +++ b/lib/appenders/multiFile.js @@ -1,10 +1,9 @@ - - const debug = require('debug')('log4js:multiFile'); const path = require('path'); const fileAppender = require('./file'); -const findFileKey = (property, event) => event[property] || event.context[property]; +const findFileKey = (property, event) => + event[property] || event.context[property]; module.exports.configure = (config, layouts) => { debug('Creating a multi-file appender'); @@ -49,7 +48,10 @@ module.exports.configure = (config, layouts) => { timers.set(fileKey, { timeout: config.timeout, lastUsed: Date.now(), - interval: setInterval(checkForTimeout.bind(null, fileKey), config.timeout) + interval: setInterval( + checkForTimeout.bind(null, fileKey), + config.timeout + ), }); } } else if (config.timeout) { diff --git a/lib/appenders/multiprocess.js b/lib/appenders/multiprocess.js index 95b5a9d3..06d9fb52 100644 --- a/lib/appenders/multiprocess.js +++ b/lib/appenders/multiprocess.js @@ -1,5 +1,3 @@ - - const debug = require('debug')('log4js:multiprocess'); const net = require('net'); const LoggingEvent = require('../LoggingEvent'); @@ -55,7 +53,7 @@ function logServer(config, actualAppender, levels) { level: levels.ERROR, data: ['A worker log process hung up unexpectedly', error], remoteAddress: clientSocket.remoteAddress, - remotePort: clientSocket.remotePort + remotePort: clientSocket.remotePort, }; actualAppender(loggingEvent); } @@ -65,11 +63,15 @@ function logServer(config, actualAppender, levels) { clientSocket.on('error', handleError); }); - server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost', (e) => { - debug('(master) master server listening, error was ', e); - // allow the process to exit, if this is the only socket active - server.unref(); - }); + server.listen( + config.loggerPort || 5000, + config.loggerHost || 'localhost', + (e) => { + debug('(master) master server listening, error was ', e); + // allow the process to exit, if this is the only socket active + server.unref(); + } + ); function app(event) { debug('(master) log event sent directly to actual appender (local event)'); @@ -106,9 +108,14 @@ function workerAppender(config) { function createSocket() { debug( - `(worker) worker appender creating socket to ${config.loggerHost || 'localhost'}:${config.loggerPort || 5000}` + `(worker) worker appender creating socket to ${ + config.loggerHost || 'localhost' + }:${config.loggerPort || 5000}` + ); + socket = net.createConnection( + config.loggerPort || 5000, + config.loggerHost || 'localhost' ); - socket = net.createConnection(config.loggerPort || 5000, config.loggerHost || 'localhost'); socket.on('connect', () => { debug('(worker) worker socket connected'); emptyBuffer(); @@ -129,7 +136,9 @@ function workerAppender(config) { if (canWrite) { write(loggingEvent); } else { - debug('(worker) worker buffering log event because it cannot write at the moment'); + debug( + '(worker) worker buffering log event because it cannot write at the moment' + ); buffer.push(loggingEvent); } } @@ -171,7 +180,9 @@ function configure(config, layouts, findAppender, levels) { appender = findAppender(config.appender); if (!appender) { debug(`actual appender "${config.appender}" not found`); - throw new Error(`multiprocess master appender "${config.appender}" not defined`); + throw new Error( + `multiprocess master appender "${config.appender}" not defined` + ); } } return createAppender(config, appender, levels); diff --git a/lib/appenders/noLogFilter.js b/lib/appenders/noLogFilter.js index aa0327ad..82129ccf 100644 --- a/lib/appenders/noLogFilter.js +++ b/lib/appenders/noLogFilter.js @@ -1,5 +1,3 @@ - - const debug = require('debug')('log4js:noLogFilter'); /** @@ -8,7 +6,7 @@ const debug = require('debug')('log4js:noLogFilter'); * @returns {string[]} a filtered string array with not empty or null regexp */ function removeNullOrEmptyRegexp(regexp) { - const filtered = regexp.filter(el => ((el != null) && (el !== ''))); + const filtered = regexp.filter((el) => el != null && el !== ''); return filtered; } @@ -27,8 +25,10 @@ function noLogFilter(filters, appender) { } filters = removeNullOrEmptyRegexp(filters); const regex = new RegExp(filters.join('|'), 'i'); - if (filters.length === 0 - || logEvent.data.findIndex(value => regex.test(value)) < 0) { + if ( + filters.length === 0 || + logEvent.data.findIndex((value) => regex.test(value)) < 0 + ) { debug('Not excluded, sending to appender'); appender(logEvent); } diff --git a/lib/appenders/recording.js b/lib/appenders/recording.js index 096eabb4..ca90e070 100644 --- a/lib/appenders/recording.js +++ b/lib/appenders/recording.js @@ -1,12 +1,12 @@ - - const debug = require('debug')('log4js:recording'); const recordedEvents = []; function configure() { return function (logEvent) { - debug(`received logEvent, number of events now ${recordedEvents.length + 1}`); + debug( + `received logEvent, number of events now ${recordedEvents.length + 1}` + ); debug('log event was ', logEvent); recordedEvents.push(logEvent); }; @@ -25,5 +25,5 @@ module.exports = { replay, playback: replay, reset, - erase: reset + erase: reset, }; diff --git a/lib/appenders/stderr.js b/lib/appenders/stderr.js index c005d63c..690d1df8 100644 --- a/lib/appenders/stderr.js +++ b/lib/appenders/stderr.js @@ -1,5 +1,3 @@ - - function stderrAppender(layout, timezoneOffset) { return (loggingEvent) => { process.stderr.write(`${layout(loggingEvent, timezoneOffset)}\n`); diff --git a/lib/appenders/stdout.js b/lib/appenders/stdout.js index b73a7ade..9f78b9f4 100644 --- a/lib/appenders/stdout.js +++ b/lib/appenders/stdout.js @@ -1,5 +1,3 @@ - - function stdoutAppender(layout, timezoneOffset) { return (loggingEvent) => { process.stdout.write(`${layout(loggingEvent, timezoneOffset)}\n`); diff --git a/lib/appenders/tcp-server.js b/lib/appenders/tcp-server.js index 222fe5ce..3459c311 100644 --- a/lib/appenders/tcp-server.js +++ b/lib/appenders/tcp-server.js @@ -20,9 +20,11 @@ exports.configure = (config) => { } else { dataSoFar = ''; } - events.filter(e => e.length).forEach((e) => { - clustering.send(LoggingEvent.deserialise(e)); - }); + events + .filter((e) => e.length) + .forEach((e) => { + clustering.send(LoggingEvent.deserialise(e)); + }); } else { dataSoFar = ''; } @@ -42,6 +44,6 @@ exports.configure = (config) => { shutdown: (cb) => { debug('shutdown called.'); server.close(cb); - } + }, }; }; diff --git a/lib/appenders/tcp.js b/lib/appenders/tcp.js index 8098d48f..5a9854a3 100644 --- a/lib/appenders/tcp.js +++ b/lib/appenders/tcp.js @@ -1,5 +1,3 @@ - - const debug = require('debug')('log4js:tcp'); const net = require('net'); @@ -24,9 +22,16 @@ function appender(config, layout) { } function createSocket() { - debug(`appender creating socket to ${config.host || 'localhost'}:${config.port || 5000}`); + debug( + `appender creating socket to ${config.host || 'localhost'}:${ + config.port || 5000 + }` + ); endMsg = `${config.endMsg || '__LOG4JS__'}`; - socket = net.createConnection(config.port || 5000, config.host || 'localhost'); + socket = net.createConnection( + config.port || 5000, + config.host || 'localhost' + ); socket.on('connect', () => { debug('socket connected'); emptyBuffer(); diff --git a/lib/categories.js b/lib/categories.js index 18c3c1df..10ed016a 100644 --- a/lib/categories.js +++ b/lib/categories.js @@ -22,7 +22,6 @@ function inheritFromParent(config, category, categoryName) { const parentCategoryName = categoryName.slice(0, lastDotIndex); let parentCategory = config.categories[parentCategoryName]; - if (!parentCategory) { // parent is missing, so implicitly create it, so that it can inherit from its parents parentCategory = { inherit: true, appenders: [] }; @@ -33,10 +32,12 @@ function inheritFromParent(config, category, categoryName) { // if the parent is not in the config (because we just created it above), // and it inherited a valid configuration, add it to config.categories - if (!config.categories[parentCategoryName] - && parentCategory.appenders - && parentCategory.appenders.length - && parentCategory.level) { + if ( + !config.categories[parentCategoryName] && + parentCategory.appenders && + parentCategory.appenders.length && + parentCategory.level + ) { config.categories[parentCategoryName] = parentCategory; } @@ -52,7 +53,6 @@ function inheritFromParent(config, category, categoryName) { category.parent = parentCategory; } - /** * Walk all categories in the config, and pull down any configuration from parent to child. * This includes inherited appenders, and level, where level is not set. @@ -69,7 +69,9 @@ function addCategoryInheritance(config) { }); } -configuration.addPreProcessingListener(config => addCategoryInheritance(config)); +configuration.addPreProcessingListener((config) => + addCategoryInheritance(config) +); configuration.addListener((config) => { configuration.throwExceptionIf( @@ -91,7 +93,7 @@ configuration.addListener((config) => { config, [ configuration.not(category.appenders), - configuration.not(category.level) + configuration.not(category.level), ], `category "${name}" is not valid (must be an object with properties "appenders" and "level")` ); @@ -127,8 +129,8 @@ configuration.addListener((config) => { configuration.throwExceptionIf( config, configuration.not(levels.getLevel(category.level)), - `category "${name}" is not valid (level "${category.level}" not recognised;` - + ` valid levels are ${levels.levels.join(', ')})` + `category "${name}" is not valid (level "${category.level}" not recognised;` + + ` valid levels are ${levels.levels.join(', ')})` ); }); @@ -152,14 +154,11 @@ const setup = (config) => { category.appenders.forEach((appender) => { categoryAppenders.push(appenders.get(appender)); debug(`Creating category ${name}`); - categories.set( - name, - { - appenders: categoryAppenders, - level: levels.getLevel(category.level), - enableCallStack: category.enableCallStack || false - } - ); + categories.set(name, { + appenders: categoryAppenders, + level: levels.getLevel(category.level), + enableCallStack: category.enableCallStack || false, + }); }); }); }; @@ -181,7 +180,9 @@ const configForCategory = (category) => { let sourceCategoryConfig; if (category.indexOf('.') > 0) { debug(`configForCategory: ${category} has hierarchy, cloning from parents`); - sourceCategoryConfig = { ...configForCategory(category.slice(0, category.lastIndexOf('.'))) }; + sourceCategoryConfig = { + ...configForCategory(category.slice(0, category.lastIndexOf('.'))), + }; } else { if (!categories.has('default')) { setup({ categories: { default: { appenders: ['out'], level: 'OFF' } } }); @@ -193,14 +194,16 @@ const configForCategory = (category) => { return sourceCategoryConfig; }; -const appendersForCategory = category => configForCategory(category).appenders; +const appendersForCategory = (category) => + configForCategory(category).appenders; -const getLevelForCategory = category => configForCategory(category).level; +const getLevelForCategory = (category) => configForCategory(category).level; const setLevelForCategory = (category, level) => { configForCategory(category).level = level; }; -const getEnableCallStackForCategory = category => configForCategory(category).enableCallStack === true; +const getEnableCallStackForCategory = (category) => + configForCategory(category).enableCallStack === true; const setEnableCallStackForCategory = (category, useCallStack) => { configForCategory(category).enableCallStack = useCallStack; }; diff --git a/lib/clustering.js b/lib/clustering.js index fefe9764..ba445e79 100644 --- a/lib/clustering.js +++ b/lib/clustering.js @@ -1,54 +1,55 @@ -const debug = require("debug")("log4js:clustering"); -const LoggingEvent = require("./LoggingEvent"); -const configuration = require("./configuration"); +const debug = require('debug')('log4js:clustering'); +const LoggingEvent = require('./LoggingEvent'); +const configuration = require('./configuration'); let disabled = false; let cluster = null; try { // eslint-disable-next-line global-require - cluster = require("cluster"); + cluster = require('cluster'); } catch (e) { - debug("cluster module not present"); + debug('cluster module not present'); disabled = true; } const listeners = []; let pm2 = false; -let pm2InstanceVar = "NODE_APP_INSTANCE"; +let pm2InstanceVar = 'NODE_APP_INSTANCE'; -const isPM2Master = () => pm2 && process.env[pm2InstanceVar] === "0"; -const isMaster = () => disabled || (cluster && cluster.isMaster) || isPM2Master(); +const isPM2Master = () => pm2 && process.env[pm2InstanceVar] === '0'; +const isMaster = () => + disabled || (cluster && cluster.isMaster) || isPM2Master(); -const sendToListeners = logEvent => { - listeners.forEach(l => l(logEvent)); +const sendToListeners = (logEvent) => { + listeners.forEach((l) => l(logEvent)); }; // in a multi-process node environment, worker loggers will use // process.send const receiver = (worker, message) => { // prior to node v6, the worker parameter was not passed (args were message, handle) - debug("cluster message received from worker ", worker, ": ", message); + debug('cluster message received from worker ', worker, ': ', message); if (worker.topic && worker.data) { message = worker; worker = undefined; } - if (message && message.topic && message.topic === "log4js:message") { - debug("received message: ", message.data); + if (message && message.topic && message.topic === 'log4js:message') { + debug('received message: ', message.data); const logEvent = LoggingEvent.deserialise(message.data); sendToListeners(logEvent); } }; if (!disabled) { - configuration.addListener(config => { + configuration.addListener((config) => { // clear out the listeners, because configure has been called. listeners.length = 0; ({ pm2, disableClustering: disabled, - pm2InstanceVar = "NODE_APP_INSTANCE" + pm2InstanceVar = 'NODE_APP_INSTANCE', } = config); debug(`clustering disabled ? ${disabled}`); @@ -59,25 +60,25 @@ if (!disabled) { // just in case configure is called after shutdown if (pm2) { - process.removeListener("message", receiver); + process.removeListener('message', receiver); } if (cluster && cluster.removeListener) { - cluster.removeListener("message", receiver); + cluster.removeListener('message', receiver); } if (disabled || config.disableClustering) { - debug("Not listening for cluster messages, because clustering disabled."); + debug('Not listening for cluster messages, because clustering disabled.'); } else if (isPM2Master()) { // PM2 cluster support // PM2 runs everything as workers - install pm2-intercom for this to work. // we only want one of the app instances to write logs - debug("listening for PM2 broadcast messages"); - process.on("message", receiver); + debug('listening for PM2 broadcast messages'); + process.on('message', receiver); } else if (cluster && cluster.isMaster) { - debug("listening for cluster messages"); - cluster.on("message", receiver); + debug('listening for cluster messages'); + cluster.on('message', receiver); } else { - debug("not listening for messages, because we are not a master process"); + debug('not listening for messages, because we are not a master process'); } }); } @@ -85,20 +86,20 @@ if (!disabled) { module.exports = { onlyOnMaster: (fn, notMaster) => (isMaster() ? fn() : notMaster), isMaster, - send: msg => { + send: (msg) => { if (isMaster()) { sendToListeners(msg); } else { if (!pm2) { msg.cluster = { workerId: cluster.worker.id, - worker: process.pid + worker: process.pid, }; } - process.send({ topic: "log4js:message", data: msg.serialise() }); + process.send({ topic: 'log4js:message', data: msg.serialise() }); } }, - onMessage: listener => { + onMessage: (listener) => { listeners.push(listener); - } + }, }; diff --git a/lib/configuration.js b/lib/configuration.js index e3170c35..e02a4e55 100644 --- a/lib/configuration.js +++ b/lib/configuration.js @@ -1,18 +1,18 @@ - - const util = require('util'); const debug = require('debug')('log4js:configuration'); const preProcessingListeners = []; const listeners = []; -const not = thing => !thing; +const not = (thing) => !thing; -const anObject = thing => thing && typeof thing === 'object' && !Array.isArray(thing); +const anObject = (thing) => + thing && typeof thing === 'object' && !Array.isArray(thing); -const validIdentifier = thing => /^[A-Za-z][A-Za-z0-9_]*$/g.test(thing); +const validIdentifier = (thing) => /^[A-Za-z][A-Za-z0-9_]*$/g.test(thing); -const anInteger = thing => thing && typeof thing === 'number' && Number.isInteger(thing); +const anInteger = (thing) => + thing && typeof thing === 'number' && Number.isInteger(thing); const addListener = (fn) => { listeners.push(fn); @@ -21,7 +21,9 @@ const addListener = (fn) => { const addPreProcessingListener = (fn) => { preProcessingListeners.push(fn); - debug(`Added pre-processing listener, now ${preProcessingListeners.length} listeners`); + debug( + `Added pre-processing listener, now ${preProcessingListeners.length} listeners` + ); }; const throwExceptionIf = (config, checks, message) => { @@ -42,11 +44,11 @@ const configure = (candidate) => { throwExceptionIf(candidate, not(anObject(candidate)), 'must be an object.'); debug(`Calling pre-processing listeners (${preProcessingListeners.length})`); - preProcessingListeners.forEach(listener => listener(candidate)); + preProcessingListeners.forEach((listener) => listener(candidate)); debug('Configuration pre-processing finished.'); debug(`Calling configuration listeners (${listeners.length})`); - listeners.forEach(listener => listener(candidate)); + listeners.forEach((listener) => listener(candidate)); debug('Configuration finished.'); }; @@ -58,5 +60,5 @@ module.exports = { anObject, anInteger, validIdentifier, - not + not, }; diff --git a/lib/connect-logger.js b/lib/connect-logger.js index d39d371a..f3d3418c 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -1,9 +1,9 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["__statusCode", "_remoteAddress", "__headers", "_logging"] }] */ -const levels = require("./levels"); +const levels = require('./levels'); const DEFAULT_FORMAT = - ":remote-addr - -" + + ':remote-addr - -' + ' ":method :url HTTP/:http-version"' + ' :status :content-length ":referrer"' + ' ":user-agent"'; @@ -32,7 +32,7 @@ function getUrl(req) { * @return {Array} */ function assembleTokens(req, res, customTokens) { - const arrayUniqueTokens = array => { + const arrayUniqueTokens = (array) => { const a = array.concat(); for (let i = 0; i < a.length; ++i) { for (let j = i + 1; j < a.length; ++j) { @@ -47,53 +47,53 @@ function assembleTokens(req, res, customTokens) { }; const defaultTokens = []; - defaultTokens.push({ token: ":url", replacement: getUrl(req) }); - defaultTokens.push({ token: ":protocol", replacement: req.protocol }); - defaultTokens.push({ token: ":hostname", replacement: req.hostname }); - defaultTokens.push({ token: ":method", replacement: req.method }); + defaultTokens.push({ token: ':url', replacement: getUrl(req) }); + defaultTokens.push({ token: ':protocol', replacement: req.protocol }); + defaultTokens.push({ token: ':hostname', replacement: req.hostname }); + defaultTokens.push({ token: ':method', replacement: req.method }); defaultTokens.push({ - token: ":status", - replacement: res.__statusCode || res.statusCode + token: ':status', + replacement: res.__statusCode || res.statusCode, }); defaultTokens.push({ - token: ":response-time", - replacement: res.responseTime + token: ':response-time', + replacement: res.responseTime, }); - defaultTokens.push({ token: ":date", replacement: new Date().toUTCString() }); + defaultTokens.push({ token: ':date', replacement: new Date().toUTCString() }); defaultTokens.push({ - token: ":referrer", - replacement: req.headers.referer || req.headers.referrer || "" + token: ':referrer', + replacement: req.headers.referer || req.headers.referrer || '', }); defaultTokens.push({ - token: ":http-version", - replacement: `${req.httpVersionMajor}.${req.httpVersionMinor}` + token: ':http-version', + replacement: `${req.httpVersionMajor}.${req.httpVersionMinor}`, }); defaultTokens.push({ - token: ":remote-addr", + token: ':remote-addr', replacement: - req.headers["x-forwarded-for"] || + req.headers['x-forwarded-for'] || req.ip || req._remoteAddress || (req.socket && (req.socket.remoteAddress || - (req.socket.socket && req.socket.socket.remoteAddress))) + (req.socket.socket && req.socket.socket.remoteAddress))), }); defaultTokens.push({ - token: ":user-agent", - replacement: req.headers["user-agent"] + token: ':user-agent', + replacement: req.headers['user-agent'], }); defaultTokens.push({ - token: ":content-length", + token: ':content-length', replacement: - res.getHeader("content-length") || - (res.__headers && res.__headers["Content-Length"]) || - "-" + res.getHeader('content-length') || + (res.__headers && res.__headers['Content-Length']) || + '-', }); defaultTokens.push({ token: /:req\[([^\]]+)]/g, replacement(_, field) { return req.headers[field.toLowerCase()]; - } + }, }); defaultTokens.push({ token: /:res\[([^\]]+)]/g, @@ -102,7 +102,7 @@ function assembleTokens(req, res, customTokens) { res.getHeader(field.toLowerCase()) || (res.__headers && res.__headers[field]) ); - } + }, }); return arrayUniqueTokens(customTokens.concat(defaultTokens)); @@ -157,14 +157,16 @@ function createNoLogCondition(nolog) { regexp = nolog; } - if (typeof nolog === "string") { + if (typeof nolog === 'string') { regexp = new RegExp(nolog); } if (Array.isArray(nolog)) { // convert to strings - const regexpsAsStrings = nolog.map(reg => (reg.source ? reg.source : reg)); - regexp = new RegExp(regexpsAsStrings.join("|")); + const regexpsAsStrings = nolog.map((reg) => + reg.source ? reg.source : reg + ); + regexp = new RegExp(regexpsAsStrings.join('|')); } return regexp; @@ -190,7 +192,7 @@ function matchRules(statusCode, currentLevel, ruleSet) { let level = currentLevel; if (ruleSet) { - const matchedRule = ruleSet.find(rule => { + const matchedRule = ruleSet.find((rule) => { let ruleMatched = false; if (rule.from && rule.to) { ruleMatched = statusCode >= rule.from && statusCode <= rule.to; @@ -237,7 +239,7 @@ function matchRules(statusCode, currentLevel, ruleSet) { * @api public */ module.exports = function getLogger(logger4js, options) { - if (typeof options === "string" || typeof options === "function") { + if (typeof options === 'string' || typeof options === 'function') { options = { format: options }; } else { options = options || {}; @@ -255,7 +257,7 @@ module.exports = function getLogger(logger4js, options) { // nologs if (nolog && nolog.test(req.originalUrl)) return next(); - if (thisLogger.isLevelEnabled(level) || options.level === "auto") { + if (thisLogger.isLevelEnabled(level) || options.level === 'auto') { const start = new Date(); const { writeHead } = res; @@ -280,7 +282,7 @@ module.exports = function getLogger(logger4js, options) { finished = true; res.responseTime = new Date() - start; // status code response level handling - if (res.statusCode && options.level === "auto") { + if (res.statusCode && options.level === 'auto') { level = levels.INFO; if (res.statusCode >= 300) level = levels.WARN; if (res.statusCode >= 400) level = levels.ERROR; @@ -289,19 +291,19 @@ module.exports = function getLogger(logger4js, options) { const combinedTokens = assembleTokens(req, res, options.tokens || []); - if (options.context) thisLogger.addContext("res", res); - if (typeof fmt === "function") { - const line = fmt(req, res, str => format(str, combinedTokens)); + if (options.context) thisLogger.addContext('res', res); + if (typeof fmt === 'function') { + const line = fmt(req, res, (str) => format(str, combinedTokens)); if (line) thisLogger.log(level, line); } else { thisLogger.log(level, format(fmt, combinedTokens)); } - if (options.context) thisLogger.removeContext("res"); + if (options.context) thisLogger.removeContext('res'); }; - res.on("end", handler); - res.on("finish", handler); - res.on("error", handler); - res.on("close", handler); + res.on('end', handler); + res.on('finish', handler); + res.on('error', handler); + res.on('close', handler); } // ensure next gets always called diff --git a/lib/layouts.js b/lib/layouts.js index 74254858..8e5325ba 100644 --- a/lib/layouts.js +++ b/lib/layouts.js @@ -21,7 +21,7 @@ const styles = { green: [32, 39], magenta: [35, 39], red: [91, 39], - yellow: [33, 39] + yellow: [33, 39], }; function colorizeStart(style) { @@ -61,7 +61,9 @@ function timestampLevelAndCategory(loggingEvent, colour) { * @author Stephan Strittmatter */ function basicLayout(loggingEvent) { - return timestampLevelAndCategory(loggingEvent) + util.format(...loggingEvent.data); + return ( + timestampLevelAndCategory(loggingEvent) + util.format(...loggingEvent.data) + ); } /** @@ -69,7 +71,10 @@ function basicLayout(loggingEvent) { * same as basicLayout, but with colours. */ function colouredLayout(loggingEvent) { - return timestampLevelAndCategory(loggingEvent, loggingEvent.level.colour) + util.format(...loggingEvent.data); + return ( + timestampLevelAndCategory(loggingEvent, loggingEvent.level.colour) + + util.format(...loggingEvent.data) + ); } function messagePassThroughLayout(loggingEvent) { @@ -125,7 +130,8 @@ function dummyLayout(loggingEvent) { */ function patternLayout(pattern, tokens) { const TTCC_CONVERSION_PATTERN = '%r %p %c - %m%n'; - const regex = /%(-?[0-9]+)?(\.?-?[0-9]+)?([[\]cdhmnprzxXyflos%])(\{([^}]+)\})?|([^%]+)/; + const regex = + /%(-?[0-9]+)?(\.?-?[0-9]+)?([[\]cdhmnprzxXyflos%])(\{([^}]+)\})?|([^%]+)/; pattern = pattern || TTCC_CONVERSION_PATTERN; @@ -135,7 +141,9 @@ function patternLayout(pattern, tokens) { const precision = parseInt(specifier, 10); const loggerNameBits = loggerName.split('.'); if (precision < loggerNameBits.length) { - loggerName = loggerNameBits.slice(loggerNameBits.length - precision).join('.'); + loggerName = loggerNameBits + .slice(loggerNameBits.length - precision) + .join('.'); } } return loggerName; @@ -157,26 +165,32 @@ function patternLayout(pattern, tokens) { break; case 'ABSOLUTE': process.emitWarning( - "Pattern %d{ABSOLUTE} is deprecated in favor of %d{ABSOLUTETIME}. " + - "Please use %d{ABSOLUTETIME} instead.", - "DeprecationWarning", "log4js-node-DEP0003" + 'Pattern %d{ABSOLUTE} is deprecated in favor of %d{ABSOLUTETIME}. ' + + 'Please use %d{ABSOLUTETIME} instead.', + 'DeprecationWarning', + 'log4js-node-DEP0003' + ); + debug( + '[log4js-node-DEP0003]', + 'DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}.' ); - debug("[log4js-node-DEP0003]", - "DEPRECATION: Pattern %d{ABSOLUTE} is deprecated and replaced by %d{ABSOLUTETIME}."); - // falls through + // falls through case 'ABSOLUTETIME': case 'ABSOLUTETIME_FORMAT': format = dateFormat.ABSOLUTETIME_FORMAT; break; case 'DATE': process.emitWarning( - "Pattern %d{DATE} is deprecated due to the confusion it causes when used. " + - "Please use %d{DATETIME} instead.", - "DeprecationWarning", "log4js-node-DEP0004" + 'Pattern %d{DATE} is deprecated due to the confusion it causes when used. ' + + 'Please use %d{DATETIME} instead.', + 'DeprecationWarning', + 'log4js-node-DEP0004' ); - debug("[log4js-node-DEP0004]", - "DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}."); - // falls through + debug( + '[log4js-node-DEP0004]', + 'DEPRECATION: Pattern %d{DATE} is deprecated and replaced by %d{DATETIME}.' + ); + // falls through case 'DATETIME': case 'DATETIME_FORMAT': format = dateFormat.DATETIME_FORMAT; @@ -221,7 +235,9 @@ function patternLayout(pattern, tokens) { } function pid(loggingEvent) { - return loggingEvent && loggingEvent.pid ? loggingEvent.pid.toString() : process.pid.toString(); + return loggingEvent && loggingEvent.pid + ? loggingEvent.pid.toString() + : process.pid.toString(); } function clusterInfo() { @@ -233,7 +249,9 @@ function patternLayout(pattern, tokens) { function userDefined(loggingEvent, specifier) { if (typeof tokens[specifier] !== 'undefined') { - return typeof tokens[specifier] === 'function' ? tokens[specifier](loggingEvent) : tokens[specifier]; + return typeof tokens[specifier] === 'function' + ? tokens[specifier](loggingEvent) + : tokens[specifier]; } return null; @@ -266,7 +284,9 @@ function patternLayout(pattern, tokens) { // posix: file:///hello/world/foo.txt -> /hello/world/foo.txt -> /hello/world/foo.txt // win32: file:///C:/path/foo.txt -> /C:/path/foo.txt -> \C:\path\foo.txt -> C:\path\foo.txt // win32: file://nas/foo.txt -> //nas/foo.txt -> nas\foo.txt -> \\nas\foo.txt - filepath = path.normalize(filepath.replace(new RegExp(`^${urlPrefix}`), '')); + filepath = path.normalize( + filepath.replace(new RegExp(`^${urlPrefix}`), '') + ); if (process.platform === 'win32') { if (filepath.startsWith('\\')) { filepath = filepath.slice(1); @@ -321,7 +341,7 @@ function patternLayout(pattern, tokens) { f: fileName, l: lineNumber, o: columnNumber, - s: callStack + s: callStack, }; function replaceToken(conversionCharacter, loggingEvent, specifier) { @@ -385,7 +405,11 @@ function patternLayout(pattern, tokens) { } else { // Create a raw replacement string based on the conversion // character and specifier - const replacement = replaceToken(conversionCharacter, loggingEvent, specifier); + const replacement = replaceToken( + conversionCharacter, + loggingEvent, + specifier + ); formattedString += truncateAndPad(replacement, truncation, padding); } searchString = searchString.slice(result.index + result[0].length); @@ -395,24 +419,24 @@ function patternLayout(pattern, tokens) { } const layoutMakers = { - messagePassThrough () { + messagePassThrough() { return messagePassThroughLayout; }, - basic () { + basic() { return basicLayout; }, - colored () { + colored() { return colouredLayout; }, - coloured () { + coloured() { return colouredLayout; }, - pattern (config) { + pattern(config) { return patternLayout(config && config.pattern, config && config.tokens); }, - dummy () { + dummy() { return dummyLayout; - } + }, }; module.exports = { @@ -422,10 +446,10 @@ module.exports = { colouredLayout, coloredLayout: colouredLayout, dummyLayout, - addLayout (name, serializerGenerator) { + addLayout(name, serializerGenerator) { layoutMakers[name] = serializerGenerator; }, - layout (name, config) { + layout(name, config) { return layoutMakers[name] && layoutMakers[name](config); - } + }, }; diff --git a/lib/levels.js b/lib/levels.js index 80c346e8..4d319c8c 100644 --- a/lib/levels.js +++ b/lib/levels.js @@ -1,11 +1,15 @@ - - const configuration = require('./configuration'); const validColours = [ - 'white', 'grey', 'black', - 'blue', 'cyan', 'green', - 'magenta', 'red', 'yellow' + 'white', + 'grey', + 'black', + 'blue', + 'cyan', + 'green', + 'magenta', + 'red', + 'yellow', ]; class Level { @@ -52,7 +56,9 @@ class Level { levelStr, customLevels[l].colour ); - const existingLevelIndex = Level.levels.findIndex(lvl => lvl.levelStr === levelStr); + const existingLevelIndex = Level.levels.findIndex( + (lvl) => lvl.levelStr === levelStr + ); if (existingLevelIndex > -1) { Level.levels[existingLevelIndex] = Level[levelStr]; } else { @@ -63,7 +69,6 @@ class Level { } } - isLessThanOrEqualTo(otherLevel) { if (typeof otherLevel === 'string') { otherLevel = Level.getLevel(otherLevel); @@ -96,7 +101,7 @@ Level.addLevels({ ERROR: { value: 40000, colour: 'red' }, FATAL: { value: 50000, colour: 'magenta' }, MARK: { value: 9007199254740992, colour: 'grey' }, // 2^53 - OFF: { value: Number.MAX_VALUE, colour: 'grey' } + OFF: { value: Number.MAX_VALUE, colour: 'grey' }, }); configuration.addListener((config) => { diff --git a/lib/log4js.js b/lib/log4js.js index aef83c52..323ce11a 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -18,28 +18,28 @@ * @since 2005-05-20 * Website: http://log4js.berlios.de */ -const debug = require("debug")("log4js:main"); -const fs = require("fs"); -const deepClone = require("rfdc")({ proto: true }); -const configuration = require("./configuration"); -const layouts = require("./layouts"); -const levels = require("./levels"); -const appenders = require("./appenders"); -const categories = require("./categories"); -const Logger = require("./logger"); -const clustering = require("./clustering"); -const connectLogger = require("./connect-logger"); -const recordingModule = require("./appenders/recording"); +const debug = require('debug')('log4js:main'); +const fs = require('fs'); +const deepClone = require('rfdc')({ proto: true }); +const configuration = require('./configuration'); +const layouts = require('./layouts'); +const levels = require('./levels'); +const appenders = require('./appenders'); +const categories = require('./categories'); +const Logger = require('./logger'); +const clustering = require('./clustering'); +const connectLogger = require('./connect-logger'); +const recordingModule = require('./appenders/recording'); let enabled = false; function sendLogEventToAppender(logEvent) { if (!enabled) return; - debug("Received log event ", logEvent); + debug('Received log event ', logEvent); const categoryAppenders = categories.appendersForCategory( logEvent.categoryName ); - categoryAppenders.forEach(appender => { + categoryAppenders.forEach((appender) => { appender(logEvent); }); } @@ -47,7 +47,7 @@ function sendLogEventToAppender(logEvent) { function loadConfigurationFile(filename) { debug(`Loading configuration from ${filename}`); try { - return JSON.parse(fs.readFileSync(filename, "utf8")); + return JSON.parse(fs.readFileSync(filename, 'utf8')); } catch (e) { throw new Error( `Problem reading config from file "${filename}". Error was ${e.message}`, @@ -64,7 +64,7 @@ function configure(configurationFileOrObject) { let configObject = configurationFileOrObject; - if (typeof configObject === "string") { + if (typeof configObject === 'string') { configObject = loadConfigurationFile(configurationFileOrObject); } debug(`Configuration is ${configObject}`); @@ -80,7 +80,7 @@ function configure(configurationFileOrObject) { } function recording() { - return recordingModule + return recordingModule; } /** @@ -92,7 +92,7 @@ function recording() { * as the first argument. */ function shutdown(cb) { - debug("Shutdown called. Disabling all log writing."); + debug('Shutdown called. Disabling all log writing.'); // First, disable all writing to appenders. This prevents appenders from // not being able to be drained because of run-away log writes. enabled = false; @@ -110,7 +110,7 @@ function shutdown(cb) { 0 ); if (shutdownFunctions === 0) { - debug("No appenders with shutdown functions found."); + debug('No appenders with shutdown functions found.'); return cb !== undefined && cb(); } @@ -122,13 +122,15 @@ function shutdown(cb) { completed += 1; debug(`Appender shutdowns complete: ${completed} / ${shutdownFunctions}`); if (completed >= shutdownFunctions) { - debug("All shutdown functions completed."); + debug('All shutdown functions completed.'); if (cb) { cb(error); } } } - appendersToCheck.filter(a => a.shutdown).forEach(a => a.shutdown(complete)); + appendersToCheck + .filter((a) => a.shutdown) + .forEach((a) => a.shutdown(complete)); return null; } @@ -143,12 +145,12 @@ function getLogger(category) { if (!enabled) { configure( process.env.LOG4JS_CONFIG || { - appenders: { out: { type: "stdout" } }, - categories: { default: { appenders: ["out"], level: "OFF" } } + appenders: { out: { type: 'stdout' } }, + categories: { default: { appenders: ['out'], level: 'OFF' } }, } ); } - return new Logger(category || "default"); + return new Logger(category || 'default'); } /** diff --git a/lib/logger.js b/lib/logger.js index 0116d3b1..14385d6d 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,17 +1,17 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["_log"] }] */ -const debug = require("debug")("log4js:logger"); -const LoggingEvent = require("./LoggingEvent"); -const levels = require("./levels"); -const clustering = require("./clustering"); -const categories = require("./categories"); -const configuration = require("./configuration"); +const debug = require('debug')('log4js:logger'); +const LoggingEvent = require('./LoggingEvent'); +const levels = require('./levels'); +const clustering = require('./clustering'); +const categories = require('./categories'); +const configuration = require('./configuration'); const stackReg = /at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/; function defaultParseCallStack(data, skipIdx = 4) { try { - const stacklines = data.stack.split("\n").slice(skipIdx); + const stacklines = data.stack.split('\n').slice(skipIdx); const lineMatch = stackReg.exec(stacklines[0]); /* istanbul ignore else: failsafe */ if (lineMatch && lineMatch.length === 6) { @@ -20,15 +20,14 @@ function defaultParseCallStack(data, skipIdx = 4) { fileName: lineMatch[2], lineNumber: parseInt(lineMatch[3], 10), columnNumber: parseInt(lineMatch[4], 10), - callStack: stacklines.join("\n") + callStack: stacklines.join('\n'), }; // eslint-disable-next-line no-else-return } else { // will never get here unless nodejs has changes to Error console.error('log4js.logger - defaultParseCallStack error'); // eslint-disable-line no-console } - } - catch (err) { + } catch (err) { // will never get error unless nodejs has breaking changes to Error console.error('log4js.logger - defaultParseCallStack error', err); // eslint-disable-line no-console } @@ -50,7 +49,7 @@ function defaultParseCallStack(data, skipIdx = 4) { class Logger { constructor(name) { if (!name) { - throw new Error("No category provided."); + throw new Error('No category provided.'); } this.category = name; this.context = {}; @@ -85,7 +84,11 @@ class Logger { if (!logLevel) { if (configuration.validIdentifier(level) && args.length > 0) { // logLevel not found but of valid signature, WARN before fallback to INFO - this.log(levels.WARN, 'log4js:logger.log: valid log-level not found as first parameter given:', level); + this.log( + levels.WARN, + 'log4js:logger.log: valid log-level not found as first parameter given:', + level + ); this.log(levels.INFO, `[${level}]`, ...args); } else { // apart from fallback, allow .log(...args) to be synonym with .log("INFO", ...args) @@ -133,7 +136,7 @@ function addLevelMethods(target) { const level = levels.getLevel(target); const levelStrLower = level.toString().toLowerCase(); - const levelMethod = levelStrLower.replace(/_([a-z])/g, g => + const levelMethod = levelStrLower.replace(/_([a-z])/g, (g) => g[1].toUpperCase() ); const isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1); diff --git a/test/.eslintrc b/test/.eslintrc index 985a565e..72248364 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -1,11 +1,11 @@ { "extends": "../.eslintrc", - "rules": { - "no-plusplus": 0, + "rules": { + "no-plusplus": 0, "global-require": 0, "no-mixed-operators": 0, "no-underscore-dangle": 0, "guard-for-in": 0, "no-restricted-syntax": ["error", "WithStatement"] - } + } } diff --git a/test/multiprocess-worker.js b/test/multiprocess-worker.js index 2a018753..f2e2dbf6 100644 --- a/test/multiprocess-worker.js +++ b/test/multiprocess-worker.js @@ -5,7 +5,7 @@ if (process.argv.indexOf('start-multiprocess-worker') >= 0) { appenders: { multi: { type: 'multiprocess', mode: 'worker', loggerPort: port }, }, - categories: { default: { appenders: ['multi'], level: 'debug' } } + categories: { default: { appenders: ['multi'], level: 'debug' } }, }); log4js.getLogger('worker').info('Logging from worker'); log4js.shutdown(() => { diff --git a/test/sandbox-coverage.js b/test/sandbox-coverage.js index 2d86361f..1632f427 100644 --- a/test/sandbox-coverage.js +++ b/test/sandbox-coverage.js @@ -1,13 +1,15 @@ -const sandbox = require("@log4js-node/sandboxed-module"); +const sandbox = require('@log4js-node/sandboxed-module'); sandbox.configure({ sourceTransformers: { nyc(source) { - if (this.filename.indexOf("node_modules") > -1) { + if (this.filename.indexOf('node_modules') > -1) { return source; } - const nyc = new (require("nyc"))({}); - return nyc.instrumenter().instrumentSync(source, this.filename, { registerMap: () => {} }); - } - } + const nyc = new (require('nyc'))({}); + return nyc + .instrumenter() + .instrumentSync(source, this.filename, { registerMap: () => {} }); + }, + }, }); diff --git a/test/tap/LoggingEvent-test.js b/test/tap/LoggingEvent-test.js index f8c8ec35..f3cd49ec 100644 --- a/test/tap/LoggingEvent-test.js +++ b/test/tap/LoggingEvent-test.js @@ -1,80 +1,85 @@ -const flatted = require("flatted"); -const { test } = require("tap"); -const LoggingEvent = require("../../lib/LoggingEvent"); -const levels = require("../../lib/levels"); +const flatted = require('flatted'); +const { test } = require('tap'); +const LoggingEvent = require('../../lib/LoggingEvent'); +const levels = require('../../lib/levels'); -test("LoggingEvent", batch => { - batch.test("should serialise to flatted", t => { - const event = new LoggingEvent("cheese", levels.DEBUG, ["log message", parseInt("abc", 10), 1/0, -1/0, undefined], { - user: "bob" - }); +test('LoggingEvent', (batch) => { + batch.test('should serialise to flatted', (t) => { + const event = new LoggingEvent( + 'cheese', + levels.DEBUG, + ['log message', parseInt('abc', 10), 1 / 0, -1 / 0, undefined], + { + user: 'bob', + } + ); // set the event date to a known value event.startTime = new Date(Date.UTC(2018, 1, 4, 18, 30, 23, 10)); const rehydratedEvent = flatted.parse(event.serialise()); - t.equal(rehydratedEvent.startTime, "2018-02-04T18:30:23.010Z"); - t.equal(rehydratedEvent.categoryName, "cheese"); - t.equal(rehydratedEvent.level.levelStr, "DEBUG"); + t.equal(rehydratedEvent.startTime, '2018-02-04T18:30:23.010Z'); + t.equal(rehydratedEvent.categoryName, 'cheese'); + t.equal(rehydratedEvent.level.levelStr, 'DEBUG'); t.equal(rehydratedEvent.data.length, 5); - t.equal(rehydratedEvent.data[0], "log message"); - t.equal(rehydratedEvent.data[1], "NaN"); - t.equal(rehydratedEvent.data[2], "Infinity"); - t.equal(rehydratedEvent.data[3], "-Infinity"); - t.equal(rehydratedEvent.data[4], "undefined"); - t.equal(rehydratedEvent.context.user, "bob"); + t.equal(rehydratedEvent.data[0], 'log message'); + t.equal(rehydratedEvent.data[1], 'NaN'); + t.equal(rehydratedEvent.data[2], 'Infinity'); + t.equal(rehydratedEvent.data[3], '-Infinity'); + t.equal(rehydratedEvent.data[4], 'undefined'); + t.equal(rehydratedEvent.context.user, 'bob'); t.end(); }); - batch.test("should deserialise from flatted", t => { + batch.test('should deserialise from flatted', (t) => { const dehydratedEvent = flatted.stringify({ - startTime: "2018-02-04T10:25:23.010Z", - categoryName: "biscuits", + startTime: '2018-02-04T10:25:23.010Z', + categoryName: 'biscuits', level: { - levelStr: "INFO" + levelStr: 'INFO', }, - data: ["some log message", { x: 1 }], - context: { thing: "otherThing" }, - pid: "1234", - functionName: "bound", - fileName: "domain.js", + data: ['some log message', { x: 1 }], + context: { thing: 'otherThing' }, + pid: '1234', + functionName: 'bound', + fileName: 'domain.js', lineNumber: 421, columnNumber: 15, - callStack: "at bound (domain.js:421:15)\n" + callStack: 'at bound (domain.js:421:15)\n', }); const event = LoggingEvent.deserialise(dehydratedEvent); t.type(event, LoggingEvent); t.same(event.startTime, new Date(Date.UTC(2018, 1, 4, 10, 25, 23, 10))); - t.equal(event.categoryName, "biscuits"); + t.equal(event.categoryName, 'biscuits'); t.same(event.level, levels.INFO); - t.equal(event.data[0], "some log message"); + t.equal(event.data[0], 'some log message'); t.equal(event.data[1].x, 1); - t.equal(event.context.thing, "otherThing"); - t.equal(event.pid, "1234"); - t.equal(event.functionName, "bound"); - t.equal(event.fileName, "domain.js"); + t.equal(event.context.thing, 'otherThing'); + t.equal(event.pid, '1234'); + t.equal(event.functionName, 'bound'); + t.equal(event.fileName, 'domain.js'); t.equal(event.lineNumber, 421); t.equal(event.columnNumber, 15); - t.equal(event.callStack, "at bound (domain.js:421:15)\n"); + t.equal(event.callStack, 'at bound (domain.js:421:15)\n'); t.end(); }); - batch.test("Should correct construct with/without location info", t => { + batch.test('Should correct construct with/without location info', (t) => { // console.log([Error('123').stack.split('\n').slice(1).join('\n')]) const callStack = - " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line max-len - const fileName = "/log4js-node/test/tap/layouts-test.js"; + ' at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)'; // eslint-disable-line max-len + const fileName = '/log4js-node/test/tap/layouts-test.js'; const lineNumber = 1; const columnNumber = 14; const location = { fileName, lineNumber, columnNumber, - callStack + callStack, }; const event = new LoggingEvent( - "cheese", + 'cheese', levels.DEBUG, - ["log message"], - { user: "bob" }, + ['log message'], + { user: 'bob' }, location ); t.equal(event.fileName, fileName); @@ -82,8 +87,8 @@ test("LoggingEvent", batch => { t.equal(event.columnNumber, columnNumber); t.equal(event.callStack, callStack); - const event2 = new LoggingEvent("cheese", levels.DEBUG, ["log message"], { - user: "bob" + const event2 = new LoggingEvent('cheese', levels.DEBUG, ['log message'], { + user: 'bob', }); t.equal(event2.fileName, undefined); t.equal(event2.lineNumber, undefined); diff --git a/test/tap/appender-dependencies-test.js b/test/tap/appender-dependencies-test.js index 75265a90..045c8c12 100644 --- a/test/tap/appender-dependencies-test.js +++ b/test/tap/appender-dependencies-test.js @@ -1,111 +1,108 @@ -const { test } = require("tap"); +const { test } = require('tap'); const categories = { - default: { appenders: ["filtered"], level: "debug" } -} + default: { appenders: ['filtered'], level: 'debug' }, +}; let log4js; let recording; -test("log4js appender dependencies", batch => { +test('log4js appender dependencies', (batch) => { batch.beforeEach(() => { - log4js = require("../../lib/log4js"); - recording = require("../../lib/appenders/recording"); + log4js = require('../../lib/log4js'); + recording = require('../../lib/appenders/recording'); }); batch.afterEach(() => { recording.erase(); }); - batch.test("in order", t => { + batch.test('in order', (t) => { const config = { categories, appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "logLevelFilter", - appender: "recorder", - level: "ERROR" - } - } + type: 'logLevelFilter', + appender: 'recorder', + level: 'ERROR', + }, + }, }; - t.test('should resolve if defined in dependency order', assert => { + t.test('should resolve if defined in dependency order', (assert) => { assert.doesNotThrow(() => { log4js.configure(config); }, 'this should not trigger an error'); assert.end(); }); - const logger = log4js.getLogger("logLevelTest"); - logger.debug("this should not trigger an event"); - logger.error("this should, though"); + const logger = log4js.getLogger('logLevelTest'); + logger.debug('this should not trigger an event'); + logger.error('this should, though'); const logEvents = recording.replay(); - t.test( - "should process log events normally", - assert => { - assert.equal(logEvents.length, 1); - assert.equal(logEvents[0].data[0], "this should, though"); - assert.end(); - } - ); + t.test('should process log events normally', (assert) => { + assert.equal(logEvents.length, 1); + assert.equal(logEvents[0].data[0], 'this should, though'); + assert.end(); + }); t.end(); }); - batch.test("not in order", t => { + batch.test('not in order', (t) => { const config = { categories, appenders: { filtered: { - type: "logLevelFilter", - appender: "recorder", - level: "ERROR" + type: 'logLevelFilter', + appender: 'recorder', + level: 'ERROR', }, - recorder: { type: "recording" }, - } + recorder: { type: 'recording' }, + }, }; - t.test('should resolve if defined out of dependency order', assert => { + t.test('should resolve if defined out of dependency order', (assert) => { assert.doesNotThrow(() => { log4js.configure(config); }, 'this should not trigger an error'); assert.end(); }); - const logger = log4js.getLogger("logLevelTest"); - logger.debug("this should not trigger an event"); - logger.error("this should, though"); + const logger = log4js.getLogger('logLevelTest'); + logger.debug('this should not trigger an event'); + logger.error('this should, though'); const logEvents = recording.replay(); - t.test( - "should process log events normally", - assert => { - assert.equal(logEvents.length, 1); - assert.equal(logEvents[0].data[0], "this should, though"); - assert.end(); - } - ); + t.test('should process log events normally', (assert) => { + assert.equal(logEvents.length, 1); + assert.equal(logEvents[0].data[0], 'this should, though'); + assert.end(); + }); t.end(); }); - batch.test("with dependency loop", t => { + batch.test('with dependency loop', (t) => { const config = { categories, appenders: { filtered: { - type: "logLevelFilter", - appender: "filtered2", - level: "ERROR" + type: 'logLevelFilter', + appender: 'filtered2', + level: 'ERROR', }, filtered2: { - type: "logLevelFilter", - appender: "filtered", - level: "ERROR" + type: 'logLevelFilter', + appender: 'filtered', + level: 'ERROR', }, - recorder: { type: "recording" }, - } + recorder: { type: 'recording' }, + }, }; - t.test('should throw an error if if a dependency loop is found', assert => { - assert.throws(() => { - log4js.configure(config); - }, 'Dependency loop detected for appender filtered.'); - assert.end(); - }); + t.test( + 'should throw an error if if a dependency loop is found', + (assert) => { + assert.throws(() => { + log4js.configure(config); + }, 'Dependency loop detected for appender filtered.'); + assert.end(); + } + ); t.end(); }); batch.end(); diff --git a/test/tap/categoryFilter-test.js b/test/tap/categoryFilter-test.js index 4ec52a84..af9bba7b 100644 --- a/test/tap/categoryFilter-test.js +++ b/test/tap/categoryFilter-test.js @@ -1,101 +1,101 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); -const recording = require("../../lib/appenders/recording"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); +const recording = require('../../lib/appenders/recording'); -test("log4js categoryFilter", batch => { +test('log4js categoryFilter', (batch) => { batch.beforeEach(() => { recording.reset(); }); - batch.test("appender should exclude categories", t => { + batch.test('appender should exclude categories', (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "categoryFilter", - exclude: "web", - appender: "recorder" - } + type: 'categoryFilter', + exclude: 'web', + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); - const webLogger = log4js.getLogger("web"); - const appLogger = log4js.getLogger("app"); + const webLogger = log4js.getLogger('web'); + const appLogger = log4js.getLogger('app'); - webLogger.debug("This should not get logged"); - appLogger.debug("This should get logged"); - webLogger.debug("Hello again"); + webLogger.debug('This should not get logged'); + appLogger.debug('This should get logged'); + webLogger.debug('Hello again'); log4js - .getLogger("db") - .debug("This should be included by the appender anyway"); + .getLogger('db') + .debug('This should be included by the appender anyway'); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "This should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); t.equal( logEvents[1].data[0], - "This should be included by the appender anyway" + 'This should be included by the appender anyway' ); t.end(); }); - batch.test("appender should exclude categories", t => { + batch.test('appender should exclude categories', (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "categoryFilter", - exclude: ["app", "web"], - appender: "recorder" - } + type: 'categoryFilter', + exclude: ['app', 'web'], + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); - const webLogger = log4js.getLogger("web"); - const appLogger = log4js.getLogger("app"); + const webLogger = log4js.getLogger('web'); + const appLogger = log4js.getLogger('app'); - webLogger.debug("This should not get logged"); - appLogger.debug("This should get logged"); - webLogger.debug("Hello again"); + webLogger.debug('This should not get logged'); + appLogger.debug('This should get logged'); + webLogger.debug('Hello again'); log4js - .getLogger("db") - .debug("This should be included by the appender anyway"); + .getLogger('db') + .debug('This should be included by the appender anyway'); const logEvents = recording.replay(); t.equal(logEvents.length, 1); t.equal( logEvents[0].data[0], - "This should be included by the appender anyway" + 'This should be included by the appender anyway' ); t.end(); }); - batch.test("should not really need a category filter any more", t => { + batch.test('should not really need a category filter any more', (t) => { log4js.configure({ - appenders: { recorder: { type: "recording" } }, + appenders: { recorder: { type: 'recording' } }, categories: { - default: { appenders: ["recorder"], level: "DEBUG" }, - web: { appenders: ["recorder"], level: "OFF" } - } + default: { appenders: ['recorder'], level: 'DEBUG' }, + web: { appenders: ['recorder'], level: 'OFF' }, + }, }); - const appLogger = log4js.getLogger("app"); - const webLogger = log4js.getLogger("web"); + const appLogger = log4js.getLogger('app'); + const webLogger = log4js.getLogger('web'); - webLogger.debug("This should not get logged"); - appLogger.debug("This should get logged"); - webLogger.debug("Hello again"); + webLogger.debug('This should not get logged'); + appLogger.debug('This should get logged'); + webLogger.debug('Hello again'); log4js - .getLogger("db") - .debug("This should be included by the appender anyway"); + .getLogger('db') + .debug('This should be included by the appender anyway'); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "This should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); t.equal( logEvents[1].data[0], - "This should be included by the appender anyway" + 'This should be included by the appender anyway' ); t.end(); }); diff --git a/test/tap/cluster-test.js b/test/tap/cluster-test.js index f25eb28d..e43cd059 100644 --- a/test/tap/cluster-test.js +++ b/test/tap/cluster-test.js @@ -1,62 +1,62 @@ -const { test } = require("tap"); -const cluster = require("cluster"); -const log4js = require("../../lib/log4js"); -const recorder = require("../../lib/appenders/recording"); +const { test } = require('tap'); +const cluster = require('cluster'); +const log4js = require('../../lib/log4js'); +const recorder = require('../../lib/appenders/recording'); log4js.configure({ appenders: { - vcr: { type: "recording" } + vcr: { type: 'recording' }, }, - categories: { default: { appenders: ["vcr"], level: "debug" } } + categories: { default: { appenders: ['vcr'], level: 'debug' } }, }); if (cluster.isMaster) { cluster.fork(); - const masterLogger = log4js.getLogger("master"); + const masterLogger = log4js.getLogger('master'); const masterPid = process.pid; - masterLogger.info("this is master"); + masterLogger.info('this is master'); let workerLevel; - cluster.on("message", (worker, message) => { + cluster.on('message', (worker, message) => { if (worker.type || worker.topic) { message = worker; } - if (message.type && message.type === "::testing") { + if (message.type && message.type === '::testing') { workerLevel = message.level; } }); - cluster.on("exit", worker => { + cluster.on('exit', (worker) => { const workerPid = worker.process.pid; const logEvents = recorder.replay(); - test("cluster master", batch => { - batch.test("events should be logged", t => { + test('cluster master', (batch) => { + batch.test('events should be logged', (t) => { t.equal(logEvents.length, 3); - t.equal(logEvents[0].categoryName, "master"); + t.equal(logEvents[0].categoryName, 'master'); t.equal(logEvents[0].pid, masterPid); - t.equal(logEvents[1].categoryName, "worker"); + t.equal(logEvents[1].categoryName, 'worker'); t.equal(logEvents[1].pid, workerPid); // serialising errors with stacks intact - t.type(logEvents[1].data[1], "Error"); - t.match(logEvents[1].data[1].stack, "Error: oh dear"); + t.type(logEvents[1].data[1], 'Error'); + t.match(logEvents[1].data[1].stack, 'Error: oh dear'); // serialising circular references in objects - t.type(logEvents[1].data[2], "object"); - t.type(logEvents[1].data[2].me, "object"); + t.type(logEvents[1].data[2], 'object'); + t.type(logEvents[1].data[2].me, 'object'); // serialising errors with custom properties - t.type(logEvents[1].data[3], "Error"); - t.match(logEvents[1].data[3].stack, "Error: wtf"); - t.equal(logEvents[1].data[3].alert, "chartreuse"); + t.type(logEvents[1].data[3], 'Error'); + t.match(logEvents[1].data[3].stack, 'Error: wtf'); + t.equal(logEvents[1].data[3].alert, 'chartreuse'); // serialising things that are not errors, but look a bit like them - t.type(logEvents[1].data[4], "object"); - t.equal(logEvents[1].data[4].stack, "this is not a stack trace"); + t.type(logEvents[1].data[4], 'object'); + t.equal(logEvents[1].data[4].stack, 'this is not a stack trace'); - t.equal(logEvents[2].categoryName, "log4js"); - t.equal(logEvents[2].level.toString(), "ERROR"); - t.equal(logEvents[2].data[0], "Unable to parse log:"); + t.equal(logEvents[2].categoryName, 'log4js'); + t.equal(logEvents[2].level.toString(), 'ERROR'); + t.equal(logEvents[2].data[0], 'Unable to parse log:'); t.end(); }); @@ -64,37 +64,37 @@ if (cluster.isMaster) { batch.end(); }); - test("cluster worker", batch => { - batch.test("logger should get correct config", t => { - t.equal(workerLevel, "DEBUG"); + test('cluster worker', (batch) => { + batch.test('logger should get correct config', (t) => { + t.equal(workerLevel, 'DEBUG'); t.end(); }); batch.end(); }); }); } else { - const workerLogger = log4js.getLogger("worker"); + const workerLogger = log4js.getLogger('worker'); // test for serialising circular references const circle = {}; circle.me = circle; // test for serialising errors with their own properties - const someError = new Error("wtf"); - someError.alert = "chartreuse"; + const someError = new Error('wtf'); + someError.alert = 'chartreuse'; // test for serialising things that look like errors but aren't. - const notAnError = { stack: "this is not a stack trace" }; + const notAnError = { stack: 'this is not a stack trace' }; workerLogger.info( - "this is worker", - new Error("oh dear"), + 'this is worker', + new Error('oh dear'), circle, someError, notAnError ); // can't run the test in the worker, things get weird process.send({ - type: "::testing", - level: workerLogger.level.toString() + type: '::testing', + level: workerLogger.level.toString(), }); // test sending a badly-formed log message - process.send({ topic: "log4js:message", data: { cheese: "gouda" } }); + process.send({ topic: 'log4js:message', data: { cheese: 'gouda' } }); cluster.worker.disconnect(); } diff --git a/test/tap/configuration-inheritance-test.js b/test/tap/configuration-inheritance-test.js index 9c2b9a47..ae49422b 100644 --- a/test/tap/configuration-inheritance-test.js +++ b/test/tap/configuration-inheritance-test.js @@ -1,326 +1,357 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); -const categories = require("../../lib/categories"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); +const categories = require('../../lib/categories'); -test("log4js category inherit all appenders from direct parent", batch => { - batch.test("should inherit appenders from direct parent", t => { +test('log4js category inherit all appenders from direct parent', (batch) => { + batch.test('should inherit appenders from direct parent', (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1", "stdout2"], level: "INFO" }, - "catA.catB": { level: "DEBUG" } - } + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1', 'stdout2'], level: 'INFO' }, + 'catA.catB': { level: 'DEBUG' }, + }, }; log4js.configure(config); - const childCategoryName = "catA.catB"; + const childCategoryName = 'catA.catB'; const childAppenders = categories.appendersForCategory(childCategoryName); const childLevel = categories.getLevelForCategory(childCategoryName); t.ok(childAppenders); - t.equal(childAppenders.length, 2, "inherited 2 appenders"); - t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); - t.ok(childAppenders.some(a => a.label === "stdout2"), "inherited stdout2"); - t.equal(childLevel.levelStr, "DEBUG", "child level overrides parent"); + t.equal(childAppenders.length, 2, 'inherited 2 appenders'); + t.ok( + childAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' + ); + t.ok( + childAppenders.some((a) => a.label === 'stdout2'), + 'inherited stdout2' + ); + t.equal(childLevel.levelStr, 'DEBUG', 'child level overrides parent'); t.end(); }); batch.test( - "multiple children should inherit config from shared parent", - t => { + 'multiple children should inherit config from shared parent', + (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, - "catA.catB.cat1": { level: "DEBUG" }, // should get sdtout1, DEBUG - "catA.catB.cat2": { appenders: ["stdout2"] } // should get sdtout1,sdtout2, INFO - } + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, + 'catA.catB.cat1': { level: 'DEBUG' }, // should get sdtout1, DEBUG + 'catA.catB.cat2': { appenders: ['stdout2'] }, // should get sdtout1,sdtout2, INFO + }, }; log4js.configure(config); - const child1CategoryName = "catA.catB.cat1"; - const child1Appenders = categories.appendersForCategory( - child1CategoryName - ); + const child1CategoryName = 'catA.catB.cat1'; + const child1Appenders = + categories.appendersForCategory(child1CategoryName); const child1Level = categories.getLevelForCategory(child1CategoryName); - t.equal(child1Appenders.length, 1, "inherited 1 appender"); + t.equal(child1Appenders.length, 1, 'inherited 1 appender'); t.ok( - child1Appenders.some(a => a.label === "stdout1"), - "inherited stdout1" + child1Appenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' ); - t.equal(child1Level.levelStr, "DEBUG", "child level overrides parent"); + t.equal(child1Level.levelStr, 'DEBUG', 'child level overrides parent'); - const child2CategoryName = "catA.catB.cat2"; - const child2Appenders = categories.appendersForCategory( - child2CategoryName - ); + const child2CategoryName = 'catA.catB.cat2'; + const child2Appenders = + categories.appendersForCategory(child2CategoryName); const child2Level = categories.getLevelForCategory(child2CategoryName); t.ok(child2Appenders); t.equal( child2Appenders.length, 2, - "inherited 1 appenders, plus its original" + 'inherited 1 appenders, plus its original' ); t.ok( - child2Appenders.some(a => a.label === "stdout1"), - "inherited stdout1" + child2Appenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' ); - t.ok(child2Appenders.some(a => a.label === "stdout2"), "kept stdout2"); - t.equal(child2Level.levelStr, "INFO", "inherited parent level"); + t.ok( + child2Appenders.some((a) => a.label === 'stdout2'), + 'kept stdout2' + ); + t.equal(child2Level.levelStr, 'INFO', 'inherited parent level'); t.end(); } ); - batch.test("should inherit appenders from multiple parents", t => { + batch.test('should inherit appenders from multiple parents', (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, - "catA.catB": { appenders: ["stdout2"], level: "INFO" }, // should get stdout1 and stdout2 - "catA.catB.catC": { level: "DEBUG" } // should get stdout1 and stdout2 - } + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, + 'catA.catB': { appenders: ['stdout2'], level: 'INFO' }, // should get stdout1 and stdout2 + 'catA.catB.catC': { level: 'DEBUG' }, // should get stdout1 and stdout2 + }, }; log4js.configure(config); - const childCategoryName = "catA.catB.catC"; + const childCategoryName = 'catA.catB.catC'; const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.equal(childAppenders.length, 2, "inherited 2 appenders"); - t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); - t.ok(childAppenders.some(a => a.label === "stdout1"), "inherited stdout1"); - - const firstParentName = "catA.catB"; - const firstParentAppenders = categories.appendersForCategory( - firstParentName + t.equal(childAppenders.length, 2, 'inherited 2 appenders'); + t.ok( + childAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' + ); + t.ok( + childAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' ); + const firstParentName = 'catA.catB'; + const firstParentAppenders = + categories.appendersForCategory(firstParentName); + t.ok(firstParentAppenders); - t.equal(firstParentAppenders.length, 2, "ended up with 2 appenders"); + t.equal(firstParentAppenders.length, 2, 'ended up with 2 appenders'); + t.ok( + firstParentAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' + ); t.ok( - firstParentAppenders.some(a => a.label === "stdout1"), - "inherited stdout1" + firstParentAppenders.some((a) => a.label === 'stdout2'), + 'kept stdout2' ); - t.ok(firstParentAppenders.some(a => a.label === "stdout2"), "kept stdout2"); t.end(); }); batch.test( - "should inherit appenders from deep parent with missing direct parent", - t => { + 'should inherit appenders from deep parent with missing direct parent', + (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, // no catA.catB, but should get created, with stdout1 - "catA.catB.catC": { level: "DEBUG" } // should get stdout1 - } + 'catA.catB.catC': { level: 'DEBUG' }, // should get stdout1 + }, }; log4js.configure(config); - const childCategoryName = "catA.catB.catC"; + const childCategoryName = 'catA.catB.catC'; const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.equal(childAppenders.length, 1, "inherited 1 appenders"); + t.equal(childAppenders.length, 1, 'inherited 1 appenders'); t.ok( - childAppenders.some(a => a.label === "stdout1"), - "inherited stdout1" + childAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' ); - const firstParentCategoryName = "catA.catB"; + const firstParentCategoryName = 'catA.catB'; const firstParentAppenders = categories.appendersForCategory( firstParentCategoryName ); - t.ok(firstParentAppenders, "catA.catB got created implicitily"); + t.ok(firstParentAppenders, 'catA.catB got created implicitily'); t.equal( firstParentAppenders.length, 1, - "created with 1 inherited appender" + 'created with 1 inherited appender' ); t.ok( - firstParentAppenders.some(a => a.label === "stdout1"), - "inherited stdout1" + firstParentAppenders.some((a) => a.label === 'stdout1'), + 'inherited stdout1' ); t.end(); } ); - batch.test("should deal gracefully with missing parent", t => { + batch.test('should deal gracefully with missing parent', (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, + default: { appenders: ['stdout1'], level: 'ERROR' }, // no catA nor catA.catB, but should get created, with default values - "catA.catB.catC": { appenders: ["stdout2"], level: "DEBUG" } // should get stdout2, DEBUG - } + 'catA.catB.catC': { appenders: ['stdout2'], level: 'DEBUG' }, // should get stdout2, DEBUG + }, }; log4js.configure(config); - const childCategoryName = "catA.catB.catC"; + const childCategoryName = 'catA.catB.catC'; const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); t.equal(childAppenders.length, 1); - t.ok(childAppenders.some(a => a.label === "stdout2")); + t.ok(childAppenders.some((a) => a.label === 'stdout2')); t.end(); }); batch.test( - "should not get duplicate appenders if parent has the same one", - t => { + 'should not get duplicate appenders if parent has the same one', + (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1", "stdout2"], level: "INFO" }, - "catA.catB": { appenders: ["stdout1"], level: "DEBUG" } - } + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1', 'stdout2'], level: 'INFO' }, + 'catA.catB': { appenders: ['stdout1'], level: 'DEBUG' }, + }, }; log4js.configure(config); - const childCategoryName = "catA.catB"; + const childCategoryName = 'catA.catB'; const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.equal(childAppenders.length, 2, "inherited 1 appender"); + t.equal(childAppenders.length, 2, 'inherited 1 appender'); t.ok( - childAppenders.some(a => a.label === "stdout1"), - "still have stdout1" + childAppenders.some((a) => a.label === 'stdout1'), + 'still have stdout1' ); t.ok( - childAppenders.some(a => a.label === "stdout2"), - "inherited stdout2" + childAppenders.some((a) => a.label === 'stdout2'), + 'inherited stdout2' ); t.end(); } ); - batch.test("inherit:falses should disable inheritance", t => { + batch.test('inherit:falses should disable inheritance', (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, - "catA.catB": { appenders: ["stdout2"], level: "INFO", inherit: false } // should not inherit from catA - } + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, + 'catA.catB': { appenders: ['stdout2'], level: 'INFO', inherit: false }, // should not inherit from catA + }, }; log4js.configure(config); - const childCategoryName = "catA.catB"; + const childCategoryName = 'catA.catB'; const childAppenders = categories.appendersForCategory(childCategoryName); t.ok(childAppenders); - t.equal(childAppenders.length, 1, "inherited no appender"); - t.ok(childAppenders.some(a => a.label === "stdout2"), "kept stdout2"); + t.equal(childAppenders.length, 1, 'inherited no appender'); + t.ok( + childAppenders.some((a) => a.label === 'stdout2'), + 'kept stdout2' + ); t.end(); }); - batch.test("inheritance should stop if direct parent has inherit off", t => { - const config = { - appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } - }, - categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, - "catA.catB": { appenders: ["stdout2"], level: "INFO", inherit: false }, // should not inherit from catA - "catA.catB.catC": { level: "DEBUG" } // should inherit from catB only - } - }; + batch.test( + 'inheritance should stop if direct parent has inherit off', + (t) => { + const config = { + appenders: { + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, + }, + categories: { + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, + 'catA.catB': { + appenders: ['stdout2'], + level: 'INFO', + inherit: false, + }, // should not inherit from catA + 'catA.catB.catC': { level: 'DEBUG' }, // should inherit from catB only + }, + }; - log4js.configure(config); + log4js.configure(config); - const childCategoryName = "catA.catB.catC"; - const childAppenders = categories.appendersForCategory(childCategoryName); + const childCategoryName = 'catA.catB.catC'; + const childAppenders = categories.appendersForCategory(childCategoryName); - t.ok(childAppenders); - t.equal(childAppenders.length, 1, "inherited 1 appender"); - t.ok(childAppenders.some(a => a.label === "stdout2"), "inherited stdout2"); + t.ok(childAppenders); + t.equal(childAppenders.length, 1, 'inherited 1 appender'); + t.ok( + childAppenders.some((a) => a.label === 'stdout2'), + 'inherited stdout2' + ); - const firstParentCategoryName = "catA.catB"; - const firstParentAppenders = categories.appendersForCategory( - firstParentCategoryName - ); + const firstParentCategoryName = 'catA.catB'; + const firstParentAppenders = categories.appendersForCategory( + firstParentCategoryName + ); - t.ok(firstParentAppenders); - t.equal(firstParentAppenders.length, 1, "did not inherit new appenders"); - t.ok(firstParentAppenders.some(a => a.label === "stdout2"), "kept stdout2"); + t.ok(firstParentAppenders); + t.equal(firstParentAppenders.length, 1, 'did not inherit new appenders'); + t.ok( + firstParentAppenders.some((a) => a.label === 'stdout2'), + 'kept stdout2' + ); - t.end(); - }); + t.end(); + } + ); - batch.test("should inherit level when it is missing", t => { + batch.test('should inherit level when it is missing', (t) => { const config = { appenders: { - stdout1: { type: "dummy-appender", label: "stdout1" }, - stdout2: { type: "dummy-appender", label: "stdout2" } + stdout1: { type: 'dummy-appender', label: 'stdout1' }, + stdout2: { type: 'dummy-appender', label: 'stdout2' }, }, categories: { - default: { appenders: ["stdout1"], level: "ERROR" }, - catA: { appenders: ["stdout1"], level: "INFO" }, + default: { appenders: ['stdout1'], level: 'ERROR' }, + catA: { appenders: ['stdout1'], level: 'INFO' }, // no catA.catB, but should get created, with stdout1, level INFO - "catA.catB.catC": {} // should get stdout1, level INFO - } + 'catA.catB.catC': {}, // should get stdout1, level INFO + }, }; log4js.configure(config); - const childCategoryName = "catA.catB.catC"; + const childCategoryName = 'catA.catB.catC'; const childLevel = categories.getLevelForCategory(childCategoryName); - t.equal(childLevel.levelStr, "INFO", "inherited level"); + t.equal(childLevel.levelStr, 'INFO', 'inherited level'); - const firstParentCategoryName = "catA.catB"; + const firstParentCategoryName = 'catA.catB'; const firstParentLevel = categories.getLevelForCategory( firstParentCategoryName ); t.equal( firstParentLevel.levelStr, - "INFO", - "generate parent inherited level from base" + 'INFO', + 'generate parent inherited level from base' ); t.end(); diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index e54fcbc4..1fced152 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -1,15 +1,15 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); -const realFS = require("fs"); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); +const realFS = require('fs'); -const modulePath = "some/path/to/mylog4js.json"; +const modulePath = 'some/path/to/mylog4js.json'; const pathsChecked = []; let fakeFS = {}; let dependencies; let fileRead; -test("log4js configure", batch => { +test('log4js configure', (batch) => { batch.beforeEach(() => { fileRead = 0; @@ -22,50 +22,50 @@ test("log4js configure", batch => { config: { appenders: { console: { - type: "console", - layout: { type: "messagePassThrough" } - } + type: 'console', + layout: { type: 'messagePassThrough' }, + }, }, categories: { default: { - appenders: ["console"], - level: "INFO" - } - } + appenders: ['console'], + level: 'INFO', + }, + }, }, - readdirSync: dir => require("fs").readdirSync(dir), + readdirSync: (dir) => require('fs').readdirSync(dir), readFileSync: (file, encoding) => { fileRead += 1; - batch.type(file, "string"); + batch.type(file, 'string'); batch.equal(file, modulePath); - batch.equal(encoding, "utf8"); + batch.equal(encoding, 'utf8'); return JSON.stringify(fakeFS.config); }, - statSync: path => { + statSync: (path) => { pathsChecked.push(path); if (path === modulePath) { return { mtime: new Date() }; } - throw new Error("no such file"); - } + throw new Error('no such file'); + }, }; dependencies = { requires: { - fs: fakeFS - } + fs: fakeFS, + }, }; }); batch.test( - "when configuration file loaded via LOG4JS_CONFIG env variable", - t => { - process.env.LOG4JS_CONFIG = "some/path/to/mylog4js.json"; + 'when configuration file loaded via LOG4JS_CONFIG env variable', + (t) => { + process.env.LOG4JS_CONFIG = 'some/path/to/mylog4js.json'; - const log4js = sandbox.require("../../lib/log4js", dependencies); + const log4js = sandbox.require('../../lib/log4js', dependencies); - log4js.getLogger("test-logger"); - t.equal(fileRead, 1, "should load the specified local config file"); + log4js.getLogger('test-logger'); + t.equal(fileRead, 1, 'should load the specified local config file'); delete process.env.LOG4JS_CONFIG; @@ -74,24 +74,24 @@ test("log4js configure", batch => { ); batch.test( - "when configuration is set via configure() method call, return the log4js object", - t => { + 'when configuration is set via configure() method call, return the log4js object', + (t) => { const log4js = sandbox - .require("../../lib/log4js", dependencies) + .require('../../lib/log4js', dependencies) .configure(fakeFS.config); t.type( log4js, - "object", - "Configure method call should return the log4js object!" + 'object', + 'Configure method call should return the log4js object!' ); - const log = log4js.getLogger("daemon"); + const log = log4js.getLogger('daemon'); t.type( log, - "object", - "log4js object, returned by configure(...) method should be able to create log object." + 'object', + 'log4js object, returned by configure(...) method should be able to create log object.' ); - t.type(log.info, "function"); + t.type(log.info, 'function'); t.end(); } diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index 5f221377..401b5f97 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -1,17 +1,16 @@ -const { test } = require("tap"); -const util = require("util"); -const path = require("path"); -const sandbox = require("@log4js-node/sandboxed-module"); -const debug = require("debug")("log4js:test.configuration-validation"); -const deepFreeze = require("deep-freeze"); -const fs = require("fs"); -const log4js = require("../../lib/log4js"); -const configuration = require("../../lib/configuration"); - -const removeFiles = async filenames => { - if (!Array.isArray(filenames)) - filenames = [filenames]; - const promises = filenames.map(filename => fs.promises.unlink(filename)); +const { test } = require('tap'); +const util = require('util'); +const path = require('path'); +const sandbox = require('@log4js-node/sandboxed-module'); +const debug = require('debug')('log4js:test.configuration-validation'); +const deepFreeze = require('deep-freeze'); +const fs = require('fs'); +const log4js = require('../../lib/log4js'); +const configuration = require('../../lib/configuration'); + +const removeFiles = async (filenames) => { + if (!Array.isArray(filenames)) filenames = [filenames]; + const promises = filenames.map((filename) => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; @@ -29,12 +28,12 @@ const testAppender = (label, result) => ({ result.layouts = layouts; result.findAppender = findAppender; return {}; - } + }, }); -test("log4js configuration validation", batch => { - batch.test("should give error if config is just plain silly", t => { - [null, undefined, "", " ", []].forEach(config => { +test('log4js configuration validation', (batch) => { + batch.test('should give error if config is just plain silly', (t) => { + [null, undefined, '', ' ', []].forEach((config) => { const expectedError = new Error( `Problem with log4js configuration: (${util.inspect( config @@ -46,7 +45,7 @@ test("log4js configuration validation", batch => { t.end(); }); - batch.test("should give error if config is an empty object", t => { + batch.test('should give error if config is an empty object', (t) => { t.throws( () => log4js.configure({}), '- must have a property "appenders" of type object.' @@ -54,7 +53,7 @@ test("log4js configuration validation", batch => { t.end(); }); - batch.test("should give error if config has no appenders", t => { + batch.test('should give error if config has no appenders', (t) => { t.throws( () => log4js.configure({ categories: {} }), '- must have a property "appenders" of type object.' @@ -62,15 +61,15 @@ test("log4js configuration validation", batch => { t.end(); }); - batch.test("should give error if config has no categories", t => { + batch.test('should give error if config has no categories', (t) => { t.throws( - () => log4js.configure({ appenders: { out: { type: "stdout" } } }), + () => log4js.configure({ appenders: { out: { type: 'stdout' } } }), '- must have a property "categories" of type object.' ); t.end(); }); - batch.test("should give error if appenders is not an object", t => { + batch.test('should give error if appenders is not an object', (t) => { t.throws( () => log4js.configure({ appenders: [], categories: [] }), '- must have a property "appenders" of type object.' @@ -78,77 +77,77 @@ test("log4js configuration validation", batch => { t.end(); }); - batch.test("should give error if appenders are not all valid", t => { + batch.test('should give error if appenders are not all valid', (t) => { t.throws( () => - log4js.configure({ appenders: { thing: "cheese" }, categories: {} }), + log4js.configure({ appenders: { thing: 'cheese' }, categories: {} }), '- appender "thing" is not valid (must be an object with property "type")' ); t.end(); }); - batch.test("should require at least one appender", t => { + batch.test('should require at least one appender', (t) => { t.throws( () => log4js.configure({ appenders: {}, categories: {} }), - "- must define at least one appender." + '- must define at least one appender.' ); t.end(); }); - batch.test("should give error if categories are not all valid", t => { + batch.test('should give error if categories are not all valid', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { thing: "cheese" } + appenders: { stdout: { type: 'stdout' } }, + categories: { thing: 'cheese' }, }), '- category "thing" is not valid (must be an object with properties "appenders" and "level")' ); t.end(); }); - batch.test("should give error if default category not defined", t => { + batch.test('should give error if default category not defined', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { thing: { appenders: ["stdout"], level: "ERROR" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { thing: { appenders: ['stdout'], level: 'ERROR' } }, }), '- must define a "default" category.' ); t.end(); }); - batch.test("should require at least one category", t => { + batch.test('should require at least one category', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: {} + appenders: { stdout: { type: 'stdout' } }, + categories: {}, }), - "- must define at least one category." + '- must define at least one category.' ); t.end(); }); - batch.test("should give error if category.appenders is not an array", t => { + batch.test('should give error if category.appenders is not an array', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { thing: { appenders: {}, level: "ERROR" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { thing: { appenders: {}, level: 'ERROR' } }, }), '- category "thing" is not valid (appenders must be an array of appender names)' ); t.end(); }); - batch.test("should give error if category.appenders is empty", t => { + batch.test('should give error if category.appenders is empty', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { thing: { appenders: [], level: "ERROR" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { thing: { appenders: [], level: 'ERROR' } }, }), '- category "thing" is not valid (appenders must contain at least one appender name)' ); @@ -156,13 +155,13 @@ test("log4js configuration validation", batch => { }); batch.test( - "should give error if categories do not refer to valid appenders", - t => { + 'should give error if categories do not refer to valid appenders', + (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { thing: { appenders: ["cheese"], level: "ERROR" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { thing: { appenders: ['cheese'], level: 'ERROR' } }, }), '- category "thing" is not valid (appender "cheese" is not defined)' ); @@ -170,12 +169,12 @@ test("log4js configuration validation", batch => { } ); - batch.test("should give error if category level is not valid", t => { + batch.test('should give error if category level is not valid', (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "Biscuits" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'Biscuits' } }, }), '- category "default" is not valid (level "Biscuits" not recognised; valid levels are ALL, TRACE' ); @@ -183,19 +182,19 @@ test("log4js configuration validation", batch => { }); batch.test( - "should give error if category enableCallStack is not valid", - t => { + 'should give error if category enableCallStack is not valid', + (t) => { t.throws( () => log4js.configure({ - appenders: { stdout: { type: "stdout" } }, + appenders: { stdout: { type: 'stdout' } }, categories: { default: { - appenders: ["stdout"], - level: "Debug", - enableCallStack: "123" - } - } + appenders: ['stdout'], + level: 'Debug', + enableCallStack: '123', + }, + }, }), '- category "default" is not valid (enableCallStack must be boolean type)' ); @@ -203,49 +202,49 @@ test("log4js configuration validation", batch => { } ); - batch.test("should give error if appender type cannot be found", t => { + batch.test('should give error if appender type cannot be found', (t) => { t.throws( () => log4js.configure({ - appenders: { thing: { type: "cheese" } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + appenders: { thing: { type: 'cheese' } }, + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }), '- appender "thing" is not valid (type "cheese" could not be found)' ); t.end(); }); - batch.test("should create appender instances", t => { + batch.test('should create appender instances', (t) => { const thing = {}; - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + const sandboxedLog4js = sandbox.require('../../lib/log4js', { requires: { - cheese: testAppender("cheesy", thing) + cheese: testAppender('cheesy', thing), }, - ignoreMissing: true + ignoreMissing: true, }); sandboxedLog4js.configure({ - appenders: { thing: { type: "cheese" } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + appenders: { thing: { type: 'cheese' } }, + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(thing.configureCalled); - t.equal(thing.type, "cheese"); + t.equal(thing.type, 'cheese'); t.end(); }); batch.test( - "should use provided appender instance if instance provided", - t => { + 'should use provided appender instance if instance provided', + (t) => { const thing = {}; - const cheese = testAppender("cheesy", thing); - const sandboxedLog4js = sandbox.require("../../lib/log4js", { - ignoreMissing: true + const cheese = testAppender('cheesy', thing); + const sandboxedLog4js = sandbox.require('../../lib/log4js', { + ignoreMissing: true, }); sandboxedLog4js.configure({ appenders: { thing: { type: cheese } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(thing.configureCalled); @@ -254,8 +253,8 @@ test("log4js configuration validation", batch => { } ); - batch.test("should not throw error if configure object is freezed", t => { - const testFile = "test/tap/freeze-date-file-test"; + batch.test('should not throw error if configure object is freezed', (t) => { + const testFile = 'test/tap/freeze-date-file-test'; t.teardown(async () => { await removeFiles(testFile); }); @@ -264,188 +263,193 @@ test("log4js configuration validation", batch => { deepFreeze({ appenders: { dateFile: { - type: "dateFile", + type: 'dateFile', filename: testFile, - alwaysIncludePattern: false - } + alwaysIncludePattern: false, + }, }, categories: { - default: { appenders: ["dateFile"], level: log4js.levels.ERROR } - } + default: { appenders: ['dateFile'], level: log4js.levels.ERROR }, + }, }) ) ); t.end(); }); - batch.test("should load appenders from core first", t => { + batch.test('should load appenders from core first', (t) => { const result = {}; - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + const sandboxedLog4js = sandbox.require('../../lib/log4js', { requires: { - "./cheese": testAppender("correct", result), - cheese: testAppender("wrong", result) + './cheese': testAppender('correct', result), + cheese: testAppender('wrong', result), }, - ignoreMissing: true + ignoreMissing: true, }); sandboxedLog4js.configure({ - appenders: { thing: { type: "cheese" } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + appenders: { thing: { type: 'cheese' } }, + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(result.configureCalled); - t.equal(result.type, "cheese"); - t.equal(result.label, "correct"); + t.equal(result.type, 'cheese'); + t.equal(result.label, 'correct'); t.end(); }); batch.test( - "should load appenders relative to main file if not in core, or node_modules", - t => { + 'should load appenders relative to main file if not in core, or node_modules', + (t) => { const result = {}; const mainPath = path.dirname(require.main.filename); const sandboxConfig = { ignoreMissing: true, - requires: {} + requires: {}, }; sandboxConfig.requires[`${mainPath}/cheese`] = testAppender( - "correct", + 'correct', result ); // add this one, because when we're running coverage the main path is a bit different sandboxConfig.requires[ - `${path.join(mainPath, "../../node_modules/nyc/bin/cheese")}` - ] = testAppender("correct", result); + `${path.join(mainPath, '../../node_modules/nyc/bin/cheese')}` + ] = testAppender('correct', result); // in tap v15, the main path is at root of log4js (run `DEBUG=log4js:appenders npm test > /dev/null` to check) - sandboxConfig.requires[ - `${path.join(mainPath, "../../cheese")}` - ] = testAppender("correct", result); + sandboxConfig.requires[`${path.join(mainPath, '../../cheese')}`] = + testAppender('correct', result); // in node v6, there's an extra layer of node modules for some reason, so add this one to work around it sandboxConfig.requires[ `${path.join( mainPath, - "../../node_modules/tap/node_modules/nyc/bin/cheese" + '../../node_modules/tap/node_modules/nyc/bin/cheese' )}` - ] = testAppender("correct", result); + ] = testAppender('correct', result); const sandboxedLog4js = sandbox.require( - "../../lib/log4js", + '../../lib/log4js', sandboxConfig ); sandboxedLog4js.configure({ - appenders: { thing: { type: "cheese" } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + appenders: { thing: { type: 'cheese' } }, + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(result.configureCalled); - t.equal(result.type, "cheese"); - t.equal(result.label, "correct"); + t.equal(result.type, 'cheese'); + t.equal(result.label, 'correct'); t.end(); } ); batch.test( - "should load appenders relative to process.cwd if not found in core, node_modules", - t => { + 'should load appenders relative to process.cwd if not found in core, node_modules', + (t) => { const result = {}; const fakeProcess = new Proxy(process, { get(target, key) { - if (key === "cwd") { - return () => "/var/lib/cheese"; + if (key === 'cwd') { + return () => '/var/lib/cheese'; } return target[key]; - } + }, }); // windows file paths are different to unix, so let's make this work for both. const requires = {}; - requires[path.join("/var", "lib", "cheese", "cheese")] = testAppender("correct", result); + requires[path.join('/var', 'lib', 'cheese', 'cheese')] = testAppender( + 'correct', + result + ); - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + const sandboxedLog4js = sandbox.require('../../lib/log4js', { ignoreMissing: true, requires, globals: { - process: fakeProcess - } + process: fakeProcess, + }, }); sandboxedLog4js.configure({ - appenders: { thing: { type: "cheese" } }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + appenders: { thing: { type: 'cheese' } }, + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(result.configureCalled); - t.equal(result.type, "cheese"); - t.equal(result.label, "correct"); + t.equal(result.type, 'cheese'); + t.equal(result.label, 'correct'); t.end(); } ); - batch.test("should pass config, layout, findAppender to appenders", t => { + batch.test('should pass config, layout, findAppender to appenders', (t) => { const result = {}; - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + const sandboxedLog4js = sandbox.require('../../lib/log4js', { ignoreMissing: true, requires: { - cheese: testAppender("cheesy", result), - notCheese: testAppender("notCheesy", {}) - } + cheese: testAppender('cheesy', result), + notCheese: testAppender('notCheesy', {}), + }, }); sandboxedLog4js.configure({ appenders: { - thing: { type: "cheese", foo: "bar" }, - thing2: { type: "notCheese" } + thing: { type: 'cheese', foo: 'bar' }, + thing2: { type: 'notCheese' }, }, - categories: { default: { appenders: ["thing"], level: "ERROR" } } + categories: { default: { appenders: ['thing'], level: 'ERROR' } }, }); t.ok(result.configureCalled); - t.equal(result.type, "cheese"); - t.equal(result.config.foo, "bar"); - t.type(result.layouts, "object"); - t.type(result.layouts.basicLayout, "function"); - t.type(result.findAppender, "function"); - t.type(result.findAppender("thing2"), "object"); + t.equal(result.type, 'cheese'); + t.equal(result.config.foo, 'bar'); + t.type(result.layouts, 'object'); + t.type(result.layouts.basicLayout, 'function'); + t.type(result.findAppender, 'function'); + t.type(result.findAppender('thing2'), 'object'); t.end(); }); batch.test( - "should not give error if level object is used instead of string", - t => { + 'should not give error if level object is used instead of string', + (t) => { t.doesNotThrow(() => log4js.configure({ - appenders: { thing: { type: "stdout" } }, + appenders: { thing: { type: 'stdout' } }, categories: { - default: { appenders: ["thing"], level: log4js.levels.ERROR } - } + default: { appenders: ['thing'], level: log4js.levels.ERROR }, + }, }) ); t.end(); } ); - batch.test("should not create appender instance if not used in categories", t => { - const used = {}; - const notUsed = {}; - const sandboxedLog4js = sandbox.require("../../lib/log4js", { - requires: { - cat: testAppender("meow", used), - dog: testAppender("woof", notUsed) - }, - ignoreMissing: true - }); + batch.test( + 'should not create appender instance if not used in categories', + (t) => { + const used = {}; + const notUsed = {}; + const sandboxedLog4js = sandbox.require('../../lib/log4js', { + requires: { + cat: testAppender('meow', used), + dog: testAppender('woof', notUsed), + }, + ignoreMissing: true, + }); - sandboxedLog4js.configure({ - appenders: { used: { type: "cat" }, notUsed: { type: "dog" } }, - categories: { default: { appenders: ["used"], level: "ERROR" } } - }); + sandboxedLog4js.configure({ + appenders: { used: { type: 'cat' }, notUsed: { type: 'dog' } }, + categories: { default: { appenders: ['used'], level: 'ERROR' } }, + }); - t.ok(used.configureCalled); - t.notOk(notUsed.configureCalled); - t.end(); - }); + t.ok(used.configureCalled); + t.notOk(notUsed.configureCalled); + t.end(); + } + ); batch.end(); }); diff --git a/test/tap/connect-context-test.js b/test/tap/connect-context-test.js index ea8dfd8b..f8432229 100644 --- a/test/tap/connect-context-test.js +++ b/test/tap/connect-context-test.js @@ -1,8 +1,8 @@ /* eslint max-classes-per-file: ["error", 2] */ -const { test } = require("tap"); -const EE = require("events").EventEmitter; -const levels = require("../../lib/levels"); +const { test } = require('tap'); +const EE = require('events').EventEmitter; +const levels = require('../../lib/levels'); class MockLogger { constructor() { @@ -32,8 +32,8 @@ function MockRequest(remoteAddr, method, originalUrl) { this.socket = { remoteAddress: remoteAddr }; this.originalUrl = originalUrl; this.method = method; - this.httpVersionMajor = "5"; - this.httpVersionMinor = "0"; + this.httpVersionMajor = '5'; + this.httpVersionMinor = '0'; this.headers = {}; } @@ -45,7 +45,7 @@ class MockResponse extends EE { } end() { - this.emit("finish"); + this.emit('finish'); } setHeader(key, value) { @@ -61,10 +61,10 @@ class MockResponse extends EE { } } -test("log4js connect logger", batch => { - const clm = require("../../lib/connect-logger"); +test('log4js connect logger', (batch) => { + const clm = require('../../lib/connect-logger'); - batch.test("with context config", t => { + batch.test('with context config', (t) => { const ml = new MockLogger(); const cl = clm(ml, { context: true }); @@ -72,18 +72,18 @@ test("log4js connect logger", batch => { ml.contexts = []; }); - t.test("response should be included in context", assert => { + t.test('response should be included in context', (assert) => { const { contexts } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); - assert.type(contexts, "Array"); + assert.type(contexts, 'Array'); assert.equal(contexts.length, 1); assert.type(contexts[0].res, MockResponse); assert.end(); @@ -92,7 +92,7 @@ test("log4js connect logger", batch => { t.end(); }); - batch.test("without context config", t => { + batch.test('without context config', (t) => { const ml = new MockLogger(); const cl = clm(ml, {}); @@ -100,18 +100,18 @@ test("log4js connect logger", batch => { ml.contexts = []; }); - t.test("response should not be included in context", assert => { + t.test('response should not be included in context', (assert) => { const { contexts } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); - assert.type(contexts, "Array"); + assert.type(contexts, 'Array'); assert.equal(contexts.length, 1); assert.type(contexts[0].res, undefined); assert.end(); diff --git a/test/tap/connect-logger-test.js b/test/tap/connect-logger-test.js index 7bc747e3..4119f319 100644 --- a/test/tap/connect-logger-test.js +++ b/test/tap/connect-logger-test.js @@ -1,17 +1,17 @@ /* eslint max-classes-per-file: ["error", 2] */ -const { test } = require("tap"); -const EE = require("events").EventEmitter; -const levels = require("../../lib/levels"); +const { test } = require('tap'); +const EE = require('events').EventEmitter; +const levels = require('../../lib/levels'); class MockLogger { constructor() { this.level = levels.TRACE; this.messages = []; - this.log = function(level, message) { + this.log = function (level, message) { this.messages.push({ level, message }); }; - this.isLevelEnabled = function(level) { + this.isLevelEnabled = function (level) { return level.isGreaterThanOrEqualTo(this.level); }; } @@ -22,8 +22,8 @@ function MockRequest(remoteAddr, method, originalUrl, headers, url, custom) { this.originalUrl = originalUrl; this.url = url; this.method = method; - this.httpVersionMajor = "5"; - this.httpVersionMinor = "0"; + this.httpVersionMajor = '5'; + this.httpVersionMinor = '0'; this.headers = headers || {}; if (custom) { @@ -33,7 +33,7 @@ function MockRequest(remoteAddr, method, originalUrl, headers, url, custom) { } const self = this; - Object.keys(this.headers).forEach(key => { + Object.keys(this.headers).forEach((key) => { self.headers[key.toLowerCase()] = self.headers[key]; }); } @@ -45,7 +45,7 @@ class MockResponse extends EE { } end() { - this.emit("finish"); + this.emit('finish'); } setHeader(key, value) { @@ -73,7 +73,7 @@ function request( custom = undefined ) { const req = new MockRequest( - "my.remote.addr", + 'my.remote.addr', method, originalUrl, reqHeaders, @@ -88,302 +88,302 @@ function request( } cl(req, res, next); res.writeHead(code, resHeaders); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); } -test("log4js connect logger", batch => { - const clm = require("../../lib/connect-logger"); - batch.test("getConnectLoggerModule", t => { - t.type(clm, "function", "should return a connect logger factory"); +test('log4js connect logger', (batch) => { + const clm = require('../../lib/connect-logger'); + batch.test('getConnectLoggerModule', (t) => { + t.type(clm, 'function', 'should return a connect logger factory'); t.test( 'should take a log4js logger and return a "connect logger"', - assert => { + (assert) => { const ml = new MockLogger(); const cl = clm(ml); - assert.type(cl, "function"); + assert.type(cl, 'function'); assert.end(); } ); - t.test("log events", assert => { + t.test('log events', (assert) => { const ml = new MockLogger(); const cl = clm(ml); - request(cl, "GET", "http://url", 200); + request(cl, 'GET', 'http://url', 200); const { messages } = ml; - assert.type(messages, "Array"); + assert.type(messages, 'Array'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("log events with level below logging level", assert => { + t.test('log events with level below logging level', (assert) => { const ml = new MockLogger(); ml.level = levels.FATAL; const cl = clm(ml); - request(cl, "GET", "http://url", 200); + request(cl, 'GET', 'http://url', 200); - assert.type(ml.messages, "Array"); + assert.type(ml.messages, 'Array'); assert.equal(ml.messages.length, 0); assert.end(); }); - t.test("log events with non-default level and custom format", assert => { + t.test('log events with non-default level and custom format', (assert) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, { level: levels.WARN, format: ":method :url" }); - request(cl, "GET", "http://url", 200); + const cl = clm(ml, { level: levels.WARN, format: ':method :url' }); + request(cl, 'GET', 'http://url', 200); const { messages } = ml; assert.type(messages, Array); assert.equal(messages.length, 1); assert.ok(levels.WARN.isEqualTo(messages[0].level)); - assert.equal(messages[0].message, "GET http://url"); + assert.equal(messages[0].message, 'GET http://url'); assert.end(); }); - t.test("adding multiple loggers should only log once", assert => { + t.test('adding multiple loggers should only log once', (assert) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, { level: levels.WARN, format: ":method :url" }); - const nextLogger = clm(ml, { level: levels.INFO, format: ":method" }); - request(cl, "GET", "http://url", 200, null, null, nextLogger); + const cl = clm(ml, { level: levels.WARN, format: ':method :url' }); + const nextLogger = clm(ml, { level: levels.INFO, format: ':method' }); + request(cl, 'GET', 'http://url', 200, null, null, nextLogger); const { messages } = ml; assert.type(messages, Array); assert.equal(messages.length, 1); assert.ok(levels.WARN.isEqualTo(messages[0].level)); - assert.equal(messages[0].message, "GET http://url"); + assert.equal(messages[0].message, 'GET http://url'); assert.end(); }); t.end(); }); - batch.test("logger with options as string", t => { + batch.test('logger with options as string', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, ":method :url"); - request(cl, "POST", "http://meh", 200); + const cl = clm(ml, ':method :url'); + request(cl, 'POST', 'http://meh', 200); const { messages } = ml; - t.equal(messages[0].message, "POST http://meh"); + t.equal(messages[0].message, 'POST http://meh'); t.end(); }); - batch.test("auto log levels", t => { + batch.test('auto log levels', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, { level: "auto", format: ":method :url" }); - request(cl, "GET", "http://meh", 200); - request(cl, "GET", "http://meh", 201); - request(cl, "GET", "http://meh", 302); - request(cl, "GET", "http://meh", 404); - request(cl, "GET", "http://meh", 500); + const cl = clm(ml, { level: 'auto', format: ':method :url' }); + request(cl, 'GET', 'http://meh', 200); + request(cl, 'GET', 'http://meh', 201); + request(cl, 'GET', 'http://meh', 302); + request(cl, 'GET', 'http://meh', 404); + request(cl, 'GET', 'http://meh', 500); const { messages } = ml; - t.test("should use INFO for 2xx", assert => { + t.test('should use INFO for 2xx', (assert) => { assert.ok(levels.INFO.isEqualTo(messages[0].level)); assert.ok(levels.INFO.isEqualTo(messages[1].level)); assert.end(); }); - t.test("should use WARN for 3xx", assert => { + t.test('should use WARN for 3xx', (assert) => { assert.ok(levels.WARN.isEqualTo(messages[2].level)); assert.end(); }); - t.test("should use ERROR for 4xx", assert => { + t.test('should use ERROR for 4xx', (assert) => { assert.ok(levels.ERROR.isEqualTo(messages[3].level)); assert.end(); }); - t.test("should use ERROR for 5xx", assert => { + t.test('should use ERROR for 5xx', (assert) => { assert.ok(levels.ERROR.isEqualTo(messages[4].level)); assert.end(); }); t.end(); }); - batch.test("logger with status code rules applied", t => { + batch.test('logger with status code rules applied', (t) => { const ml = new MockLogger(); ml.level = levels.DEBUG; const clr = [ { codes: [201, 304], level: levels.DEBUG.toString() }, { from: 200, to: 299, level: levels.DEBUG.toString() }, - { from: 300, to: 399, level: levels.INFO.toString() } + { from: 300, to: 399, level: levels.INFO.toString() }, ]; const cl = clm(ml, { - level: "auto", - format: ":method :url", - statusRules: clr + level: 'auto', + format: ':method :url', + statusRules: clr, }); - request(cl, "GET", "http://meh", 200); - request(cl, "GET", "http://meh", 201); - request(cl, "GET", "http://meh", 302); - request(cl, "GET", "http://meh", 304); - request(cl, "GET", "http://meh", 404); - request(cl, "GET", "http://meh", 500); + request(cl, 'GET', 'http://meh', 200); + request(cl, 'GET', 'http://meh', 201); + request(cl, 'GET', 'http://meh', 302); + request(cl, 'GET', 'http://meh', 304); + request(cl, 'GET', 'http://meh', 404); + request(cl, 'GET', 'http://meh', 500); const { messages } = ml; - t.test("should use DEBUG for 2xx", assert => { + t.test('should use DEBUG for 2xx', (assert) => { assert.ok(levels.DEBUG.isEqualTo(messages[0].level)); assert.ok(levels.DEBUG.isEqualTo(messages[1].level)); assert.end(); }); - t.test("should use WARN for 3xx, DEBUG for 304", assert => { + t.test('should use WARN for 3xx, DEBUG for 304', (assert) => { assert.ok(levels.INFO.isEqualTo(messages[2].level)); assert.ok(levels.DEBUG.isEqualTo(messages[3].level)); assert.end(); }); - t.test("should use ERROR for 4xx", assert => { + t.test('should use ERROR for 4xx', (assert) => { assert.ok(levels.ERROR.isEqualTo(messages[4].level)); assert.end(); }); - t.test("should use ERROR for 5xx", assert => { + t.test('should use ERROR for 5xx', (assert) => { assert.ok(levels.ERROR.isEqualTo(messages[5].level)); assert.end(); }); t.end(); }); - batch.test("format using a function", t => { + batch.test('format using a function', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, () => "I was called"); - request(cl, "GET", "http://blah", 200); + const cl = clm(ml, () => 'I was called'); + request(cl, 'GET', 'http://blah', 200); - t.equal(ml.messages[0].message, "I was called"); + t.equal(ml.messages[0].message, 'I was called'); t.end(); }); - batch.test("format using a function that also uses tokens", t => { + batch.test('format using a function that also uses tokens', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; const cl = clm( ml, - (req, res, tokenReplacer) => `${req.method} ${tokenReplacer(":status")}` + (req, res, tokenReplacer) => `${req.method} ${tokenReplacer(':status')}` ); - request(cl, "GET", "http://blah", 200); + request(cl, 'GET', 'http://blah', 200); - t.equal(ml.messages[0].message, "GET 200"); + t.equal(ml.messages[0].message, 'GET 200'); t.end(); }); batch.test( - "format using a function, but do not log anything if the function returns nothing", - t => { + 'format using a function, but do not log anything if the function returns nothing', + (t) => { const ml = new MockLogger(); ml.level = levels.INFO; const cl = clm(ml, () => null); - request(cl, "GET", "http://blah", 200); + request(cl, 'GET', 'http://blah', 200); t.equal(ml.messages.length, 0); t.end(); } ); - batch.test("format that includes request headers", t => { + batch.test('format that includes request headers', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, ":req[Content-Type]"); - request(cl, "GET", "http://blah", 200, { - "Content-Type": "application/json" + const cl = clm(ml, ':req[Content-Type]'); + request(cl, 'GET', 'http://blah', 200, { + 'Content-Type': 'application/json', }); - t.equal(ml.messages[0].message, "application/json"); + t.equal(ml.messages[0].message, 'application/json'); t.end(); }); - batch.test("format that includes response headers", t => { + batch.test('format that includes response headers', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; - const cl = clm(ml, ":res[Content-Type]"); - request(cl, "GET", "http://blah", 200, null, { - "Content-Type": "application/cheese" + const cl = clm(ml, ':res[Content-Type]'); + request(cl, 'GET', 'http://blah', 200, null, { + 'Content-Type': 'application/cheese', }); - t.equal(ml.messages[0].message, "application/cheese"); + t.equal(ml.messages[0].message, 'application/cheese'); t.end(); }); - batch.test("url token should check originalUrl and url", t => { + batch.test('url token should check originalUrl and url', (t) => { const ml = new MockLogger(); - const cl = clm(ml, ":url"); - request(cl, "GET", null, 200, null, null, null, "http://cheese"); + const cl = clm(ml, ':url'); + request(cl, 'GET', null, 200, null, null, null, 'http://cheese'); - t.equal(ml.messages[0].message, "http://cheese"); + t.equal(ml.messages[0].message, 'http://cheese'); t.end(); }); - batch.test("log events with custom token", t => { + batch.test('log events with custom token', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; const cl = clm(ml, { level: levels.INFO, - format: ":method :url :custom_string", + format: ':method :url :custom_string', tokens: [ { - token: ":custom_string", - replacement: "fooBAR" - } - ] + token: ':custom_string', + replacement: 'fooBAR', + }, + ], }); - request(cl, "GET", "http://url", 200); + request(cl, 'GET', 'http://url', 200); - t.type(ml.messages, "Array"); + t.type(ml.messages, 'Array'); t.equal(ml.messages.length, 1); t.ok(levels.INFO.isEqualTo(ml.messages[0].level)); - t.equal(ml.messages[0].message, "GET http://url fooBAR"); + t.equal(ml.messages[0].message, 'GET http://url fooBAR'); t.end(); }); - batch.test("log events with custom override token", t => { + batch.test('log events with custom override token', (t) => { const ml = new MockLogger(); ml.level = levels.INFO; const cl = clm(ml, { level: levels.INFO, - format: ":method :url :date", + format: ':method :url :date', tokens: [ { - token: ":date", - replacement: "20150310" - } - ] + token: ':date', + replacement: '20150310', + }, + ], }); - request(cl, "GET", "http://url", 200); + request(cl, 'GET', 'http://url', 200); - t.type(ml.messages, "Array"); + t.type(ml.messages, 'Array'); t.equal(ml.messages.length, 1); t.ok(levels.INFO.isEqualTo(ml.messages[0].level)); - t.equal(ml.messages[0].message, "GET http://url 20150310"); + t.equal(ml.messages[0].message, 'GET http://url 20150310'); t.end(); }); - batch.test("log events with custom format", t => { + batch.test('log events with custom format', (t) => { const ml = new MockLogger(); - const body = { say: "hi!" }; + const body = { say: 'hi!' }; ml.level = levels.INFO; const cl = clm(ml, { level: levels.INFO, format: (req, res, format) => - format(`:method :url ${JSON.stringify(req.body)}`) + format(`:method :url ${JSON.stringify(req.body)}`), }); request( cl, - "POST", - "http://url", + 'POST', + 'http://url', 200, - { "Content-Type": "application/json" }, + { 'Content-Type': 'application/json' }, null, null, null, @@ -396,43 +396,43 @@ test("log4js connect logger", batch => { }); batch.test( - "handle weird old node versions where socket contains socket", - t => { + 'handle weird old node versions where socket contains socket', + (t) => { const ml = new MockLogger(); - const cl = clm(ml, ":remote-addr"); - const req = new MockRequest(null, "GET", "http://blah"); - req.socket = { socket: { remoteAddress: "this is weird" } }; + const cl = clm(ml, ':remote-addr'); + const req = new MockRequest(null, 'GET', 'http://blah'); + req.socket = { socket: { remoteAddress: 'this is weird' } }; const res = new MockResponse(); cl(req, res, () => {}); res.writeHead(200, {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); - t.equal(ml.messages[0].message, "this is weird"); + t.equal(ml.messages[0].message, 'this is weird'); t.end(); } ); batch.test( - "handles as soon as any of the events end/finish/error/close triggers (only once)", - t => { + 'handles as soon as any of the events end/finish/error/close triggers (only once)', + (t) => { const ml = new MockLogger(); - const cl = clm(ml, ":remote-addr"); - const req = new MockRequest(null, "GET", "http://blah"); - req.socket = { socket: { remoteAddress: "this is weird" } }; + const cl = clm(ml, ':remote-addr'); + const req = new MockRequest(null, 'GET', 'http://blah'); + req.socket = { socket: { remoteAddress: 'this is weird' } }; const res = new MockResponse(); cl(req, res, () => {}); res.writeHead(200, {}); t.equal(ml.messages.length, 0); - res.emit("end"); - res.emit("finish"); - res.emit("error"); - res.emit("close"); + res.emit('end'); + res.emit('finish'); + res.emit('error'); + res.emit('close'); t.equal(ml.messages.length, 1); - t.equal(ml.messages[0].message, "this is weird"); + t.equal(ml.messages[0].message, 'this is weird'); t.end(); } ); diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index b53228ec..0f49d606 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -1,19 +1,19 @@ /* eslint max-classes-per-file: ["error", 2] */ -const { test } = require("tap"); -const EE = require("events").EventEmitter; -const levels = require("../../lib/levels"); +const { test } = require('tap'); +const EE = require('events').EventEmitter; +const levels = require('../../lib/levels'); class MockLogger { constructor() { this.messages = []; this.level = levels.TRACE; - this.log = function(level, message) { + this.log = function (level, message) { this.messages.push({ level, message }); }; - this.isLevelEnabled = function(level) { + this.isLevelEnabled = function (level) { return level.isGreaterThanOrEqualTo(this.level); }; } @@ -23,8 +23,8 @@ function MockRequest(remoteAddr, method, originalUrl) { this.socket = { remoteAddress: remoteAddr }; this.originalUrl = originalUrl; this.method = method; - this.httpVersionMajor = "5"; - this.httpVersionMinor = "0"; + this.httpVersionMajor = '5'; + this.httpVersionMinor = '0'; this.headers = {}; } @@ -36,7 +36,7 @@ class MockResponse extends EE { } end() { - this.emit("finish"); + this.emit('finish'); } setHeader(key, value) { @@ -52,109 +52,109 @@ class MockResponse extends EE { } } -test("log4js connect logger", batch => { - const clm = require("../../lib/connect-logger"); +test('log4js connect logger', (batch) => { + const clm = require('../../lib/connect-logger'); - batch.test("with nolog config", t => { + batch.test('with nolog config', (t) => { const ml = new MockLogger(); - const cl = clm(ml, { nolog: "\\.gif" }); + const cl = clm(ml, { nolog: '\\.gif' }); t.beforeEach(() => { ml.messages = []; }); - t.test("check unmatch url request", assert => { - const {messages} = ml; + t.test('check unmatch url request', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); - assert.type(messages, "Array"); + assert.type(messages, 'Array'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("check match url request", assert => { - const {messages} = ml; + t.test('check match url request', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.gif" + 'my.remote.addr', + 'GET', + 'http://url/hoge.gif' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); - assert.type(messages, "Array"); + assert.type(messages, 'Array'); assert.equal(messages.length, 0); assert.end(); }); t.end(); }); - batch.test("nolog Strings", t => { + batch.test('nolog Strings', (t) => { const ml = new MockLogger(); - const cl = clm(ml, { nolog: "\\.gif|\\.jpe?g" }); + const cl = clm(ml, { nolog: '\\.gif|\\.jpe?g' }); t.beforeEach(() => { ml.messages = []; }); - t.test("check unmatch url request (png)", assert => { - const {messages} = ml; + t.test('check unmatch url request (png)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("check match url request (gif)", assert => { - const {messages} = ml; + t.test('check match url request (gif)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.gif" + 'my.remote.addr', + 'GET', + 'http://url/hoge.gif' ); const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); }); - t.test("check match url request (jpeg)", assert => { - const {messages} = ml; + t.test('check match url request (jpeg)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.jpeg" + 'my.remote.addr', + 'GET', + 'http://url/hoge.jpeg' ); const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); @@ -163,59 +163,59 @@ test("log4js connect logger", batch => { t.end(); }); - batch.test("nolog Array", t => { + batch.test('nolog Array', (t) => { const ml = new MockLogger(); - const cl = clm(ml, { nolog: ["\\.gif", "\\.jpe?g"] }); + const cl = clm(ml, { nolog: ['\\.gif', '\\.jpe?g'] }); t.beforeEach(() => { ml.messages = []; }); - t.test("check unmatch url request (png)", assert => { - const {messages} = ml; + t.test('check unmatch url request (png)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("check match url request (gif)", assert => { - const {messages} = ml; + t.test('check match url request (gif)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.gif" + 'my.remote.addr', + 'GET', + 'http://url/hoge.gif' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); }); - t.test("check match url request (jpeg)", assert => { - const {messages} = ml; + t.test('check match url request (jpeg)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.jpeg" + 'my.remote.addr', + 'GET', + 'http://url/hoge.jpeg' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); @@ -224,7 +224,7 @@ test("log4js connect logger", batch => { t.end(); }); - batch.test("nolog RegExp", t => { + batch.test('nolog RegExp', (t) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: /\.gif|\.jpe?g/ }); @@ -232,51 +232,51 @@ test("log4js connect logger", batch => { ml.messages = []; }); - t.test("check unmatch url request (png)", assert => { - const {messages} = ml; + t.test('check unmatch url request (png)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("check match url request (gif)", assert => { - const {messages} = ml; + t.test('check match url request (gif)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.gif" + 'my.remote.addr', + 'GET', + 'http://url/hoge.gif' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); }); - t.test("check match url request (jpeg)", assert => { - const {messages} = ml; + t.test('check match url request (jpeg)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.jpeg" + 'my.remote.addr', + 'GET', + 'http://url/hoge.jpeg' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); @@ -285,7 +285,7 @@ test("log4js connect logger", batch => { t.end(); }); - batch.test("nolog Array", t => { + batch.test('nolog Array', (t) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: [/\.gif/, /\.jpe?g/] }); @@ -293,51 +293,51 @@ test("log4js connect logger", batch => { ml.messages = []; }); - t.test("check unmatch url request (png)", assert => { - const {messages} = ml; + t.test('check unmatch url request (png)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.png" + 'my.remote.addr', + 'GET', + 'http://url/hoge.png' ); // not gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 1); assert.ok(levels.INFO.isEqualTo(messages[0].level)); - assert.match(messages[0].message, "GET"); - assert.match(messages[0].message, "http://url"); - assert.match(messages[0].message, "my.remote.addr"); - assert.match(messages[0].message, "200"); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '200'); assert.end(); }); - t.test("check match url request (gif)", assert => { - const {messages} = ml; + t.test('check match url request (gif)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.gif" + 'my.remote.addr', + 'GET', + 'http://url/hoge.gif' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); }); - t.test("check match url request (jpeg)", assert => { - const {messages} = ml; + t.test('check match url request (jpeg)', (assert) => { + const { messages } = ml; const req = new MockRequest( - "my.remote.addr", - "GET", - "http://url/hoge.jpeg" + 'my.remote.addr', + 'GET', + 'http://url/hoge.jpeg' ); // gif const res = new MockResponse(200); cl(req, res, () => {}); - res.end("chunk", "encoding"); + res.end('chunk', 'encoding'); assert.equal(messages.length, 0); assert.end(); diff --git a/test/tap/consoleAppender-test.js b/test/tap/consoleAppender-test.js index dfd7fe15..6853add9 100644 --- a/test/tap/consoleAppender-test.js +++ b/test/tap/consoleAppender-test.js @@ -1,58 +1,58 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); -const consoleAppender = require("../../lib/appenders/console"); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); +const consoleAppender = require('../../lib/appenders/console'); -test("log4js console appender", batch => { - batch.test("should export a configure function", t => { - t.type(consoleAppender.configure, "function"); +test('log4js console appender', (batch) => { + batch.test('should export a configure function', (t) => { + t.type(consoleAppender.configure, 'function'); t.end(); }); - batch.test("should use default layout if none specified", t => { + batch.test('should use default layout if none specified', (t) => { const messages = []; const fakeConsole = { log(msg) { messages.push(msg); - } + }, }; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { globals: { - console: fakeConsole - } + console: fakeConsole, + }, }); log4js.configure({ - appenders: { console: { type: "console" } }, - categories: { default: { appenders: ["console"], level: "DEBUG" } } + appenders: { console: { type: 'console' } }, + categories: { default: { appenders: ['console'], level: 'DEBUG' } }, }); - log4js.getLogger().info("blah"); + log4js.getLogger().info('blah'); t.match(messages[0], /.*default.*blah/); t.end(); }); - batch.test("should output to console", t => { + batch.test('should output to console', (t) => { const messages = []; const fakeConsole = { log(msg) { messages.push(msg); - } + }, }; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { globals: { - console: fakeConsole - } + console: fakeConsole, + }, }); log4js.configure({ appenders: { - console: { type: "console", layout: { type: "messagePassThrough" } } + console: { type: 'console', layout: { type: 'messagePassThrough' } }, }, - categories: { default: { appenders: ["console"], level: "DEBUG" } } + categories: { default: { appenders: ['console'], level: 'DEBUG' } }, }); - log4js.getLogger().info("blah"); + log4js.getLogger().info('blah'); - t.equal(messages[0], "blah"); + t.equal(messages[0], 'blah'); t.end(); }); diff --git a/test/tap/dateFileAppender-test.js b/test/tap/dateFileAppender-test.js index e1b0a120..3f6ca213 100644 --- a/test/tap/dateFileAppender-test.js +++ b/test/tap/dateFileAppender-test.js @@ -1,12 +1,12 @@ /* eslint max-classes-per-file: ["error", 3] */ -const { test } = require("tap"); -const path = require("path"); -const fs = require("fs"); -const EOL = require("os").EOL || "\n"; -const format = require("date-format"); -const sandbox = require("@log4js-node/sandboxed-module"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const path = require('path'); +const fs = require('fs'); +const EOL = require('os').EOL || '\n'; +const format = require('date-format'); +const sandbox = require('@log4js-node/sandboxed-module'); +const log4js = require('../../lib/log4js'); function removeFile(filename) { try { @@ -16,24 +16,24 @@ function removeFile(filename) { } } -test("../../lib/appenders/dateFile", batch => { - batch.test("with default settings", t => { - const testFile = path.join(__dirname, "date-appender-default.log"); +test('../../lib/appenders/dateFile', (batch) => { + batch.test('with default settings', (t) => { + const testFile = path.join(__dirname, 'date-appender-default.log'); log4js.configure({ - appenders: { date: { type: "dateFile", filename: testFile } }, - categories: { default: { appenders: ["date"], level: "DEBUG" } } + appenders: { date: { type: 'dateFile', filename: testFile } }, + categories: { default: { appenders: ['date'], level: 'DEBUG' } }, }); - const logger = log4js.getLogger("default-settings"); + const logger = log4js.getLogger('default-settings'); - logger.info("This should be in the file."); + logger.info('This should be in the file.'); t.teardown(() => { - removeFile("date-appender-default.log"); + removeFile('date-appender-default.log'); }); setTimeout(() => { - fs.readFile(testFile, "utf8", (err, contents) => { - t.match(contents, "This should be in the file"); + fs.readFile(testFile, 'utf8', (err, contents) => { + t.match(contents, 'This should be in the file'); t.match( contents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / @@ -43,30 +43,30 @@ test("../../lib/appenders/dateFile", batch => { }, 100); }); - batch.test("configure with dateFileAppender", t => { + batch.test('configure with dateFileAppender', (t) => { log4js.configure({ appenders: { date: { - type: "dateFile", - filename: "test/tap/date-file-test.log", - pattern: "-yyyy-MM-dd", - layout: { type: "messagePassThrough" } - } + type: 'dateFile', + filename: 'test/tap/date-file-test.log', + pattern: '-yyyy-MM-dd', + layout: { type: 'messagePassThrough' }, + }, }, - categories: { default: { appenders: ["date"], level: "WARN" } } + categories: { default: { appenders: ['date'], level: 'WARN' } }, }); - const logger = log4js.getLogger("tests"); - logger.info("this should not be written to the file"); - logger.warn("this should be written to the file"); + const logger = log4js.getLogger('tests'); + logger.info('this should not be written to the file'); + logger.warn('this should be written to the file'); log4js.shutdown(() => { fs.readFile( - path.join(__dirname, "date-file-test.log"), - "utf8", + path.join(__dirname, 'date-file-test.log'), + 'utf8', (err, contents) => { t.match(contents, `this should be written to the file${EOL}`); t.equal( - contents.indexOf("this should not be written to the file"), + contents.indexOf('this should not be written to the file'), -1 ); t.end(); @@ -75,25 +75,25 @@ test("../../lib/appenders/dateFile", batch => { }); t.teardown(() => { - removeFile("date-file-test.log"); + removeFile('date-file-test.log'); }); }); - batch.test("configure with options.alwaysIncludePattern", t => { + batch.test('configure with options.alwaysIncludePattern', (t) => { const options = { appenders: { date: { - category: "tests", - type: "dateFile", - filename: "test/tap/date-file-test", - pattern: "yyyy-MM-dd.log", + category: 'tests', + type: 'dateFile', + filename: 'test/tap/date-file-test', + pattern: 'yyyy-MM-dd.log', alwaysIncludePattern: true, layout: { - type: "messagePassThrough" - } - } + type: 'messagePassThrough', + }, + }, }, - categories: { default: { appenders: ["date"], level: "debug" } } + categories: { default: { appenders: ['date'], level: 'debug' } }, }; const thisTime = format.asString( @@ -101,14 +101,11 @@ test("../../lib/appenders/dateFile", batch => { new Date() ); const testFile = `date-file-test.${thisTime}`; - const existingFile = path.join( - __dirname, - testFile - ); - fs.writeFileSync(existingFile, `this is existing data${EOL}`, "utf8"); + const existingFile = path.join(__dirname, testFile); + fs.writeFileSync(existingFile, `this is existing data${EOL}`, 'utf8'); log4js.configure(options); - const logger = log4js.getLogger("tests"); - logger.warn("this should be written to the file with the appended date"); + const logger = log4js.getLogger('tests'); + logger.warn('this should be written to the file with the appended date'); t.teardown(() => { removeFile(testFile); @@ -116,38 +113,38 @@ test("../../lib/appenders/dateFile", batch => { // wait for filesystem to catch up log4js.shutdown(() => { - fs.readFile(existingFile, "utf8", (err, contents) => { + fs.readFile(existingFile, 'utf8', (err, contents) => { t.match( contents, - "this is existing data", - "should not overwrite the file on open (issue #132)" + 'this is existing data', + 'should not overwrite the file on open (issue #132)' ); t.match( contents, - "this should be written to the file with the appended date" + 'this should be written to the file with the appended date' ); t.end(); }); }); }); - batch.test("should flush logs on shutdown", t => { - const testFile = path.join(__dirname, "date-appender-flush.log"); + batch.test('should flush logs on shutdown', (t) => { + const testFile = path.join(__dirname, 'date-appender-flush.log'); log4js.configure({ - appenders: { test: { type: "dateFile", filename: testFile } }, - categories: { default: { appenders: ["test"], level: "trace" } } + appenders: { test: { type: 'dateFile', filename: testFile } }, + categories: { default: { appenders: ['test'], level: 'trace' } }, }); - const logger = log4js.getLogger("default-settings"); + const logger = log4js.getLogger('default-settings'); - logger.info("1"); - logger.info("2"); - logger.info("3"); + logger.info('1'); + logger.info('2'); + logger.info('3'); t.teardown(() => { - removeFile("date-appender-flush.log"); + removeFile('date-appender-flush.log'); }); log4js.shutdown(() => { - fs.readFile(testFile, "utf8", (err, fileContents) => { + fs.readFile(testFile, 'utf8', (err, fileContents) => { // 3 lines of output, plus the trailing newline. t.equal(fileContents.split(EOL).length, 4); t.match( @@ -159,7 +156,7 @@ test("../../lib/appenders/dateFile", batch => { }); }); - batch.test("should map maxLogSize to maxSize", t => { + batch.test('should map maxLogSize to maxSize', (t) => { const fakeStreamroller = {}; class DateRollingFileStream { constructor(filename, pattern, options) { @@ -168,20 +165,20 @@ test("../../lib/appenders/dateFile", batch => { fakeStreamroller.options = options; } - on() { } // eslint-disable-line class-methods-use-this + on() {} // eslint-disable-line class-methods-use-this } fakeStreamroller.DateRollingFileStream = DateRollingFileStream; const dateFileAppenderModule = sandbox.require( - "../../lib/appenders/dateFile", + '../../lib/appenders/dateFile', { - requires: { streamroller: fakeStreamroller } + requires: { streamroller: fakeStreamroller }, } ); dateFileAppenderModule.configure( { - filename: "cheese.log", - pattern: "yyyy", - maxLogSize: 100 + filename: 'cheese.log', + pattern: 'yyyy', + maxLogSize: 100, }, { basicLayout: () => {} } ); @@ -190,7 +187,7 @@ test("../../lib/appenders/dateFile", batch => { t.end(); }); - batch.test("handling of writer.writable", t => { + batch.test('handling of writer.writable', (t) => { const output = []; let writable = true; @@ -202,47 +199,50 @@ test("../../lib/appenders/dateFile", batch => { } // eslint-disable-next-line class-methods-use-this - on() { - } + on() {} // eslint-disable-next-line class-methods-use-this get writable() { return writable; } }; - const dateFileAppender = sandbox.require("../../lib/appenders/dateFile", { + const dateFileAppender = sandbox.require('../../lib/appenders/dateFile', { requires: { streamroller: { - DateRollingFileStream - } - } + DateRollingFileStream, + }, + }, }); const appender = dateFileAppender.configure( - { filename: "test1.log", maxLogSize: 100 }, - { basicLayout(loggingEvent) { return loggingEvent.data; } } + { filename: 'test1.log', maxLogSize: 100 }, + { + basicLayout(loggingEvent) { + return loggingEvent.data; + }, + } ); - t.test("should log when writer.writable=true", assert => { + t.test('should log when writer.writable=true', (assert) => { writable = true; - appender({data: "something to log"}); + appender({ data: 'something to log' }); assert.ok(output.length, 1); - assert.match(output[output.length - 1], "something to log"); + assert.match(output[output.length - 1], 'something to log'); assert.end(); }); - t.test("should not log when writer.writable=false", assert => { + t.test('should not log when writer.writable=false', (assert) => { writable = false; - appender({data: "this should not be logged"}); + appender({ data: 'this should not be logged' }); assert.ok(output.length, 1); - assert.notMatch(output[output.length - 1], "this should not be logged"); + assert.notMatch(output[output.length - 1], 'this should not be logged'); assert.end(); }); t.end(); }); - batch.test("when underlying stream errors", t => { + batch.test('when underlying stream errors', (t) => { let consoleArgs; let errorHandler; @@ -252,7 +252,7 @@ test("../../lib/appenders/dateFile", batch => { } on(evt, cb) { - if (evt === "error") { + if (evt === 'error') { this.errored = true; errorHandler = cb; } @@ -263,35 +263,35 @@ test("../../lib/appenders/dateFile", batch => { return true; } }; - const dateFileAppender = sandbox.require("../../lib/appenders/dateFile", { + const dateFileAppender = sandbox.require('../../lib/appenders/dateFile', { globals: { console: { error(...args) { consoleArgs = args; - } - } + }, + }, }, requires: { streamroller: { - DateRollingFileStream - } - } + DateRollingFileStream, + }, + }, }); dateFileAppender.configure( - { filename: "test1.log", maxLogSize: 100 }, + { filename: 'test1.log', maxLogSize: 100 }, { basicLayout() {} } ); - errorHandler({ error: "aargh" }); + errorHandler({ error: 'aargh' }); - t.test("should log the error to console.error", assert => { + t.test('should log the error to console.error', (assert) => { assert.ok(consoleArgs); assert.equal( consoleArgs[0], - "log4js.dateFileAppender - Writing to file %s, error happened " + 'log4js.dateFileAppender - Writing to file %s, error happened ' ); - assert.equal(consoleArgs[1], "test1.log"); - assert.equal(consoleArgs[2].error, "aargh"); + assert.equal(consoleArgs[1], 'test1.log'); + assert.equal(consoleArgs[2].error, 'aargh'); assert.end(); }); t.end(); diff --git a/test/tap/default-settings-test.js b/test/tap/default-settings-test.js index 77359c53..f7720380 100644 --- a/test/tap/default-settings-test.js +++ b/test/tap/default-settings-test.js @@ -1,21 +1,25 @@ -const { test } = require("tap"); -const debug = require("debug"); -const sandbox = require("@log4js-node/sandboxed-module"); +const { test } = require('tap'); +const debug = require('debug'); +const sandbox = require('@log4js-node/sandboxed-module'); -test("default settings", batch => { - const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; - const warningListener = error => { - if (error.name === "DeprecationWarning") { - if (error.code.startsWith("log4js-node-DEP0001") || error.code.startsWith("log4js-node-DEP0002")) { +test('default settings', (batch) => { + const originalListener = + process.listeners('warning')[process.listeners('warning').length - 1]; + const warningListener = (error) => { + if (error.name === 'DeprecationWarning') { + if ( + error.code.startsWith('log4js-node-DEP0001') || + error.code.startsWith('log4js-node-DEP0002') + ) { return; } } originalListener(error); }; - process.off("warning", originalListener); - process.on("warning", warningListener); + process.off('warning', originalListener); + process.on('warning', warningListener); - const debugWasEnabled = debug.enabled("log4js:appenders"); + const debugWasEnabled = debug.enabled('log4js:appenders'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -30,98 +34,128 @@ test("default settings", batch => { batch.teardown(async () => { // next event loop so that past warnings will not be printed setImmediate(() => { - process.off("warning", warningListener); - process.on("warning", originalListener); + process.off('warning', warningListener); + process.on('warning', originalListener); }); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); const output = []; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - "./appenders/stdout": { - name: "stdout", - appender() { // deprecated - return function(evt) { + './appenders/stdout': { + name: 'stdout', + appender() { + // deprecated + return function (evt) { output.push(evt); }; }, - shutdown() { // deprecated + shutdown() { + // deprecated }, configure() { return this.appender(); - } + }, }, - debug - } + debug, + }, }); let logger; - batch.test("should call configure() on getLogger() if not configured", t => { - const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length; - const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length; - logger = log4js.getLogger("default-settings"); - t.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length, - DEP0001 + 1, - "deprecation log4js-node-DEP0001 emitted" - ); - t.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length, - DEP0002 + 1, - "deprecation log4js-node-DEP0002 emitted" - ); - t.end(); - }); - - batch.test("nothing should be logged until level is set or configure() is called", t => { - const originalLevel = logger.level; - t.equal( - originalLevel.levelStr, - "OFF", - "default logger.level should be OFF" - ); + batch.test( + 'should call configure() on getLogger() if not configured', + (t) => { + const DEP0001 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0001') > -1 + ).length; + const DEP0002 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0002') > -1 + ).length; + logger = log4js.getLogger('default-settings'); + t.equal( + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0001') > -1).length, + DEP0001 + 1, + 'deprecation log4js-node-DEP0001 emitted' + ); + t.equal( + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0002') > -1).length, + DEP0002 + 1, + 'deprecation log4js-node-DEP0002 emitted' + ); + t.end(); + } + ); - logger.info("This should not be logged yet."); - t.equal(output.length, 0, "nothing should be logged"); + batch.test( + 'nothing should be logged until level is set or configure() is called', + (t) => { + const originalLevel = logger.level; + t.equal( + originalLevel.levelStr, + 'OFF', + 'default logger.level should be OFF' + ); - t.test("after level is set", assert => { - logger.level = "debug"; - logger.info("This should be logged."); - assert.equal(output.length, 1, "should log the message if level is set"); - assert.equal(output[output.length - 1].data[0], "This should be logged."); - logger.level = originalLevel; - assert.end(); - }); + logger.info('This should not be logged yet.'); + t.equal(output.length, 0, 'nothing should be logged'); - t.test("after configure() is called", assert => { - const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length; - const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length; - log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "debug" } } + t.test('after level is set', (assert) => { + logger.level = 'debug'; + logger.info('This should be logged.'); + assert.equal( + output.length, + 1, + 'should log the message if level is set' + ); + assert.equal( + output[output.length - 1].data[0], + 'This should be logged.' + ); + logger.level = originalLevel; + assert.end(); }); - assert.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length, - DEP0001 + 1, - "deprecation log4js-node-DEP0001 emitted" - ); - assert.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length, - DEP0002 + 1, - "deprecation log4js-node-DEP0002 emitted" - ); - logger.info("This should go to stdout."); - assert.equal(output.length, 2, "should log the message after configure() is called"); - assert.equal(output[output.length - 1].data[0], "This should go to stdout."); - assert.end(); - }); + t.test('after configure() is called', (assert) => { + const DEP0001 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0001') > -1 + ).length; + const DEP0002 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0002') > -1 + ).length; + log4js.configure({ + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'debug' } }, + }); + assert.equal( + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0001') > -1).length, + DEP0001 + 1, + 'deprecation log4js-node-DEP0001 emitted' + ); + assert.equal( + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0002') > -1).length, + DEP0002 + 1, + 'deprecation log4js-node-DEP0002 emitted' + ); - t.end(); - }); + logger.info('This should go to stdout.'); + assert.equal( + output.length, + 2, + 'should log the message after configure() is called' + ); + assert.equal( + output[output.length - 1].data[0], + 'This should go to stdout.' + ); + assert.end(); + }); + + t.end(); + } + ); batch.end(); }); diff --git a/test/tap/disable-cluster-test.js b/test/tap/disable-cluster-test.js index 4d3ed741..4128eaa6 100644 --- a/test/tap/disable-cluster-test.js +++ b/test/tap/disable-cluster-test.js @@ -1,34 +1,34 @@ -const { test } = require("tap"); -const cluster = require("cluster"); -const log4js = require("../../lib/log4js"); -const recorder = require("../../lib/appenders/recording"); +const { test } = require('tap'); +const cluster = require('cluster'); +const log4js = require('../../lib/log4js'); +const recorder = require('../../lib/appenders/recording'); cluster.removeAllListeners(); log4js.configure({ appenders: { - vcr: { type: "recording" } + vcr: { type: 'recording' }, }, - categories: { default: { appenders: ["vcr"], level: "debug" } }, - disableClustering: true + categories: { default: { appenders: ['vcr'], level: 'debug' } }, + disableClustering: true, }); if (cluster.isMaster) { cluster.fork(); - const masterLogger = log4js.getLogger("master"); + const masterLogger = log4js.getLogger('master'); const masterPid = process.pid; - masterLogger.info("this is master"); + masterLogger.info('this is master'); - cluster.on("exit", () => { + cluster.on('exit', () => { const logEvents = recorder.replay(); - test("cluster master", batch => { - batch.test("only master events should be logged", t => { + test('cluster master', (batch) => { + batch.test('only master events should be logged', (t) => { t.equal(logEvents.length, 1); - t.equal(logEvents[0].categoryName, "master"); + t.equal(logEvents[0].categoryName, 'master'); t.equal(logEvents[0].pid, masterPid); - t.equal(logEvents[0].data[0], "this is master"); + t.equal(logEvents[0].data[0], 'this is master'); t.end(); }); @@ -36,22 +36,22 @@ if (cluster.isMaster) { }); }); } else { - const workerLogger = log4js.getLogger("worker"); - workerLogger.info("this is worker", new Error("oh dear")); + const workerLogger = log4js.getLogger('worker'); + workerLogger.info('this is worker', new Error('oh dear')); const workerEvents = recorder.replay(); - test("cluster worker", batch => { - batch.test("should send events to its own appender", t => { + test('cluster worker', (batch) => { + batch.test('should send events to its own appender', (t) => { t.equal(workerEvents.length, 1); - t.equal(workerEvents[0].categoryName, "worker"); - t.equal(workerEvents[0].data[0], "this is worker"); - t.type(workerEvents[0].data[1], "Error"); - t.match(workerEvents[0].data[1].stack, "Error: oh dear"); + t.equal(workerEvents[0].categoryName, 'worker'); + t.equal(workerEvents[0].data[0], 'this is worker'); + t.type(workerEvents[0].data[1], 'Error'); + t.match(workerEvents[0].data[1].stack, 'Error: oh dear'); t.end(); }); batch.end(); }); // test sending a cluster-style log message - process.send({ topic: "log4js:message", data: { cheese: "gouda" } }); + process.send({ topic: 'log4js:message', data: { cheese: 'gouda' } }); cluster.worker.disconnect(); } diff --git a/test/tap/dummy-appender.js b/test/tap/dummy-appender.js index f59cebad..4d1b0309 100644 --- a/test/tap/dummy-appender.js +++ b/test/tap/dummy-appender.js @@ -1,6 +1,7 @@ // Dummy appender for test purposes; set config.label to identify instances in a test -function createDummyAppender() { // This is the function that generates an appender function +function createDummyAppender() { + // This is the function that generates an appender function // This is the appender function itself return (/* loggingEvent */) => { // do nothing diff --git a/test/tap/file-descriptor-leak-test.js b/test/tap/file-descriptor-leak-test.js index da2924d9..2a1b9373 100644 --- a/test/tap/file-descriptor-leak-test.js +++ b/test/tap/file-descriptor-leak-test.js @@ -1,80 +1,102 @@ -const { test } = require("tap"); -const fs = require("fs"); -const path = require("path"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const fs = require('fs'); +const path = require('path'); +const log4js = require('../../lib/log4js'); -const removeFiles = async filenames => { - if (!Array.isArray(filenames)) - filenames = [filenames]; - const promises = filenames.map(filename => fs.promises.unlink(filename)); +const removeFiles = async (filenames) => { + if (!Array.isArray(filenames)) filenames = [filenames]; + const promises = filenames.map((filename) => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; // no file descriptors on Windows, so don't run the tests -if (process.platform !== "win32") { - - test("multiple log4js configure fd leak test", batch => { +if (process.platform !== 'win32') { + test('multiple log4js configure fd leak test', (batch) => { const config = { appenders: {}, categories: { - default: { appenders: [], level: 'debug' } - } + default: { appenders: [], level: 'debug' }, + }, }; // create 11 appenders const numOfAppenders = 11; for (let i = 1; i <= numOfAppenders; i++) { - config.appenders[`app${i}`] = { type: 'file', filename: path.join(__dirname, `file${i}.log`) }; + config.appenders[`app${i}`] = { + type: 'file', + filename: path.join(__dirname, `file${i}.log`), + }; config.categories.default.appenders.push(`app${i}`); } const initialFd = fs.readdirSync('/proc/self/fd').length; let loadedFd; - batch.test("initial log4js configure to increase file descriptor count", t => { - log4js.configure(config); + batch.test( + 'initial log4js configure to increase file descriptor count', + (t) => { + log4js.configure(config); - // wait for the file system to catch up - setTimeout(() => { - loadedFd = fs.readdirSync('/proc/self/fd').length; - t.equal(loadedFd, initialFd + numOfAppenders, - `file descriptor count should increase by ${numOfAppenders} after 1st configure() call`); - t.end(); - }, 250); - }); + // wait for the file system to catch up + setTimeout(() => { + loadedFd = fs.readdirSync('/proc/self/fd').length; + t.equal( + loadedFd, + initialFd + numOfAppenders, + `file descriptor count should increase by ${numOfAppenders} after 1st configure() call` + ); + t.end(); + }, 250); + } + ); - batch.test("repeated log4js configure to not increase file descriptor count", t => { - log4js.configure(config); - log4js.configure(config); - log4js.configure(config); + batch.test( + 'repeated log4js configure to not increase file descriptor count', + (t) => { + log4js.configure(config); + log4js.configure(config); + log4js.configure(config); - // wait for the file system to catch up - setTimeout(() => { - t.equal(fs.readdirSync('/proc/self/fd').length, loadedFd, - `file descriptor count should be identical after repeated configure() calls`); - t.end(); - }, 250); - }); + // wait for the file system to catch up + setTimeout(() => { + t.equal( + fs.readdirSync('/proc/self/fd').length, + loadedFd, + `file descriptor count should be identical after repeated configure() calls` + ); + t.end(); + }, 250); + } + ); - batch.test("file descriptor count should return back to initial count", t => { - log4js.shutdown(); + batch.test( + 'file descriptor count should return back to initial count', + (t) => { + log4js.shutdown(); - // wait for the file system to catch up - setTimeout(() => { - t.equal(fs.readdirSync('/proc/self/fd').length, initialFd, - `file descriptor count should be back to initial`); - t.end(); - }, 250); - }); + // wait for the file system to catch up + setTimeout(() => { + t.equal( + fs.readdirSync('/proc/self/fd').length, + initialFd, + `file descriptor count should be back to initial` + ); + t.end(); + }, 250); + } + ); batch.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); - const filenames = Object.values(config.appenders).map(appender => appender.filename); + const filenames = Object.values(config.appenders).map( + (appender) => appender.filename + ); await removeFiles(filenames); }); batch.end(); }); - -} \ No newline at end of file +} diff --git a/test/tap/file-sighup-test.js b/test/tap/file-sighup-test.js index deb612a8..e8f3c032 100644 --- a/test/tap/file-sighup-test.js +++ b/test/tap/file-sighup-test.js @@ -1,75 +1,89 @@ -const { test } = require("tap"); -const path = require("path"); -const fs = require("fs"); -const sandbox = require("@log4js-node/sandboxed-module"); - -const removeFiles = async filenames => { - if (!Array.isArray(filenames)) - filenames = [filenames]; - const promises = filenames.map(filename => fs.promises.unlink(filename)); +const { test } = require('tap'); +const path = require('path'); +const fs = require('fs'); +const sandbox = require('@log4js-node/sandboxed-module'); + +const removeFiles = async (filenames) => { + if (!Array.isArray(filenames)) filenames = [filenames]; + const promises = filenames.map((filename) => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; -test("file appender single SIGHUP handler", t => { - const initialListeners = process.listenerCount("SIGHUP"); +test('file appender single SIGHUP handler', (t) => { + const initialListeners = process.listenerCount('SIGHUP'); let warning; - const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; - const warningListener = error => { - if (error.type === "SIGHUP" && error.name === "MaxListenersExceededWarning") { + const originalListener = + process.listeners('warning')[process.listeners('warning').length - 1]; + const warningListener = (error) => { + if ( + error.type === 'SIGHUP' && + error.name === 'MaxListenersExceededWarning' + ) { warning = error; return; } originalListener(error); }; - process.off("warning", originalListener); - process.on("warning", warningListener); + process.off('warning', originalListener); + process.on('warning', warningListener); const config = { appenders: {}, categories: { - default: { appenders: [], level: 'debug' } - } + default: { appenders: [], level: 'debug' }, + }, }; // create 11 appenders to make nodejs warn for >10 max listeners const numOfAppenders = 11; for (let i = 1; i <= numOfAppenders; i++) { - config.appenders[`app${i}`] = { type: 'file', filename: path.join(__dirname, `file${i}.log`) }; + config.appenders[`app${i}`] = { + type: 'file', + filename: path.join(__dirname, `file${i}.log`), + }; config.categories.default.appenders.push(`app${i}`); } - const log4js = require("../../lib/log4js"); + const log4js = require('../../lib/log4js'); log4js.configure(config); t.teardown(async () => { // next event loop so that past warnings will not be printed setImmediate(() => { - process.off("warning", warningListener); - process.on("warning", originalListener); + process.off('warning', warningListener); + process.on('warning', originalListener); }); - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); - const filenames = Object.values(config.appenders).map(appender => appender.filename); + const filenames = Object.values(config.appenders).map( + (appender) => appender.filename + ); await removeFiles(filenames); }); t.plan(2); // next event loop to allow event emitter/listener to happen setImmediate(() => { - t.notOk(warning, "should not have MaxListenersExceededWarning for SIGHUP"); - t.equal(process.listenerCount("SIGHUP") - initialListeners, 1, "should be 1 SIGHUP listener"); + t.notOk(warning, 'should not have MaxListenersExceededWarning for SIGHUP'); + t.equal( + process.listenerCount('SIGHUP') - initialListeners, + 1, + 'should be 1 SIGHUP listener' + ); t.end(); }); }); -test("file appender SIGHUP", t => { +test('file appender SIGHUP', (t) => { let closeCalled = 0; let openCalled = 0; sandbox - .require("../../lib/appenders/file", { + .require('../../lib/appenders/file', { requires: { streamroller: { RollingFileStream: class RollingFileStream { @@ -79,7 +93,7 @@ test("file appender SIGHUP", t => { } on() { - this.dummy = "easier than turning off lint rule"; + this.dummy = 'easier than turning off lint rule'; } end(cb) { @@ -90,49 +104,49 @@ test("file appender SIGHUP", t => { write() { if (this.ended) { - throw new Error("write after end"); + throw new Error('write after end'); } return true; } - } - } - } + }, + }, + }, }) .configure( - { type: "file", filename: "sighup-test-file" }, + { type: 'file', filename: 'sighup-test-file' }, { basicLayout() { - return "whatever"; - } + return 'whatever'; + }, } ); - process.emit("SIGHUP", "SIGHUP", 1); + process.emit('SIGHUP', 'SIGHUP', 1); t.plan(2); setTimeout(() => { - t.equal(openCalled, 2, "open should be called twice"); - t.equal(closeCalled, 1, "close should be called once"); + t.equal(openCalled, 2, 'open should be called twice'); + t.equal(closeCalled, 1, 'close should be called once'); t.end(); }, 100); }); -test("file appender SIGHUP handler leak", t => { - const log4js = require("../../lib/log4js"); - const initialListeners = process.listenerCount("SIGHUP"); +test('file appender SIGHUP handler leak', (t) => { + const log4js = require('../../lib/log4js'); + const initialListeners = process.listenerCount('SIGHUP'); log4js.configure({ appenders: { - file: { type: "file", filename: "test.log" } + file: { type: 'file', filename: 'test.log' }, }, - categories: { default: { appenders: ["file"], level: "info" } } + categories: { default: { appenders: ['file'], level: 'info' } }, }); t.teardown(async () => { - await removeFiles("test.log"); + await removeFiles('test.log'); }); t.plan(2); - t.equal(process.listenerCount("SIGHUP"), initialListeners + 1); + t.equal(process.listenerCount('SIGHUP'), initialListeners + 1); log4js.shutdown(() => { - t.equal(process.listenerCount("SIGHUP"), initialListeners); + t.equal(process.listenerCount('SIGHUP'), initialListeners); t.end(); }); -}); \ No newline at end of file +}); diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index a2b1efd3..e7a79347 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -1,18 +1,18 @@ /* eslint max-classes-per-file: ["error", 2] */ -const { test } = require("tap"); -const fs = require("fs-extra"); -const path = require("path"); -const sandbox = require("@log4js-node/sandboxed-module"); -const zlib = require("zlib"); -const util = require("util"); +const { test } = require('tap'); +const fs = require('fs-extra'); +const path = require('path'); +const sandbox = require('@log4js-node/sandboxed-module'); +const zlib = require('zlib'); +const util = require('util'); const sleep = util.promisify(setTimeout); const gunzip = util.promisify(zlib.gunzip); -const EOL = require("os").EOL || "\n"; -const log4js = require("../../lib/log4js"); +const EOL = require('os').EOL || '\n'; +const log4js = require('../../lib/log4js'); -const removeFile = async filename => { +const removeFile = async (filename) => { try { await fs.unlink(filename); } catch (e) { @@ -20,26 +20,28 @@ const removeFile = async filename => { } }; -test("log4js fileAppender", batch => { - batch.test("with default fileAppender settings", async t => { - const testFile = path.join(__dirname, "fa-default-test.log"); - const logger = log4js.getLogger("default-settings"); +test('log4js fileAppender', (batch) => { + batch.test('with default fileAppender settings', async (t) => { + const testFile = path.join(__dirname, 'fa-default-test.log'); + const logger = log4js.getLogger('default-settings'); await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await removeFile(testFile); }); log4js.configure({ - appenders: { file: { type: "file", filename: testFile } }, - categories: { default: { appenders: ["file"], level: "debug" } } + appenders: { file: { type: 'file', filename: testFile } }, + categories: { default: { appenders: ['file'], level: 'debug' } }, }); - logger.info("This should be in the file."); + logger.info('This should be in the file.'); await sleep(100); - const fileContents = await fs.readFile(testFile, "utf8"); + const fileContents = await fs.readFile(testFile, 'utf8'); t.match(fileContents, `This should be in the file.${EOL}`); t.match( fileContents, @@ -48,63 +50,67 @@ test("log4js fileAppender", batch => { t.end(); }); - batch.test("should give error if invalid filename", async t => { - const file = ""; + batch.test('should give error if invalid filename', async (t) => { + const file = ''; t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "file", - filename: file - } + type: 'file', + filename: file, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), new Error(`Invalid filename: ${file}`) ); const dir = `.${path.sep}`; t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "file", - filename: dir - } + type: 'file', + filename: dir, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), new Error(`Filename is a directory: ${dir}`) ); t.end(); }); - batch.test("should flush logs on shutdown", async t => { - const testFile = path.join(__dirname, "fa-default-test.log"); - const logger = log4js.getLogger("default-settings"); + batch.test('should flush logs on shutdown', async (t) => { + const testFile = path.join(__dirname, 'fa-default-test.log'); + const logger = log4js.getLogger('default-settings'); await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await removeFile(testFile); }); log4js.configure({ - appenders: { test: { type: "file", filename: testFile } }, - categories: { default: { appenders: ["test"], level: "trace" } } + appenders: { test: { type: 'file', filename: testFile } }, + categories: { default: { appenders: ['test'], level: 'trace' } }, }); - logger.info("1"); - logger.info("2"); - logger.info("3"); + logger.info('1'); + logger.info('2'); + logger.info('3'); - await new Promise(resolve => { log4js.shutdown(resolve); }); - const fileContents = await fs.readFile(testFile, "utf8"); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); + const fileContents = await fs.readFile(testFile, 'utf8'); // 3 lines of output, plus the trailing newline. t.equal(fileContents.split(EOL).length, 4); t.match( @@ -114,13 +120,15 @@ test("log4js fileAppender", batch => { t.end(); }); - batch.test("with a max file size and no backups", async t => { - const testFile = path.join(__dirname, "fa-maxFileSize-test.log"); - const logger = log4js.getLogger("max-file-size"); + batch.test('with a max file size and no backups', async (t) => { + const testFile = path.join(__dirname, 'fa-maxFileSize-test.log'); + const logger = log4js.getLogger('max-file-size'); await removeFile(testFile); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await removeFile(testFile); }); @@ -128,61 +136,63 @@ test("log4js fileAppender", batch => { log4js.configure({ appenders: { file: { - type: "file", + type: 'file', filename: testFile, maxLogSize: 100, - backups: 0 - } + backups: 0, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }); - logger.info("This is the first log message."); - logger.info("This is an intermediate log message."); - logger.info("This is the second log message."); + logger.info('This is the first log message.'); + logger.info('This is an intermediate log message.'); + logger.info('This is the second log message.'); // wait for the file system to catch up await sleep(100); - const fileContents = await fs.readFile(testFile, "utf8"); - t.match(fileContents, "This is the second log message."); - t.equal(fileContents.indexOf("This is the first log message."), -1); + const fileContents = await fs.readFile(testFile, 'utf8'); + t.match(fileContents, 'This is the second log message.'); + t.equal(fileContents.indexOf('This is the first log message.'), -1); const files = await fs.readdir(__dirname); - const logFiles = files.filter(file => - file.includes("fa-maxFileSize-test.log") + const logFiles = files.filter((file) => + file.includes('fa-maxFileSize-test.log') ); - t.equal(logFiles.length, 1, "should be 1 file"); + t.equal(logFiles.length, 1, 'should be 1 file'); t.end(); }); - batch.test("with a max file size in wrong unit mode", async t => { - const invalidUnit = "1Z"; + batch.test('with a max file size in wrong unit mode', async (t) => { + const invalidUnit = '1Z'; const expectedError = new Error(`maxLogSize: "${invalidUnit}" is invalid`); t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "file", - maxLogSize: invalidUnit - } + type: 'file', + maxLogSize: invalidUnit, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), expectedError ); t.end(); }); - batch.test("with a max file size in unit mode and no backups", async t => { - const testFile = path.join(__dirname, "fa-maxFileSize-unit-test.log"); - const logger = log4js.getLogger("max-file-size-unit"); + batch.test('with a max file size in unit mode and no backups', async (t) => { + const testFile = path.join(__dirname, 'fa-maxFileSize-unit-test.log'); + const logger = log4js.getLogger('max-file-size-unit'); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await Promise.all([removeFile(testFile), removeFile(`${testFile}.1`)]); }); @@ -190,55 +200,57 @@ test("log4js fileAppender", batch => { log4js.configure({ appenders: { file: { - type: "file", + type: 'file', filename: testFile, - maxLogSize: "1K", + maxLogSize: '1K', backups: 0, - layout: { type: "messagePassThrough" } - } + layout: { type: 'messagePassThrough' }, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }); const maxLine = 22; // 1024 max file size / 47 bytes per line for (let i = 0; i < maxLine; i++) { - logger.info("These are the log messages for the first file."); // 46 bytes per line + '\n' + logger.info('These are the log messages for the first file.'); // 46 bytes per line + '\n' } - logger.info("This is the second log message."); + logger.info('This is the second log message.'); // wait for the file system to catch up await sleep(100); - const fileContents = await fs.readFile(testFile, "utf8"); - t.match(fileContents, "This is the second log message."); - t.notMatch(fileContents, "These are the log messages for the first file."); + const fileContents = await fs.readFile(testFile, 'utf8'); + t.match(fileContents, 'This is the second log message.'); + t.notMatch(fileContents, 'These are the log messages for the first file.'); const files = await fs.readdir(__dirname); - const logFiles = files.filter(file => - file.includes("fa-maxFileSize-unit-test.log") + const logFiles = files.filter((file) => + file.includes('fa-maxFileSize-unit-test.log') ); - t.equal(logFiles.length, 1, "should be 1 file"); + t.equal(logFiles.length, 1, 'should be 1 file'); t.end(); }); - batch.test("with a max file size and 2 backups", async t => { + batch.test('with a max file size and 2 backups', async (t) => { const testFile = path.join( __dirname, - "fa-maxFileSize-with-backups-test.log" + 'fa-maxFileSize-with-backups-test.log' ); - const logger = log4js.getLogger("max-file-size-backups"); + const logger = log4js.getLogger('max-file-size-backups'); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1`), - removeFile(`${testFile}.2`) + removeFile(`${testFile}.2`), ]); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1`), - removeFile(`${testFile}.2`) + removeFile(`${testFile}.2`), ]); }); @@ -246,59 +258,61 @@ test("log4js fileAppender", batch => { log4js.configure({ appenders: { file: { - type: "file", + type: 'file', filename: testFile, maxLogSize: 50, - backups: 2 - } + backups: 2, + }, }, - categories: { default: { appenders: ["file"], level: "debug" } } + categories: { default: { appenders: ['file'], level: 'debug' } }, }); - logger.info("This is the first log message."); - logger.info("This is the second log message."); - logger.info("This is the third log message."); - logger.info("This is the fourth log message."); + logger.info('This is the first log message.'); + logger.info('This is the second log message.'); + logger.info('This is the third log message.'); + logger.info('This is the fourth log message.'); // give the system a chance to open the stream await sleep(200); const files = await fs.readdir(__dirname); const logFiles = files .sort() - .filter(file => file.includes("fa-maxFileSize-with-backups-test.log")); + .filter((file) => file.includes('fa-maxFileSize-with-backups-test.log')); t.equal(logFiles.length, 3); t.same(logFiles, [ - "fa-maxFileSize-with-backups-test.log", - "fa-maxFileSize-with-backups-test.log.1", - "fa-maxFileSize-with-backups-test.log.2" + 'fa-maxFileSize-with-backups-test.log', + 'fa-maxFileSize-with-backups-test.log.1', + 'fa-maxFileSize-with-backups-test.log.2', ]); - let contents = await fs.readFile(path.join(__dirname, logFiles[0]), "utf8"); - t.match(contents, "This is the fourth log message."); - contents = await fs.readFile(path.join(__dirname, logFiles[1]), "utf8"); - t.match(contents, "This is the third log message."); - contents = await fs.readFile(path.join(__dirname, logFiles[2]), "utf8"); - t.match(contents, "This is the second log message."); + let contents = await fs.readFile(path.join(__dirname, logFiles[0]), 'utf8'); + t.match(contents, 'This is the fourth log message.'); + contents = await fs.readFile(path.join(__dirname, logFiles[1]), 'utf8'); + t.match(contents, 'This is the third log message.'); + contents = await fs.readFile(path.join(__dirname, logFiles[2]), 'utf8'); + t.match(contents, 'This is the second log message.'); t.end(); }); - batch.test("with a max file size and 2 compressed backups", async t => { + batch.test('with a max file size and 2 compressed backups', async (t) => { const testFile = path.join( __dirname, - "fa-maxFileSize-with-backups-compressed-test.log" + 'fa-maxFileSize-with-backups-compressed-test.log' ); - const logger = log4js.getLogger("max-file-size-backups"); + const logger = log4js.getLogger('max-file-size-backups'); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1.gz`), - removeFile(`${testFile}.2.gz`) + removeFile(`${testFile}.2.gz`), ]); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await Promise.all([ removeFile(testFile), removeFile(`${testFile}.1.gz`), - removeFile(`${testFile}.2.gz`) + removeFile(`${testFile}.2.gz`), ]); }); @@ -306,48 +320,48 @@ test("log4js fileAppender", batch => { log4js.configure({ appenders: { file: { - type: "file", + type: 'file', filename: testFile, maxLogSize: 50, backups: 2, - compress: true - } + compress: true, + }, }, - categories: { default: { appenders: ["file"], level: "debug" } } + categories: { default: { appenders: ['file'], level: 'debug' } }, }); - logger.info("This is the first log message."); - logger.info("This is the second log message."); - logger.info("This is the third log message."); - logger.info("This is the fourth log message."); + logger.info('This is the first log message.'); + logger.info('This is the second log message.'); + logger.info('This is the third log message.'); + logger.info('This is the fourth log message.'); // give the system a chance to open the stream await sleep(1000); const files = await fs.readdir(__dirname); const logFiles = files .sort() - .filter(file => - file.includes("fa-maxFileSize-with-backups-compressed-test.log") + .filter((file) => + file.includes('fa-maxFileSize-with-backups-compressed-test.log') ); - t.equal(logFiles.length, 3, "should be 3 files"); + t.equal(logFiles.length, 3, 'should be 3 files'); t.same(logFiles, [ - "fa-maxFileSize-with-backups-compressed-test.log", - "fa-maxFileSize-with-backups-compressed-test.log.1.gz", - "fa-maxFileSize-with-backups-compressed-test.log.2.gz" + 'fa-maxFileSize-with-backups-compressed-test.log', + 'fa-maxFileSize-with-backups-compressed-test.log.1.gz', + 'fa-maxFileSize-with-backups-compressed-test.log.2.gz', ]); - let contents = await fs.readFile(path.join(__dirname, logFiles[0]), "utf8"); - t.match(contents, "This is the fourth log message."); + let contents = await fs.readFile(path.join(__dirname, logFiles[0]), 'utf8'); + t.match(contents, 'This is the fourth log message.'); contents = await gunzip( await fs.readFile(path.join(__dirname, logFiles[1])) ); - t.match(contents.toString("utf8"), "This is the third log message."); + t.match(contents.toString('utf8'), 'This is the third log message.'); contents = await gunzip( await fs.readFile(path.join(__dirname, logFiles[2])) ); - t.match(contents.toString("utf8"), "This is the second log message."); + t.match(contents.toString('utf8'), 'This is the second log message.'); t.end(); }); - batch.test("handling of writer.writable", t => { + batch.test('handling of writer.writable', (t) => { const output = []; let writable = true; @@ -359,47 +373,50 @@ test("log4js fileAppender", batch => { } // eslint-disable-next-line class-methods-use-this - on() { - } + on() {} // eslint-disable-next-line class-methods-use-this get writable() { return writable; } }; - const fileAppender = sandbox.require("../../lib/appenders/file", { + const fileAppender = sandbox.require('../../lib/appenders/file', { requires: { streamroller: { - RollingFileStream - } - } + RollingFileStream, + }, + }, }); const appender = fileAppender.configure( - { filename: "test1.log", maxLogSize: 100 }, - { basicLayout(loggingEvent) { return loggingEvent.data; } } + { filename: 'test1.log', maxLogSize: 100 }, + { + basicLayout(loggingEvent) { + return loggingEvent.data; + }, + } ); - t.test("should log when writer.writable=true", assert => { + t.test('should log when writer.writable=true', (assert) => { writable = true; - appender({data: "something to log"}); + appender({ data: 'something to log' }); assert.ok(output.length, 1); - assert.match(output[output.length - 1], "something to log"); + assert.match(output[output.length - 1], 'something to log'); assert.end(); }); - t.test("should not log when writer.writable=false", assert => { + t.test('should not log when writer.writable=false', (assert) => { writable = false; - appender({data: "this should not be logged"}); + appender({ data: 'this should not be logged' }); assert.ok(output.length, 1); - assert.notMatch(output[output.length - 1], "this should not be logged"); + assert.notMatch(output[output.length - 1], 'this should not be logged'); assert.end(); }); t.end(); }); - batch.test("when underlying stream errors", t => { + batch.test('when underlying stream errors', (t) => { let consoleArgs; let errorHandler; @@ -409,7 +426,7 @@ test("log4js fileAppender", batch => { } on(evt, cb) { - if (evt === "error") { + if (evt === 'error') { this.errored = true; errorHandler = cb; } @@ -420,75 +437,89 @@ test("log4js fileAppender", batch => { return true; } }; - const fileAppender = sandbox.require("../../lib/appenders/file", { + const fileAppender = sandbox.require('../../lib/appenders/file', { globals: { console: { error(...args) { consoleArgs = args; - } - } + }, + }, }, requires: { streamroller: { - RollingFileStream - } - } + RollingFileStream, + }, + }, }); fileAppender.configure( - { filename: "test1.log", maxLogSize: 100 }, + { filename: 'test1.log', maxLogSize: 100 }, { basicLayout() {} } ); - errorHandler({ error: "aargh" }); + errorHandler({ error: 'aargh' }); - t.test("should log the error to console.error", assert => { + t.test('should log the error to console.error', (assert) => { assert.ok(consoleArgs); assert.equal( consoleArgs[0], - "log4js.fileAppender - Writing to file %s, error happened " + 'log4js.fileAppender - Writing to file %s, error happened ' ); - assert.equal(consoleArgs[1], "test1.log"); - assert.equal(consoleArgs[2].error, "aargh"); + assert.equal(consoleArgs[1], 'test1.log'); + assert.equal(consoleArgs[2].error, 'aargh'); assert.end(); }); t.end(); }); - batch.test("with removeColor fileAppender settings", async t => { - const testFilePlain = path.join(__dirname, "fa-removeColor-test.log"); - const testFileAsIs = path.join(__dirname, "fa-asIs-test.log"); - const logger = log4js.getLogger("default-settings"); + batch.test('with removeColor fileAppender settings', async (t) => { + const testFilePlain = path.join(__dirname, 'fa-removeColor-test.log'); + const testFileAsIs = path.join(__dirname, 'fa-asIs-test.log'); + const logger = log4js.getLogger('default-settings'); await removeFile(testFilePlain); await removeFile(testFileAsIs); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); await removeFile(testFilePlain); await removeFile(testFileAsIs); }); log4js.configure({ - appenders: { - plainFile: { type: "file", filename: testFilePlain, removeColor: true }, - asIsFile: { type: "file", filename: testFileAsIs, removeColor: false } + appenders: { + plainFile: { type: 'file', filename: testFilePlain, removeColor: true }, + asIsFile: { type: 'file', filename: testFileAsIs, removeColor: false }, + }, + categories: { + default: { appenders: ['plainFile', 'asIsFile'], level: 'debug' }, }, - categories: { default: { appenders: ["plainFile", "asIsFile"], level: "debug" } } }); - logger.info("This should be in the file.", - "\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m.", {}, []); + logger.info( + 'This should be in the file.', + '\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m.', + {}, + [] + ); await sleep(100); - let fileContents = await fs.readFile(testFilePlain, "utf8"); - t.match(fileContents, `This should be in the file. Color should be plain. {} []${EOL}`); + let fileContents = await fs.readFile(testFilePlain, 'utf8'); + t.match( + fileContents, + `This should be in the file. Color should be plain. {} []${EOL}` + ); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / ); - fileContents = await fs.readFile(testFileAsIs, "utf8"); - t.match(fileContents, "This should be in the file.", - `\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m. {} []${EOL}`); + fileContents = await fs.readFile(testFileAsIs, 'utf8'); + t.match( + fileContents, + 'This should be in the file.', + `\x1b[33mColor\x1b[0m \x1b[93;41mshould\x1b[0m be \x1b[38;5;8mplain\x1b[0m. {} []${EOL}` + ); t.match( fileContents, /\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}] \[INFO] default-settings - / diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index 4ea96ac3..1330d10b 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -1,9 +1,9 @@ -const { test } = require("tap"); -const fs = require("fs"); -const path = require("path"); -const EOL = require("os").EOL || "\n"; -const sandbox = require("@log4js-node/sandboxed-module"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const fs = require('fs'); +const path = require('path'); +const EOL = require('os').EOL || '\n'; +const sandbox = require('@log4js-node/sandboxed-module'); +const log4js = require('../../lib/log4js'); function remove(filename) { try { @@ -13,10 +13,10 @@ function remove(filename) { } } -test("log4js fileSyncAppender", batch => { - batch.test("with default fileSyncAppender settings", t => { - const testFile = path.join(__dirname, "/fa-default-sync-test.log"); - const logger = log4js.getLogger("default-settings"); +test('log4js fileSyncAppender', (batch) => { + batch.test('with default fileSyncAppender settings', (t) => { + const testFile = path.join(__dirname, '/fa-default-sync-test.log'); + const logger = log4js.getLogger('default-settings'); remove(testFile); t.teardown(() => { @@ -24,13 +24,13 @@ test("log4js fileSyncAppender", batch => { }); log4js.configure({ - appenders: { sync: { type: "fileSync", filename: testFile } }, - categories: { default: { appenders: ["sync"], level: "debug" } } + appenders: { sync: { type: 'fileSync', filename: testFile } }, + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - logger.info("This should be in the file."); + logger.info('This should be in the file.'); - fs.readFile(testFile, "utf8", (err, fileContents) => { + fs.readFile(testFile, 'utf8', (err, fileContents) => { t.match(fileContents, `This should be in the file.${EOL}`); t.match( fileContents, @@ -40,9 +40,9 @@ test("log4js fileSyncAppender", batch => { }); }); - batch.test("with existing file", t => { - const testFile = path.join(__dirname, "/fa-existing-file-sync-test.log"); - const logger = log4js.getLogger("default-settings"); + batch.test('with existing file', (t) => { + const testFile = path.join(__dirname, '/fa-existing-file-sync-test.log'); + const logger = log4js.getLogger('default-settings'); remove(testFile); t.teardown(() => { @@ -50,21 +50,21 @@ test("log4js fileSyncAppender", batch => { }); log4js.configure({ - appenders: { sync: { type: "fileSync", filename: testFile } }, - categories: { default: { appenders: ["sync"], level: "debug" } } + appenders: { sync: { type: 'fileSync', filename: testFile } }, + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - logger.info("This should be in the file."); + logger.info('This should be in the file.'); log4js.shutdown(() => { log4js.configure({ - appenders: { sync: { type: "fileSync", filename: testFile } }, - categories: { default: { appenders: ["sync"], level: "debug" } } + appenders: { sync: { type: 'fileSync', filename: testFile } }, + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - logger.info("This should also be in the file."); + logger.info('This should also be in the file.'); - fs.readFile(testFile, "utf8", (err, fileContents) => { + fs.readFile(testFile, 'utf8', (err, fileContents) => { t.match(fileContents, `This should be in the file.${EOL}`); t.match(fileContents, `This should also be in the file.${EOL}`); t.match( @@ -76,67 +76,70 @@ test("log4js fileSyncAppender", batch => { }); }); - batch.test("should give error if invalid filename", async t => { - const file = ""; + batch.test('should give error if invalid filename', async (t) => { + const file = ''; t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "fileSync", - filename: file - } + type: 'fileSync', + filename: file, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), new Error(`Invalid filename: ${file}`) ); const dir = `.${path.sep}`; t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "fileSync", - filename: dir - } + type: 'fileSync', + filename: dir, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), new Error(`Filename is a directory: ${dir}`) ); t.end(); }); - batch.test("should give error if invalid maxLogSize", async t => { + batch.test('should give error if invalid maxLogSize', async (t) => { const maxLogSize = -1; const expectedError = new Error(`maxLogSize (${maxLogSize}) should be > 0`); t.throws( - () => + () => log4js.configure({ appenders: { file: { - type: "fileSync", - filename: path.join(__dirname, "fa-invalidMaxFileSize-sync-test.log"), - maxLogSize: -1 - } + type: 'fileSync', + filename: path.join( + __dirname, + 'fa-invalidMaxFileSize-sync-test.log' + ), + maxLogSize: -1, + }, }, categories: { - default: { appenders: ["file"], level: "debug" } - } + default: { appenders: ['file'], level: 'debug' }, + }, }), expectedError ); t.end(); }); - batch.test("with a max file size and no backups", t => { - const testFile = path.join(__dirname, "/fa-maxFileSize-sync-test.log"); - const logger = log4js.getLogger("max-file-size"); + batch.test('with a max file size and no backups', (t) => { + const testFile = path.join(__dirname, '/fa-maxFileSize-sync-test.log'); + const logger = log4js.getLogger('max-file-size'); remove(testFile); t.teardown(() => { @@ -147,33 +150,33 @@ test("log4js fileSyncAppender", batch => { log4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, maxLogSize: 100, - backups: 0 - } + backups: 0, + }, }, - categories: { default: { appenders: ["sync"], level: "debug" } } + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - logger.info("This is the first log message."); - logger.info("This is an intermediate log message."); - logger.info("This is the second log message."); + logger.info('This is the first log message.'); + logger.info('This is an intermediate log message.'); + logger.info('This is the second log message.'); - t.test("log file should only contain the second message", assert => { - fs.readFile(testFile, "utf8", (err, fileContents) => { + t.test('log file should only contain the second message', (assert) => { + fs.readFile(testFile, 'utf8', (err, fileContents) => { assert.match(fileContents, `This is the second log message.${EOL}`); assert.equal( - fileContents.indexOf("This is the first log message."), + fileContents.indexOf('This is the first log message.'), -1 ); assert.end(); }); }); - t.test("there should be one test files", assert => { + t.test('there should be one test files', (assert) => { fs.readdir(__dirname, (err, files) => { - const logFiles = files.filter(file => - file.includes("fa-maxFileSize-sync-test.log") + const logFiles = files.filter((file) => + file.includes('fa-maxFileSize-sync-test.log') ); assert.equal(logFiles.length, 1); assert.end(); @@ -182,9 +185,9 @@ test("log4js fileSyncAppender", batch => { t.end(); }); - batch.test("with a max file size in unit mode and no backups", t => { - const testFile = path.join(__dirname, "/fa-maxFileSize-unit-sync-test.log"); - const logger = log4js.getLogger("max-file-size-unit"); + batch.test('with a max file size in unit mode and no backups', (t) => { + const testFile = path.join(__dirname, '/fa-maxFileSize-unit-sync-test.log'); + const logger = log4js.getLogger('max-file-size-unit'); remove(testFile); remove(`${testFile}.1`); @@ -197,34 +200,37 @@ test("log4js fileSyncAppender", batch => { log4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, - maxLogSize: "1K", + maxLogSize: '1K', backups: 0, - layout: { type: "messagePassThrough" } - } + layout: { type: 'messagePassThrough' }, + }, }, - categories: { default: { appenders: ["sync"], level: "debug" } } + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - const maxLine = 22; // 1024 max file size / 47 bytes per line + const maxLine = 22; // 1024 max file size / 47 bytes per line for (let i = 0; i < maxLine; i++) { - logger.info("These are the log messages for the first file."); // 46 bytes per line + '\n' + logger.info('These are the log messages for the first file.'); // 46 bytes per line + '\n' } - logger.info("This is the second log message."); + logger.info('This is the second log message.'); - t.test("log file should only contain the second message", assert => { - fs.readFile(testFile, "utf8", (err, fileContents) => { + t.test('log file should only contain the second message', (assert) => { + fs.readFile(testFile, 'utf8', (err, fileContents) => { assert.match(fileContents, `This is the second log message.${EOL}`); - assert.notMatch(fileContents, "These are the log messages for the first file."); + assert.notMatch( + fileContents, + 'These are the log messages for the first file.' + ); assert.end(); }); }); - t.test("there should be one test file", assert => { + t.test('there should be one test file', (assert) => { fs.readdir(__dirname, (err, files) => { - const logFiles = files.filter(file => - file.includes("fa-maxFileSize-unit-sync-test.log") + const logFiles = files.filter((file) => + file.includes('fa-maxFileSize-unit-sync-test.log') ); assert.equal(logFiles.length, 1); assert.end(); @@ -233,12 +239,12 @@ test("log4js fileSyncAppender", batch => { t.end(); }); - batch.test("with a max file size and 2 backups", t => { + batch.test('with a max file size and 2 backups', (t) => { const testFile = path.join( __dirname, - "/fa-maxFileSize-with-backups-sync-test.log" + '/fa-maxFileSize-with-backups-sync-test.log' ); - const logger = log4js.getLogger("max-file-size-backups"); + const logger = log4js.getLogger('max-file-size-backups'); remove(testFile); remove(`${testFile}.1`); remove(`${testFile}.2`); @@ -253,55 +259,55 @@ test("log4js fileSyncAppender", batch => { log4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, maxLogSize: 50, - backups: 2 - } + backups: 2, + }, }, - categories: { default: { appenders: ["sync"], level: "debug" } } + categories: { default: { appenders: ['sync'], level: 'debug' } }, }); - logger.info("This is the first log message."); - logger.info("This is the second log message."); - logger.info("This is the third log message."); - logger.info("This is the fourth log message."); + logger.info('This is the first log message.'); + logger.info('This is the second log message.'); + logger.info('This is the third log message.'); + logger.info('This is the fourth log message.'); - t.test("the log files", assert => { + t.test('the log files', (assert) => { assert.plan(5); fs.readdir(__dirname, (err, files) => { - const logFiles = files.filter(file => - file.includes("fa-maxFileSize-with-backups-sync-test.log") + const logFiles = files.filter((file) => + file.includes('fa-maxFileSize-with-backups-sync-test.log') ); - assert.equal(logFiles.length, 3, "should be 3 files"); + assert.equal(logFiles.length, 3, 'should be 3 files'); assert.same( logFiles, [ - "fa-maxFileSize-with-backups-sync-test.log", - "fa-maxFileSize-with-backups-sync-test.log.1", - "fa-maxFileSize-with-backups-sync-test.log.2" + 'fa-maxFileSize-with-backups-sync-test.log', + 'fa-maxFileSize-with-backups-sync-test.log.1', + 'fa-maxFileSize-with-backups-sync-test.log.2', ], - "should be named in sequence" + 'should be named in sequence' ); fs.readFile( path.join(__dirname, logFiles[0]), - "utf8", + 'utf8', (e, contents) => { - assert.match(contents, "This is the fourth log message."); + assert.match(contents, 'This is the fourth log message.'); } ); fs.readFile( path.join(__dirname, logFiles[1]), - "utf8", + 'utf8', (e, contents) => { - assert.match(contents, "This is the third log message."); + assert.match(contents, 'This is the third log message.'); } ); fs.readFile( path.join(__dirname, logFiles[2]), - "utf8", + 'utf8', (e, contents) => { - assert.match(contents, "This is the second log message."); + assert.match(contents, 'This is the second log message.'); } ); }); @@ -309,8 +315,8 @@ test("log4js fileSyncAppender", batch => { t.end(); }); - batch.test("configure with fileSyncAppender", t => { - const testFile = "tmp-sync-tests.log"; + batch.test('configure with fileSyncAppender', (t) => { + const testFile = 'tmp-sync-tests.log'; remove(testFile); t.teardown(() => { @@ -322,220 +328,235 @@ test("log4js fileSyncAppender", batch => { log4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, - layout: { type: "messagePassThrough" } - } + layout: { type: 'messagePassThrough' }, + }, }, categories: { - default: { appenders: ["sync"], level: "debug" }, - tests: { appenders: ["sync"], level: "warn" } - } + default: { appenders: ['sync'], level: 'debug' }, + tests: { appenders: ['sync'], level: 'warn' }, + }, }); - const logger = log4js.getLogger("tests"); - logger.info("this should not be written to the file"); - logger.warn("this should be written to the file"); + const logger = log4js.getLogger('tests'); + logger.info('this should not be written to the file'); + logger.warn('this should be written to the file'); - fs.readFile(testFile, "utf8", (err, contents) => { + fs.readFile(testFile, 'utf8', (err, contents) => { t.match(contents, `this should be written to the file${EOL}`); - t.equal(contents.indexOf("this should not be written to the file"), -1); + t.equal(contents.indexOf('this should not be written to the file'), -1); t.end(); }); }); - batch.test("configure with non-existent multi-directory (recursive, nodejs >= 10.12.0)", t => { - const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-recursive.log"; - remove(testFile); - - t.teardown(() => { + batch.test( + 'configure with non-existent multi-directory (recursive, nodejs >= 10.12.0)', + (t) => { + const testFile = 'tmpA/tmpB/tmpC/tmp-sync-tests-recursive.log'; remove(testFile); - try { - fs.rmdirSync("tmpA/tmpB/tmpC"); - fs.rmdirSync("tmpA/tmpB"); - fs.rmdirSync("tmpA"); - } catch (e) { - // doesn't matter - } - }); - log4js.configure({ - appenders: { - sync: { - type: "fileSync", - filename: testFile, - layout: { type: "messagePassThrough" } + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync('tmpA/tmpB/tmpC'); + fs.rmdirSync('tmpA/tmpB'); + fs.rmdirSync('tmpA'); + } catch (e) { + // doesn't matter } - }, - categories: { - default: { appenders: ["sync"], level: "debug" } - } - }); - const logger = log4js.getLogger(); - logger.info("this should be written to the file"); + }); - fs.readFile(testFile, "utf8", (err, contents) => { - t.match(contents, `this should be written to the file${EOL}`); - t.end(); - }); - }); + log4js.configure({ + appenders: { + sync: { + type: 'fileSync', + filename: testFile, + layout: { type: 'messagePassThrough' }, + }, + }, + categories: { + default: { appenders: ['sync'], level: 'debug' }, + }, + }); + const logger = log4js.getLogger(); + logger.info('this should be written to the file'); - batch.test("configure with non-existent multi-directory (non-recursive, nodejs < 10.12.0)", t => { - const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-non-recursive.log"; - remove(testFile); + fs.readFile(testFile, 'utf8', (err, contents) => { + t.match(contents, `this should be written to the file${EOL}`); + t.end(); + }); + } + ); - t.teardown(() => { + batch.test( + 'configure with non-existent multi-directory (non-recursive, nodejs < 10.12.0)', + (t) => { + const testFile = 'tmpA/tmpB/tmpC/tmp-sync-tests-non-recursive.log'; remove(testFile); - try { - fs.rmdirSync("tmpA/tmpB/tmpC"); - fs.rmdirSync("tmpA/tmpB"); - fs.rmdirSync("tmpA"); - } catch (e) { - // doesn't matter - } - }); - const sandboxedLog4js = sandbox.require("../../lib/log4js", { - requires: { - fs: { - ...fs, - mkdirSync(dirPath, options) { - return fs.mkdirSync(dirPath, { ...options, ...{ recursive: false } }); - } + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync('tmpA/tmpB/tmpC'); + fs.rmdirSync('tmpA/tmpB'); + fs.rmdirSync('tmpA'); + } catch (e) { + // doesn't matter } - } - }); - sandboxedLog4js.configure({ - appenders: { - sync: { - type: "fileSync", - filename: testFile, - layout: { type: "messagePassThrough" } - } - }, - categories: { - default: { appenders: ["sync"], level: "debug" } - } - }); - const logger = sandboxedLog4js.getLogger(); - logger.info("this should be written to the file"); + }); - fs.readFile(testFile, "utf8", (err, contents) => { - t.match(contents, `this should be written to the file${EOL}`); - t.end(); - }); - }); + const sandboxedLog4js = sandbox.require('../../lib/log4js', { + requires: { + fs: { + ...fs, + mkdirSync(dirPath, options) { + return fs.mkdirSync(dirPath, { + ...options, + ...{ recursive: false }, + }); + }, + }, + }, + }); + sandboxedLog4js.configure({ + appenders: { + sync: { + type: 'fileSync', + filename: testFile, + layout: { type: 'messagePassThrough' }, + }, + }, + categories: { + default: { appenders: ['sync'], level: 'debug' }, + }, + }); + const logger = sandboxedLog4js.getLogger(); + logger.info('this should be written to the file'); - batch.test("configure with non-existent multi-directory (error handling)", t => { - const testFile = "tmpA/tmpB/tmpC/tmp-sync-tests-error-handling.log"; - remove(testFile); + fs.readFile(testFile, 'utf8', (err, contents) => { + t.match(contents, `this should be written to the file${EOL}`); + t.end(); + }); + } + ); - t.teardown(() => { + batch.test( + 'configure with non-existent multi-directory (error handling)', + (t) => { + const testFile = 'tmpA/tmpB/tmpC/tmp-sync-tests-error-handling.log'; remove(testFile); - try { - fs.rmdirSync("tmpA/tmpB/tmpC"); - fs.rmdirSync("tmpA/tmpB"); - fs.rmdirSync("tmpA"); - } catch (e) { - // doesn't matter - } - }); - const errorEPERM = new Error("EPERM"); - errorEPERM.code = "EPERM"; - - let sandboxedLog4js = sandbox.require("../../lib/log4js", { - requires: { - fs: { - ...fs, - mkdirSync() { - throw errorEPERM ; - } + t.teardown(() => { + remove(testFile); + try { + fs.rmdirSync('tmpA/tmpB/tmpC'); + fs.rmdirSync('tmpA/tmpB'); + fs.rmdirSync('tmpA'); + } catch (e) { + // doesn't matter } - } - }); - t.throws( - () => - sandboxedLog4js.configure({ - appenders: { - sync: { - type: "fileSync", - filename: testFile, - layout: { type: "messagePassThrough" } - } - }, - categories: { - default: { appenders: ["sync"], level: "debug" } - } - }), - errorEPERM - ); + }); - const errorEROFS = new Error("EROFS"); - errorEROFS.code = "EROFS"; + const errorEPERM = new Error('EPERM'); + errorEPERM.code = 'EPERM'; - sandboxedLog4js = sandbox.require("../../lib/log4js", { - requires: { - fs: { - ...fs, - mkdirSync() { - throw errorEROFS; + let sandboxedLog4js = sandbox.require('../../lib/log4js', { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEPERM; + }, }, - statSync() { - return { isDirectory() { return false; } }; - } - } - } - }); - t.throws( - () => - sandboxedLog4js.configure({ - appenders: { - sync: { - type: "fileSync", - filename: testFile, - layout: { type: "messagePassThrough" } - } + }, + }); + t.throws( + () => + sandboxedLog4js.configure({ + appenders: { + sync: { + type: 'fileSync', + filename: testFile, + layout: { type: 'messagePassThrough' }, + }, + }, + categories: { + default: { appenders: ['sync'], level: 'debug' }, + }, + }), + errorEPERM + ); + + const errorEROFS = new Error('EROFS'); + errorEROFS.code = 'EROFS'; + + sandboxedLog4js = sandbox.require('../../lib/log4js', { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEROFS; + }, + statSync() { + return { + isDirectory() { + return false; + }, + }; + }, }, - categories: { - default: { appenders: ["sync"], level: "debug" } - } - }), - errorEROFS - ); + }, + }); + t.throws( + () => + sandboxedLog4js.configure({ + appenders: { + sync: { + type: 'fileSync', + filename: testFile, + layout: { type: 'messagePassThrough' }, + }, + }, + categories: { + default: { appenders: ['sync'], level: 'debug' }, + }, + }), + errorEROFS + ); - fs.mkdirSync("tmpA/tmpB/tmpC", { recursive: true }); + fs.mkdirSync('tmpA/tmpB/tmpC', { recursive: true }); - sandboxedLog4js = sandbox.require("../../lib/log4js", { - requires: { - fs: { - ...fs, - mkdirSync() { - throw errorEROFS; - } - } - } - }); - t.doesNotThrow( - () => + sandboxedLog4js = sandbox.require('../../lib/log4js', { + requires: { + fs: { + ...fs, + mkdirSync() { + throw errorEROFS; + }, + }, + }, + }); + t.doesNotThrow(() => sandboxedLog4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, - layout: { type: "messagePassThrough" } - } + layout: { type: 'messagePassThrough' }, + }, }, categories: { - default: { appenders: ["sync"], level: "debug" } - } + default: { appenders: ['sync'], level: 'debug' }, + }, }) - ); + ); - t.end(); - }); + t.end(); + } + ); - batch.test("test options", t => { - const testFile = "tmp-options-tests.log"; + batch.test('test options', (t) => { + const testFile = 'tmp-options-tests.log'; remove(testFile); t.teardown(() => { @@ -546,22 +567,22 @@ test("log4js fileSyncAppender", batch => { log4js.configure({ appenders: { sync: { - type: "fileSync", + type: 'fileSync', filename: testFile, - layout: { type: "messagePassThrough" }, - flags: "w", - encoding: "ascii", - mode: 0o666 - } + layout: { type: 'messagePassThrough' }, + flags: 'w', + encoding: 'ascii', + mode: 0o666, + }, }, categories: { - default: { appenders: ["sync"], level: "info" } - } + default: { appenders: ['sync'], level: 'info' }, + }, }); const logger = log4js.getLogger(); - logger.warn("log message"); + logger.warn('log message'); - fs.readFile(testFile, "ascii", (err, contents) => { + fs.readFile(testFile, 'ascii', (err, contents) => { t.match(contents, `log message${EOL}`); t.end(); }); diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index 5e5863ad..e925bf54 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -1,7 +1,7 @@ -const { test } = require("tap"); -const debug = require("debug"); -const os = require("os"); -const path = require("path"); +const { test } = require('tap'); +const debug = require('debug'); +const os = require('os'); +const path = require('path'); const { EOL } = os; @@ -10,189 +10,192 @@ function testPattern(assert, layout, event, tokens, pattern, value) { assert.equal(layout(pattern, tokens)(event), value); } -test("log4js layouts", batch => { - batch.test("colouredLayout", t => { - const layout = require("../../lib/layouts").colouredLayout; +test('log4js layouts', (batch) => { + batch.test('colouredLayout', (t) => { + const layout = require('../../lib/layouts').colouredLayout; - t.test("should apply level colour codes to output", assert => { + t.test('should apply level colour codes to output', (assert) => { const output = layout({ - data: ["nonsense"], + data: ['nonsense'], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { toString() { - return "ERROR"; + return 'ERROR'; }, - colour: "red" - } + colour: 'red', + }, }); assert.equal( output, - "\x1B[91m[2010-12-05T14:18:30.045] [ERROR] cheese - \x1B[39mnonsense" + '\x1B[91m[2010-12-05T14:18:30.045] [ERROR] cheese - \x1B[39mnonsense' ); assert.end(); }); - t.test("should support the console.log format for the message", assert => { - const output = layout({ - data: ["thing %d", 2], - startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", - level: { - toString() { - return "ERROR"; + t.test( + 'should support the console.log format for the message', + (assert) => { + const output = layout({ + data: ['thing %d', 2], + startTime: new Date(2010, 11, 5, 14, 18, 30, 45), + categoryName: 'cheese', + level: { + toString() { + return 'ERROR'; + }, + colour: 'red', }, - colour: "red" - } - }); - assert.equal( - output, - "\x1B[91m[2010-12-05T14:18:30.045] [ERROR] cheese - \x1B[39mthing 2" - ); - assert.end(); - }); + }); + assert.equal( + output, + '\x1B[91m[2010-12-05T14:18:30.045] [ERROR] cheese - \x1B[39mthing 2' + ); + assert.end(); + } + ); t.end(); }); - batch.test("messagePassThroughLayout", t => { - const layout = require("../../lib/layouts").messagePassThroughLayout; + batch.test('messagePassThroughLayout', (t) => { + const layout = require('../../lib/layouts').messagePassThroughLayout; t.equal( layout({ - data: ["nonsense"], + data: ['nonsense'], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { - colour: "green", + colour: 'green', toString() { - return "ERROR"; - } - } + return 'ERROR'; + }, + }, }), - "nonsense", - "should take a logevent and output only the message" + 'nonsense', + 'should take a logevent and output only the message' ); t.equal( layout({ - data: ["thing %d", 1, "cheese"], + data: ['thing %d', 1, 'cheese'], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { - colour: "green", + colour: 'green', toString() { - return "ERROR"; - } - } + return 'ERROR'; + }, + }, }), - "thing 1 cheese", - "should support the console.log format for the message" + 'thing 1 cheese', + 'should support the console.log format for the message' ); t.equal( layout({ data: [{ thing: 1 }], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { - colour: "green", + colour: 'green', toString() { - return "ERROR"; - } - } + return 'ERROR'; + }, + }, }), - "{ thing: 1 }", - "should output the first item even if it is not a string" + '{ thing: 1 }', + 'should output the first item even if it is not a string' ); t.match( layout({ data: [new Error()], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { - colour: "green", + colour: 'green', toString() { - return "ERROR"; - } - } + return 'ERROR'; + }, + }, }), /at (Test\.batch\.test\.t|Test\.)\s+\((.*)test[\\/]tap[\\/]layouts-test\.js:\d+:\d+\)/, - "regexp did not return a match - should print the stacks of a passed error objects" + 'regexp did not return a match - should print the stacks of a passed error objects' ); - t.test("with passed augmented errors", assert => { - const e = new Error("My Unique Error Message"); - e.augmented = "My Unique attribute value"; - e.augObj = { at1: "at2" }; + t.test('with passed augmented errors', (assert) => { + const e = new Error('My Unique Error Message'); + e.augmented = 'My Unique attribute value'; + e.augObj = { at1: 'at2' }; const layoutOutput = layout({ data: [e], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "cheese", + categoryName: 'cheese', level: { - colour: "green", + colour: 'green', toString() { - return "ERROR"; - } - } + return 'ERROR'; + }, + }, }); assert.match( layoutOutput, /Error: My Unique Error Message/, - "should print the contained error message" + 'should print the contained error message' ); assert.match( layoutOutput, /augmented:\s'My Unique attribute value'/, - "should print error augmented string attributes" + 'should print error augmented string attributes' ); assert.match( layoutOutput, /augObj:\s\{ at1: 'at2' \}/, - "should print error augmented object attributes" + 'should print error augmented object attributes' ); assert.end(); }); t.end(); }); - batch.test("basicLayout", t => { - const layout = require("../../lib/layouts").basicLayout; + batch.test('basicLayout', (t) => { + const layout = require('../../lib/layouts').basicLayout; const event = { - data: ["this is a test"], + data: ['this is a test'], startTime: new Date(2010, 11, 5, 14, 18, 30, 45), - categoryName: "tests", + categoryName: 'tests', level: { toString() { - return "DEBUG"; - } - } + return 'DEBUG'; + }, + }, }; t.equal( layout(event), - "[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test" + '[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test' ); t.test( - "should output a stacktrace, message if the event has an error attached", - assert => { + 'should output a stacktrace, message if the event has an error attached', + (assert) => { let i; - const error = new Error("Some made-up error"); + const error = new Error('Some made-up error'); const stack = error.stack.split(/\n/); - event.data = ["this is a test", error]; + event.data = ['this is a test', error]; const output = layout(event); const lines = output.split(/\n/); assert.equal(lines.length, stack.length); assert.equal( lines[0], - "[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test Error: Some made-up error" + '[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test Error: Some made-up error' ); for (i = 1; i < stack.length; i++) { assert.equal(lines[i], stack[i]); @@ -202,19 +205,19 @@ test("log4js layouts", batch => { ); t.test( - "should output any extra data in the log event as util.inspect strings", - assert => { + 'should output any extra data in the log event as util.inspect strings', + (assert) => { event.data = [ - "this is a test", + 'this is a test', { - name: "Cheese", - message: "Gorgonzola smells." - } + name: 'Cheese', + message: 'Gorgonzola smells.', + }, ]; const output = layout(event); assert.equal( output, - "[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test " + + '[2010-12-05T14:18:30.045] [DEBUG] tests - this is a test ' + "{ name: 'Cheese', message: 'Gorgonzola smells.' }" ); assert.end(); @@ -223,42 +226,46 @@ test("log4js layouts", batch => { t.end(); }); - batch.test("dummyLayout", t => { - const layout = require("../../lib/layouts").dummyLayout; + batch.test('dummyLayout', (t) => { + const layout = require('../../lib/layouts').dummyLayout; - t.test("should output just the first element of the log data", assert => { + t.test('should output just the first element of the log data', (assert) => { const event = { - data: ["this is the first value", "this is not"], - startTime: new Date("2010-12-05 14:18:30.045"), - categoryName: "multiple.levels.of.tests", + data: ['this is the first value', 'this is not'], + startTime: new Date('2010-12-05 14:18:30.045'), + categoryName: 'multiple.levels.of.tests', level: { toString() { - return "DEBUG"; + return 'DEBUG'; }, - colour: "cyan" - } + colour: 'cyan', + }, }; - assert.equal(layout(event), "this is the first value"); + assert.equal(layout(event), 'this is the first value'); assert.end(); }); t.end(); }); - batch.test("patternLayout", t => { - const originalListener = process.listeners("warning")[process.listeners("warning").length - 1]; - const warningListener = error => { - if (error.name === "DeprecationWarning") { - if (error.code.startsWith("log4js-node-DEP0003") || error.code.startsWith("log4js-node-DEP0004")) { + batch.test('patternLayout', (t) => { + const originalListener = + process.listeners('warning')[process.listeners('warning').length - 1]; + const warningListener = (error) => { + if (error.name === 'DeprecationWarning') { + if ( + error.code.startsWith('log4js-node-DEP0003') || + error.code.startsWith('log4js-node-DEP0004') + ) { return; } } originalListener(error); }; - process.off("warning", originalListener); - process.on("warning", warningListener); + process.off('warning', originalListener); + process.on('warning', warningListener); - const debugWasEnabled = debug.enabled("log4js:layouts"); + const debugWasEnabled = debug.enabled('log4js:layouts'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -273,38 +280,38 @@ test("log4js layouts", batch => { batch.teardown(async () => { // next event loop so that past warnings will not be printed setImmediate(() => { - process.off("warning", warningListener); - process.on("warning", originalListener); + process.off('warning', warningListener); + process.on('warning', originalListener); }); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); const tokens = { - testString: "testStringToken", + testString: 'testStringToken', testFunction() { - return "testFunctionToken"; + return 'testFunctionToken'; }, fnThatUsesLogEvent(logEvent) { return logEvent.level.toString(); - } + }, }; // console.log([Error('123').stack.split('\n').slice(1).join('\n')]) const callStack = - " at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)"; // eslint-disable-line max-len - const fileName = path.normalize("/log4js-node/test/tap/layouts-test.js"); + ' at repl:1:14\n at ContextifyScript.Script.runInThisContext (vm.js:50:33)\n at REPLServer.defaultEval (repl.js:240:29)\n at bound (domain.js:301:14)\n at REPLServer.runBound [as eval] (domain.js:314:12)\n at REPLServer.onLine (repl.js:468:10)\n at emitOne (events.js:121:20)\n at REPLServer.emit (events.js:211:7)\n at REPLServer.Interface._onLine (readline.js:280:10)\n at REPLServer.Interface._line (readline.js:629:8)'; // eslint-disable-line max-len + const fileName = path.normalize('/log4js-node/test/tap/layouts-test.js'); const lineNumber = 1; const columnNumber = 14; const event = { - data: ["this is a test"], - startTime: new Date("2010-12-05 14:18:30.045"), - categoryName: "multiple.levels.of.tests", + data: ['this is a test'], + startTime: new Date('2010-12-05 14:18:30.045'), + categoryName: 'multiple.levels.of.tests', level: { toString() { - return "DEBUG"; + return 'DEBUG'; }, - colour: "cyan" + colour: 'cyan', }, context: tokens, @@ -312,139 +319,142 @@ test("log4js layouts", batch => { callStack, fileName, lineNumber, - columnNumber + columnNumber, }; event.startTime.getTimezoneOffset = () => -600; - const layout = require("../../lib/layouts").patternLayout; + const layout = require('../../lib/layouts').patternLayout; - t.test('should default to "time logLevel loggerName - message"', assert => { - testPattern( - assert, - layout, - event, - tokens, - null, - `14:18:30 DEBUG multiple.levels.of.tests - this is a test${EOL}` - ); - assert.end(); - }); + t.test( + 'should default to "time logLevel loggerName - message"', + (assert) => { + testPattern( + assert, + layout, + event, + tokens, + null, + `14:18:30 DEBUG multiple.levels.of.tests - this is a test${EOL}` + ); + assert.end(); + } + ); - t.test("%r should output time only", assert => { - testPattern(assert, layout, event, tokens, "%r", "14:18:30"); + t.test('%r should output time only', (assert) => { + testPattern(assert, layout, event, tokens, '%r', '14:18:30'); assert.end(); }); - t.test("%p should output the log level", assert => { - testPattern(assert, layout, event, tokens, "%p", "DEBUG"); + t.test('%p should output the log level', (assert) => { + testPattern(assert, layout, event, tokens, '%p', 'DEBUG'); assert.end(); }); - t.test("%c should output the log category", assert => { + t.test('%c should output the log category', (assert) => { testPattern( assert, layout, event, tokens, - "%c", - "multiple.levels.of.tests" + '%c', + 'multiple.levels.of.tests' ); assert.end(); }); - t.test("%m should output the log data", assert => { - testPattern(assert, layout, event, tokens, "%m", "this is a test"); + t.test('%m should output the log data', (assert) => { + testPattern(assert, layout, event, tokens, '%m', 'this is a test'); assert.end(); }); - t.test("%n should output a new line", assert => { - testPattern(assert, layout, event, tokens, "%n", EOL); + t.test('%n should output a new line', (assert) => { + testPattern(assert, layout, event, tokens, '%n', EOL); assert.end(); }); - t.test("%h should output hostname", assert => { + t.test('%h should output hostname', (assert) => { testPattern( assert, layout, event, tokens, - "%h", + '%h', os.hostname().toString() ); assert.end(); }); - t.test("%z should output pid", assert => { - testPattern(assert, layout, event, tokens, "%z", process.pid.toString()); + t.test('%z should output pid', (assert) => { + testPattern(assert, layout, event, tokens, '%z', process.pid.toString()); assert.end(); }); - t.test("%z should pick up pid from log event if present", assert => { - event.pid = "1234"; - testPattern(assert, layout, event, tokens, "%z", "1234"); + t.test('%z should pick up pid from log event if present', (assert) => { + event.pid = '1234'; + testPattern(assert, layout, event, tokens, '%z', '1234'); delete event.pid; assert.end(); }); - t.test("%y should output pid (was cluster info)", assert => { - testPattern(assert, layout, event, tokens, "%y", process.pid.toString()); + t.test('%y should output pid (was cluster info)', (assert) => { + testPattern(assert, layout, event, tokens, '%y', process.pid.toString()); assert.end(); }); t.test( - "%c should handle category names like java-style package names", - assert => { - testPattern(assert, layout, event, tokens, "%c{1}", "tests"); - testPattern(assert, layout, event, tokens, "%c{2}", "of.tests"); - testPattern(assert, layout, event, tokens, "%c{3}", "levels.of.tests"); + '%c should handle category names like java-style package names', + (assert) => { + testPattern(assert, layout, event, tokens, '%c{1}', 'tests'); + testPattern(assert, layout, event, tokens, '%c{2}', 'of.tests'); + testPattern(assert, layout, event, tokens, '%c{3}', 'levels.of.tests'); testPattern( assert, layout, event, tokens, - "%c{4}", - "multiple.levels.of.tests" + '%c{4}', + 'multiple.levels.of.tests' ); testPattern( assert, layout, event, tokens, - "%c{5}", - "multiple.levels.of.tests" + '%c{5}', + 'multiple.levels.of.tests' ); testPattern( assert, layout, event, tokens, - "%c{99}", - "multiple.levels.of.tests" + '%c{99}', + 'multiple.levels.of.tests' ); assert.end(); } ); - t.test("%d should output the date in ISO8601 format", assert => { + t.test('%d should output the date in ISO8601 format', (assert) => { testPattern( assert, layout, event, tokens, - "%d", - "2010-12-05T14:18:30.045" + '%d', + '2010-12-05T14:18:30.045' ); assert.end(); }); - t.test("%d should allow for format specification", assert => { + t.test('%d should allow for format specification', (assert) => { testPattern( assert, layout, event, tokens, - "%d{ISO8601}", - "2010-12-05T14:18:30.045" + '%d{ISO8601}', + '2010-12-05T14:18:30.045' ); testPattern( @@ -452,54 +462,58 @@ test("log4js layouts", batch => { layout, event, tokens, - "%d{ISO8601_WITH_TZ_OFFSET}", - "2010-12-05T14:18:30.045+10:00" + '%d{ISO8601_WITH_TZ_OFFSET}', + '2010-12-05T14:18:30.045+10:00' ); - const DEP0003 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length; + const DEP0003 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0003') > -1 + ).length; testPattern( assert, layout, event, tokens, - "%d{ABSOLUTE}", // deprecated - "14:18:30.045" + '%d{ABSOLUTE}', // deprecated + '14:18:30.045' ); assert.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0003") > -1).length, + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0003') > -1).length, DEP0003 + 1, - "deprecation log4js-node-DEP0003 emitted" + 'deprecation log4js-node-DEP0003 emitted' ); testPattern( assert, layout, event, tokens, - "%d{ABSOLUTETIME}", - "14:18:30.045" + '%d{ABSOLUTETIME}', + '14:18:30.045' ); - const DEP0004 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length; + const DEP0004 = debugLogs.filter( + (e) => e.indexOf('log4js-node-DEP0004') > -1 + ).length; testPattern( assert, layout, event, tokens, - "%d{DATE}", // deprecated - "05 12 2010 14:18:30.045" + '%d{DATE}', // deprecated + '05 12 2010 14:18:30.045' ); assert.equal( - debugLogs.filter((e) => e.indexOf("log4js-node-DEP0004") > -1).length, + debugLogs.filter((e) => e.indexOf('log4js-node-DEP0004') > -1).length, DEP0004 + 1, - "deprecation log4js-node-DEP0004 emitted" + 'deprecation log4js-node-DEP0004 emitted' ); testPattern( assert, layout, event, tokens, - "%d{DATETIME}", - "05 12 2010 14:18:30.045" + '%d{DATETIME}', + '05 12 2010 14:18:30.045' ); testPattern( @@ -507,180 +521,200 @@ test("log4js layouts", batch => { layout, event, tokens, - "%d{yy MM dd hh mm ss}", - "10 12 05 14 18 30" + '%d{yy MM dd hh mm ss}', + '10 12 05 14 18 30' ); testPattern( assert, layout, event, tokens, - "%d{yyyy MM dd}", - "2010 12 05" + '%d{yyyy MM dd}', + '2010 12 05' ); testPattern( assert, layout, event, tokens, - "%d{yyyy MM dd hh mm ss SSS}", - "2010 12 05 14 18 30 045" + '%d{yyyy MM dd hh mm ss SSS}', + '2010 12 05 14 18 30 045' ); assert.end(); }); - t.test("%% should output %", assert => { - testPattern(assert, layout, event, tokens, "%%", "%"); + t.test('%% should output %', (assert) => { + testPattern(assert, layout, event, tokens, '%%', '%'); assert.end(); }); - t.test("%f should output filename", assert => { - testPattern(assert, layout, event, tokens, "%f", fileName); + t.test('%f should output filename', (assert) => { + testPattern(assert, layout, event, tokens, '%f', fileName); assert.end(); }); - t.test("%f should handle filename depth", assert => { - testPattern(assert, layout, event, tokens, "%f{1}", "layouts-test.js"); + t.test('%f should handle filename depth', (assert) => { + testPattern(assert, layout, event, tokens, '%f{1}', 'layouts-test.js'); testPattern( assert, layout, event, tokens, - "%f{2}", - path.join("tap", "layouts-test.js") + '%f{2}', + path.join('tap', 'layouts-test.js') ); testPattern( assert, layout, event, tokens, - "%f{3}", - path.join("test", "tap", "layouts-test.js") + '%f{3}', + path.join('test', 'tap', 'layouts-test.js') ); testPattern( assert, layout, event, tokens, - "%f{4}", - path.join("log4js-node","test","tap","layouts-test.js") + '%f{4}', + path.join('log4js-node', 'test', 'tap', 'layouts-test.js') ); testPattern( assert, layout, event, tokens, - "%f{5}", - path.join("/log4js-node","test","tap","layouts-test.js") + '%f{5}', + path.join('/log4js-node', 'test', 'tap', 'layouts-test.js') ); testPattern( assert, layout, event, tokens, - "%f{99}", - path.join("/log4js-node","test","tap","layouts-test.js") + '%f{99}', + path.join('/log4js-node', 'test', 'tap', 'layouts-test.js') ); assert.end(); }); - t.test("%f should accept truncation and padding", assert => { - testPattern(assert, layout, event, tokens, "%.5f", fileName.slice(0, 5)); - testPattern(assert, layout, event, tokens, "%20f{1}", " layouts-test.js"); - testPattern(assert, layout, event, tokens, "%30.30f{2}", ` ${ path.join("tap","layouts-test.js")}`); - testPattern(assert, layout, event, tokens, "%10.-5f{1}", " st.js"); + t.test('%f should accept truncation and padding', (assert) => { + testPattern(assert, layout, event, tokens, '%.5f', fileName.slice(0, 5)); + testPattern( + assert, + layout, + event, + tokens, + '%20f{1}', + ' layouts-test.js' + ); + testPattern( + assert, + layout, + event, + tokens, + '%30.30f{2}', + ` ${path.join('tap', 'layouts-test.js')}` + ); + testPattern(assert, layout, event, tokens, '%10.-5f{1}', ' st.js'); assert.end(); }); - t.test("%l should output line number", assert => { - testPattern(assert, layout, event, tokens, "%l", lineNumber.toString()); + t.test('%l should output line number', (assert) => { + testPattern(assert, layout, event, tokens, '%l', lineNumber.toString()); assert.end(); }); - t.test("%l should accept truncation and padding", assert => { - testPattern(assert, layout, event, tokens, "%5.10l", " 1"); - testPattern(assert, layout, event, tokens, "%.5l", "1"); - testPattern(assert, layout, event, tokens, "%.-5l", "1"); - testPattern(assert, layout, event, tokens, "%-5l", "1 "); + t.test('%l should accept truncation and padding', (assert) => { + testPattern(assert, layout, event, tokens, '%5.10l', ' 1'); + testPattern(assert, layout, event, tokens, '%.5l', '1'); + testPattern(assert, layout, event, tokens, '%.-5l', '1'); + testPattern(assert, layout, event, tokens, '%-5l', '1 '); assert.end(); }); - t.test("%o should output column postion", assert => { - testPattern(assert, layout, event, tokens, "%o", columnNumber.toString()); + t.test('%o should output column postion', (assert) => { + testPattern(assert, layout, event, tokens, '%o', columnNumber.toString()); assert.end(); }); - t.test("%o should accept truncation and padding", assert => { - testPattern(assert, layout, event, tokens, "%5.10o", " 14"); - testPattern(assert, layout, event, tokens, "%.5o", "14"); - testPattern(assert, layout, event, tokens, "%.1o", "1"); - testPattern(assert, layout, event, tokens, "%.-1o", "4"); - testPattern(assert, layout, event, tokens, "%-5o", "14 "); + t.test('%o should accept truncation and padding', (assert) => { + testPattern(assert, layout, event, tokens, '%5.10o', ' 14'); + testPattern(assert, layout, event, tokens, '%.5o', '14'); + testPattern(assert, layout, event, tokens, '%.1o', '1'); + testPattern(assert, layout, event, tokens, '%.-1o', '4'); + testPattern(assert, layout, event, tokens, '%-5o', '14 '); assert.end(); }); - t.test("%s should output stack", assert => { - testPattern(assert, layout, event, tokens, "%s", callStack); + t.test('%s should output stack', (assert) => { + testPattern(assert, layout, event, tokens, '%s', callStack); assert.end(); }); - t.test("%f should output empty string when fileName not exist", assert => { - delete event.fileName; - testPattern(assert, layout, event, tokens, "%f", ""); - assert.end(); - }); + t.test( + '%f should output empty string when fileName not exist', + (assert) => { + delete event.fileName; + testPattern(assert, layout, event, tokens, '%f', ''); + assert.end(); + } + ); t.test( - "%l should output empty string when lineNumber not exist", - assert => { + '%l should output empty string when lineNumber not exist', + (assert) => { delete event.lineNumber; - testPattern(assert, layout, event, tokens, "%l", ""); + testPattern(assert, layout, event, tokens, '%l', ''); assert.end(); } ); t.test( - "%o should output empty string when columnNumber not exist", - assert => { + '%o should output empty string when columnNumber not exist', + (assert) => { delete event.columnNumber; - testPattern(assert, layout, event, tokens, "%o", ""); + testPattern(assert, layout, event, tokens, '%o', ''); assert.end(); } ); - t.test("%s should output empty string when callStack not exist", assert => { - delete event.callStack; - testPattern(assert, layout, event, tokens, "%s", ""); - assert.end(); - }); + t.test( + '%s should output empty string when callStack not exist', + (assert) => { + delete event.callStack; + testPattern(assert, layout, event, tokens, '%s', ''); + assert.end(); + } + ); - t.test("should output anything not preceded by % as literal", assert => { + t.test('should output anything not preceded by % as literal', (assert) => { testPattern( assert, layout, event, tokens, - "blah blah blah", - "blah blah blah" + 'blah blah blah', + 'blah blah blah' ); assert.end(); }); t.test( - "should output the original string if no replacer matches the token", - assert => { - testPattern(assert, layout, event, tokens, "%a{3}", "a{3}"); + 'should output the original string if no replacer matches the token', + (assert) => { + testPattern(assert, layout, event, tokens, '%a{3}', 'a{3}'); assert.end(); } ); - t.test("should handle complicated patterns", assert => { + t.test('should handle complicated patterns', (assert) => { testPattern( assert, layout, event, tokens, - "%m%n %c{2} at %d{ABSOLUTE} cheese %p%n", // deprecated + '%m%n %c{2} at %d{ABSOLUTE} cheese %p%n', // deprecated `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` ); testPattern( @@ -688,214 +722,214 @@ test("log4js layouts", batch => { layout, event, tokens, - "%m%n %c{2} at %d{ABSOLUTETIME} cheese %p%n", + '%m%n %c{2} at %d{ABSOLUTETIME} cheese %p%n', `this is a test${EOL} of.tests at 14:18:30.045 cheese DEBUG${EOL}` ); assert.end(); }); - t.test("should truncate fields if specified", assert => { - testPattern(assert, layout, event, tokens, "%.4m", "this"); - testPattern(assert, layout, event, tokens, "%.7m", "this is"); - testPattern(assert, layout, event, tokens, "%.9m", "this is a"); - testPattern(assert, layout, event, tokens, "%.14m", "this is a test"); + t.test('should truncate fields if specified', (assert) => { + testPattern(assert, layout, event, tokens, '%.4m', 'this'); + testPattern(assert, layout, event, tokens, '%.7m', 'this is'); + testPattern(assert, layout, event, tokens, '%.9m', 'this is a'); + testPattern(assert, layout, event, tokens, '%.14m', 'this is a test'); testPattern( assert, layout, event, tokens, - "%.2919102m", - "this is a test" + '%.2919102m', + 'this is a test' ); - testPattern(assert, layout, event, tokens, "%.-4m", "test"); + testPattern(assert, layout, event, tokens, '%.-4m', 'test'); assert.end(); }); - t.test("should pad fields if specified", assert => { - testPattern(assert, layout, event, tokens, "%10p", " DEBUG"); - testPattern(assert, layout, event, tokens, "%8p", " DEBUG"); - testPattern(assert, layout, event, tokens, "%6p", " DEBUG"); - testPattern(assert, layout, event, tokens, "%4p", "DEBUG"); - testPattern(assert, layout, event, tokens, "%-4p", "DEBUG"); - testPattern(assert, layout, event, tokens, "%-6p", "DEBUG "); - testPattern(assert, layout, event, tokens, "%-8p", "DEBUG "); - testPattern(assert, layout, event, tokens, "%-10p", "DEBUG "); + t.test('should pad fields if specified', (assert) => { + testPattern(assert, layout, event, tokens, '%10p', ' DEBUG'); + testPattern(assert, layout, event, tokens, '%8p', ' DEBUG'); + testPattern(assert, layout, event, tokens, '%6p', ' DEBUG'); + testPattern(assert, layout, event, tokens, '%4p', 'DEBUG'); + testPattern(assert, layout, event, tokens, '%-4p', 'DEBUG'); + testPattern(assert, layout, event, tokens, '%-6p', 'DEBUG '); + testPattern(assert, layout, event, tokens, '%-8p', 'DEBUG '); + testPattern(assert, layout, event, tokens, '%-10p', 'DEBUG '); assert.end(); }); - t.test("%[%r%] should output colored time", assert => { + t.test('%[%r%] should output colored time', (assert) => { testPattern( assert, layout, event, tokens, - "%[%r%]", - "\x1B[36m14:18:30\x1B[39m" + '%[%r%]', + '\x1B[36m14:18:30\x1B[39m' ); assert.end(); }); t.test( - "%x{testString} should output the string stored in tokens", - assert => { + '%x{testString} should output the string stored in tokens', + (assert) => { testPattern( assert, layout, event, tokens, - "%x{testString}", - "testStringToken" + '%x{testString}', + 'testStringToken' ); assert.end(); } ); t.test( - "%x{testFunction} should output the result of the function stored in tokens", - assert => { + '%x{testFunction} should output the result of the function stored in tokens', + (assert) => { testPattern( assert, layout, event, tokens, - "%x{testFunction}", - "testFunctionToken" + '%x{testFunction}', + 'testFunctionToken' ); assert.end(); } ); t.test( - "%x{doesNotExist} should output the string stored in tokens", - assert => { - testPattern(assert, layout, event, tokens, "%x{doesNotExist}", "null"); + '%x{doesNotExist} should output the string stored in tokens', + (assert) => { + testPattern(assert, layout, event, tokens, '%x{doesNotExist}', 'null'); assert.end(); } ); t.test( - "%x{fnThatUsesLogEvent} should be able to use the logEvent", - assert => { + '%x{fnThatUsesLogEvent} should be able to use the logEvent', + (assert) => { testPattern( assert, layout, event, tokens, - "%x{fnThatUsesLogEvent}", - "DEBUG" + '%x{fnThatUsesLogEvent}', + 'DEBUG' ); assert.end(); } ); - t.test("%x should output the string stored in tokens", assert => { - testPattern(assert, layout, event, tokens, "%x", "null"); + t.test('%x should output the string stored in tokens', (assert) => { + testPattern(assert, layout, event, tokens, '%x', 'null'); assert.end(); }); t.test( - "%X{testString} should output the string stored in tokens", - assert => { + '%X{testString} should output the string stored in tokens', + (assert) => { testPattern( assert, layout, event, {}, - "%X{testString}", - "testStringToken" + '%X{testString}', + 'testStringToken' ); assert.end(); } ); t.test( - "%X{testFunction} should output the result of the function stored in tokens", - assert => { + '%X{testFunction} should output the result of the function stored in tokens', + (assert) => { testPattern( assert, layout, event, {}, - "%X{testFunction}", - "testFunctionToken" + '%X{testFunction}', + 'testFunctionToken' ); assert.end(); } ); t.test( - "%X{doesNotExist} should output the string stored in tokens", - assert => { - testPattern(assert, layout, event, {}, "%X{doesNotExist}", "null"); + '%X{doesNotExist} should output the string stored in tokens', + (assert) => { + testPattern(assert, layout, event, {}, '%X{doesNotExist}', 'null'); assert.end(); } ); t.test( - "%X{fnThatUsesLogEvent} should be able to use the logEvent", - assert => { + '%X{fnThatUsesLogEvent} should be able to use the logEvent', + (assert) => { testPattern( assert, layout, event, {}, - "%X{fnThatUsesLogEvent}", - "DEBUG" + '%X{fnThatUsesLogEvent}', + 'DEBUG' ); assert.end(); } ); - t.test("%X should output the string stored in tokens", assert => { - testPattern(assert, layout, event, {}, "%X", "null"); + t.test('%X should output the string stored in tokens', (assert) => { + testPattern(assert, layout, event, {}, '%X', 'null'); assert.end(); }); t.end(); }); - batch.test("layout makers", t => { - const layouts = require("../../lib/layouts"); + batch.test('layout makers', (t) => { + const layouts = require('../../lib/layouts'); - t.test("should have a maker for each layout", assert => { - assert.ok(layouts.layout("messagePassThrough")); - assert.ok(layouts.layout("basic")); - assert.ok(layouts.layout("colored")); - assert.ok(layouts.layout("coloured")); - assert.ok(layouts.layout("pattern")); - assert.ok(layouts.layout("dummy")); + t.test('should have a maker for each layout', (assert) => { + assert.ok(layouts.layout('messagePassThrough')); + assert.ok(layouts.layout('basic')); + assert.ok(layouts.layout('colored')); + assert.ok(layouts.layout('coloured')); + assert.ok(layouts.layout('pattern')); + assert.ok(layouts.layout('dummy')); assert.end(); }); t.test( - "layout pattern maker should pass pattern and tokens to layout from config", - assert => { - let layout = layouts.layout("pattern", { pattern: "%%" }); - assert.equal(layout({}), "%"); - layout = layouts.layout("pattern", { - pattern: "%x{testStringToken}", - tokens: { testStringToken: "cheese" } + 'layout pattern maker should pass pattern and tokens to layout from config', + (assert) => { + let layout = layouts.layout('pattern', { pattern: '%%' }); + assert.equal(layout({}), '%'); + layout = layouts.layout('pattern', { + pattern: '%x{testStringToken}', + tokens: { testStringToken: 'cheese' }, }); - assert.equal(layout({}), "cheese"); + assert.equal(layout({}), 'cheese'); assert.end(); } ); t.end(); }); - batch.test("add layout", t => { - const layouts = require("../../lib/layouts"); + batch.test('add layout', (t) => { + const layouts = require('../../lib/layouts'); - t.test("should be able to add a layout", assert => { - layouts.addLayout("test_layout", config => { - assert.equal(config, "test_config"); - return function(logEvent) { + t.test('should be able to add a layout', (assert) => { + layouts.addLayout('test_layout', (config) => { + assert.equal(config, 'test_config'); + return function (logEvent) { return `TEST LAYOUT >${logEvent.data}`; }; }); - const serializer = layouts.layout("test_layout", "test_config"); + const serializer = layouts.layout('test_layout', 'test_config'); assert.ok(serializer); - assert.equal(serializer({ data: "INPUT" }), "TEST LAYOUT >INPUT"); + assert.equal(serializer({ data: 'INPUT' }), 'TEST LAYOUT >INPUT'); assert.end(); }); t.end(); diff --git a/test/tap/levels-before-configure-test.js b/test/tap/levels-before-configure-test.js index b1a0b2b4..e75820ae 100644 --- a/test/tap/levels-before-configure-test.js +++ b/test/tap/levels-before-configure-test.js @@ -1,8 +1,8 @@ -const { test } = require("tap"); +const { test } = require('tap'); -test("Accessing things setup in configure before configure is called", batch => { - batch.test("should work", t => { - const log4js = require("../../lib/log4js"); +test('Accessing things setup in configure before configure is called', (batch) => { + batch.test('should work', (t) => { + const log4js = require('../../lib/log4js'); t.ok(log4js.levels); t.ok(log4js.connectLogger); t.end(); diff --git a/test/tap/levels-test.js b/test/tap/levels-test.js index 69fdbfee..89d7980b 100644 --- a/test/tap/levels-test.js +++ b/test/tap/levels-test.js @@ -1,9 +1,9 @@ -const { test } = require("tap"); -const levels = require("../../lib/levels"); +const { test } = require('tap'); +const levels = require('../../lib/levels'); function assertThat(assert, level) { function assertForEach(assertion, testFn, otherLevels) { - otherLevels.forEach(other => { + otherLevels.forEach((other) => { assertion.call(assert, testFn.call(level, other)); }); } @@ -26,13 +26,13 @@ function assertThat(assert, level) { }, isNotEqualTo(lvls) { assertForEach(assert.notOk, level.isEqualTo, lvls); - } + }, }; } -test("levels", batch => { - batch.test("values", t => { - t.test("should define some levels", assert => { +test('levels', (batch) => { + batch.test('values', (t) => { + t.test('should define some levels', (assert) => { assert.ok(levels.ALL); assert.ok(levels.TRACE); assert.ok(levels.DEBUG); @@ -45,7 +45,7 @@ test("levels", batch => { assert.end(); }); - t.test("ALL", assert => { + t.test('ALL', (assert) => { const all = levels.ALL; assertThat(assert, all).isLessThanOrEqualTo([ levels.ALL, @@ -56,7 +56,7 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, all).isNotGreaterThanOrEqualTo([ levels.TRACE, @@ -66,9 +66,9 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, all).isEqualTo([levels.getLevel("ALL")]); + assertThat(assert, all).isEqualTo([levels.getLevel('ALL')]); assertThat(assert, all).isNotEqualTo([ levels.TRACE, levels.DEBUG, @@ -77,12 +77,12 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("TRACE", assert => { + t.test('TRACE', (assert) => { const trace = levels.TRACE; assertThat(assert, trace).isLessThanOrEqualTo([ levels.DEBUG, @@ -91,12 +91,12 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, trace).isNotLessThanOrEqualTo([levels.ALL]); assertThat(assert, trace).isGreaterThanOrEqualTo([ levels.ALL, - levels.TRACE + levels.TRACE, ]); assertThat(assert, trace).isNotGreaterThanOrEqualTo([ levels.DEBUG, @@ -105,9 +105,9 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, trace).isEqualTo([levels.getLevel("TRACE")]); + assertThat(assert, trace).isEqualTo([levels.getLevel('TRACE')]); assertThat(assert, trace).isNotEqualTo([ levels.ALL, levels.DEBUG, @@ -116,12 +116,12 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("DEBUG", assert => { + t.test('DEBUG', (assert) => { const debug = levels.DEBUG; assertThat(assert, debug).isLessThanOrEqualTo([ levels.INFO, @@ -129,15 +129,15 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, debug).isNotLessThanOrEqualTo([ levels.ALL, - levels.TRACE + levels.TRACE, ]); assertThat(assert, debug).isGreaterThanOrEqualTo([ levels.ALL, - levels.TRACE + levels.TRACE, ]); assertThat(assert, debug).isNotGreaterThanOrEqualTo([ levels.INFO, @@ -145,9 +145,9 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, debug).isEqualTo([levels.getLevel("DEBUG")]); + assertThat(assert, debug).isEqualTo([levels.getLevel('DEBUG')]); assertThat(assert, debug).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -156,38 +156,38 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("INFO", assert => { + t.test('INFO', (assert) => { const info = levels.INFO; assertThat(assert, info).isLessThanOrEqualTo([ levels.WARN, levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, info).isNotLessThanOrEqualTo([ levels.ALL, levels.TRACE, - levels.DEBUG + levels.DEBUG, ]); assertThat(assert, info).isGreaterThanOrEqualTo([ levels.ALL, levels.TRACE, - levels.DEBUG + levels.DEBUG, ]); assertThat(assert, info).isNotGreaterThanOrEqualTo([ levels.WARN, levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, info).isEqualTo([levels.getLevel("INFO")]); + assertThat(assert, info).isEqualTo([levels.getLevel('INFO')]); assertThat(assert, info).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -196,38 +196,38 @@ test("levels", batch => { levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("WARN", assert => { + t.test('WARN', (assert) => { const warn = levels.WARN; assertThat(assert, warn).isLessThanOrEqualTo([ levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, warn).isNotLessThanOrEqualTo([ levels.ALL, levels.TRACE, levels.DEBUG, - levels.INFO + levels.INFO, ]); assertThat(assert, warn).isGreaterThanOrEqualTo([ levels.ALL, levels.TRACE, levels.DEBUG, - levels.INFO + levels.INFO, ]); assertThat(assert, warn).isNotGreaterThanOrEqualTo([ levels.ERROR, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, warn).isEqualTo([levels.getLevel("WARN")]); + assertThat(assert, warn).isEqualTo([levels.getLevel('WARN')]); assertThat(assert, warn).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -235,38 +235,38 @@ test("levels", batch => { levels.INFO, levels.ERROR, levels.FATAL, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("ERROR", assert => { + t.test('ERROR', (assert) => { const error = levels.ERROR; assertThat(assert, error).isLessThanOrEqualTo([ levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assertThat(assert, error).isNotLessThanOrEqualTo([ levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, - levels.WARN + levels.WARN, ]); assertThat(assert, error).isGreaterThanOrEqualTo([ levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, - levels.WARN + levels.WARN, ]); assertThat(assert, error).isNotGreaterThanOrEqualTo([ levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, error).isEqualTo([levels.getLevel("ERROR")]); + assertThat(assert, error).isEqualTo([levels.getLevel('ERROR')]); assertThat(assert, error).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -275,12 +275,12 @@ test("levels", batch => { levels.WARN, levels.FATAL, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("FATAL", assert => { + t.test('FATAL', (assert) => { const fatal = levels.FATAL; assertThat(assert, fatal).isLessThanOrEqualTo([levels.MARK, levels.OFF]); assertThat(assert, fatal).isNotLessThanOrEqualTo([ @@ -289,7 +289,7 @@ test("levels", batch => { levels.DEBUG, levels.INFO, levels.WARN, - levels.ERROR + levels.ERROR, ]); assertThat(assert, fatal).isGreaterThanOrEqualTo([ levels.ALL, @@ -297,13 +297,13 @@ test("levels", batch => { levels.DEBUG, levels.INFO, levels.WARN, - levels.ERROR + levels.ERROR, ]); assertThat(assert, fatal).isNotGreaterThanOrEqualTo([ levels.MARK, - levels.OFF + levels.OFF, ]); - assertThat(assert, fatal).isEqualTo([levels.getLevel("FATAL")]); + assertThat(assert, fatal).isEqualTo([levels.getLevel('FATAL')]); assertThat(assert, fatal).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -312,12 +312,12 @@ test("levels", batch => { levels.WARN, levels.ERROR, levels.MARK, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("MARK", assert => { + t.test('MARK', (assert) => { const mark = levels.MARK; assertThat(assert, mark).isLessThanOrEqualTo([levels.OFF]); assertThat(assert, mark).isNotLessThanOrEqualTo([ @@ -327,7 +327,7 @@ test("levels", batch => { levels.INFO, levels.WARN, levels.FATAL, - levels.ERROR + levels.ERROR, ]); assertThat(assert, mark).isGreaterThanOrEqualTo([ levels.ALL, @@ -336,10 +336,10 @@ test("levels", batch => { levels.INFO, levels.WARN, levels.ERROR, - levels.FATAL + levels.FATAL, ]); assertThat(assert, mark).isNotGreaterThanOrEqualTo([levels.OFF]); - assertThat(assert, mark).isEqualTo([levels.getLevel("MARK")]); + assertThat(assert, mark).isEqualTo([levels.getLevel('MARK')]); assertThat(assert, mark).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -348,12 +348,12 @@ test("levels", batch => { levels.WARN, levels.ERROR, levels.FATAL, - levels.OFF + levels.OFF, ]); assert.end(); }); - t.test("OFF", assert => { + t.test('OFF', (assert) => { const off = levels.OFF; assertThat(assert, off).isNotLessThanOrEqualTo([ levels.ALL, @@ -363,7 +363,7 @@ test("levels", batch => { levels.WARN, levels.ERROR, levels.FATAL, - levels.MARK + levels.MARK, ]); assertThat(assert, off).isGreaterThanOrEqualTo([ levels.ALL, @@ -373,9 +373,9 @@ test("levels", batch => { levels.WARN, levels.ERROR, levels.FATAL, - levels.MARK + levels.MARK, ]); - assertThat(assert, off).isEqualTo([levels.getLevel("OFF")]); + assertThat(assert, off).isEqualTo([levels.getLevel('OFF')]); assertThat(assert, off).isNotEqualTo([ levels.ALL, levels.TRACE, @@ -384,53 +384,53 @@ test("levels", batch => { levels.WARN, levels.ERROR, levels.FATAL, - levels.MARK + levels.MARK, ]); assert.end(); }); t.end(); }); - batch.test("isGreaterThanOrEqualTo", t => { + batch.test('isGreaterThanOrEqualTo', (t) => { const info = levels.INFO; - assertThat(t, info).isGreaterThanOrEqualTo(["all", "trace", "debug"]); + assertThat(t, info).isGreaterThanOrEqualTo(['all', 'trace', 'debug']); assertThat(t, info).isNotGreaterThanOrEqualTo([ - "warn", - "ERROR", - "Fatal", - "MARK", - "off" + 'warn', + 'ERROR', + 'Fatal', + 'MARK', + 'off', ]); t.end(); }); - batch.test("isLessThanOrEqualTo", t => { + batch.test('isLessThanOrEqualTo', (t) => { const info = levels.INFO; - assertThat(t, info).isNotLessThanOrEqualTo(["all", "trace", "debug"]); + assertThat(t, info).isNotLessThanOrEqualTo(['all', 'trace', 'debug']); assertThat(t, info).isLessThanOrEqualTo([ - "warn", - "ERROR", - "Fatal", - "MARK", - "off" + 'warn', + 'ERROR', + 'Fatal', + 'MARK', + 'off', ]); t.end(); }); - batch.test("isEqualTo", t => { + batch.test('isEqualTo', (t) => { const info = levels.INFO; - assertThat(t, info).isEqualTo(["info", "INFO", "iNfO"]); + assertThat(t, info).isEqualTo(['info', 'INFO', 'iNfO']); t.end(); }); - batch.test("getLevel", t => { - t.equal(levels.getLevel("debug"), levels.DEBUG); - t.equal(levels.getLevel("DEBUG"), levels.DEBUG); - t.equal(levels.getLevel("DeBuG"), levels.DEBUG); - t.notOk(levels.getLevel("cheese")); - t.equal(levels.getLevel("cheese", levels.DEBUG), levels.DEBUG); + batch.test('getLevel', (t) => { + t.equal(levels.getLevel('debug'), levels.DEBUG); + t.equal(levels.getLevel('DEBUG'), levels.DEBUG); + t.equal(levels.getLevel('DeBuG'), levels.DEBUG); + t.notOk(levels.getLevel('cheese')); + t.equal(levels.getLevel('cheese', levels.DEBUG), levels.DEBUG); t.equal( - levels.getLevel({ level: 10000, levelStr: "DEBUG", colour: "cyan" }), + levels.getLevel({ level: 10000, levelStr: 'DEBUG', colour: 'cyan' }), levels.DEBUG ); t.end(); diff --git a/test/tap/log4js.json b/test/tap/log4js.json index 3a4e54a9..1bae43a3 100644 --- a/test/tap/log4js.json +++ b/test/tap/log4js.json @@ -1,16 +1,16 @@ { "appenders": [ - { - "category": "tests", - "type": "file", - "filename": "tmp-tests.log", - "layout": { - "type": "messagePassThrough" - } + { + "category": "tests", + "type": "file", + "filename": "tmp-tests.log", + "layout": { + "type": "messagePassThrough" + } } ], - + "levels": { - "tests": "WARN" + "tests": "WARN" } } diff --git a/test/tap/logLevelFilter-test.js b/test/tap/logLevelFilter-test.js index de022d95..aebf8b4a 100644 --- a/test/tap/logLevelFilter-test.js +++ b/test/tap/logLevelFilter-test.js @@ -1,8 +1,8 @@ -const { test } = require("tap"); -const fs = require("fs"); -const os = require("os"); +const { test } = require('tap'); +const fs = require('fs'); +const os = require('os'); -const EOL = os.EOL || "\n"; +const EOL = os.EOL || '\n'; function remove(filename) { try { @@ -12,47 +12,47 @@ function remove(filename) { } } -test("log4js logLevelFilter", batch => { - batch.test("appender", t => { - const log4js = require("../../lib/log4js"); - const recording = require("../../lib/appenders/recording"); +test('log4js logLevelFilter', (batch) => { + batch.test('appender', (t) => { + const log4js = require('../../lib/log4js'); + const recording = require('../../lib/appenders/recording'); log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "logLevelFilter", - appender: "recorder", - level: "ERROR" - } + type: 'logLevelFilter', + appender: 'recorder', + level: 'ERROR', + }, }, categories: { - default: { appenders: ["filtered"], level: "debug" } - } + default: { appenders: ['filtered'], level: 'debug' }, + }, }); - const logger = log4js.getLogger("logLevelTest"); - logger.debug("this should not trigger an event"); - logger.warn("neither should this"); - logger.error("this should, though"); - logger.fatal("so should this"); + const logger = log4js.getLogger('logLevelTest'); + logger.debug('this should not trigger an event'); + logger.warn('neither should this'); + logger.error('this should, though'); + logger.fatal('so should this'); const logEvents = recording.replay(); t.test( - "should only pass log events greater than or equal to its own level", - assert => { + 'should only pass log events greater than or equal to its own level', + (assert) => { assert.equal(logEvents.length, 2); - assert.equal(logEvents[0].data[0], "this should, though"); - assert.equal(logEvents[1].data[0], "so should this"); + assert.equal(logEvents[0].data[0], 'this should, though'); + assert.equal(logEvents[1].data[0], 'so should this'); assert.end(); } ); t.end(); }); - batch.test("configure", t => { - const log4js = require("../../lib/log4js"); + batch.test('configure', (t) => { + const log4js = require('../../lib/log4js'); remove(`${__dirname}/logLevelFilter.log`); remove(`${__dirname}/logLevelFilter-warnings.log`); @@ -66,89 +66,89 @@ test("log4js logLevelFilter", batch => { log4js.configure({ appenders: { - "warning-file": { - type: "file", - filename: "test/tap/logLevelFilter-warnings.log", - layout: { type: "messagePassThrough" } + 'warning-file': { + type: 'file', + filename: 'test/tap/logLevelFilter-warnings.log', + layout: { type: 'messagePassThrough' }, }, warnings: { - type: "logLevelFilter", - level: "WARN", - appender: "warning-file" + type: 'logLevelFilter', + level: 'WARN', + appender: 'warning-file', }, - "debug-file": { - type: "file", - filename: "test/tap/logLevelFilter-debugs.log", - layout: { type: "messagePassThrough" } + 'debug-file': { + type: 'file', + filename: 'test/tap/logLevelFilter-debugs.log', + layout: { type: 'messagePassThrough' }, }, debugs: { - type: "logLevelFilter", - level: "TRACE", - maxLevel: "DEBUG", - appender: "debug-file" + type: 'logLevelFilter', + level: 'TRACE', + maxLevel: 'DEBUG', + appender: 'debug-file', }, tests: { - type: "file", - filename: "test/tap/logLevelFilter.log", + type: 'file', + filename: 'test/tap/logLevelFilter.log', layout: { - type: "messagePassThrough" - } - } + type: 'messagePassThrough', + }, + }, }, categories: { - default: { appenders: ["tests", "warnings", "debugs"], level: "trace" } - } + default: { appenders: ['tests', 'warnings', 'debugs'], level: 'trace' }, + }, }); - const logger = log4js.getLogger("tests"); - logger.debug("debug"); - logger.info("info"); - logger.error("error"); - logger.warn("warn"); - logger.debug("debug"); - logger.trace("trace"); + const logger = log4js.getLogger('tests'); + logger.debug('debug'); + logger.info('info'); + logger.error('error'); + logger.warn('warn'); + logger.debug('debug'); + logger.trace('trace'); // wait for the file system to catch up setTimeout(() => { - t.test("tmp-tests.log should contain all log messages", assert => { + t.test('tmp-tests.log should contain all log messages', (assert) => { fs.readFile( `${__dirname}/logLevelFilter.log`, - "utf8", + 'utf8', (err, contents) => { const messages = contents.trim().split(EOL); assert.same(messages, [ - "debug", - "info", - "error", - "warn", - "debug", - "trace" + 'debug', + 'info', + 'error', + 'warn', + 'debug', + 'trace', ]); assert.end(); } ); }); t.test( - "tmp-tests-warnings.log should contain only error and warning logs", - assert => { + 'tmp-tests-warnings.log should contain only error and warning logs', + (assert) => { fs.readFile( `${__dirname}/logLevelFilter-warnings.log`, - "utf8", + 'utf8', (err, contents) => { const messages = contents.trim().split(EOL); - assert.same(messages, ["error", "warn"]); + assert.same(messages, ['error', 'warn']); assert.end(); } ); } ); t.test( - "tmp-tests-debugs.log should contain only trace and debug logs", - assert => { + 'tmp-tests-debugs.log should contain only trace and debug logs', + (assert) => { fs.readFile( `${__dirname}/logLevelFilter-debugs.log`, - "utf8", + 'utf8', (err, contents) => { const messages = contents.trim().split(EOL); - assert.same(messages, ["debug", "debug", "trace"]); + assert.same(messages, ['debug', 'debug', 'trace']); assert.end(); } ); diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 6582dfb2..a3eb7386 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -1,85 +1,85 @@ -const { test } = require("tap"); -const debug = require("debug")("log4js:test.logger"); -const sandbox = require("@log4js-node/sandboxed-module"); -const callsites = require("callsites"); -const levels = require("../../lib/levels"); -const categories = require("../../lib/categories"); +const { test } = require('tap'); +const debug = require('debug')('log4js:test.logger'); +const sandbox = require('@log4js-node/sandboxed-module'); +const callsites = require('callsites'); +const levels = require('../../lib/levels'); +const categories = require('../../lib/categories'); const events = []; const messages = []; -const Logger = sandbox.require("../../lib/logger", { +const Logger = sandbox.require('../../lib/logger', { requires: { - "./levels": levels, - "./categories": categories, - "./clustering": { + './levels': levels, + './categories': categories, + './clustering': { isMaster: () => true, - onlyOnMaster: fn => fn(), - send: evt => { - debug("fake clustering got event:", evt); + onlyOnMaster: (fn) => fn(), + send: (evt) => { + debug('fake clustering got event:', evt); events.push(evt); - } - } + }, + }, }, globals: { console: { ...console, error(msg) { messages.push(msg); - } - } - } + }, + }, + }, }); const testConfig = { - level: levels.TRACE + level: levels.TRACE, }; -test("../../lib/logger", batch => { +test('../../lib/logger', (batch) => { batch.beforeEach(() => { events.length = 0; testConfig.level = levels.TRACE; }); - batch.test("constructor with no parameters", t => { - t.throws(() => new Logger(), new Error("No category provided.")); + batch.test('constructor with no parameters', (t) => { + t.throws(() => new Logger(), new Error('No category provided.')); t.end(); }); - batch.test("constructor with category", t => { - const logger = new Logger("cheese"); - t.equal(logger.category, "cheese", "should use category"); - t.equal(logger.level, levels.OFF, "should use OFF log level"); + batch.test('constructor with category', (t) => { + const logger = new Logger('cheese'); + t.equal(logger.category, 'cheese', 'should use category'); + t.equal(logger.level, levels.OFF, 'should use OFF log level'); t.end(); }); - batch.test("set level should delegate", t => { - const logger = new Logger("cheese"); - logger.level = "debug"; - t.equal(logger.category, "cheese", "should use category"); - t.equal(logger.level, levels.DEBUG, "should use level"); + batch.test('set level should delegate', (t) => { + const logger = new Logger('cheese'); + logger.level = 'debug'; + t.equal(logger.category, 'cheese', 'should use category'); + t.equal(logger.level, levels.DEBUG, 'should use level'); t.end(); }); - batch.test("isLevelEnabled", t => { - const logger = new Logger("cheese"); + batch.test('isLevelEnabled', (t) => { + const logger = new Logger('cheese'); const functions = [ - "isTraceEnabled", - "isDebugEnabled", - "isInfoEnabled", - "isWarnEnabled", - "isErrorEnabled", - "isFatalEnabled" + 'isTraceEnabled', + 'isDebugEnabled', + 'isInfoEnabled', + 'isWarnEnabled', + 'isErrorEnabled', + 'isFatalEnabled', ]; t.test( - "should provide a level enabled function for all levels", - subtest => { + 'should provide a level enabled function for all levels', + (subtest) => { subtest.plan(functions.length); - functions.forEach(fn => { - subtest.type(logger[fn], "function"); + functions.forEach((fn) => { + subtest.type(logger[fn], 'function'); }); } ); - logger.level = "INFO"; + logger.level = 'INFO'; t.notOk(logger.isTraceEnabled()); t.notOk(logger.isDebugEnabled()); t.ok(logger.isInfoEnabled()); @@ -89,101 +89,104 @@ test("../../lib/logger", batch => { t.end(); }); - batch.test("should send log events to dispatch function", t => { - const logger = new Logger("cheese"); - logger.level = "debug"; - logger.debug("Event 1"); - logger.debug("Event 2"); - logger.debug("Event 3"); + batch.test('should send log events to dispatch function', (t) => { + const logger = new Logger('cheese'); + logger.level = 'debug'; + logger.debug('Event 1'); + logger.debug('Event 2'); + logger.debug('Event 3'); t.equal(events.length, 3); - t.equal(events[0].data[0], "Event 1"); - t.equal(events[1].data[0], "Event 2"); - t.equal(events[2].data[0], "Event 3"); + t.equal(events[0].data[0], 'Event 1'); + t.equal(events[1].data[0], 'Event 2'); + t.equal(events[2].data[0], 'Event 3'); t.end(); }); - batch.test("should add context values to every event", t => { - const logger = new Logger("fromage"); - logger.level = "debug"; - logger.debug("Event 1"); - logger.addContext("cheese", "edam"); - logger.debug("Event 2"); - logger.debug("Event 3"); - logger.addContext("biscuits", "timtam"); - logger.debug("Event 4"); - logger.removeContext("cheese"); - logger.debug("Event 5"); + batch.test('should add context values to every event', (t) => { + const logger = new Logger('fromage'); + logger.level = 'debug'; + logger.debug('Event 1'); + logger.addContext('cheese', 'edam'); + logger.debug('Event 2'); + logger.debug('Event 3'); + logger.addContext('biscuits', 'timtam'); + logger.debug('Event 4'); + logger.removeContext('cheese'); + logger.debug('Event 5'); logger.clearContext(); - logger.debug("Event 6"); + logger.debug('Event 6'); t.equal(events.length, 6); t.same(events[0].context, {}); - t.same(events[1].context, { cheese: "edam" }); - t.same(events[2].context, { cheese: "edam" }); - t.same(events[3].context, { cheese: "edam", biscuits: "timtam" }); - t.same(events[4].context, { biscuits: "timtam" }); + t.same(events[1].context, { cheese: 'edam' }); + t.same(events[2].context, { cheese: 'edam' }); + t.same(events[3].context, { cheese: 'edam', biscuits: 'timtam' }); + t.same(events[4].context, { biscuits: 'timtam' }); t.same(events[5].context, {}); t.end(); }); - batch.test("should not break when log data has no toString", t => { - const logger = new Logger("thing"); - logger.level = "debug"; - logger.info("Just testing ", Object.create(null)); + batch.test('should not break when log data has no toString', (t) => { + const logger = new Logger('thing'); + logger.level = 'debug'; + logger.info('Just testing ', Object.create(null)); t.equal(events.length, 1); t.end(); }); - batch.test("default should disable useCallStack unless manual enable", t => { - const logger = new Logger("stack"); - logger.level = "debug"; + batch.test( + 'default should disable useCallStack unless manual enable', + (t) => { + const logger = new Logger('stack'); + logger.level = 'debug'; - t.equal(logger.useCallStack, false); + t.equal(logger.useCallStack, false); - logger.useCallStack = false; - t.equal(logger.useCallStack, false); + logger.useCallStack = false; + t.equal(logger.useCallStack, false); - logger.useCallStack = 0; - t.equal(logger.useCallStack, false); + logger.useCallStack = 0; + t.equal(logger.useCallStack, false); - logger.useCallStack = ""; - t.equal(logger.useCallStack, false); + logger.useCallStack = ''; + t.equal(logger.useCallStack, false); - logger.useCallStack = null; - t.equal(logger.useCallStack, false); + logger.useCallStack = null; + t.equal(logger.useCallStack, false); - logger.useCallStack = undefined; - t.equal(logger.useCallStack, false); + logger.useCallStack = undefined; + t.equal(logger.useCallStack, false); - logger.useCallStack = "true"; - t.equal(logger.useCallStack, false); + logger.useCallStack = 'true'; + t.equal(logger.useCallStack, false); - logger.useCallStack = true; - t.equal(logger.useCallStack, true); - t.end(); - }); + logger.useCallStack = true; + t.equal(logger.useCallStack, true); + t.end(); + } + ); - batch.test("should correctly switch on/off useCallStack", t => { - const logger = new Logger("stack"); - logger.level = "debug"; + batch.test('should correctly switch on/off useCallStack', (t) => { + const logger = new Logger('stack'); + logger.level = 'debug'; logger.useCallStack = true; t.equal(logger.useCallStack, true); - logger.info("hello world"); + logger.info('hello world'); const callsite = callsites()[0]; t.equal(events.length, 1); - t.equal(events[0].data[0], "hello world"); + t.equal(events[0].data[0], 'hello world'); t.equal(events[0].fileName, callsite.getFileName()); t.equal(events[0].lineNumber, callsite.getLineNumber() - 1); t.equal(events[0].columnNumber, 12); logger.useCallStack = false; - logger.info("disabled"); + logger.info('disabled'); t.equal(logger.useCallStack, false); - t.equal(events[1].data[0], "disabled"); + t.equal(events[1].data[0], 'disabled'); t.equal(events[1].fileName, undefined); t.equal(events[1].lineNumber, undefined); t.equal(events[1].columnNumber, undefined); @@ -191,37 +194,37 @@ test("../../lib/logger", batch => { }); batch.test( - "Once switch on/off useCallStack will apply all same category loggers", - t => { - const logger1 = new Logger("stack"); - logger1.level = "debug"; + 'Once switch on/off useCallStack will apply all same category loggers', + (t) => { + const logger1 = new Logger('stack'); + logger1.level = 'debug'; logger1.useCallStack = true; - const logger2 = new Logger("stack"); - logger2.level = "debug"; + const logger2 = new Logger('stack'); + logger2.level = 'debug'; - logger1.info("hello world"); + logger1.info('hello world'); const callsite = callsites()[0]; t.equal(logger1.useCallStack, true); t.equal(events.length, 1); - t.equal(events[0].data[0], "hello world"); + t.equal(events[0].data[0], 'hello world'); t.equal(events[0].fileName, callsite.getFileName()); t.equal(events[0].lineNumber, callsite.getLineNumber() - 1); t.equal(events[0].columnNumber, 15); // col of the '.' in logger1.info(...) - logger2.info("hello world"); + logger2.info('hello world'); const callsite2 = callsites()[0]; t.equal(logger2.useCallStack, true); - t.equal(events[1].data[0], "hello world"); + t.equal(events[1].data[0], 'hello world'); t.equal(events[1].fileName, callsite2.getFileName()); t.equal(events[1].lineNumber, callsite2.getLineNumber() - 1); t.equal(events[1].columnNumber, 15); // col of the '.' in logger1.info(...) logger1.useCallStack = false; - logger2.info("hello world"); + logger2.info('hello world'); t.equal(logger2.useCallStack, false); - t.equal(events[2].data[0], "hello world"); + t.equal(events[2].data[0], 'hello world'); t.equal(events[2].fileName, undefined); t.equal(events[2].lineNumber, undefined); t.equal(events[2].columnNumber, undefined); @@ -230,84 +233,137 @@ test("../../lib/logger", batch => { } ); - batch.test("parseCallStack function coverage", t => { - const logger = new Logger("stack"); + batch.test('parseCallStack function coverage', (t) => { + const logger = new Logger('stack'); logger.useCallStack = true; let results; results = logger.parseCallStack(new Error()); t.ok(results); - t.equal(messages.length, 0, "should not have error"); + t.equal(messages.length, 0, 'should not have error'); - results = logger.parseCallStack(""); + results = logger.parseCallStack(''); t.notOk(results); - t.equal(messages.length, 1, "should have error"); + t.equal(messages.length, 1, 'should have error'); t.end(); }); - batch.test("should correctly change the parseCallStack function", t => { - const logger = new Logger("stack"); - const parseFunction = function() { + batch.test('should correctly change the parseCallStack function', (t) => { + const logger = new Logger('stack'); + const parseFunction = function () { return { - functionName: "test function name", - fileName: "test file name", + functionName: 'test function name', + fileName: 'test file name', lineNumber: 15, columnNumber: 25, - callStack: "test callstack" + callStack: 'test callstack', }; }; - logger.level = "debug"; + logger.level = 'debug'; logger.useCallStack = true; logger.setParseCallStackFunction(parseFunction); t.equal(logger.parseCallStack, parseFunction); - logger.info("test parseCallStack"); - t.equal(events[0].functionName, "test function name"); - t.equal(events[0].fileName, "test file name"); + logger.info('test parseCallStack'); + t.equal(events[0].functionName, 'test function name'); + t.equal(events[0].fileName, 'test file name'); t.equal(events[0].lineNumber, 15); t.equal(events[0].columnNumber, 25); - t.equal(events[0].callStack, "test callstack"); + t.equal(events[0].callStack, 'test callstack'); t.end(); }); - batch.test("creating/cloning of category", t => { - const defaultLogger = new Logger("default"); - defaultLogger.level = "trace"; + batch.test('creating/cloning of category', (t) => { + const defaultLogger = new Logger('default'); + defaultLogger.level = 'trace'; defaultLogger.useCallStack = true; - t.test("category should be cloned from parent/default if does not exist", assert => { - const originalLength = categories.size; - - const logger = new Logger("cheese1"); - assert.equal(categories.size, originalLength + 1, "category should be cloned"); - assert.equal(logger.level, levels.TRACE, "should inherit level=TRACE from default-category"); - assert.equal(logger.useCallStack, true, "should inherit useCallStack=true from default-category"); - assert.end(); - }); - - t.test("changing level should not impact default-category or useCallStack", assert => { - const logger = new Logger("cheese2"); - logger.level = "debug"; - assert.equal(logger.level, levels.DEBUG, "should be changed to level=DEBUG"); - assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); - assert.equal(logger.useCallStack, true, "should remain as useCallStack=true"); - assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); - assert.end(); - }); - - t.test("changing useCallStack should not impact default-category or level", assert => { - const logger = new Logger("cheese3"); - logger.useCallStack = false; - assert.equal(logger.useCallStack, false, "should be changed to useCallStack=false"); - assert.equal(defaultLogger.useCallStack, true, "default-category should remain as useCallStack=true"); - assert.equal(logger.level, levels.TRACE, "should remain as level=TRACE"); - assert.equal(defaultLogger.level, levels.TRACE, "default-category should remain as level=TRACE"); - assert.end(); - }); + t.test( + 'category should be cloned from parent/default if does not exist', + (assert) => { + const originalLength = categories.size; + + const logger = new Logger('cheese1'); + assert.equal( + categories.size, + originalLength + 1, + 'category should be cloned' + ); + assert.equal( + logger.level, + levels.TRACE, + 'should inherit level=TRACE from default-category' + ); + assert.equal( + logger.useCallStack, + true, + 'should inherit useCallStack=true from default-category' + ); + assert.end(); + } + ); + + t.test( + 'changing level should not impact default-category or useCallStack', + (assert) => { + const logger = new Logger('cheese2'); + logger.level = 'debug'; + assert.equal( + logger.level, + levels.DEBUG, + 'should be changed to level=DEBUG' + ); + assert.equal( + defaultLogger.level, + levels.TRACE, + 'default-category should remain as level=TRACE' + ); + assert.equal( + logger.useCallStack, + true, + 'should remain as useCallStack=true' + ); + assert.equal( + defaultLogger.useCallStack, + true, + 'default-category should remain as useCallStack=true' + ); + assert.end(); + } + ); + + t.test( + 'changing useCallStack should not impact default-category or level', + (assert) => { + const logger = new Logger('cheese3'); + logger.useCallStack = false; + assert.equal( + logger.useCallStack, + false, + 'should be changed to useCallStack=false' + ); + assert.equal( + defaultLogger.useCallStack, + true, + 'default-category should remain as useCallStack=true' + ); + assert.equal( + logger.level, + levels.TRACE, + 'should remain as level=TRACE' + ); + assert.equal( + defaultLogger.level, + levels.TRACE, + 'default-category should remain as level=TRACE' + ); + assert.end(); + } + ); t.end(); }); diff --git a/test/tap/logging-test.js b/test/tap/logging-test.js index 9cfdab8b..4461d14f 100644 --- a/test/tap/logging-test.js +++ b/test/tap/logging-test.js @@ -1,148 +1,151 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); -const util = require("util"); -const recording = require("../../lib/appenders/recording"); - -test("log4js", batch => { - batch.test("shutdown should return appenders and categories back to initial state", t => { - const stringifyMap = (map) => JSON.stringify(Array.from(map)); - const deepCopyMap = (map) => new Map(JSON.parse(stringifyMap(map))); - - const log4js = require("../../lib/log4js"); - - const appenders = require("../../lib/appenders"); - const categories = require("../../lib/categories"); - const initialAppenders = deepCopyMap(appenders); - const initialCategories = deepCopyMap(categories); - - log4js.configure({ - appenders: { recorder: { type: "recording" } }, - categories: { default: { appenders: ["recorder"], level: "DEBUG" } } - }); - - const configuredAppenders = deepCopyMap(appenders); - const configuredCategories = deepCopyMap(categories); - t.not( - stringifyMap(configuredAppenders), - stringifyMap(initialAppenders), - "appenders should be different from initial state" - ); - t.not( - stringifyMap(configuredCategories), - stringifyMap(initialCategories), - "categories should be different from initial state" - ); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); +const util = require('util'); +const recording = require('../../lib/appenders/recording'); + +test('log4js', (batch) => { + batch.test( + 'shutdown should return appenders and categories back to initial state', + (t) => { + const stringifyMap = (map) => JSON.stringify(Array.from(map)); + const deepCopyMap = (map) => new Map(JSON.parse(stringifyMap(map))); + + const log4js = require('../../lib/log4js'); + + const appenders = require('../../lib/appenders'); + const categories = require('../../lib/categories'); + const initialAppenders = deepCopyMap(appenders); + const initialCategories = deepCopyMap(categories); + + log4js.configure({ + appenders: { recorder: { type: 'recording' } }, + categories: { default: { appenders: ['recorder'], level: 'DEBUG' } }, + }); - log4js.shutdown(() => { - const finalAppenders = deepCopyMap(appenders); - const finalCategories = deepCopyMap(categories); - t.equal( - stringifyMap(finalAppenders), - stringifyMap(initialAppenders), - "appenders should revert back to initial state" + const configuredAppenders = deepCopyMap(appenders); + const configuredCategories = deepCopyMap(categories); + t.not( + stringifyMap(configuredAppenders), + stringifyMap(initialAppenders), + 'appenders should be different from initial state' ); - t.equal( - stringifyMap(finalCategories), - stringifyMap(initialCategories), - "categories should revert back to initial state" + t.not( + stringifyMap(configuredCategories), + stringifyMap(initialCategories), + 'categories should be different from initial state' ); - t.end(); - }); - }); - batch.test("getLogger", t => { - const log4js = require("../../lib/log4js"); + log4js.shutdown(() => { + const finalAppenders = deepCopyMap(appenders); + const finalCategories = deepCopyMap(categories); + t.equal( + stringifyMap(finalAppenders), + stringifyMap(initialAppenders), + 'appenders should revert back to initial state' + ); + t.equal( + stringifyMap(finalCategories), + stringifyMap(initialCategories), + 'categories should revert back to initial state' + ); + t.end(); + }); + } + ); + + batch.test('getLogger', (t) => { + const log4js = require('../../lib/log4js'); log4js.configure({ - appenders: { recorder: { type: "recording" } }, - categories: { default: { appenders: ["recorder"], level: "DEBUG" } } + appenders: { recorder: { type: 'recording' } }, + categories: { default: { appenders: ['recorder'], level: 'DEBUG' } }, }); - const logger = log4js.getLogger("tests"); - - t.test("should take a category and return a logger", assert => { - assert.equal(logger.category, "tests"); - assert.equal(logger.level.toString(), "DEBUG"); - assert.type(logger.debug, "function"); - assert.type(logger.info, "function"); - assert.type(logger.warn, "function"); - assert.type(logger.error, "function"); - assert.type(logger.fatal, "function"); + const logger = log4js.getLogger('tests'); + + t.test('should take a category and return a logger', (assert) => { + assert.equal(logger.category, 'tests'); + assert.equal(logger.level.toString(), 'DEBUG'); + assert.type(logger.debug, 'function'); + assert.type(logger.info, 'function'); + assert.type(logger.warn, 'function'); + assert.type(logger.error, 'function'); + assert.type(logger.fatal, 'function'); assert.end(); }); - t.test("log events", assert => { + t.test('log events', (assert) => { recording.reset(); - logger.debug("Debug event"); - logger.trace("Trace event 1"); - logger.trace("Trace event 2"); - logger.warn("Warning event"); - logger.error("Aargh!", new Error("Pants are on fire!")); - logger.error("Simulated CouchDB problem", { + logger.debug('Debug event'); + logger.trace('Trace event 1'); + logger.trace('Trace event 2'); + logger.warn('Warning event'); + logger.error('Aargh!', new Error('Pants are on fire!')); + logger.error('Simulated CouchDB problem', { err: 127, - cause: "incendiary underwear" + cause: 'incendiary underwear', }); const events = recording.replay(); - assert.equal(events[0].level.toString(), "DEBUG"); - assert.equal(events[0].data[0], "Debug event"); - assert.type(events[0].startTime, "Date"); + assert.equal(events[0].level.toString(), 'DEBUG'); + assert.equal(events[0].data[0], 'Debug event'); + assert.type(events[0].startTime, 'Date'); - assert.equal(events.length, 4, "should not emit events of a lower level"); - assert.equal(events[1].level.toString(), "WARN"); + assert.equal(events.length, 4, 'should not emit events of a lower level'); + assert.equal(events[1].level.toString(), 'WARN'); assert.type( events[2].data[1], - "Error", - "should include the error if passed in" + 'Error', + 'should include the error if passed in' ); - assert.equal(events[2].data[1].message, "Pants are on fire!"); + assert.equal(events[2].data[1].message, 'Pants are on fire!'); assert.end(); }); t.end(); }); - batch.test("when shutdown is called", t => { + batch.test('when shutdown is called', (t) => { const events = { - shutdownCalled: [] + shutdownCalled: [], }; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - "./appenders/file": { - name: "file", + './appenders/file': { + name: 'file', configure() { function thing(evt) { events.event = evt; return null; } - thing.shutdown = function(cb) { + thing.shutdown = function (cb) { events.shutdownCalled.push(true); cb(); }; return thing; - } - } - } + }, + }, + }, }); const config = { appenders: { file: { - type: "file", - filename: "cheesy-wotsits.log", + type: 'file', + filename: 'cheesy-wotsits.log', maxLogSize: 1024, - backups: 3 + backups: 3, }, alsoFile: { - type: "file" - } + type: 'file', + }, }, categories: { - default: { appenders: ["file", "alsoFile"], level: "DEBUG" } - } + default: { appenders: ['file', 'alsoFile'], level: 'DEBUG' }, + }, }; log4js.configure(config); @@ -151,21 +154,23 @@ test("log4js", batch => { t.equal( events.shutdownCalled.length, 2, - "should invoke appender shutdowns" + 'should invoke appender shutdowns' ); - logger.info("this should not go to the appenders"); - logger.log("info", "this should not go to the appenders"); - logger._log(require("../../lib/levels").INFO, ["this should not go to the appenders"]); + logger.info('this should not go to the appenders'); + logger.log('info', 'this should not go to the appenders'); + logger._log(require('../../lib/levels').INFO, [ + 'this should not go to the appenders', + ]); t.notOk(events.event); t.end(); }); }); - batch.test("configuration when passed as filename", t => { + batch.test('configuration when passed as filename', (t) => { let appenderConfig; let configFilename; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { ignoreMissing: true, requires: { fs: { @@ -177,66 +182,66 @@ test("log4js", batch => { return JSON.stringify({ appenders: { file: { - type: "file", - filename: "whatever.log" - } + type: 'file', + filename: 'whatever.log', + }, }, - categories: { default: { appenders: ["file"], level: "DEBUG" } } + categories: { default: { appenders: ['file'], level: 'DEBUG' } }, }); }, readdirSync() { - return ["file"]; - } + return ['file']; + }, }, - "./file": { + './file': { configure(configuration) { appenderConfig = configuration; - return function() {}; - } - } - } + return function () {}; + }, + }, + }, }); - log4js.configure("/path/to/cheese.json"); + log4js.configure('/path/to/cheese.json'); t.equal( configFilename, - "/path/to/cheese.json", - "should read the config from a file" + '/path/to/cheese.json', + 'should read the config from a file' ); t.equal( appenderConfig.filename, - "whatever.log", - "should pass config to appender" + 'whatever.log', + 'should pass config to appender' ); t.end(); }); - batch.test("with configure not called", t => { + batch.test('with configure not called', (t) => { const fakeStdoutAppender = { configure() { this.required = true; - return function(evt) { + return function (evt) { fakeStdoutAppender.evt = evt; }; - } + }, }; - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - "./appenders/stdout": fakeStdoutAppender - } + './appenders/stdout': fakeStdoutAppender, + }, }); - const logger = log4js.getLogger("some-logger"); - logger.debug("This is a test"); - t.ok(fakeStdoutAppender.required, "stdout should be required"); - t.notOk(fakeStdoutAppender.evt, "should not log anything"); + const logger = log4js.getLogger('some-logger'); + logger.debug('This is a test'); + t.ok(fakeStdoutAppender.required, 'stdout should be required'); + t.notOk(fakeStdoutAppender.evt, 'should not log anything'); t.end(); }); - batch.test("with configure called with empty values", t => { - [null, undefined, "", " ", []].forEach(config => { - const log4js = require("../../lib/log4js"); + batch.test('with configure called with empty values', (t) => { + [null, undefined, '', ' ', []].forEach((config) => { + const log4js = require('../../lib/log4js'); const expectedError = `Problem reading config from file "${util.inspect( config )}". Error was ENOENT: no such file or directory`; @@ -246,22 +251,22 @@ test("log4js", batch => { t.end(); }); - batch.test("configuration persistence", t => { - const firstLog4js = require("../../lib/log4js"); + batch.test('configuration persistence', (t) => { + const firstLog4js = require('../../lib/log4js'); firstLog4js.configure({ - appenders: { recorder: { type: "recording" } }, - categories: { default: { appenders: ["recorder"], level: "DEBUG" } } + appenders: { recorder: { type: 'recording' } }, + categories: { default: { appenders: ['recorder'], level: 'DEBUG' } }, }); recording.reset(); - const secondLog4js = require("../../lib/log4js"); + const secondLog4js = require('../../lib/log4js'); secondLog4js .getLogger() - .info("This should go to the appender defined in firstLog4js"); + .info('This should go to the appender defined in firstLog4js'); t.equal( recording.replay()[0].data[0], - "This should go to the appender defined in firstLog4js" + 'This should go to the appender defined in firstLog4js' ); t.end(); }); diff --git a/test/tap/multi-file-appender-test.js b/test/tap/multi-file-appender-test.js index 3becca37..937ccda0 100644 --- a/test/tap/multi-file-appender-test.js +++ b/test/tap/multi-file-appender-test.js @@ -1,83 +1,82 @@ -const process = require("process"); -const { test } = require("tap"); -const debug = require("debug"); -const fs = require("fs"); -const sandbox = require("@log4js-node/sandboxed-module"); -const log4js = require("../../lib/log4js"); +const process = require('process'); +const { test } = require('tap'); +const debug = require('debug'); +const fs = require('fs'); +const sandbox = require('@log4js-node/sandboxed-module'); +const log4js = require('../../lib/log4js'); -const removeFiles = async filenames => { - if (!Array.isArray(filenames)) - filenames = [filenames]; - const promises = filenames.map(filename => fs.promises.unlink(filename)); +const removeFiles = async (filenames) => { + if (!Array.isArray(filenames)) filenames = [filenames]; + const promises = filenames.map((filename) => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; -test("multiFile appender", batch => { +test('multiFile appender', (batch) => { batch.test( - "should write to multiple files based on the loggingEvent property", - t => { + 'should write to multiple files based on the loggingEvent property', + (t) => { t.teardown(async () => { - await removeFiles(["logs/A.log", "logs/B.log"]); + await removeFiles(['logs/A.log', 'logs/B.log']); }); log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "categoryName", - extension: ".log" - } + type: 'multiFile', + base: 'logs/', + property: 'categoryName', + extension: '.log', + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerA = log4js.getLogger("A"); - const loggerB = log4js.getLogger("B"); - loggerA.info("I am in logger A"); - loggerB.info("I am in logger B"); + const loggerA = log4js.getLogger('A'); + const loggerB = log4js.getLogger('B'); + loggerA.info('I am in logger A'); + loggerB.info('I am in logger B'); log4js.shutdown(() => { - t.match(fs.readFileSync("logs/A.log", "utf-8"), "I am in logger A"); - t.match(fs.readFileSync("logs/B.log", "utf-8"), "I am in logger B"); + t.match(fs.readFileSync('logs/A.log', 'utf-8'), 'I am in logger A'); + t.match(fs.readFileSync('logs/B.log', 'utf-8'), 'I am in logger B'); t.end(); }); } ); batch.test( - "should write to multiple files based on loggingEvent.context properties", - t => { + 'should write to multiple files based on loggingEvent.context properties', + (t) => { t.teardown(async () => { - await removeFiles(["logs/C.log", "logs/D.log"]); + await removeFiles(['logs/C.log', 'logs/D.log']); }); log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log" - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerC = log4js.getLogger("cheese"); - const loggerD = log4js.getLogger("biscuits"); - loggerC.addContext("label", "C"); - loggerD.addContext("label", "D"); - loggerC.info("I am in logger C"); - loggerD.info("I am in logger D"); + const loggerC = log4js.getLogger('cheese'); + const loggerD = log4js.getLogger('biscuits'); + loggerC.addContext('label', 'C'); + loggerD.addContext('label', 'D'); + loggerC.info('I am in logger C'); + loggerD.info('I am in logger D'); log4js.shutdown(() => { - t.match(fs.readFileSync("logs/C.log", "utf-8"), "I am in logger C"); - t.match(fs.readFileSync("logs/D.log", "utf-8"), "I am in logger D"); + t.match(fs.readFileSync('logs/C.log', 'utf-8'), 'I am in logger C'); + t.match(fs.readFileSync('logs/D.log', 'utf-8'), 'I am in logger D'); t.end(); }); } ); - batch.test("should close file after timeout", t => { + batch.test('should close file after timeout', (t) => { /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ - const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugWasEnabled = debug.enabled('log4js:multiFile'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -90,8 +89,10 @@ test("multiFile appender", batch => { debug.enable(`${originalNamespace}, log4js:multiFile`); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); - await removeFiles("logs/C.log"); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); + await removeFiles('logs/C.log'); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); @@ -100,52 +101,55 @@ test("multiFile appender", batch => { log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log", - timeout: timeoutMs - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + timeout: timeoutMs, + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerC = log4js.getLogger("cheese"); - loggerC.addContext("label", "C"); - loggerC.info("I am in logger C"); + const loggerC = log4js.getLogger('cheese'); + loggerC.addContext('label', 'C'); + loggerC.info('I am in logger C'); setTimeout(() => { t.match( debugLogs[debugLogs.length - 1], `C not used for > ${timeoutMs} ms => close`, - "(timeout1) should have closed" + '(timeout1) should have closed' ); t.end(); - }, timeoutMs*1 + 50); // add a 50 ms delay + }, timeoutMs * 1 + 50); // add a 50 ms delay }); - batch.test("should close file safely after timeout", t => { - const error = new Error("fileAppender shutdown error"); - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + batch.test('should close file safely after timeout', (t) => { + const error = new Error('fileAppender shutdown error'); + const sandboxedLog4js = sandbox.require('../../lib/log4js', { requires: { - "./appenders/file": { + './appenders/file': { configure(config, layouts) { - const fileAppender = require("../../lib/appenders/file").configure(config, layouts); + const fileAppender = require('../../lib/appenders/file').configure( + config, + layouts + ); const originalShutdown = fileAppender.shutdown; fileAppender.shutdown = function (complete) { - const onCallback = function() { + const onCallback = function () { complete(error); }; originalShutdown(onCallback); }; return fileAppender; - } + }, }, - debug - } + debug, + }, }); /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ - const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugWasEnabled = debug.enabled('log4js:multiFile'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -158,8 +162,10 @@ test("multiFile appender", batch => { debug.enable(`${originalNamespace}, log4js:multiFile`); t.teardown(async () => { - await new Promise(resolve => { sandboxedLog4js.shutdown(resolve); }); - await removeFiles("logs/C.log"); + await new Promise((resolve) => { + sandboxedLog4js.shutdown(resolve); + }); + await removeFiles('logs/C.log'); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); @@ -168,38 +174,38 @@ test("multiFile appender", batch => { sandboxedLog4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log", - timeout: timeoutMs - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + timeout: timeoutMs, + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerC = sandboxedLog4js.getLogger("cheese"); - loggerC.addContext("label", "C"); - loggerC.info("I am in logger C"); + const loggerC = sandboxedLog4js.getLogger('cheese'); + loggerC.addContext('label', 'C'); + loggerC.info('I am in logger C'); setTimeout(() => { t.match( debugLogs[debugLogs.length - 2], `C not used for > ${timeoutMs} ms => close`, - "(timeout1) should have closed" + '(timeout1) should have closed' ); t.match( debugLogs[debugLogs.length - 1], `ignore error on file shutdown: ${error.message}`, - "safely shutdown" + 'safely shutdown' ); t.end(); - }, timeoutMs*1 + 50); // add a 50 ms delay + }, timeoutMs * 1 + 50); // add a 50 ms delay }); - batch.test("should close file after extended timeout", t => { + batch.test('should close file after extended timeout', (t) => { /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ - const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugWasEnabled = debug.enabled('log4js:multiFile'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -212,8 +218,10 @@ test("multiFile appender", batch => { debug.enable(`${originalNamespace}, log4js:multiFile`); t.teardown(async () => { - await new Promise(resolve => { log4js.shutdown(resolve); }); - await removeFiles("logs/D.log"); + await new Promise((resolve) => { + log4js.shutdown(resolve); + }); + await removeFiles('logs/D.log'); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); @@ -222,47 +230,49 @@ test("multiFile appender", batch => { log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log", - timeout: timeoutMs - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + timeout: timeoutMs, + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerD = log4js.getLogger("cheese"); - loggerD.addContext("label", "D"); - loggerD.info("I am in logger D"); + const loggerD = log4js.getLogger('cheese'); + loggerD.addContext('label', 'D'); + loggerD.info('I am in logger D'); setTimeout(() => { - loggerD.info("extending activity!"); + loggerD.info('extending activity!'); t.match( debugLogs[debugLogs.length - 1], - "D extending activity", - "should have extended" + 'D extending activity', + 'should have extended' ); - }, timeoutMs/2); + }, timeoutMs / 2); setTimeout(() => { t.notOk( - debugLogs.some(s => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1), - "(timeout1) should not have closed" + debugLogs.some( + (s) => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1 + ), + '(timeout1) should not have closed' ); - }, timeoutMs*1 + 50); // add a 50 ms delay + }, timeoutMs * 1 + 50); // add a 50 ms delay setTimeout(() => { t.match( debugLogs[debugLogs.length - 1], `D not used for > ${timeoutMs} ms => close`, - "(timeout2) should have closed" + '(timeout2) should have closed' ); t.end(); - }, timeoutMs*2 + 50); // add a 50 ms delay + }, timeoutMs * 2 + 50); // add a 50 ms delay }); - batch.test("should clear interval for active timers on shutdown", t => { + batch.test('should clear interval for active timers on shutdown', (t) => { /* checking that the file is closed after a timeout is done by looking at the debug logs since detecting file locks with node.js is platform specific. */ - const debugWasEnabled = debug.enabled("log4js:multiFile"); + const debugWasEnabled = debug.enabled('log4js:multiFile'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { @@ -275,7 +285,7 @@ test("multiFile appender", batch => { debug.enable(`${originalNamespace}, log4js:multiFile`); t.teardown(async () => { - await removeFiles("logs/D.log"); + await removeFiles('logs/D.log'); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); @@ -284,160 +294,162 @@ test("multiFile appender", batch => { log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log", - timeout: timeoutMs - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + timeout: timeoutMs, + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); - const loggerD = log4js.getLogger("cheese"); - loggerD.addContext("label", "D"); - loggerD.info("I am in logger D"); + const loggerD = log4js.getLogger('cheese'); + loggerD.addContext('label', 'D'); + loggerD.info('I am in logger D'); log4js.shutdown(() => { t.notOk( - debugLogs.some(s => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1), - "should not have closed" + debugLogs.some( + (s) => s.indexOf(`D not used for > ${timeoutMs} ms => close`) !== -1 + ), + 'should not have closed' ); t.ok( - debugLogs.some(s => s.indexOf("clearing timer for D") !== -1), - "should have cleared timers" + debugLogs.some((s) => s.indexOf('clearing timer for D') !== -1), + 'should have cleared timers' ); t.match( debugLogs[debugLogs.length - 1], - "calling shutdown for D", - "should have called shutdown" + 'calling shutdown for D', + 'should have called shutdown' ); t.end(); }); }); batch.test( - "should fail silently if loggingEvent property has no value", - t => { + 'should fail silently if loggingEvent property has no value', + (t) => { t.teardown(async () => { - await removeFiles("logs/E.log"); + await removeFiles('logs/E.log'); }); log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log" - } + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); const loggerE = log4js.getLogger(); - loggerE.addContext("label", "E"); - loggerE.info("I am in logger E"); - loggerE.removeContext("label"); - loggerE.info("I am not in logger E"); - loggerE.addContext("label", null); - loggerE.info("I am also not in logger E"); + loggerE.addContext('label', 'E'); + loggerE.info('I am in logger E'); + loggerE.removeContext('label'); + loggerE.info('I am not in logger E'); + loggerE.addContext('label', null); + loggerE.info('I am also not in logger E'); log4js.shutdown(() => { - const contents = fs.readFileSync("logs/E.log", "utf-8"); - t.match(contents, "I am in logger E"); - t.notMatch(contents, "I am not in logger E"); - t.notMatch(contents, "I am also not in logger E"); + const contents = fs.readFileSync('logs/E.log', 'utf-8'); + t.match(contents, 'I am in logger E'); + t.notMatch(contents, 'I am not in logger E'); + t.notMatch(contents, 'I am also not in logger E'); t.end(); }); } ); - batch.test("should pass options to rolling file stream", t => { + batch.test('should pass options to rolling file stream', (t) => { t.teardown(async () => { - await removeFiles(["logs/F.log", "logs/F.log.1", "logs/F.log.2"]); + await removeFiles(['logs/F.log', 'logs/F.log.1', 'logs/F.log.2']); }); log4js.configure({ appenders: { multi: { - type: "multiFile", - base: "logs/", - property: "label", - extension: ".log", + type: 'multiFile', + base: 'logs/', + property: 'label', + extension: '.log', maxLogSize: 30, backups: 2, - layout: { type: "messagePassThrough" } - } + layout: { type: 'messagePassThrough' }, + }, }, - categories: { default: { appenders: ["multi"], level: "info" } } + categories: { default: { appenders: ['multi'], level: 'info' } }, }); const loggerF = log4js.getLogger(); - loggerF.addContext("label", "F"); - loggerF.info("Being in logger F is the best."); - loggerF.info("I am also in logger F, awesome"); - loggerF.info("I am in logger F"); + loggerF.addContext('label', 'F'); + loggerF.info('Being in logger F is the best.'); + loggerF.info('I am also in logger F, awesome'); + loggerF.info('I am in logger F'); log4js.shutdown(() => { - let contents = fs.readFileSync("logs/F.log", "utf-8"); - t.match(contents, "I am in logger F"); - contents = fs.readFileSync("logs/F.log.1", "utf-8"); - t.match(contents, "I am also in logger F"); - contents = fs.readFileSync("logs/F.log.2", "utf-8"); - t.match(contents, "Being in logger F is the best"); + let contents = fs.readFileSync('logs/F.log', 'utf-8'); + t.match(contents, 'I am in logger F'); + contents = fs.readFileSync('logs/F.log.1', 'utf-8'); + t.match(contents, 'I am also in logger F'); + contents = fs.readFileSync('logs/F.log.2', 'utf-8'); + t.match(contents, 'Being in logger F is the best'); t.end(); }); }); - batch.test("should inherit config from category hierarchy", t => { + batch.test('should inherit config from category hierarchy', (t) => { t.teardown(async () => { - await removeFiles("logs/test.someTest.log"); + await removeFiles('logs/test.someTest.log'); }); log4js.configure({ appenders: { - out: { type: "stdout" }, + out: { type: 'stdout' }, test: { - type: "multiFile", - base: "logs/", - property: "categoryName", - extension: ".log" - } + type: 'multiFile', + base: 'logs/', + property: 'categoryName', + extension: '.log', + }, }, categories: { - default: { appenders: ["out"], level: "info" }, - test: { appenders: ["test"], level: "debug" } - } + default: { appenders: ['out'], level: 'info' }, + test: { appenders: ['test'], level: 'debug' }, + }, }); - const testLogger = log4js.getLogger("test.someTest"); - testLogger.debug("This should go to the file"); + const testLogger = log4js.getLogger('test.someTest'); + testLogger.debug('This should go to the file'); log4js.shutdown(() => { - const contents = fs.readFileSync("logs/test.someTest.log", "utf-8"); - t.match(contents, "This should go to the file"); + const contents = fs.readFileSync('logs/test.someTest.log', 'utf-8'); + t.match(contents, 'This should go to the file'); t.end(); }); }); - batch.test("should shutdown safely even if it is not used", t => { + batch.test('should shutdown safely even if it is not used', (t) => { log4js.configure({ appenders: { - out: { type: "stdout" }, + out: { type: 'stdout' }, test: { - type: "multiFile", - base: "logs/", - property: "categoryName", - extension: ".log" - } + type: 'multiFile', + base: 'logs/', + property: 'categoryName', + extension: '.log', + }, }, categories: { - default: { appenders: ["out"], level: "info" }, - test: { appenders: ["test"], level: "debug" } - } + default: { appenders: ['out'], level: 'info' }, + test: { appenders: ['test'], level: 'debug' }, + }, }); log4js.shutdown(() => { - t.ok("callback is called"); + t.ok('callback is called'); t.end(); }); }); batch.teardown(async () => { try { - const files = fs.readdirSync("logs"); - await removeFiles(files.map(filename => `logs/${filename}`)); - fs.rmdirSync("logs"); + const files = fs.readdirSync('logs'); + await removeFiles(files.map((filename) => `logs/${filename}`)); + fs.rmdirSync('logs'); } catch (e) { // doesn't matter } diff --git a/test/tap/multiprocess-shutdown-test.js b/test/tap/multiprocess-shutdown-test.js index 8395d0be..e46fede7 100644 --- a/test/tap/multiprocess-shutdown-test.js +++ b/test/tap/multiprocess-shutdown-test.js @@ -1,21 +1,21 @@ -const { test } = require("tap"); -const net = require("net"); -const childProcess = require("child_process"); -const sandbox = require("@log4js-node/sandboxed-module"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const net = require('net'); +const childProcess = require('child_process'); +const sandbox = require('@log4js-node/sandboxed-module'); +const log4js = require('../../lib/log4js'); -test("multiprocess appender shutdown (master)", { timeout: 5000 }, t => { +test('multiprocess appender shutdown (master)', { timeout: 5000 }, (t) => { log4js.configure({ appenders: { - stdout: { type: "stdout" }, + stdout: { type: 'stdout' }, multi: { - type: "multiprocess", - mode: "master", + type: 'multiprocess', + mode: 'master', loggerPort: 12345, - appender: "stdout" - } + appender: 'stdout', + }, }, - categories: { default: { appenders: ["multi"], level: "debug" } } + categories: { default: { appenders: ['multi'], level: 'debug' } }, }); setTimeout(() => { @@ -23,11 +23,11 @@ test("multiprocess appender shutdown (master)", { timeout: 5000 }, t => { setTimeout(() => { net .connect({ port: 12345 }, () => { - t.fail("connection should not still work"); + t.fail('connection should not still work'); t.end(); }) - .on("error", err => { - t.ok(err, "we got a connection error"); + .on('error', (err) => { + t.ok(err, 'we got a connection error'); t.end(); }); }, 1000); @@ -35,7 +35,7 @@ test("multiprocess appender shutdown (master)", { timeout: 5000 }, t => { }, 1000); }); -test("multiprocess appender shutdown (worker)", t => { +test('multiprocess appender shutdown (worker)', (t) => { const fakeConnection = { evts: {}, msgs: [], @@ -50,26 +50,26 @@ test("multiprocess appender shutdown (worker)", t => { }, end(cb) { this.endCb = cb; - } + }, }; - const logLib = sandbox.require("../../lib/log4js", { + const logLib = sandbox.require('../../lib/log4js', { requires: { net: { createConnection() { return fakeConnection; - } - } - } + }, + }, + }, }); logLib.configure({ - appenders: { worker: { type: "multiprocess", mode: "worker" } }, - categories: { default: { appenders: ["worker"], level: "debug" } } + appenders: { worker: { type: 'multiprocess', mode: 'worker' } }, + categories: { default: { appenders: ['worker'], level: 'debug' } }, }); logLib .getLogger() .info( - "Putting something in the buffer before the connection is established" + 'Putting something in the buffer before the connection is established' ); // nothing been written yet. t.equal(fakeConnection.msgs.length, 0); @@ -94,32 +94,32 @@ test("multiprocess appender shutdown (worker)", t => { }, 500); }); -test("multiprocess appender crash (worker)", t => { +test('multiprocess appender crash (worker)', (t) => { const loggerPort = 12346; - const vcr = require("../../lib/appenders/recording"); + const vcr = require('../../lib/appenders/recording'); log4js.configure({ appenders: { - console: { type: "recording" }, + console: { type: 'recording' }, multi: { - type: "multiprocess", - mode: "master", + type: 'multiprocess', + mode: 'master', loggerPort, - appender: "console" - } + appender: 'console', + }, }, - categories: { default: { appenders: ["multi"], level: "debug" } } + categories: { default: { appenders: ['multi'], level: 'debug' } }, }); - const worker = childProcess.fork(require.resolve("../multiprocess-worker"), [ - "start-multiprocess-worker", - loggerPort + const worker = childProcess.fork(require.resolve('../multiprocess-worker'), [ + 'start-multiprocess-worker', + loggerPort, ]); - worker.on("message", m => { - if (m === "worker is done") { + worker.on('message', (m) => { + if (m === 'worker is done') { setTimeout(() => { worker.kill(); - t.equal(vcr.replay()[0].data[0], "Logging from worker"); + t.equal(vcr.replay()[0].data[0], 'Logging from worker'); log4js.shutdown(() => t.end()); }, 100); } diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index 4e615213..b67aa555 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -1,8 +1,8 @@ -const childProcess = require("child_process"); -const { test } = require("tap"); -const flatted = require("flatted"); -const sandbox = require("@log4js-node/sandboxed-module"); -const recording = require("../../lib/appenders/recording"); +const childProcess = require('child_process'); +const { test } = require('tap'); +const flatted = require('flatted'); +const sandbox = require('@log4js-node/sandboxed-module'); +const recording = require('../../lib/appenders/recording'); function makeFakeNet() { return { @@ -24,104 +24,107 @@ function makeFakeNet() { }, end() { fakeNet.closeCalled = true; - } + }, }; }, createServer(cb) { const fakeNet = this; cb({ - remoteAddress: "1.2.3.4", - remotePort: "1234", + remoteAddress: '1.2.3.4', + remotePort: '1234', setEncoding(encoding) { fakeNet.encoding = encoding; }, on(event, cb2) { fakeNet.cbs[event] = cb2; - } + }, }); return { listen(port, host) { fakeNet.port = port; fakeNet.host = host; - } + }, }; - } + }, }; } -test("Multiprocess Appender", async batch => { +test('Multiprocess Appender', async (batch) => { batch.beforeEach(() => { recording.erase(); }); - batch.test("worker", t => { + batch.test('worker', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); log4js.configure({ appenders: { worker: { - type: "multiprocess", - mode: "worker", + type: 'multiprocess', + mode: 'worker', loggerPort: 1234, - loggerHost: "pants" - } + loggerHost: 'pants', + }, }, - categories: { default: { appenders: ["worker"], level: "trace" } } + categories: { default: { appenders: ['worker'], level: 'trace' } }, }); const logger = log4js.getLogger(); - logger.info("before connect"); + logger.info('before connect'); fakeNet.cbs.connect(); - logger.info("after connect"); + logger.info('after connect'); fakeNet.cbs.close(); - logger.info("after error, before connect"); + logger.info('after error, before connect'); fakeNet.cbs.connect(); - logger.info("after error, after connect"); - logger.error(new Error("Error test")); + logger.info('after error, after connect'); + logger.error(new Error('Error test')); const net = fakeNet; - t.test("should open a socket to the loggerPort and loggerHost", assert => { - assert.equal(net.port, 1234); - assert.equal(net.host, "pants"); - assert.end(); - }); + t.test( + 'should open a socket to the loggerPort and loggerHost', + (assert) => { + assert.equal(net.port, 1234); + assert.equal(net.host, 'pants'); + assert.end(); + } + ); t.test( - "should buffer messages written before socket is connected", - assert => { - assert.match(net.data[0], "before connect"); + 'should buffer messages written before socket is connected', + (assert) => { + assert.match(net.data[0], 'before connect'); assert.end(); } ); t.test( - "should write log messages to socket as flatted strings with a terminator string", - assert => { - assert.match(net.data[0], "before connect"); - assert.equal(net.data[1], "__LOG4JS__"); - assert.match(net.data[2], "after connect"); - assert.equal(net.data[3], "__LOG4JS__"); - assert.equal(net.encoding, "utf8"); + 'should write log messages to socket as flatted strings with a terminator string', + (assert) => { + assert.match(net.data[0], 'before connect'); + assert.equal(net.data[1], '__LOG4JS__'); + assert.match(net.data[2], 'after connect'); + assert.equal(net.data[3], '__LOG4JS__'); + assert.equal(net.encoding, 'utf8'); assert.end(); } ); - t.test("should attempt to re-open the socket on error", assert => { - assert.match(net.data[4], "after error, before connect"); - assert.equal(net.data[5], "__LOG4JS__"); - assert.match(net.data[6], "after error, after connect"); - assert.equal(net.data[7], "__LOG4JS__"); + t.test('should attempt to re-open the socket on error', (assert) => { + assert.match(net.data[4], 'after error, before connect'); + assert.equal(net.data[5], '__LOG4JS__'); + assert.match(net.data[6], 'after error, after connect'); + assert.equal(net.data[7], '__LOG4JS__'); assert.equal(net.createConnectionCalled, 2); assert.end(); }); - t.test("should serialize an Error correctly", assert => { + t.test('should serialize an Error correctly', (assert) => { assert.ok( flatted.parse(net.data[8]).data[0].stack, `Expected:\n\n${net.data[8]}\n\n to have a 'data[0].stack' property` @@ -134,172 +137,172 @@ test("Multiprocess Appender", async batch => { t.end(); }); - batch.test("worker with timeout", t => { + batch.test('worker with timeout', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); log4js.configure({ - appenders: { worker: { type: "multiprocess", mode: "worker" } }, - categories: { default: { appenders: ["worker"], level: "trace" } } + appenders: { worker: { type: 'multiprocess', mode: 'worker' } }, + categories: { default: { appenders: ['worker'], level: 'trace' } }, }); const logger = log4js.getLogger(); - logger.info("before connect"); + logger.info('before connect'); fakeNet.cbs.connect(); - logger.info("after connect"); + logger.info('after connect'); fakeNet.cbs.timeout(); - logger.info("after timeout, before close"); + logger.info('after timeout, before close'); fakeNet.cbs.close(); - logger.info("after close, before connect"); + logger.info('after close, before connect'); fakeNet.cbs.connect(); - logger.info("after close, after connect"); + logger.info('after close, after connect'); const net = fakeNet; - t.test("should attempt to re-open the socket", assert => { + t.test('should attempt to re-open the socket', (assert) => { // skipping the __LOG4JS__ separators - assert.match(net.data[0], "before connect"); - assert.match(net.data[2], "after connect"); - assert.match(net.data[4], "after timeout, before close"); - assert.match(net.data[6], "after close, before connect"); - assert.match(net.data[8], "after close, after connect"); + assert.match(net.data[0], 'before connect'); + assert.match(net.data[2], 'after connect'); + assert.match(net.data[4], 'after timeout, before close'); + assert.match(net.data[6], 'after close, before connect'); + assert.match(net.data[8], 'after close, after connect'); assert.equal(net.createConnectionCalled, 2); assert.end(); }); t.end(); }); - batch.test("worker with error", t => { + batch.test('worker with error', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); log4js.configure({ - appenders: { worker: { type: "multiprocess", mode: "worker" } }, - categories: { default: { appenders: ["worker"], level: "trace" } } + appenders: { worker: { type: 'multiprocess', mode: 'worker' } }, + categories: { default: { appenders: ['worker'], level: 'trace' } }, }); const logger = log4js.getLogger(); - logger.info("before connect"); + logger.info('before connect'); fakeNet.cbs.connect(); - logger.info("after connect"); + logger.info('after connect'); fakeNet.cbs.error(); - logger.info("after error, before close"); + logger.info('after error, before close'); fakeNet.cbs.close(); - logger.info("after close, before connect"); + logger.info('after close, before connect'); fakeNet.cbs.connect(); - logger.info("after close, after connect"); + logger.info('after close, after connect'); const net = fakeNet; - t.test("should attempt to re-open the socket", assert => { + t.test('should attempt to re-open the socket', (assert) => { // skipping the __LOG4JS__ separators - assert.match(net.data[0], "before connect"); - assert.match(net.data[2], "after connect"); - assert.match(net.data[4], "after error, before close"); - assert.match(net.data[6], "after close, before connect"); - assert.match(net.data[8], "after close, after connect"); + assert.match(net.data[0], 'before connect'); + assert.match(net.data[2], 'after connect'); + assert.match(net.data[4], 'after error, before close'); + assert.match(net.data[6], 'after close, before connect'); + assert.match(net.data[8], 'after close, after connect'); assert.equal(net.createConnectionCalled, 2); assert.end(); }); t.end(); }); - batch.test("worker defaults", t => { + batch.test('worker defaults', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); log4js.configure({ - appenders: { worker: { type: "multiprocess", mode: "worker" } }, - categories: { default: { appenders: ["worker"], level: "trace" } } + appenders: { worker: { type: 'multiprocess', mode: 'worker' } }, + categories: { default: { appenders: ['worker'], level: 'trace' } }, }); - t.test("should open a socket to localhost:5000", assert => { + t.test('should open a socket to localhost:5000', (assert) => { assert.equal(fakeNet.port, 5000); - assert.equal(fakeNet.host, "localhost"); + assert.equal(fakeNet.host, 'localhost'); assert.end(); }); t.end(); }); - batch.test("master", t => { + batch.test('master', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { net: fakeNet, - "./appenders/recording": recording - } + './appenders/recording': recording, + }, }); log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, master: { - type: "multiprocess", - mode: "master", + type: 'multiprocess', + mode: 'master', loggerPort: 1234, - loggerHost: "server", - appender: "recorder" - } + loggerHost: 'server', + appender: 'recorder', + }, }, - categories: { default: { appenders: ["master"], level: "trace" } } + categories: { default: { appenders: ['master'], level: 'trace' } }, }); const net = fakeNet; t.test( - "should listen for log messages on loggerPort and loggerHost", - assert => { + 'should listen for log messages on loggerPort and loggerHost', + (assert) => { assert.equal(net.port, 1234); - assert.equal(net.host, "server"); + assert.equal(net.host, 'server'); assert.end(); } ); - t.test("should return the underlying appender", assert => { + t.test('should return the underlying appender', (assert) => { log4js .getLogger() - .info("this should be sent to the actual appender directly"); + .info('this should be sent to the actual appender directly'); assert.equal( recording.replay()[0].data[0], - "this should be sent to the actual appender directly" + 'this should be sent to the actual appender directly' ); assert.end(); }); - t.test('should log the error on "error" event', assert => { - net.cbs.error(new Error("Expected error")); + t.test('should log the error on "error" event', (assert) => { + net.cbs.error(new Error('Expected error')); const logEvents = recording.replay(); assert.plan(2); assert.equal(logEvents.length, 1); assert.equal( - "A worker log process hung up unexpectedly", + 'A worker log process hung up unexpectedly', logEvents[0].data[0] ); }); - t.test("when a client connects", assert => { + t.test('when a client connects', (assert) => { const logString = `${flatted.stringify({ - level: { level: 10000, levelStr: "DEBUG" }, - data: ["some debug"] + level: { level: 10000, levelStr: 'DEBUG' }, + data: ['some debug'], })}__LOG4JS__`; net.cbs.data( `${flatted.stringify({ - level: { level: 40000, levelStr: "ERROR" }, - data: ["an error message"] + level: { level: 40000, levelStr: 'ERROR' }, + data: ['an error message'], })}__LOG4JS__` ); net.cbs.data(logString.slice(0, 10)); @@ -307,103 +310,107 @@ test("Multiprocess Appender", async batch => { net.cbs.data(logString + logString + logString); net.cbs.end( `${flatted.stringify({ - level: { level: 50000, levelStr: "FATAL" }, - data: ["that's all folks"] + level: { level: 50000, levelStr: 'FATAL' }, + data: ["that's all folks"], })}__LOG4JS__` ); - net.cbs.data("bad message__LOG4JS__"); + net.cbs.data('bad message__LOG4JS__'); const logEvents = recording.replay(); // should parse log messages into log events and send to appender - assert.equal(logEvents[0].level.toString(), "ERROR"); - assert.equal(logEvents[0].data[0], "an error message"); - assert.equal(logEvents[0].remoteAddress, "1.2.3.4"); - assert.equal(logEvents[0].remotePort, "1234"); + assert.equal(logEvents[0].level.toString(), 'ERROR'); + assert.equal(logEvents[0].data[0], 'an error message'); + assert.equal(logEvents[0].remoteAddress, '1.2.3.4'); + assert.equal(logEvents[0].remotePort, '1234'); // should parse log messages split into multiple chunks' - assert.equal(logEvents[1].level.toString(), "DEBUG"); - assert.equal(logEvents[1].data[0], "some debug"); - assert.equal(logEvents[1].remoteAddress, "1.2.3.4"); - assert.equal(logEvents[1].remotePort, "1234"); + assert.equal(logEvents[1].level.toString(), 'DEBUG'); + assert.equal(logEvents[1].data[0], 'some debug'); + assert.equal(logEvents[1].remoteAddress, '1.2.3.4'); + assert.equal(logEvents[1].remotePort, '1234'); // should parse multiple log messages in a single chunk' - assert.equal(logEvents[2].data[0], "some debug"); - assert.equal(logEvents[3].data[0], "some debug"); - assert.equal(logEvents[4].data[0], "some debug"); + assert.equal(logEvents[2].data[0], 'some debug'); + assert.equal(logEvents[3].data[0], 'some debug'); + assert.equal(logEvents[4].data[0], 'some debug'); // should handle log messages sent as part of end event' assert.equal(logEvents[5].data[0], "that's all folks"); // should handle unparseable log messages - assert.equal(logEvents[6].level.toString(), "ERROR"); - assert.equal(logEvents[6].categoryName, "log4js"); - assert.equal(logEvents[6].data[0], "Unable to parse log:"); - assert.equal(logEvents[6].data[1], "bad message"); + assert.equal(logEvents[6].level.toString(), 'ERROR'); + assert.equal(logEvents[6].categoryName, 'log4js'); + assert.equal(logEvents[6].data[0], 'Unable to parse log:'); + assert.equal(logEvents[6].data[1], 'bad message'); assert.end(); }); t.end(); }); - batch.test("master without actual appender throws error", t => { + batch.test('master without actual appender throws error', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); t.throws( () => log4js.configure({ - appenders: { master: { type: "multiprocess", mode: "master" } }, - categories: { default: { appenders: ["master"], level: "trace" } } + appenders: { master: { type: 'multiprocess', mode: 'master' } }, + categories: { default: { appenders: ['master'], level: 'trace' } }, }), new Error('multiprocess master must have an "appender" defined') ); t.end(); }); - batch.test("master with unknown appender throws error", t => { + batch.test('master with unknown appender throws error', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); t.throws( () => log4js.configure({ appenders: { - master: { type: "multiprocess", mode: "master", appender: "cheese" } + master: { + type: 'multiprocess', + mode: 'master', + appender: 'cheese', + }, }, - categories: { default: { appenders: ["master"], level: "trace" } } + categories: { default: { appenders: ['master'], level: 'trace' } }, }), new Error('multiprocess master appender "cheese" not defined') ); t.end(); }); - batch.test("master defaults", t => { + batch.test('master defaults', (t) => { const fakeNet = makeFakeNet(); - const log4js = sandbox.require("../../lib/log4js", { + const log4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); log4js.configure({ appenders: { - stdout: { type: "stdout" }, - master: { type: "multiprocess", mode: "master", appender: "stdout" } + stdout: { type: 'stdout' }, + master: { type: 'multiprocess', mode: 'master', appender: 'stdout' }, }, - categories: { default: { appenders: ["master"], level: "trace" } } + categories: { default: { appenders: ['master'], level: 'trace' } }, }); - t.test("should listen for log messages on localhost:5000", assert => { + t.test('should listen for log messages on localhost:5000', (assert) => { assert.equal(fakeNet.port, 5000); - assert.equal(fakeNet.host, "localhost"); + assert.equal(fakeNet.host, 'localhost'); assert.end(); }); t.end(); @@ -418,7 +425,12 @@ test("Multiprocess Appender", async batch => { log4js.configure({ appenders: { recording: { type: 'recording' }, - master: { type: 'multiprocess', mode: 'master', appender: 'recording', loggerPort: 5001 }, + master: { + type: 'multiprocess', + mode: 'master', + appender: 'recording', + loggerPort: 5001, + }, }, categories: { default: { appenders: ['recording'], level: 'trace' } }, }); @@ -439,6 +451,5 @@ test("Multiprocess Appender", async batch => { assert.end(); }); - batch.end(); }); diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index ffae2bc0..4f581489 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -1,300 +1,310 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); -const recording = require("../../lib/appenders/recording"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); +const recording = require('../../lib/appenders/recording'); -test("../../lib/logger", batch => { +test('../../lib/logger', (batch) => { batch.beforeEach(() => { recording.reset(); }); - batch.test("creating a new log level", t => { + batch.test('creating a new log level', (t) => { log4js.configure({ levels: { - DIAG: { value: 6000, colour: "green" } + DIAG: { value: 6000, colour: 'green' }, }, appenders: { - stdout: { type: "stdout" } + stdout: { type: 'stdout' }, }, categories: { - default: { appenders: ["stdout"], level: "trace" } - } + default: { appenders: ['stdout'], level: 'trace' }, + }, }); const logger = log4js.getLogger(); - t.test("should export new log level in levels module", assert => { + t.test('should export new log level in levels module', (assert) => { assert.ok(log4js.levels.DIAG); - assert.equal(log4js.levels.DIAG.levelStr, "DIAG"); + assert.equal(log4js.levels.DIAG.levelStr, 'DIAG'); assert.equal(log4js.levels.DIAG.level, 6000); - assert.equal(log4js.levels.DIAG.colour, "green"); + assert.equal(log4js.levels.DIAG.colour, 'green'); assert.end(); }); t.type( logger.diag, - "function", - "should create named function on logger prototype" + 'function', + 'should create named function on logger prototype' ); t.type( logger.isDiagEnabled, - "function", - "should create isLevelEnabled function on logger prototype" + 'function', + 'should create isLevelEnabled function on logger prototype' ); - t.type(logger.info, "function", "should retain default levels"); + t.type(logger.info, 'function', 'should retain default levels'); t.end(); }); - batch.test("creating a new log level with underscores", t => { + batch.test('creating a new log level with underscores', (t) => { log4js.configure({ levels: { - NEW_LEVEL_OTHER: { value: 6000, colour: "blue" } + NEW_LEVEL_OTHER: { value: 6000, colour: 'blue' }, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); const logger = log4js.getLogger(); - t.test("should export new log level to levels module", assert => { + t.test('should export new log level to levels module', (assert) => { assert.ok(log4js.levels.NEW_LEVEL_OTHER); - assert.equal(log4js.levels.NEW_LEVEL_OTHER.levelStr, "NEW_LEVEL_OTHER"); + assert.equal(log4js.levels.NEW_LEVEL_OTHER.levelStr, 'NEW_LEVEL_OTHER'); assert.equal(log4js.levels.NEW_LEVEL_OTHER.level, 6000); - assert.equal(log4js.levels.NEW_LEVEL_OTHER.colour, "blue"); + assert.equal(log4js.levels.NEW_LEVEL_OTHER.colour, 'blue'); assert.end(); }); t.type( logger.newLevelOther, - "function", - "should create named function on logger prototype in camel case" + 'function', + 'should create named function on logger prototype in camel case' ); t.type( logger.isNewLevelOtherEnabled, - "function", - "should create named isLevelEnabled function on logger prototype in camel case" + 'function', + 'should create named isLevelEnabled function on logger prototype in camel case' ); t.end(); }); - batch.test("creating log events containing newly created log level", t => { + batch.test('creating log events containing newly created log level', (t) => { log4js.configure({ levels: { - LVL1: { value: 6000, colour: "grey" }, - LVL2: { value: 5000, colour: "magenta" } + LVL1: { value: 6000, colour: 'grey' }, + LVL2: { value: 5000, colour: 'magenta' }, }, - appenders: { recorder: { type: "recording" } }, + appenders: { recorder: { type: 'recording' } }, categories: { - default: { appenders: ["recorder"], level: "LVL1" } - } + default: { appenders: ['recorder'], level: 'LVL1' }, + }, }); const logger = log4js.getLogger(); - logger.log(log4js.levels.getLevel("LVL1", log4js.levels.DEBUG), "Event 1"); - logger.log(log4js.levels.getLevel("LVL1"), "Event 2"); - logger.log("LVL1", "Event 3"); - logger.lvl1("Event 4"); + logger.log(log4js.levels.getLevel('LVL1', log4js.levels.DEBUG), 'Event 1'); + logger.log(log4js.levels.getLevel('LVL1'), 'Event 2'); + logger.log('LVL1', 'Event 3'); + logger.lvl1('Event 4'); - logger.lvl2("Event 5"); + logger.lvl2('Event 5'); const events = recording.replay(); - t.test("should show log events with new log level", assert => { - assert.equal(events[0].level.toString(), "LVL1"); - assert.equal(events[0].data[0], "Event 1"); + t.test('should show log events with new log level', (assert) => { + assert.equal(events[0].level.toString(), 'LVL1'); + assert.equal(events[0].data[0], 'Event 1'); - assert.equal(events[1].level.toString(), "LVL1"); - assert.equal(events[1].data[0], "Event 2"); + assert.equal(events[1].level.toString(), 'LVL1'); + assert.equal(events[1].data[0], 'Event 2'); - assert.equal(events[2].level.toString(), "LVL1"); - assert.equal(events[2].data[0], "Event 3"); + assert.equal(events[2].level.toString(), 'LVL1'); + assert.equal(events[2].data[0], 'Event 3'); - assert.equal(events[3].level.toString(), "LVL1"); - assert.equal(events[3].data[0], "Event 4"); + assert.equal(events[3].level.toString(), 'LVL1'); + assert.equal(events[3].data[0], 'Event 4'); assert.end(); }); t.equal( events.length, 4, - "should not be present if min log level is greater than newly created level" + 'should not be present if min log level is greater than newly created level' ); t.end(); }); - batch.test("creating a new log level with incorrect parameters", t => { + batch.test('creating a new log level with incorrect parameters', (t) => { t.throws(() => { log4js.configure({ levels: { - cheese: { value: "biscuits" } + cheese: { value: 'biscuits' }, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level "cheese".value must have an integer value'); t.throws(() => { log4js.configure({ levels: { - cheese: "biscuits" + cheese: 'biscuits', }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level "cheese" must be an object'); t.throws(() => { log4js.configure({ levels: { - cheese: { thing: "biscuits" } + cheese: { thing: 'biscuits' }, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); - }, "level \"cheese\" must have a 'value' property"); + }, 'level "cheese" must have a \'value\' property'); t.throws(() => { log4js.configure({ levels: { - cheese: { value: 3 } + cheese: { value: 3 }, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); - }, "level \"cheese\" must have a 'colour' property"); + }, 'level "cheese" must have a \'colour\' property'); t.throws(() => { log4js.configure({ levels: { - cheese: { value: 3, colour: "pants" } + cheese: { value: 3, colour: 'pants' }, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level "cheese".colour must be one of white, grey, black, blue, cyan, green, magenta, red, yellow'); t.throws(() => { log4js.configure({ levels: { - "#pants": 3 + '#pants': 3, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level name "#pants" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)'); t.throws(() => { log4js.configure({ levels: { - "thing#pants": 3 + 'thing#pants': 3, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level name "thing#pants" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)'); t.throws(() => { log4js.configure({ levels: { - "1pants": 3 + '1pants': 3, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level name "1pants" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)'); t.throws(() => { log4js.configure({ levels: { - 2: 3 + 2: 3, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level name "2" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)'); t.throws(() => { log4js.configure({ levels: { - "cheese!": 3 + 'cheese!': 3, }, - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "trace" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'trace' } }, }); }, 'level name "cheese!" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)'); t.end(); }); - batch.test("calling log with an undefined log level", t => { + batch.test('calling log with an undefined log level', (t) => { log4js.configure({ - appenders: { recorder: { type: "recording" } }, - categories: { default: { appenders: ["recorder"], level: "trace" } } + appenders: { recorder: { type: 'recording' } }, + categories: { default: { appenders: ['recorder'], level: 'trace' } }, }); const logger = log4js.getLogger(); // fallback behavior - logger.log("LEVEL_DOES_NOT_EXIST", "Event 1"); - logger.log(log4js.levels.getLevel("LEVEL_DOES_NOT_EXIST"), "Event 2", "2 Text"); + logger.log('LEVEL_DOES_NOT_EXIST', 'Event 1'); + logger.log( + log4js.levels.getLevel('LEVEL_DOES_NOT_EXIST'), + 'Event 2', + '2 Text' + ); // synonym behavior - logger.log("Event 3"); - logger.log("Event 4", "4 Text"); + logger.log('Event 3'); + logger.log('Event 4', '4 Text'); const events = recording.replay(); - t.equal(events[0].level.toString(), "WARN", "should log warning"); - t.equal(events[0].data[0], "log4js:logger.log: valid log-level not found as first parameter given:"); - t.equal(events[0].data[1], "LEVEL_DOES_NOT_EXIST"); - t.equal(events[1].level.toString(), "INFO", "should fall back to INFO"); - t.equal(events[1].data[0], "[LEVEL_DOES_NOT_EXIST]"); - t.equal(events[1].data[1], "Event 1"); + t.equal(events[0].level.toString(), 'WARN', 'should log warning'); + t.equal( + events[0].data[0], + 'log4js:logger.log: valid log-level not found as first parameter given:' + ); + t.equal(events[0].data[1], 'LEVEL_DOES_NOT_EXIST'); + t.equal(events[1].level.toString(), 'INFO', 'should fall back to INFO'); + t.equal(events[1].data[0], '[LEVEL_DOES_NOT_EXIST]'); + t.equal(events[1].data[1], 'Event 1'); - t.equal(events[2].level.toString(), "WARN", "should log warning"); - t.equal(events[2].data[0], "log4js:logger.log: valid log-level not found as first parameter given:"); + t.equal(events[2].level.toString(), 'WARN', 'should log warning'); + t.equal( + events[2].data[0], + 'log4js:logger.log: valid log-level not found as first parameter given:' + ); t.equal(events[2].data[1], undefined); - t.equal(events[3].level.toString(), "INFO", "should fall back to INFO"); - t.equal(events[3].data[0], "[undefined]"); - t.equal(events[3].data[1], "Event 2"); - t.equal(events[3].data[2], "2 Text"); + t.equal(events[3].level.toString(), 'INFO', 'should fall back to INFO'); + t.equal(events[3].data[0], '[undefined]'); + t.equal(events[3].data[1], 'Event 2'); + t.equal(events[3].data[2], '2 Text'); - t.equal(events[4].level.toString(), "INFO", "LOG is synonym of INFO"); - t.equal(events[4].data[0], "Event 3"); + t.equal(events[4].level.toString(), 'INFO', 'LOG is synonym of INFO'); + t.equal(events[4].data[0], 'Event 3'); - t.equal(events[5].level.toString(), "INFO", "LOG is synonym of INFO"); - t.equal(events[5].data[0], "Event 4"); - t.equal(events[5].data[1], "4 Text"); + t.equal(events[5].level.toString(), 'INFO', 'LOG is synonym of INFO'); + t.equal(events[5].data[0], 'Event 4'); + t.equal(events[5].data[1], '4 Text'); t.end(); }); - batch.test("creating a new level with an existing level name", t => { + batch.test('creating a new level with an existing level name', (t) => { log4js.configure({ levels: { - info: { value: 1234, colour: "blue" } + info: { value: 1234, colour: 'blue' }, }, - appenders: { recorder: { type: "recording" } }, - categories: { default: { appenders: ["recorder"], level: "all" } } + appenders: { recorder: { type: 'recording' } }, + categories: { default: { appenders: ['recorder'], level: 'all' } }, }); t.equal( log4js.levels.INFO.level, 1234, - "should override the existing log level" + 'should override the existing log level' ); t.equal( log4js.levels.INFO.colour, - "blue", - "should override the existing log level" + 'blue', + 'should override the existing log level' ); const logger = log4js.getLogger(); - logger.info("test message"); + logger.info('test message'); const events = recording.replay(); t.equal( events[0].level.level, 1234, - "should override the existing log level" + 'should override the existing log level' ); t.end(); }); diff --git a/test/tap/no-cluster-test.js b/test/tap/no-cluster-test.js index 3a4c4471..65a2ea77 100644 --- a/test/tap/no-cluster-test.js +++ b/test/tap/no-cluster-test.js @@ -1,15 +1,15 @@ -const { test } = require("tap"); -const proxyquire = require("proxyquire"); +const { test } = require('tap'); +const proxyquire = require('proxyquire'); -test("clustering is disabled if cluster is not present", t => { - const log4js = proxyquire("../../lib/log4js", { cluster: null }); - const recorder = require("../../lib/appenders/recording"); +test('clustering is disabled if cluster is not present', (t) => { + const log4js = proxyquire('../../lib/log4js', { cluster: null }); + const recorder = require('../../lib/appenders/recording'); log4js.configure({ - appenders: { vcr: { type: "recording" } }, - categories: { default: { appenders: ["vcr"], level: "debug" } } + appenders: { vcr: { type: 'recording' } }, + categories: { default: { appenders: ['vcr'], level: 'debug' } }, }); - log4js.getLogger().info("it should still work"); + log4js.getLogger().info('it should still work'); const events = recorder.replay(); - t.equal(events[0].data[0], "it should still work"); + t.equal(events[0].data[0], 'it should still work'); t.end(); }); diff --git a/test/tap/noLogFilter-test.js b/test/tap/noLogFilter-test.js index 8f14ab46..d52cf485 100644 --- a/test/tap/noLogFilter-test.js +++ b/test/tap/noLogFilter-test.js @@ -1,42 +1,42 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); -const recording = require("../../lib/appenders/recording"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); +const recording = require('../../lib/appenders/recording'); /** * test a simple regexp */ -test("log4js noLogFilter", batch => { +test('log4js noLogFilter', (batch) => { batch.beforeEach(() => { recording.reset(); }); batch.test( - "appender should exclude events that match the regexp string", - t => { + 'appender should exclude events that match the regexp string', + (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: "This.*not", - appender: "recorder" - } + type: 'noLogFilter', + exclude: 'This.*not', + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("This should not get logged"); - logger.debug("This should get logged"); + logger.debug('This should not get logged'); + logger.debug('This should get logged'); logger.debug( - "Another case that not match the regex, so it should get logged" + 'Another case that not match the regex, so it should get logged' ); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "This should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); t.equal( logEvents[1].data[0], - "Another case that not match the regex, so it should get logged" + 'Another case that not match the regex, so it should get logged' ); t.end(); } @@ -46,36 +46,36 @@ test("log4js noLogFilter", batch => { * test an array of regexp */ batch.test( - "appender should exclude events that match the regexp string contained in the array", - t => { + 'appender should exclude events that match the regexp string contained in the array', + (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: ["This.*not", "instead"], - appender: "recorder" - } + type: 'noLogFilter', + exclude: ['This.*not', 'instead'], + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("This should not get logged"); - logger.debug("This should get logged"); + logger.debug('This should not get logged'); + logger.debug('This should get logged'); logger.debug( - "Another case that not match the regex, so it should get logged" + 'Another case that not match the regex, so it should get logged' ); - logger.debug("This case instead it should get logged"); - logger.debug("The last that should get logged"); + logger.debug('This case instead it should get logged'); + logger.debug('The last that should get logged'); const logEvents = recording.replay(); t.equal(logEvents.length, 3); - t.equal(logEvents[0].data[0], "This should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); t.equal( logEvents[1].data[0], - "Another case that not match the regex, so it should get logged" + 'Another case that not match the regex, so it should get logged' ); - t.equal(logEvents[2].data[0], "The last that should get logged"); + t.equal(logEvents[2].data[0], 'The last that should get logged'); t.end(); } ); @@ -83,30 +83,30 @@ test("log4js noLogFilter", batch => { * test case insentitive regexp */ batch.test( - "appender should evaluate the regexp using incase sentitive option", - t => { + 'appender should evaluate the regexp using incase sentitive option', + (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: ["NOT", "eX.*de"], - appender: "recorder" - } + type: 'noLogFilter', + exclude: ['NOT', 'eX.*de'], + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("This should not get logged"); - logger.debug("This should get logged"); - logger.debug("Exclude this string"); - logger.debug("Include this string"); + logger.debug('This should not get logged'); + logger.debug('This should get logged'); + logger.debug('Exclude this string'); + logger.debug('Include this string'); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "This should get logged"); - t.equal(logEvents[1].data[0], "Include this string"); + t.equal(logEvents[0].data[0], 'This should get logged'); + t.equal(logEvents[1].data[0], 'Include this string'); t.end(); } ); @@ -115,27 +115,27 @@ test("log4js noLogFilter", batch => { * test empty string or null regexp */ batch.test( - "appender should skip the match in case of empty or null regexp", - t => { + 'appender should skip the match in case of empty or null regexp', + (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: ["", null, undefined], - appender: "recorder" - } + type: 'noLogFilter', + exclude: ['', null, undefined], + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("This should get logged"); - logger.debug("Another string that should get logged"); + logger.debug('This should get logged'); + logger.debug('Another string that should get logged'); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "This should get logged"); - t.equal(logEvents[1].data[0], "Another string that should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); + t.equal(logEvents[1].data[0], 'Another string that should get logged'); t.end(); } ); @@ -143,26 +143,26 @@ test("log4js noLogFilter", batch => { /** * test for excluding all the events that contains digits */ - batch.test("appender should exclude the events that contains digits", t => { + batch.test('appender should exclude the events that contains digits', (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: "\\d", - appender: "recorder" - } + type: 'noLogFilter', + exclude: '\\d', + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("This should get logged"); - logger.debug("The 2nd event should not get logged"); - logger.debug("The 3rd event should not get logged, such as the 2nd"); + logger.debug('This should get logged'); + logger.debug('The 2nd event should not get logged'); + logger.debug('The 3rd event should not get logged, such as the 2nd'); const logEvents = recording.replay(); t.equal(logEvents.length, 1); - t.equal(logEvents[0].data[0], "This should get logged"); + t.equal(logEvents[0].data[0], 'This should get logged'); t.end(); }); @@ -171,29 +171,29 @@ test("log4js noLogFilter", batch => { * https://log4js-node.github.io/log4js-node/noLogFilter.html */ batch.test( - "appender should exclude not valid events according to the documentation", - t => { + 'appender should exclude not valid events according to the documentation', + (t) => { log4js.configure({ appenders: { - recorder: { type: "recording" }, + recorder: { type: 'recording' }, filtered: { - type: "noLogFilter", - exclude: ["NOT", "\\d", ""], - appender: "recorder" - } + type: 'noLogFilter', + exclude: ['NOT', '\\d', ''], + appender: 'recorder', + }, }, - categories: { default: { appenders: ["filtered"], level: "DEBUG" } } + categories: { default: { appenders: ['filtered'], level: 'DEBUG' } }, }); const logger = log4js.getLogger(); - logger.debug("I will be logged in all-the-logs.log"); - logger.debug("I will be not logged in all-the-logs.log"); - logger.debug("A 2nd message that will be excluded in all-the-logs.log"); - logger.debug("Hello again"); + logger.debug('I will be logged in all-the-logs.log'); + logger.debug('I will be not logged in all-the-logs.log'); + logger.debug('A 2nd message that will be excluded in all-the-logs.log'); + logger.debug('Hello again'); const logEvents = recording.replay(); t.equal(logEvents.length, 2); - t.equal(logEvents[0].data[0], "I will be logged in all-the-logs.log"); - t.equal(logEvents[1].data[0], "Hello again"); + t.equal(logEvents[0].data[0], 'I will be logged in all-the-logs.log'); + t.equal(logEvents[1].data[0], 'Hello again'); t.end(); } ); diff --git a/test/tap/passenger-test.js b/test/tap/passenger-test.js index 1cd7cce0..2d3a1945 100644 --- a/test/tap/passenger-test.js +++ b/test/tap/passenger-test.js @@ -1,5 +1,5 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); // passenger provides a non-functional cluster module, // but it does not implement the event emitter functions @@ -18,34 +18,34 @@ const passengerCluster = { schedulingPolicy: false, settings: false, worker: false, - workers: false + workers: false, }; -const vcr = require("../../lib/appenders/recording"); +const vcr = require('../../lib/appenders/recording'); -const log4js = sandbox.require("../../lib/log4js", { +const log4js = sandbox.require('../../lib/log4js', { requires: { cluster: passengerCluster, - "./appenders/recording": vcr - } + './appenders/recording': vcr, + }, }); -test("When running in Passenger", batch => { - batch.test("it should still log", t => { +test('When running in Passenger', (batch) => { + batch.test('it should still log', (t) => { log4js.configure({ appenders: { - vcr: { type: "recording" } + vcr: { type: 'recording' }, }, categories: { - default: { appenders: ["vcr"], level: "info" } + default: { appenders: ['vcr'], level: 'info' }, }, - disableClustering: true + disableClustering: true, }); - log4js.getLogger().info("This should still work"); + log4js.getLogger().info('This should still work'); const events = vcr.replay(); t.equal(events.length, 1); - t.equal(events[0].data[0], "This should still work"); + t.equal(events[0].data[0], 'This should still work'); t.end(); }); diff --git a/test/tap/pause-test.js b/test/tap/pause-test.js index c4d00c63..e5ec312c 100644 --- a/test/tap/pause-test.js +++ b/test/tap/pause-test.js @@ -1,95 +1,118 @@ -const tap = require("tap"); -const fs = require("fs"); -const log4js = require("../../lib/log4js"); +const tap = require('tap'); +const fs = require('fs'); +const log4js = require('../../lib/log4js'); -const removeFiles = async filenames => { - if (!Array.isArray(filenames)) - filenames = [filenames]; - const promises = filenames.map(filename => fs.promises.unlink(filename)); +const removeFiles = async (filenames) => { + if (!Array.isArray(filenames)) filenames = [filenames]; + const promises = filenames.map((filename) => fs.promises.unlink(filename)); await Promise.allSettled(promises); }; -tap.test("Drain event test", batch => { +tap.test('Drain event test', (batch) => { + batch.test( + 'Should emit pause event and resume when logging in a file with high frequency', + (t) => { + t.teardown(async () => { + process.off( + 'log4js:pause', + process.listeners('log4js:pause')[ + process.listeners('log4js:pause').length - 1 + ] + ); + await removeFiles('logs/drain.log'); + }); + // Generate logger with 5k of highWaterMark config + log4js.configure({ + appenders: { + file: { + type: 'file', + filename: 'logs/drain.log', + highWaterMark: 5 * 1024, + }, + }, + categories: { + default: { appenders: ['file'], level: 'debug' }, + }, + }); - batch.test("Should emit pause event and resume when logging in a file with high frequency", t => { - t.teardown(async () => { - process.off("log4js:pause", process.listeners("log4js:pause")[process.listeners("log4js:pause").length - 1]); - await removeFiles("logs/drain.log"); - }); - // Generate logger with 5k of highWaterMark config - log4js.configure({ - appenders: { - file: { type: "file", filename: "logs/drain.log", highWaterMark: 5 * 1024 } - }, - categories: { - default: { appenders: ["file"], level: "debug" } - } - }); - - let paused = false; - let resumed = false; + let paused = false; + let resumed = false; - process.on("log4js:pause", value => { - if (value) { - paused = true; - t.ok(value, "log4js:pause, true"); - } else { - resumed = true; - t.ok(!value, "log4js:pause, false"); - t.end(); - } - }); + process.on('log4js:pause', (value) => { + if (value) { + paused = true; + t.ok(value, 'log4js:pause, true'); + } else { + resumed = true; + t.ok(!value, 'log4js:pause, false'); + t.end(); + } + }); - const logger = log4js.getLogger(); - while (!paused && !resumed) { - if (!paused) { - logger.info("This is a test for emitting drain event"); + const logger = log4js.getLogger(); + while (!paused && !resumed) { + if (!paused) { + logger.info('This is a test for emitting drain event'); + } } } - }); + ); + batch.test( + 'Should emit pause event and resume when logging in a date file with high frequency', + (t) => { + t.teardown(async () => { + process.off( + 'log4js:pause', + process.listeners('log4js:pause')[ + process.listeners('log4js:pause').length - 1 + ] + ); + await removeFiles('logs/date-file-drain.log'); + }); + // Generate date file logger with 5kb of highWaterMark config + log4js.configure({ + appenders: { + file: { + type: 'dateFile', + filename: 'logs/date-file-drain.log', + highWaterMark: 5 * 1024, + }, + }, + categories: { + default: { appenders: ['file'], level: 'debug' }, + }, + }); - batch.test("Should emit pause event and resume when logging in a date file with high frequency", (t) => { - t.teardown(async () => { - process.off("log4js:pause", process.listeners("log4js:pause")[process.listeners("log4js:pause").length - 1]); - await removeFiles("logs/date-file-drain.log"); - }); - // Generate date file logger with 5kb of highWaterMark config - log4js.configure({ - appenders: { - file: { type: "dateFile", filename: "logs/date-file-drain.log", highWaterMark: 5 * 1024 } - }, - categories: { - default: { appenders: ["file"], level: "debug" } - } - }); + let paused = false; + let resumed = false; - let paused = false; - let resumed = false; + process.on('log4js:pause', (value) => { + if (value) { + paused = true; + t.ok(value, 'log4js:pause, true'); + } else { + resumed = true; + t.ok(!value, 'log4js:pause, false'); + t.end(); + } + }); - process.on("log4js:pause", value => { - if (value) { - paused = true; - t.ok(value, "log4js:pause, true"); - } else { - resumed = true; - t.ok(!value, "log4js:pause, false"); - t.end(); + const logger = log4js.getLogger(); + while (!paused && !resumed) { + if (!paused) + logger.info( + 'This is a test for emitting drain event in date file logger' + ); } - }); - - const logger = log4js.getLogger(); - while (!paused && !resumed) { - if (!paused) - logger.info("This is a test for emitting drain event in date file logger"); } - }); + ); batch.teardown(async () => { try { - const files = fs.readdirSync("logs"); - await removeFiles(files.map(filename => `logs/${filename}`)); - fs.rmdirSync("logs"); + const files = fs.readdirSync('logs'); + await removeFiles(files.map((filename) => `logs/${filename}`)); + fs.rmdirSync('logs'); } catch (e) { // doesn't matter } diff --git a/test/tap/pm2-support-test.js b/test/tap/pm2-support-test.js index ab7568c3..7d5ee440 100644 --- a/test/tap/pm2-support-test.js +++ b/test/tap/pm2-support-test.js @@ -1,6 +1,6 @@ -const { test } = require("tap"); -const cluster = require("cluster"); -const debug = require("debug")("log4js:pm2-test"); +const { test } = require('tap'); +const cluster = require('cluster'); +const debug = require('debug')('log4js:pm2-test'); // PM2 runs everything as workers // - no master in the cluster (PM2 acts as master itself) @@ -9,7 +9,7 @@ if (cluster.isMaster) { // create two worker forks // PASS IN NODE_APP_INSTANCE HERE const appEvents = {}; - ["0", "1"].forEach(i => { + ['0', '1'].forEach((i) => { cluster.fork({ NODE_APP_INSTANCE: i }); }); @@ -17,7 +17,7 @@ if (cluster.isMaster) { if (worker.type || worker.topic) { msg = worker; } - if (msg.type === "testing") { + if (msg.type === 'testing') { debug( `Received testing message from ${msg.instance} with events ${msg.events}` ); @@ -25,7 +25,7 @@ if (cluster.isMaster) { } // we have to do the re-broadcasting that the pm2-intercom module would do. - if (msg.topic === "log4js:message") { + if (msg.topic === 'log4js:message') { debug(`Received log message ${msg}`); for (const id in cluster.workers) { cluster.workers[id].send(msg); @@ -33,70 +33,70 @@ if (cluster.isMaster) { } }; - cluster.on("message", messageHandler); + cluster.on('message', messageHandler); let count = 0; - cluster.on("exit", () => { + cluster.on('exit', () => { count += 1; if (count === 2) { // wait for any IPC messages still to come, because it seems they are slooooow. setTimeout(() => { - test("PM2 Support", batch => { - batch.test("should not get any events when turned off", t => { + test('PM2 Support', (batch) => { + batch.test('should not get any events when turned off', (t) => { t.notOk( - appEvents["0"].filter( - e => e && e.data[0].indexOf("will not be logged") > -1 + appEvents['0'].filter( + (e) => e && e.data[0].indexOf('will not be logged') > -1 ).length ); t.notOk( - appEvents["1"].filter( - e => e && e.data[0].indexOf("will not be logged") > -1 + appEvents['1'].filter( + (e) => e && e.data[0].indexOf('will not be logged') > -1 ).length ); t.end(); }); - batch.test("should get events on app instance 0", t => { - t.equal(appEvents["0"].length, 2); - t.equal(appEvents["0"][0].data[0], "this should now get logged"); - t.equal(appEvents["0"][1].data[0], "this should now get logged"); + batch.test('should get events on app instance 0', (t) => { + t.equal(appEvents['0'].length, 2); + t.equal(appEvents['0'][0].data[0], 'this should now get logged'); + t.equal(appEvents['0'][1].data[0], 'this should now get logged'); t.end(); }); - batch.test("should not get events on app instance 1", t => { - t.equal(appEvents["1"].length, 0); + batch.test('should not get events on app instance 1', (t) => { + t.equal(appEvents['1'].length, 0); t.end(); }); batch.end(); - cluster.removeListener("message", messageHandler); + cluster.removeListener('message', messageHandler); }); }, 1000); } }); } else { - const recorder = require("../../lib/appenders/recording"); - const log4js = require("../../lib/log4js"); + const recorder = require('../../lib/appenders/recording'); + const log4js = require('../../lib/log4js'); log4js.configure({ - appenders: { out: { type: "recording" } }, - categories: { default: { appenders: ["out"], level: "info" } } + appenders: { out: { type: 'recording' } }, + categories: { default: { appenders: ['out'], level: 'info' } }, }); - const logger = log4js.getLogger("test"); + const logger = log4js.getLogger('test'); logger.info( - "this is a test, but without enabling PM2 support it will not be logged" + 'this is a test, but without enabling PM2 support it will not be logged' ); // IPC messages can take a while to get through to start with. setTimeout(() => { log4js.shutdown(() => { log4js.configure({ - appenders: { out: { type: "recording" } }, - categories: { default: { appenders: ["out"], level: "info" } }, - pm2: true + appenders: { out: { type: 'recording' } }, + categories: { default: { appenders: ['out'], level: 'info' } }, + pm2: true, }); - const anotherLogger = log4js.getLogger("test"); + const anotherLogger = log4js.getLogger('test'); setTimeout(() => { - anotherLogger.info("this should now get logged"); + anotherLogger.info('this should now get logged'); }, 1000); // if we're the pm2-master we should wait for the other process to send its log messages @@ -108,9 +108,9 @@ if (cluster.isMaster) { ); process.send( { - type: "testing", + type: 'testing', instance: process.env.NODE_APP_INSTANCE, - events + events, }, () => { setTimeout(() => { diff --git a/test/tap/recordingAppender-test.js b/test/tap/recordingAppender-test.js index 142f6e18..c8066f85 100644 --- a/test/tap/recordingAppender-test.js +++ b/test/tap/recordingAppender-test.js @@ -1,10 +1,10 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); -test("recording appender", t => { +test('recording appender', (t) => { log4js.configure({ appenders: { rec: { type: 'recording' } }, - categories: { default: { appenders: [ 'rec' ], 'level': 'debug' } } + categories: { default: { appenders: ['rec'], level: 'debug' } }, }); const logger = log4js.getLogger(); @@ -15,14 +15,18 @@ test("recording appender", t => { const recording = log4js.recording(); const loggingEvents = recording.playback(); - t.equal(loggingEvents.length, 2, "There should be 2 recorded events"); - t.equal(loggingEvents[0].data[0], "This will go to the recording!"); - t.equal(loggingEvents[1].data[0], "Another one"); + t.equal(loggingEvents.length, 2, 'There should be 2 recorded events'); + t.equal(loggingEvents[0].data[0], 'This will go to the recording!'); + t.equal(loggingEvents[1].data[0], 'Another one'); recording.reset(); const loggingEventsPostReset = recording.playback(); - t.equal(loggingEventsPostReset.length, 0, "There should be 0 recorded events"); + t.equal( + loggingEventsPostReset.length, + 0, + 'There should be 0 recorded events' + ); t.end(); }); diff --git a/test/tap/server-test.js b/test/tap/server-test.js index 69c70615..2277b838 100644 --- a/test/tap/server-test.js +++ b/test/tap/server-test.js @@ -1,36 +1,36 @@ -const { test } = require("tap"); -const net = require("net"); -const log4js = require("../../lib/log4js"); -const vcr = require("../../lib/appenders/recording"); -const levels = require("../../lib/levels"); -const LoggingEvent = require("../../lib/LoggingEvent"); +const { test } = require('tap'); +const net = require('net'); +const log4js = require('../../lib/log4js'); +const vcr = require('../../lib/appenders/recording'); +const levels = require('../../lib/levels'); +const LoggingEvent = require('../../lib/LoggingEvent'); -test("TCP Server", batch => { +test('TCP Server', (batch) => { batch.test( - "should listen for TCP messages and re-send via process.send", - t => { + 'should listen for TCP messages and re-send via process.send', + (t) => { log4js.configure({ appenders: { - vcr: { type: "recording" }, - tcp: { type: "tcp-server", port: 5678 } + vcr: { type: 'recording' }, + tcp: { type: 'tcp-server', port: 5678 }, }, categories: { - default: { appenders: ["vcr"], level: "debug" } - } + default: { appenders: ['vcr'], level: 'debug' }, + }, }); // give the socket a chance to start up setTimeout(() => { const socket = net.connect(5678, () => { socket.write( `${new LoggingEvent( - "test-category", + 'test-category', levels.INFO, - ["something"], + ['something'], {} ).serialise()}__LOG4JS__${new LoggingEvent( - "test-category", + 'test-category', levels.INFO, - ["something else"], + ['something else'], {} ).serialise()}__LOG4JS__some nonsense__LOG4JS__{"some":"json"}__LOG4JS__`, () => { @@ -40,38 +40,38 @@ test("TCP Server", batch => { const logs = vcr.replay(); t.equal(logs.length, 4); t.match(logs[0], { - data: ["something"], - categoryName: "test-category", - level: { levelStr: "INFO" }, - context: {} + data: ['something'], + categoryName: 'test-category', + level: { levelStr: 'INFO' }, + context: {}, }); t.match(logs[1], { - data: ["something else"], - categoryName: "test-category", - level: { levelStr: "INFO" }, - context: {} + data: ['something else'], + categoryName: 'test-category', + level: { levelStr: 'INFO' }, + context: {}, }); t.match(logs[2], { data: [ - "Unable to parse log:", - "some nonsense", - "because: ", - SyntaxError + 'Unable to parse log:', + 'some nonsense', + 'because: ', + SyntaxError, ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, }); t.match(logs[3], { data: [ - "Unable to parse log:", + 'Unable to parse log:', '{"some":"json"}', - "because: ", - TypeError + 'because: ', + TypeError, ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, }); t.end(); }); @@ -85,109 +85,108 @@ test("TCP Server", batch => { } ); - batch.test( - "sending incomplete messages in chunks", - t => { - log4js.configure({ - appenders: { - vcr: { type: "recording" }, - tcp: { type: "tcp-server" } - }, - categories: { - default: { appenders: ["vcr"], level: "debug" } - } - }); - // give the socket a chance to start up - setTimeout(() => { - const socket = net.connect(5000, () => { - const syncWrite = (dataArray, finalCallback) => { - if (!Array.isArray(dataArray)) { - dataArray = [dataArray]; - } - if (typeof finalCallback !== "function") { - finalCallback = () => {}; + batch.test('sending incomplete messages in chunks', (t) => { + log4js.configure({ + appenders: { + vcr: { type: 'recording' }, + tcp: { type: 'tcp-server' }, + }, + categories: { + default: { appenders: ['vcr'], level: 'debug' }, + }, + }); + // give the socket a chance to start up + setTimeout(() => { + const socket = net.connect(5000, () => { + const syncWrite = (dataArray, finalCallback) => { + if (!Array.isArray(dataArray)) { + dataArray = [dataArray]; + } + if (typeof finalCallback !== 'function') { + finalCallback = () => {}; + } + setTimeout(() => { + if (!dataArray.length) { + finalCallback(); + } else if (dataArray.length === 1) { + socket.write(dataArray.shift(), finalCallback); + } else { + socket.write(dataArray.shift(), () => { + syncWrite(dataArray, finalCallback); + }); } - setTimeout(() => { - if (!dataArray.length) { - finalCallback(); - } else if (dataArray.length === 1) { - socket.write(dataArray.shift(), finalCallback); - } else { - socket.write(dataArray.shift(), () => { syncWrite(dataArray, finalCallback); }); - } - }, 100); - }; + }, 100); + }; - const dataArray = [ - "__LOG4JS__", - "Hello__LOG4JS__World", - "__LOG4JS__", - "testing nonsense", - `__LOG4JS__more nonsense__LOG4JS__` - ]; + const dataArray = [ + '__LOG4JS__', + 'Hello__LOG4JS__World', + '__LOG4JS__', + 'testing nonsense', + `__LOG4JS__more nonsense__LOG4JS__`, + ]; - const finalCallback = () => { - socket.end(); - setTimeout(() => { - log4js.shutdown(() => { - const logs = vcr.replay(); - t.equal(logs.length, 8); - t.match(logs[4], { - data: [ - "Unable to parse log:", - "Hello", - "because: ", - SyntaxError - ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} - }); - t.match(logs[5], { - data: [ - "Unable to parse log:", - "World", - "because: ", - SyntaxError - ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} - }); - t.match(logs[6], { - data: [ - "Unable to parse log:", - "testing nonsense", - "because: ", - SyntaxError - ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} - }); - t.match(logs[7], { - data: [ - "Unable to parse log:", - "more nonsense", - "because: ", - SyntaxError - ], - categoryName: "log4js", - level: { levelStr: "ERROR" }, - context: {} - }); - t.end(); + const finalCallback = () => { + socket.end(); + setTimeout(() => { + log4js.shutdown(() => { + const logs = vcr.replay(); + t.equal(logs.length, 8); + t.match(logs[4], { + data: [ + 'Unable to parse log:', + 'Hello', + 'because: ', + SyntaxError, + ], + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, + }); + t.match(logs[5], { + data: [ + 'Unable to parse log:', + 'World', + 'because: ', + SyntaxError, + ], + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, + }); + t.match(logs[6], { + data: [ + 'Unable to parse log:', + 'testing nonsense', + 'because: ', + SyntaxError, + ], + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, + }); + t.match(logs[7], { + data: [ + 'Unable to parse log:', + 'more nonsense', + 'because: ', + SyntaxError, + ], + categoryName: 'log4js', + level: { levelStr: 'ERROR' }, + context: {}, }); - }, 100); - }; + t.end(); + }); + }, 100); + }; - syncWrite(dataArray, finalCallback); - }); + syncWrite(dataArray, finalCallback); + }); - socket.unref(); - }, 100); - } - ); + socket.unref(); + }, 100); + }); batch.end(); }); diff --git a/test/tap/setLevel-asymmetry-test.js b/test/tap/setLevel-asymmetry-test.js index 9bc6fe41..4a9148ba 100644 --- a/test/tap/setLevel-asymmetry-test.js +++ b/test/tap/setLevel-asymmetry-test.js @@ -5,23 +5,23 @@ // 2) isLevelEnabled("foo") works as does isLevelEnabled(log4js.levels.foo). // -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); -const logger = log4js.getLogger("test-setLevel-asymmetry"); +const logger = log4js.getLogger('test-setLevel-asymmetry'); // Define the array of levels as string to iterate over. -const strLevels = ["Trace", "Debug", "Info", "Warn", "Error", "Fatal"]; +const strLevels = ['Trace', 'Debug', 'Info', 'Warn', 'Error', 'Fatal']; const log4jsLevels = strLevels.map(log4js.levels.getLevel); -test("log4js setLevel", batch => { - strLevels.forEach(strLevel => { - batch.test(`is called with a ${strLevel} as string`, t => { +test('log4js setLevel', (batch) => { + strLevels.forEach((strLevel) => { + batch.test(`is called with a ${strLevel} as string`, (t) => { const log4jsLevel = log4js.levels.getLevel(strLevel); - t.test("should convert string to level correctly", assert => { + t.test('should convert string to level correctly', (assert) => { logger.level = strLevel; - log4jsLevels.forEach(level => { + log4jsLevels.forEach((level) => { assert.equal( logger.isLevelEnabled(level), log4jsLevel.isLessThanOrEqualTo(level) @@ -30,9 +30,9 @@ test("log4js setLevel", batch => { assert.end(); }); - t.test("should also accept a Level", assert => { + t.test('should also accept a Level', (assert) => { logger.level = log4jsLevel; - log4jsLevels.forEach(level => { + log4jsLevels.forEach((level) => { assert.equal( logger.isLevelEnabled(level), log4jsLevel.isLessThanOrEqualTo(level) diff --git a/test/tap/stacktraces-test.js b/test/tap/stacktraces-test.js index df6b101f..d8b018fc 100644 --- a/test/tap/stacktraces-test.js +++ b/test/tap/stacktraces-test.js @@ -1,21 +1,21 @@ -const { test } = require("tap"); +const { test } = require('tap'); -test("Stacktraces from errors in different VM context", t => { - const log4js = require("../../lib/log4js"); - const recorder = require("../../lib/appenders/recording"); - const layout = require("../../lib/layouts").basicLayout; - const vm = require("vm"); +test('Stacktraces from errors in different VM context', (t) => { + const log4js = require('../../lib/log4js'); + const recorder = require('../../lib/appenders/recording'); + const layout = require('../../lib/layouts').basicLayout; + const vm = require('vm'); log4js.configure({ - appenders: { vcr: { type: "recording" } }, - categories: { default: { appenders: ["vcr"], level: "debug" } } + appenders: { vcr: { type: 'recording' } }, + categories: { default: { appenders: ['vcr'], level: 'debug' } }, }); const logger = log4js.getLogger(); try { // Access not defined variable. - vm.runInNewContext("myVar();", {}, "myfile.js"); + vm.runInNewContext('myVar();', {}, 'myfile.js'); } catch (e) { // Expect to have a stack trace printed. logger.error(e); @@ -24,6 +24,6 @@ test("Stacktraces from errors in different VM context", t => { const events = recorder.replay(); // recording appender events do not go through layouts, so let's do it const output = layout(events[0]); - t.match(output, "stacktraces-test.js"); + t.match(output, 'stacktraces-test.js'); t.end(); }); diff --git a/test/tap/stderrAppender-test.js b/test/tap/stderrAppender-test.js index 670885e9..3c107103 100644 --- a/test/tap/stderrAppender-test.js +++ b/test/tap/stderrAppender-test.js @@ -1,59 +1,59 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); -const layouts = require("../../lib/layouts"); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); +const layouts = require('../../lib/layouts'); -test("stderr appender", t => { +test('stderr appender', (t) => { const output = []; const appender = sandbox - .require("../../lib/appenders/stderr", { + .require('../../lib/appenders/stderr', { globals: { process: { stderr: { write(data) { output.push(data); - } - } - } - } + }, + }, + }, + }, }) .configure( - { type: "stderr", layout: { type: "messagePassThrough" } }, + { type: 'stderr', layout: { type: 'messagePassThrough' } }, layouts ); - appender({ data: ["biscuits"] }); + appender({ data: ['biscuits'] }); t.plan(2); - t.equal(output.length, 1, "There should be one message."); - t.equal(output[0], "biscuits\n", "The message should be biscuits."); + t.equal(output.length, 1, 'There should be one message.'); + t.equal(output[0], 'biscuits\n', 'The message should be biscuits.'); t.end(); }); -test("stderr appender with default layout", t => { +test('stderr appender with default layout', (t) => { const output = []; - layouts.colouredLayout = () => "I used the colouredLayout"; + layouts.colouredLayout = () => 'I used the colouredLayout'; const appender = sandbox - .require("../../lib/appenders/stderr", { + .require('../../lib/appenders/stderr', { globals: { process: { stderr: { write(data) { output.push(data); - } - } - } - } + }, + }, + }, + }, }) - .configure({ type: "stderr" }, layouts); + .configure({ type: 'stderr' }, layouts); - appender({ data: ["biscuits"] }); + appender({ data: ['biscuits'] }); t.plan(2); - t.equal(output.length, 1, "There should be one message."); + t.equal(output.length, 1, 'There should be one message.'); t.equal( output[0], - "I used the colouredLayout\n", - "The message should have gone through the default layout." + 'I used the colouredLayout\n', + 'The message should have gone through the default layout.' ); t.end(); }); diff --git a/test/tap/stdoutAppender-test.js b/test/tap/stdoutAppender-test.js index 880118d7..89fc2318 100644 --- a/test/tap/stdoutAppender-test.js +++ b/test/tap/stdoutAppender-test.js @@ -1,30 +1,30 @@ -const { test } = require("tap"); -const sandbox = require("@log4js-node/sandboxed-module"); -const layouts = require("../../lib/layouts"); +const { test } = require('tap'); +const sandbox = require('@log4js-node/sandboxed-module'); +const layouts = require('../../lib/layouts'); -test("stdout appender", t => { +test('stdout appender', (t) => { const output = []; const appender = sandbox - .require("../../lib/appenders/stdout", { + .require('../../lib/appenders/stdout', { globals: { process: { stdout: { write(data) { output.push(data); - } - } - } - } + }, + }, + }, + }, }) .configure( - { type: "stdout", layout: { type: "messagePassThrough" } }, + { type: 'stdout', layout: { type: 'messagePassThrough' } }, layouts ); - appender({ data: ["cheese"] }); + appender({ data: ['cheese'] }); t.plan(2); - t.equal(output.length, 1, "There should be one message."); - t.equal(output[0], "cheese\n", "The message should be cheese."); + t.equal(output.length, 1, 'There should be one message.'); + t.equal(output[0], 'cheese\n', 'The message should be cheese.'); t.end(); }); diff --git a/test/tap/subcategories-test.js b/test/tap/subcategories-test.js index cb873faa..4d71098a 100644 --- a/test/tap/subcategories-test.js +++ b/test/tap/subcategories-test.js @@ -1,32 +1,32 @@ -const { test } = require("tap"); -const log4js = require("../../lib/log4js"); +const { test } = require('tap'); +const log4js = require('../../lib/log4js'); -test("subcategories", batch => { - batch.test("loggers created after levels configuration is loaded", t => { +test('subcategories', (batch) => { + batch.test('loggers created after levels configuration is loaded', (t) => { log4js.configure({ - appenders: { stdout: { type: "stdout" } }, + appenders: { stdout: { type: 'stdout' } }, categories: { - default: { appenders: ["stdout"], level: "TRACE" }, - sub1: { appenders: ["stdout"], level: "WARN" }, - "sub1.sub11": { appenders: ["stdout"], level: "TRACE" }, - "sub1.sub11.sub111": { appenders: ["stdout"], level: "WARN" }, - "sub1.sub12": { appenders: ["stdout"], level: "INFO" } - } + default: { appenders: ['stdout'], level: 'TRACE' }, + sub1: { appenders: ['stdout'], level: 'WARN' }, + 'sub1.sub11': { appenders: ['stdout'], level: 'TRACE' }, + 'sub1.sub11.sub111': { appenders: ['stdout'], level: 'WARN' }, + 'sub1.sub12': { appenders: ['stdout'], level: 'INFO' }, + }, }); const loggers = { - sub1: log4js.getLogger("sub1"), // WARN - sub11: log4js.getLogger("sub1.sub11"), // TRACE - sub111: log4js.getLogger("sub1.sub11.sub111"), // WARN - sub12: log4js.getLogger("sub1.sub12"), // INFO - - sub13: log4js.getLogger("sub1.sub13"), // Inherits sub1: WARN - sub112: log4js.getLogger("sub1.sub11.sub112"), // Inherits sub1.sub11: TRACE - sub121: log4js.getLogger("sub1.sub12.sub121"), // Inherits sub12: INFO - sub0: log4js.getLogger("sub0") // Not defined, not inherited: TRACE + sub1: log4js.getLogger('sub1'), // WARN + sub11: log4js.getLogger('sub1.sub11'), // TRACE + sub111: log4js.getLogger('sub1.sub11.sub111'), // WARN + sub12: log4js.getLogger('sub1.sub12'), // INFO + + sub13: log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN + sub112: log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE + sub121: log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO + sub0: log4js.getLogger('sub0'), // Not defined, not inherited: TRACE }; - t.test("check logger levels", assert => { + t.test('check logger levels', (assert) => { assert.equal(loggers.sub1.level, log4js.levels.WARN); assert.equal(loggers.sub11.level, log4js.levels.TRACE); assert.equal(loggers.sub111.level, log4js.levels.WARN); @@ -42,38 +42,38 @@ test("subcategories", batch => { t.end(); }); - batch.test("loggers created before levels configuration is loaded", t => { + batch.test('loggers created before levels configuration is loaded', (t) => { // reset to defaults log4js.configure({ - appenders: { stdout: { type: "stdout" } }, - categories: { default: { appenders: ["stdout"], level: "info" } } + appenders: { stdout: { type: 'stdout' } }, + categories: { default: { appenders: ['stdout'], level: 'info' } }, }); // these should all get the default log level of INFO const loggers = { - sub1: log4js.getLogger("sub1"), // WARN - sub11: log4js.getLogger("sub1.sub11"), // TRACE - sub111: log4js.getLogger("sub1.sub11.sub111"), // WARN - sub12: log4js.getLogger("sub1.sub12"), // INFO - - sub13: log4js.getLogger("sub1.sub13"), // Inherits sub1: WARN - sub112: log4js.getLogger("sub1.sub11.sub112"), // Inherits sub1.sub11: TRACE - sub121: log4js.getLogger("sub1.sub12.sub121"), // Inherits sub12: INFO - sub0: log4js.getLogger("sub0") // Not defined, not inherited: TRACE + sub1: log4js.getLogger('sub1'), // WARN + sub11: log4js.getLogger('sub1.sub11'), // TRACE + sub111: log4js.getLogger('sub1.sub11.sub111'), // WARN + sub12: log4js.getLogger('sub1.sub12'), // INFO + + sub13: log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN + sub112: log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE + sub121: log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO + sub0: log4js.getLogger('sub0'), // Not defined, not inherited: TRACE }; log4js.configure({ - appenders: { stdout: { type: "stdout" } }, + appenders: { stdout: { type: 'stdout' } }, categories: { - default: { appenders: ["stdout"], level: "TRACE" }, - sub1: { appenders: ["stdout"], level: "WARN" }, - "sub1.sub11": { appenders: ["stdout"], level: "TRACE" }, - "sub1.sub11.sub111": { appenders: ["stdout"], level: "WARN" }, - "sub1.sub12": { appenders: ["stdout"], level: "INFO" } - } + default: { appenders: ['stdout'], level: 'TRACE' }, + sub1: { appenders: ['stdout'], level: 'WARN' }, + 'sub1.sub11': { appenders: ['stdout'], level: 'TRACE' }, + 'sub1.sub11.sub111': { appenders: ['stdout'], level: 'WARN' }, + 'sub1.sub12': { appenders: ['stdout'], level: 'INFO' }, + }, }); - t.test("should still get new levels", assert => { + t.test('should still get new levels', (assert) => { // can't use .equal because by calling log4js.configure we create new instances assert.same(loggers.sub1.level, log4js.levels.WARN); assert.same(loggers.sub11.level, log4js.levels.TRACE); @@ -90,30 +90,33 @@ test("subcategories", batch => { }); batch.test( - "setting level on subcategories should not set parent level", - t => { + 'setting level on subcategories should not set parent level', + (t) => { log4js.configure({ - appenders: { stdout: { type: "stdout" } }, + appenders: { stdout: { type: 'stdout' } }, categories: { - default: { appenders: ["stdout"], level: "trace" }, - parent: { appenders: ["stdout"], level: "error" } - } + default: { appenders: ['stdout'], level: 'trace' }, + parent: { appenders: ['stdout'], level: 'error' }, + }, }); - const logger = log4js.getLogger("parent"); - const subLogger = log4js.getLogger("parent.child"); + const logger = log4js.getLogger('parent'); + const subLogger = log4js.getLogger('parent.child'); - t.test("should inherit parent level", assert => { + t.test('should inherit parent level', (assert) => { assert.same(subLogger.level, log4js.levels.ERROR); assert.end(); }); - t.test("changing child level should not change parent level", assert => { - subLogger.level = "info"; - assert.same(subLogger.level, log4js.levels.INFO); - assert.same(logger.level, log4js.levels.ERROR); - assert.end(); - }); + t.test( + 'changing child level should not change parent level', + (assert) => { + subLogger.level = 'info'; + assert.same(subLogger.level, log4js.levels.INFO); + assert.same(logger.level, log4js.levels.ERROR); + assert.end(); + } + ); t.end(); } diff --git a/test/tap/tcp-appender-test.js b/test/tap/tcp-appender-test.js index 3e9fb198..068ff829 100644 --- a/test/tap/tcp-appender-test.js +++ b/test/tap/tcp-appender-test.js @@ -1,23 +1,22 @@ -const { test } = require("tap"); -const net = require("net"); -const flatted = require("flatted"); -const sandbox = require("@log4js-node/sandboxed-module"); -const log4js = require("../../lib/log4js"); -const LoggingEvent = require("../../lib/LoggingEvent"); +const { test } = require('tap'); +const net = require('net'); +const flatted = require('flatted'); +const sandbox = require('@log4js-node/sandboxed-module'); +const log4js = require('../../lib/log4js'); +const LoggingEvent = require('../../lib/LoggingEvent'); let messages = []; let server = null; function makeServer(config) { + server = net.createServer((socket) => { + socket.setEncoding('utf8'); - server = net.createServer(socket => { - socket.setEncoding("utf8"); - - socket.on("data", data => { + socket.on('data', (data) => { data .split(config.endMsg) - .filter(s => s.length) - .forEach(s => { + .filter((s) => s.length) + .forEach((s) => { messages.push(config.deserialise(s)); }); }); @@ -49,72 +48,71 @@ function makeFakeNet() { }, end() { fakeNet.closeCalled = true; - } + }, }; }, createServer(cb) { const fakeNet = this; cb({ - remoteAddress: "1.2.3.4", - remotePort: "1234", + remoteAddress: '1.2.3.4', + remotePort: '1234', setEncoding(encoding) { fakeNet.encoding = encoding; }, on(event, cb2) { fakeNet.cbs[event] = cb2; - } + }, }); return { listen(port, host) { fakeNet.port = port; fakeNet.host = host; - } + }, }; - } + }, }; } -test("TCP Appender", batch => { - - batch.test("Default Configuration", t => { +test('TCP Appender', (batch) => { + batch.test('Default Configuration', (t) => { messages = []; const serverConfig = { - endMsg: "__LOG4JS__", - deserialise: (log) => LoggingEvent.deserialise(log) - } + endMsg: '__LOG4JS__', + deserialise: (log) => LoggingEvent.deserialise(log), + }; server = makeServer(serverConfig); server.listen(() => { const { port } = server.address(); log4js.configure({ appenders: { - default: { type: "tcp", port }, + default: { type: 'tcp', port }, }, categories: { - default: { appenders: ["default"], level: "debug" }, - } + default: { appenders: ['default'], level: 'debug' }, + }, }); const logger = log4js.getLogger(); - logger.info("This should be sent via TCP."); - logger.info("This should also be sent via TCP and not break things."); + logger.info('This should be sent via TCP.'); + logger.info('This should also be sent via TCP and not break things.'); log4js.shutdown(() => { server.close(() => { t.equal(messages.length, 2); t.match(messages[0], { - data: ["This should be sent via TCP."], - categoryName: "default", + data: ['This should be sent via TCP.'], + categoryName: 'default', context: {}, - level: { levelStr: "INFO" } + level: { levelStr: 'INFO' }, }); t.match(messages[1], { - data: ["This should also be sent via TCP and not break things."], - categoryName: "default", + data: ['This should also be sent via TCP and not break things.'], + categoryName: 'default', context: {}, - level: { levelStr: "INFO" } + level: { levelStr: 'INFO' }, }); t.end(); }); @@ -122,44 +120,48 @@ test("TCP Appender", batch => { }); }); - batch.test("Custom EndMessage String", t => { + batch.test('Custom EndMessage String', (t) => { messages = []; const serverConfig = { - endMsg: "\n", - deserialise: (log) => LoggingEvent.deserialise(log) - } + endMsg: '\n', + deserialise: (log) => LoggingEvent.deserialise(log), + }; server = makeServer(serverConfig); server.listen(() => { const { port } = server.address(); log4js.configure({ appenders: { - customEndMsg: { type: "tcp", port, endMsg: "\n" }, + customEndMsg: { type: 'tcp', port, endMsg: '\n' }, }, categories: { - default: { appenders: ["customEndMsg"], level: "debug" }, - } + default: { appenders: ['customEndMsg'], level: 'debug' }, + }, }); const logger = log4js.getLogger(); - logger.info("This should be sent via TCP using a custom EndMsg string."); - logger.info("This should also be sent via TCP using a custom EndMsg string and not break things."); + logger.info('This should be sent via TCP using a custom EndMsg string.'); + logger.info( + 'This should also be sent via TCP using a custom EndMsg string and not break things.' + ); log4js.shutdown(() => { server.close(() => { t.equal(messages.length, 2); t.match(messages[0], { - data: ["This should be sent via TCP using a custom EndMsg string."], - categoryName: "default", + data: ['This should be sent via TCP using a custom EndMsg string.'], + categoryName: 'default', context: {}, - level: { levelStr: "INFO" } + level: { levelStr: 'INFO' }, }); t.match(messages[1], { - data: ["This should also be sent via TCP using a custom EndMsg string and not break things."], - categoryName: "default", + data: [ + 'This should also be sent via TCP using a custom EndMsg string and not break things.', + ], + categoryName: 'default', context: {}, - level: { levelStr: "INFO" } + level: { levelStr: 'INFO' }, }); t.end(); }); @@ -167,51 +169,59 @@ test("TCP Appender", batch => { }); }); - batch.test("Custom Layout", t => { + batch.test('Custom Layout', (t) => { messages = []; const serverConfig = { - endMsg: "__LOG4JS__", - deserialise: (log) => JSON.parse(log) - } + endMsg: '__LOG4JS__', + deserialise: (log) => JSON.parse(log), + }; server = makeServer(serverConfig); - log4js.addLayout('json', () => function (logEvent) { - return JSON.stringify({ - "time": logEvent.startTime, - "message": logEvent.data[0], - "level": logEvent.level.toString() - }); - }); + log4js.addLayout( + 'json', + () => + function (logEvent) { + return JSON.stringify({ + time: logEvent.startTime, + message: logEvent.data[0], + level: logEvent.level.toString(), + }); + } + ); server.listen(() => { const { port } = server.address(); log4js.configure({ appenders: { customLayout: { - type: "tcp", port, - layout: { type: 'json' } + type: 'tcp', + port, + layout: { type: 'json' }, }, }, categories: { - default: { appenders: ["customLayout"], level: "debug" }, - } + default: { appenders: ['customLayout'], level: 'debug' }, + }, }); const logger = log4js.getLogger(); - logger.info("This should be sent as a customized json."); - logger.info("This should also be sent via TCP as a customized json and not break things."); + logger.info('This should be sent as a customized json.'); + logger.info( + 'This should also be sent via TCP as a customized json and not break things.' + ); log4js.shutdown(() => { server.close(() => { t.equal(messages.length, 2); t.match(messages[0], { - message: "This should be sent as a customized json.", - level: "INFO" + message: 'This should be sent as a customized json.', + level: 'INFO', }); t.match(messages[1], { - message: "This should also be sent via TCP as a customized json and not break things.", - level: "INFO" + message: + 'This should also be sent via TCP as a customized json and not break things.', + level: 'INFO', }); t.end(); }); @@ -219,29 +229,29 @@ test("TCP Appender", batch => { }); }); - batch.test("when underlying stream errors", t => { + batch.test('when underlying stream errors', (t) => { const fakeNet = makeFakeNet(); - const sandboxedLog4js = sandbox.require("../../lib/log4js", { + const sandboxedLog4js = sandbox.require('../../lib/log4js', { requires: { - net: fakeNet - } + net: fakeNet, + }, }); sandboxedLog4js.configure({ appenders: { - default: { type: "tcp" }, + default: { type: 'tcp' }, }, categories: { - default: { appenders: ["default"], level: "debug" }, - } + default: { appenders: ['default'], level: 'debug' }, + }, }); const logger = sandboxedLog4js.getLogger(); - logger.info("before connect"); + logger.info('before connect'); t.test( - "should buffer messages written before socket is connected", - assert => { + 'should buffer messages written before socket is connected', + (assert) => { assert.equal(fakeNet.data.length, 0); assert.equal(fakeNet.createConnectionCalled, 1); assert.end(); @@ -249,60 +259,63 @@ test("TCP Appender", batch => { ); fakeNet.cbs.connect(); - t.test( - "should flush buffered messages", - assert => { - assert.equal(fakeNet.data.length, 1); - assert.equal(fakeNet.createConnectionCalled, 1); - assert.match(fakeNet.data[0], "before connect"); - assert.end(); - } - ); + t.test('should flush buffered messages', (assert) => { + assert.equal(fakeNet.data.length, 1); + assert.equal(fakeNet.createConnectionCalled, 1); + assert.match(fakeNet.data[0], 'before connect'); + assert.end(); + }); - logger.info("after connect"); + logger.info('after connect'); t.test( - "should write log messages to socket as flatted strings with a terminator string", - assert => { + 'should write log messages to socket as flatted strings with a terminator string', + (assert) => { assert.equal(fakeNet.data.length, 2); - assert.match(fakeNet.data[0], "before connect"); - assert.ok(fakeNet.data[0].endsWith("__LOG4JS__")); - assert.match(fakeNet.data[1], "after connect"); - assert.ok(fakeNet.data[1].endsWith("__LOG4JS__")); - assert.equal(fakeNet.encoding, "utf8"); + assert.match(fakeNet.data[0], 'before connect'); + assert.ok(fakeNet.data[0].endsWith('__LOG4JS__')); + assert.match(fakeNet.data[1], 'after connect'); + assert.ok(fakeNet.data[1].endsWith('__LOG4JS__')); + assert.equal(fakeNet.encoding, 'utf8'); assert.end(); } ); fakeNet.cbs.error(); - logger.info("after error, before close"); + logger.info('after error, before close'); fakeNet.cbs.close(); - logger.info("after close, before connect"); + logger.info('after close, before connect'); fakeNet.cbs.connect(); - logger.info("after error, after connect"); - t.test("should attempt to re-open the socket on error", assert => { + logger.info('after error, after connect'); + t.test('should attempt to re-open the socket on error', (assert) => { assert.equal(fakeNet.data.length, 5); assert.equal(fakeNet.createConnectionCalled, 2); - assert.match(fakeNet.data[2], "after error, before close"); - assert.match(fakeNet.data[3], "after close, before connect"); - assert.match(fakeNet.data[4], "after error, after connect"); + assert.match(fakeNet.data[2], 'after error, before close'); + assert.match(fakeNet.data[3], 'after close, before connect'); + assert.match(fakeNet.data[4], 'after error, after connect'); assert.end(); }); - t.test("should buffer messages until drain", assert => { + t.test('should buffer messages until drain', (assert) => { const previousLength = fakeNet.data.length; - logger.info("should not be flushed"); + logger.info('should not be flushed'); assert.equal(fakeNet.data.length, previousLength); - assert.notMatch(fakeNet.data[fakeNet.data.length - 1], "should not be flushed"); + assert.notMatch( + fakeNet.data[fakeNet.data.length - 1], + 'should not be flushed' + ); fakeNet.cbs.drain(); assert.equal(fakeNet.data.length, previousLength + 1); - assert.match(fakeNet.data[fakeNet.data.length - 1], "should not be flushed"); + assert.match( + fakeNet.data[fakeNet.data.length - 1], + 'should not be flushed' + ); assert.end(); }); - t.test("should serialize an Error correctly", assert => { + t.test('should serialize an Error correctly', (assert) => { const previousLength = fakeNet.data.length; - logger.error(new Error("Error test")); + logger.error(new Error('Error test')); fakeNet.cbs.drain(); assert.equal(fakeNet.data.length, previousLength + 1); const raw = fakeNet.data[fakeNet.data.length - 1]; @@ -311,7 +324,8 @@ test("TCP Appender", batch => { flatted.parse(raw.slice(0, offset !== -1 ? offset : 0)).data[0].stack, `Expected:\n\n${fakeNet.data[6]}\n\n to have a 'data[0].stack' property` ); - const actual = flatted.parse(raw.slice(0, offset !== -1 ? offset : 0)).data[0].stack; + const actual = flatted.parse(raw.slice(0, offset !== -1 ? offset : 0)) + .data[0].stack; assert.match(actual, /^Error: Error test/); assert.end(); }); diff --git a/test/tap/test-config.json b/test/tap/test-config.json index 2a69651b..bed4e5a0 100644 --- a/test/tap/test-config.json +++ b/test/tap/test-config.json @@ -1,5 +1,3 @@ { - "appenders": [ - { "type": "stdout" } - ] + "appenders": [{ "type": "stdout" }] } diff --git a/v2-changes.md b/v2-changes.md index 97593698..1da1998b 100644 --- a/v2-changes.md +++ b/v2-changes.md @@ -1,5 +1,4 @@ -CHANGES -======= +# CHANGES - no exit listeners defined for appenders by default. users should call log4js.shutdown in their exit listeners. - context added to loggers (only logstash uses it so far) From 86292b0cedd6f946c58e30bfe024818ce4c982d7 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 24 Jun 2022 00:42:34 +0800 Subject: [PATCH 291/454] docs: renamed peteriman to lamweili in changelog --- CHANGELOG.md | 166 +++++++++++++++++++++++++-------------------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 020f90ab..cbe19499 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,31 +6,31 @@ ## 6.5.1 -- [fix: fs.appendFileSync should use flag instead of flags](https://github.com/log4js-node/log4js-node/pull/1257) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1258) - thanks [@peteriman](https://github.com/peteriman) +- [fix: fs.appendFileSync should use flag instead of flags](https://github.com/log4js-node/log4js-node/pull/1257) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1258) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump streamroller from 3.1.0 to 3.1.1 - chore(deps): updated package-lock.json ## 6.5.0 -- [feat: logger.log() to be synonym of logger.info()](https://github.com/log4js-node/log4js-node/pull/1254) - thanks [@peteriman](https://github.com/peteriman) -- [feat: tilde expansion for filename](https://github.com/log4js-node/log4js-node/pull/1252) - thanks [@peteriman](https://github.com/peteriman) -- [fix: better file validation](https://github.com/log4js-node/log4js-node/pull/1251) - thanks [@peteriman](https://github.com/peteriman) -- [fix: fallback for logger.log outputs nothing](https://github.com/log4js-node/log4js-node/pull/1247) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated fileAppender maxLogSize documentation](https://github.com/log4js-node/log4js-node/pull/1248) - thanks [@peteriman](https://github.com/peteriman) -- [ci: enforced 100% test coverage tests](https://github.com/log4js-node/log4js-node/pull/1253) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1256) - thanks [@peteriman](https://github.com/peteriman) +- [feat: logger.log() to be synonym of logger.info()](https://github.com/log4js-node/log4js-node/pull/1254) - thanks [@lamweili](https://github.com/lamweili) +- [feat: tilde expansion for filename](https://github.com/log4js-node/log4js-node/pull/1252) - thanks [@lamweili](https://github.com/lamweili) +- [fix: better file validation](https://github.com/log4js-node/log4js-node/pull/1251) - thanks [@lamweili](https://github.com/lamweili) +- [fix: fallback for logger.log outputs nothing](https://github.com/log4js-node/log4js-node/pull/1247) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated fileAppender maxLogSize documentation](https://github.com/log4js-node/log4js-node/pull/1248) - thanks [@lamweili](https://github.com/lamweili) +- [ci: enforced 100% test coverage tests](https://github.com/log4js-node/log4js-node/pull/1253) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1256) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint from 8.15.0 to 8.16.0 - chore(deps): bump streamroller from 3.0.9 to 3.1.0 - chore(deps): updated package-lock.json ## 6.4.7 -- [fix: dateFileAppender unable to use units in maxLogSize](https://github.com/log4js-node/log4js-node/pull/1243) - thanks [@peteriman](https://github.com/peteriman) -- [type: added fileNameSep for FileAppender and DateFileAppender](https://github.com/log4js-node/log4js-node/pull/1241) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated usage of units for maxLogSize](https://github.com/log4js-node/log4js-node/pull/1242) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated comments in typescript def](https://github.com/log4js-node/log4js-node/pull/1240) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1244) - thanks [@peteriman](https://github.com/peteriman) +- [fix: dateFileAppender unable to use units in maxLogSize](https://github.com/log4js-node/log4js-node/pull/1243) - thanks [@lamweili](https://github.com/lamweili) +- [type: added fileNameSep for FileAppender and DateFileAppender](https://github.com/log4js-node/log4js-node/pull/1241) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated usage of units for maxLogSize](https://github.com/log4js-node/log4js-node/pull/1242) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated comments in typescript def](https://github.com/log4js-node/log4js-node/pull/1240) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1244) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint from 8.14.0 to 8.15.0 - chore(deps-dev): bump husky from 7.0.4 to 8.0.1 - chore(deps-dev): bump tap from 16.1.0 to 16.2.0 @@ -38,35 +38,35 @@ - chore(deps): bump date-format from 4.0.9 to 4.0.10 - chore(deps): bump streamroller from 3.0.8 to 3.0.9 - chore(deps): updated package-lock.json -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1238) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1238) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump tap from 16.0.1 to 16.1.0 - chore(deps-dev): updated package-lock.json ## 6.4.6 -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1236) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1236) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint from 8.13.0 to 8.14.0 - chore(deps): bump date-format from 4.0.7 to 4.0.9 - chore(deps): bump streamroller from 3.0.7 to 3.0.8 - fix: [#1216](https://github.com/log4js-node/log4js-node/issues/1216) where promise rejection is not handled ([streamroller@3.0.8 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - chore(deps): updated package-lock.json -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1234) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1234) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump fs-extra from 10.0.1 to 10.1.0 - chore(deps): updated package-lock.json ## 6.4.5 -- [fix: deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@peteriman](https://github.com/peteriman) -- [fix: fileDepth for ESM](https://github.com/log4js-node/log4js-node/pull/1224) - thanks [@peteriman](https://github.com/peteriman) +- [fix: deserialise for enableCallStack features: filename, lineNumber, columnNumber, callStack](https://github.com/log4js-node/log4js-node/pull/1230) - thanks [@lamweili](https://github.com/lamweili) +- [fix: fileDepth for ESM](https://github.com/log4js-node/log4js-node/pull/1224) - thanks [@lamweili](https://github.com/lamweili) - [refactor: replace deprecated String.prototype.substr()](https://github.com/log4js-node/log4js-node/pull/1223) - thanks [@CommanderRoot](https://github.com/CommanderRoot) -- [type: LogEvent types](https://github.com/log4js-node/log4js-node/pull/1231) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated typescript usage](https://github.com/log4js-node/log4js-node/pull/1229) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@peteriman](https://github.com/peteriman) +- [type: LogEvent types](https://github.com/log4js-node/log4js-node/pull/1231) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated typescript usage](https://github.com/log4js-node/log4js-node/pull/1229) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1232) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump date-format from 4.0.6 to 4.0.7 - chore(deps): bump streamroller from 3.0.6 to 3.0.7 - fix: [#1225](https://github.com/log4js-node/log4js-node/issues/1225) where fs-extra throws error when fs.realpath.native is undefined ([streamroller@3.0.7 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - chore(deps): updated package-lock.json -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1228) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint from 8.11.0 to 8.13.0 - chore(deps-dev): bump eslint-plugin-import from 2.25.4 to 2.26.0 - chore(deps-dev): bump tap from 16.0.0 to 16.0.1 @@ -76,11 +76,11 @@ ## 6.4.4 -- [fix: set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@peteriman](https://github.com/peteriman) +- [fix: set logger.level on runtime will no longer wrongly reset useCallStack](https://github.com/log4js-node/log4js-node/pull/1217) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated docs for broken links and inaccessible pages](https://github.com/log4js-node/log4js-node/pull/1219) - thanks [@lamweili](https://github.com/lamweili) - [docs: broken link to gelf appender](https://github.com/log4js-node/log4js-node/pull/1218) - thanks [@mattalexx](https://github.com/mattalexx) - [docs: updated docs for appenders module loading](https://github.com/log4js-node/log4js-node/pull/985) - thanks [@leonimurilo](https://github.com/leonimurilo) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1221) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1221) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump streamroller from 3.0.5 to 3.0.6 - chore(deps): bump debug from 4.3.3 to 4.3.4 - chore(deps): bump date-format from 4.0.5 to 4.0.6 @@ -89,22 +89,22 @@ ## 6.4.3 -- [fix: added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: removed redundant logic in tcp-serverAppender](https://github.com/log4js-node/log4js-node/pull/1198) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: removed redundant logic in multiprocessAppender](https://github.com/log4js-node/log4js-node/pull/1197) - thanks [@peteriman](https://github.com/peteriman) -- test: 100% test coverage - thanks [@peteriman](https://github.com/peteriman) +- [fix: added filename validation](https://github.com/log4js-node/log4js-node/pull/1201) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: do not initialise default appenders as it will be done again by configure()](https://github.com/log4js-node/log4js-node/pull/1210) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: defensive coding for cluster=null if require('cluster') fails in try-catch ](https://github.com/log4js-node/log4js-node/pull/1199) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: removed redundant logic in tcp-serverAppender](https://github.com/log4js-node/log4js-node/pull/1198) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: removed redundant logic in multiprocessAppender](https://github.com/log4js-node/log4js-node/pull/1197) - thanks [@lamweili](https://github.com/lamweili) +- test: 100% test coverage - thanks [@lamweili](https://github.com/lamweili) - test: part 1 of 3: https://github.com/log4js-node/log4js-node/pull/1200 - test: part 2 of 3: https://github.com/log4js-node/log4js-node/pull/1204 - test: part 3 of 3: https://github.com/log4js-node/log4js-node/pull/1205 - [test: improved test cases](https://github.com/log4js-node/log4js-node/pull/1211) -- [docs: updated README.md with badges](https://github.com/log4js-node/log4js-node/pull/1209) - thanks [@peteriman](https://github.com/peteriman) -- [docs: added docs for istanbul ignore](https://github.com/log4js-node/log4js-node/pull/1208) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated logger api docs](https://github.com/log4js-node/log4js-node/pull/1203) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated file and fileSync appender docs](https://github.com/log4js-node/log4js-node/pull/1202) - thanks [@peteriman](https://github.com/peteriman) -- [chore(lint): improve eslint rules](https://github.com/log4js-node/log4js-node/pull/1206) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1207) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated README.md with badges](https://github.com/log4js-node/log4js-node/pull/1209) - thanks [@lamweili](https://github.com/lamweili) +- [docs: added docs for istanbul ignore](https://github.com/log4js-node/log4js-node/pull/1208) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated logger api docs](https://github.com/log4js-node/log4js-node/pull/1203) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated file and fileSync appender docs](https://github.com/log4js-node/log4js-node/pull/1202) - thanks [@lamweili](https://github.com/lamweili) +- [chore(lint): improve eslint rules](https://github.com/log4js-node/log4js-node/pull/1206) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1207) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint from 8.10.0 to 8.11.0 - chore(deps-dev): bump eslint-config-airbnb-base from 13.2.0 to 15.0.0 - chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 @@ -115,18 +115,18 @@ ## 6.4.2 -- [fix: fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@peteriman](https://github.com/peteriman) -- [fix: serialise() for NaN, Infinity, -Infinity and undefined](https://github.com/log4js-node/log4js-node/pull/1188) - thanks [@peteriman](https://github.com/peteriman) -- [fix: connectLogger not logging on close](https://github.com/log4js-node/log4js-node/pull/1179) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: defensive coding](https://github.com/log4js-node/log4js-node/pull/1183) - thanks [@peteriman](https://github.com/peteriman) -- [type: fixed Logger constructor](https://github.com/log4js-node/log4js-node/pull/1177) - thanks [@peteriman](https://github.com/peteriman) -- [test: improve test coverage](https://github.com/log4js-node/log4js-node/pull/1184) - thanks [@peteriman](https://github.com/peteriman) -- [test: refactor and replaced tap deprecation in preparation for tap v15](https://github.com/log4js-node/log4js-node/pull/1172) - thanks [@peteriman](https://github.com/peteriman) +- [fix: fileSync appender to create directory recursively](https://github.com/log4js-node/log4js-node/pull/1191) - thanks [@lamweili](https://github.com/lamweili) +- [fix: serialise() for NaN, Infinity, -Infinity and undefined](https://github.com/log4js-node/log4js-node/pull/1188) - thanks [@lamweili](https://github.com/lamweili) +- [fix: connectLogger not logging on close](https://github.com/log4js-node/log4js-node/pull/1179) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: defensive coding](https://github.com/log4js-node/log4js-node/pull/1183) - thanks [@lamweili](https://github.com/lamweili) +- [type: fixed Logger constructor](https://github.com/log4js-node/log4js-node/pull/1177) - thanks [@lamweili](https://github.com/lamweili) +- [test: improve test coverage](https://github.com/log4js-node/log4js-node/pull/1184) - thanks [@lamweili](https://github.com/lamweili) +- [test: refactor and replaced tap deprecation in preparation for tap v15](https://github.com/log4js-node/log4js-node/pull/1172) - thanks [@lamweili](https://github.com/lamweili) - [test: added e2e test for multiprocess Appender](https://github.com/log4js-node/log4js-node/pull/1170) - thanks [@nicojs](https://github.com/nicojs) -- [docs: updated file appender docs](https://github.com/log4js-node/log4js-node/pull/1182) - thanks [@peteriman](https://github.com/peteriman) -- [docs: updated dateFile appender docs](https://github.com/log4js-node/log4js-node/pull/1181) - thanks [@peteriman](https://github.com/peteriman) -- [docs: corrected typo in sample code for multiFile appender](https://github.com/log4js-node/log4js-node/pull/1180) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1194) - thanks [@peteriman](https://github.com/peteriman) +- [docs: updated file appender docs](https://github.com/log4js-node/log4js-node/pull/1182) - thanks [@lamweili](https://github.com/lamweili) +- [docs: updated dateFile appender docs](https://github.com/log4js-node/log4js-node/pull/1181) - thanks [@lamweili](https://github.com/lamweili) +- [docs: corrected typo in sample code for multiFile appender](https://github.com/log4js-node/log4js-node/pull/1180) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1194) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump date-format from 4.0.3 to 4.0.4 - chore(deps): bump streamroller from 3.0.2 to 3.0.4 - fix: [#1189](https://github.com/log4js-node/log4js-node/issues/1189) for an compatibility issue with directory creation for NodeJS < 10.12.0 ([streamroller@3.0.3 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) @@ -134,22 +134,22 @@ - chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 - chore(deps-dev): bump fs-extra from 10.0.0 to 10.0.1 - chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 -- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1185) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated deps-dev](https://github.com/log4js-node/log4js-node/pull/1185) - thanks [@lamweili](https://github.com/lamweili) - chore(deps): bump flatted from 3.2.4 to 3.2.5 - chore(deps-dev): bump eslint from 8.7.0 to 8.8.0 -- [chore(deps): updated package-lock.json](https://github.com/log4js-node/log4js-node/pull/1174) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps-dev): bump tap from 14.10.7 to 15.1.6](https://github.com/log4js-node/log4js-node/pull/1173) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): updated package-lock.json](https://github.com/log4js-node/log4js-node/pull/1174) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps-dev): bump tap from 14.10.7 to 15.1.6](https://github.com/log4js-node/log4js-node/pull/1173) - thanks [@lamweili](https://github.com/lamweili) ## 6.4.1 - [fix: startup multiprocess even when no direct appenders](https://github.com/log4js-node/log4js-node/pull/1162) - thanks [@nicojs](https://github.com/nicojs) - - [refactor: fixed eslint warnings](https://github.com/log4js-node/log4js-node/pull/1165) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: additional alias for date patterns](https://github.com/log4js-node/log4js-node/pull/1163) - thanks [@peteriman](https://github.com/peteriman) -- [refactor: added emitWarning for deprecation](https://github.com/log4js-node/log4js-node/pull/1164) - thanks [@peteriman](https://github.com/peteriman) + - [refactor: fixed eslint warnings](https://github.com/log4js-node/log4js-node/pull/1165) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: additional alias for date patterns](https://github.com/log4js-node/log4js-node/pull/1163) - thanks [@lamweili](https://github.com/lamweili) +- [refactor: added emitWarning for deprecation](https://github.com/log4js-node/log4js-node/pull/1164) - thanks [@lamweili](https://github.com/lamweili) - [type: Fixed wrong types from 6.4.0 regression](https://github.com/log4js-node/log4js-node/pull/1158) - thanks [@glasser](https://github.com/glasser) -- [docs: changed author to contributors in package.json](https://github.com/log4js-node/log4js-node/pull/1153) - thanks [@peteriman](https://github.com/peteriman) +- [docs: changed author to contributors in package.json](https://github.com/log4js-node/log4js-node/pull/1153) - thanks [@lamweili](https://github.com/lamweili) - [chore(deps): bump node-fetch from 2.6.6 to 2.6.7](https://github.com/log4js-node/log4js-node/pull/1167) - thanks [@Dependabot](https://github.com/dependabot) -- [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump typescript from 4.5.4 to 4.5.5](https://github.com/log4js-node/log4js-node/pull/1166) - thanks [@lamweili](https://github.com/lamweili) ## 6.4.0 - BREAKING CHANGE 💥 @@ -158,50 +158,50 @@ A [manual code/configuration change](https://github.com/log4js-node/log4js-node/ - [feat: added warnings when log() is used with invalid levels before fallbacking to INFO](https://github.com/log4js-node/log4js-node/pull/1062) - thanks [@abernh](https://github.com/abernh) - [feat: exposed Recording](https://github.com/log4js-node/log4js-node/pull/1103) - thanks [@polo-language](https://github.com/polo-language) -- [fix: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@peteriman](https://github.com/peteriman) - - [docs: updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@peteriman](https://github.com/peteriman) -- [fix: file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@peteriman](https://github.com/peteriman) -- [fix: MaxListenersExceededWarning from NodeJS](https://github.com/log4js-node/log4js-node/pull/1110) - thanks [@peteriman](https://github.com/peteriman) - - [test: added assertion for increase of SIGHUP listeners on log4js.configure()](https://github.com/log4js-node/log4js-node/pull/1142) - thanks [@peteriman](https://github.com/peteriman) +- [fix: default file permission to be 0o600 instead of 0o644](https://github.com/log4js-node/log4js-node/pull/1141) - thanks [ranjit-git](https://www.huntr.dev/users/ranjit-git) and [@lamweili](https://github.com/lamweili) + - [docs: updated fileSync.md and misc comments](https://github.com/log4js-node/log4js-node/pull/1148) - thanks [@lamweili](https://github.com/lamweili) +- [fix: file descriptor leak if repeated configure()](https://github.com/log4js-node/log4js-node/pull/1113) - thanks [@lamweili](https://github.com/lamweili) +- [fix: MaxListenersExceededWarning from NodeJS](https://github.com/log4js-node/log4js-node/pull/1110) - thanks [@lamweili](https://github.com/lamweili) + - [test: added assertion for increase of SIGHUP listeners on log4js.configure()](https://github.com/log4js-node/log4js-node/pull/1142) - thanks [@lamweili](https://github.com/lamweili) - [fix: missing TCP appender with Webpack and Typescript](https://github.com/log4js-node/log4js-node/pull/1028) - thanks [@techmunk](https://github.com/techmunk) - [fix: dateFile appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1097) - thanks [@4eb0da](https://github.com/4eb0da) - - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@peteriman](https://github.com/peteriman) + - [refactor: using writer.writable instead of alive for checking](https://github.com/log4js-node/log4js-node/pull/1144) - thanks [@lamweili](https://github.com/lamweili) - [fix: TCP appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/1089) - thanks [@jhonatanTeixeira](https://github.com/jhonatanTeixeira) - [fix: multiprocess appender exiting NodeJS on error](https://github.com/log4js-node/log4js-node/pull/529) - thanks [@harlentan](https://github.com/harlentan) -- [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@peteriman](https://github.com/peteriman) -- [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@peteriman](https://github.com/peteriman) +- [test: update fakeFS.read as graceful-fs uses it](https://github.com/log4js-node/log4js-node/pull/1127) - thanks [@lamweili](https://github.com/lamweili) +- [test: update fakeFS.realpath as fs-extra uses it](https://github.com/log4js-node/log4js-node/pull/1128) - thanks [@lamweili](https://github.com/lamweili) - test: added tap.tearDown() to clean up test files - - test: [#1143](https://github.com/log4js-node/log4js-node/pull/1143) - thanks [@peteriman](https://github.com/peteriman) + - test: [#1143](https://github.com/log4js-node/log4js-node/pull/1143) - thanks [@lamweili](https://github.com/lamweili) - test: [#1022](https://github.com/log4js-node/log4js-node/pull/1022) - thanks [@abetomo](https://github.com/abetomo) - [type: improved @types for AppenderModule](https://github.com/log4js-node/log4js-node/pull/1079) - thanks [@nicobao](https://github.com/nicobao) -- [type: Updated fileSync appender types](https://github.com/log4js-node/log4js-node/pull/1116) - thanks [@peteriman](https://github.com/peteriman) +- [type: Updated fileSync appender types](https://github.com/log4js-node/log4js-node/pull/1116) - thanks [@lamweili](https://github.com/lamweili) - [type: Removed erroneous type in file appender](https://github.com/log4js-node/log4js-node/pull/1031) - thanks [@vdmtrv](https://github.com/vdmtrv) - [type: Updated Logger.log type](https://github.com/log4js-node/log4js-node/pull/1115) - thanks [@ZLundqvist](https://github.com/ZLundqvist) -- [type: Updated Logger.\_log type](https://github.com/log4js-node/log4js-node/pull/1117) - thanks [@peteriman](https://github.com/peteriman) -- [type: Updated Logger.level type](https://github.com/log4js-node/log4js-node/pull/1118) - thanks [@peteriman](https://github.com/peteriman) +- [type: Updated Logger.\_log type](https://github.com/log4js-node/log4js-node/pull/1117) - thanks [@lamweili](https://github.com/lamweili) +- [type: Updated Logger.level type](https://github.com/log4js-node/log4js-node/pull/1118) - thanks [@lamweili](https://github.com/lamweili) - [type: Updated Levels.getLevel type](https://github.com/log4js-node/log4js-node/pull/1072) - thanks [@saulzhong](https://github.com/saulzhong) -- [chore(deps): bump streamroller from 3.0.1 to 3.0.2](https://github.com/log4js-node/log4js-node/pull/1147) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): bump date-format from 4.0.2 to 4.0.3](https://github.com/log4js-node/log4js-node/pull/1146) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps-dev): bump eslint from from 8.6.0 to 8.7.0](https://github.com/log4js-node/log4js-node/pull/1145) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps-dev): bump nyc from 14.1.1 to 15.1.0](https://github.com/log4js-node/log4js-node/pull/1140) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps-dev): bump eslint from 5.16.0 to 8.6.0](https://github.com/log4js-node/log4js-node/pull/1138) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): bump flatted from 2.0.2 to 3.2.4](https://github.com/log4js-node/log4js-node/pull/1137) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps-dev): bump fs-extra from 8.1.0 to 10.0.0](https://github.com/log4js-node/log4js-node/pull/1136) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): bump streamroller from 2.2.4 to 3.0.1](https://github.com/log4js-node/log4js-node/pull/1135) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps): bump streamroller from 3.0.1 to 3.0.2](https://github.com/log4js-node/log4js-node/pull/1147) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): bump date-format from 4.0.2 to 4.0.3](https://github.com/log4js-node/log4js-node/pull/1146) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps-dev): bump eslint from from 8.6.0 to 8.7.0](https://github.com/log4js-node/log4js-node/pull/1145) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps-dev): bump nyc from 14.1.1 to 15.1.0](https://github.com/log4js-node/log4js-node/pull/1140) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps-dev): bump eslint from 5.16.0 to 8.6.0](https://github.com/log4js-node/log4js-node/pull/1138) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): bump flatted from 2.0.2 to 3.2.4](https://github.com/log4js-node/log4js-node/pull/1137) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps-dev): bump fs-extra from 8.1.0 to 10.0.0](https://github.com/log4js-node/log4js-node/pull/1136) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): bump streamroller from 2.2.4 to 3.0.1](https://github.com/log4js-node/log4js-node/pull/1135) - thanks [@lamweili](https://github.com/lamweili) - [fix: compressed file ignores dateFile appender "mode"](https://github.com/log4js-node/streamroller/pull/65) - thanks [@rnd-debug](https://github.com/rnd-debug) - fix: [#1039](https://github.com/log4js-node/log4js-node/issues/1039) where there is an additional separator in filename ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - fix: [#1035](https://github.com/log4js-node/log4js-node/issues/1035), [#1080](https://github.com/log4js-node/log4js-node/issues/1080) for daysToKeep naming confusion ([streamroller@3.0.0 changelog](https://github.com/log4js-node/streamroller/blob/master/CHANGELOG.md)) - - [refactor: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@peteriman](https://github.com/peteriman) - - [feat: allows for zero backups](https://github.com/log4js-node/log4js-node/pull/1151) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): bump date-format from 3.0.0 to 4.0.2](https://github.com/log4js-node/log4js-node/pull/1134) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@peteriman](https://github.com/peteriman) + - [refactor: migrated from daysToKeep to numBackups due to streamroller@^3.0.0](https://github.com/log4js-node/log4js-node/pull/1149) - thanks [@lamweili](https://github.com/lamweili) + - [feat: allows for zero backups](https://github.com/log4js-node/log4js-node/pull/1151) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): bump date-format from 3.0.0 to 4.0.2](https://github.com/log4js-node/log4js-node/pull/1134) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1130) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0 - chore(deps-dev): bump eslint-plugin-prettier from 3.4.1 to 4.0.0 - chore(deps-dev): bump husky from 3.1.0 to 7.0.4 - chore(deps-dev): bump prettier from 1.19.0 to 2.5.1 - chore(deps-dev): bump typescript from 3.9.10 to 4.5.4 -- [chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0](https://github.com/log4js-node/log4js-node/pull/1129) - thanks [@peteriman](https://github.com/peteriman) -- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@peteriman](https://github.com/peteriman) +- [chore(deps-dev): bump eslint-config-prettier from 6.15.0 to 8.3.0](https://github.com/log4js-node/log4js-node/pull/1129) - thanks [@lamweili](https://github.com/lamweili) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1121) - thanks [@lamweili](https://github.com/lamweili) - chore(deps-dev): bump codecov from 3.6.1 to 3.8.3 - chore(deps-dev): bump eslint-config-prettier from 6.5.0 to 6.15.0 - chore(deps-dev): bump eslint-import-resolver-node from 0.3.2 to 0.3.6 From 44c8f92ea2b28d7ed363a011dde34de4e94b409f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Fri, 24 Jun 2022 00:46:52 +0800 Subject: [PATCH 292/454] docs: misc update to changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbe19499..b0e03c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 6.5.2 -- [fix(types): add LogEvent.serialise](https://github.com/log4js-node/log4js-node/pull/1260) - thanks [@marrowleaves](https://github.com/marrowleaves) +- [type: add LogEvent.serialise](https://github.com/log4js-node/log4js-node/pull/1260) - thanks [@marrowleaves](https://github.com/marrowleaves) ## 6.5.1 From ff57a42ca912cbbeed38341a39b7ab93dd140937 Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 23 Jun 2022 17:30:16 -0500 Subject: [PATCH 293/454] chore: remove unused travis.yml and codecov dep --- .travis.yml | 12 - package-lock.json | 6322 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- 3 files changed, 6167 insertions(+), 171 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1f356c1d..00000000 --- a/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -os: - - linux - - windows -sudo: false -node_js: - - "14" - - "12" - - "10" - - "8" -after_success: - - npm run codecov diff --git a/package-lock.json b/package-lock.json index 14d5a98c..1e5a66cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,6168 @@ { "name": "log4js", "version": "6.5.2", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "log4js", + "version": "6.5.2", + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.11", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.1.1" + }, + "devDependencies": { + "@log4js-node/sandboxed-module": "^2.2.1", + "callsites": "^3.1.0", + "deep-freeze": "0.0.1", + "eslint": "^8.16.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.0.0", + "fs-extra": "^10.1.0", + "husky": "^8.0.1", + "nyc": "^15.1.0", + "prettier": "^2.6.0", + "proxyquire": "^2.1.3", + "tap": "^16.2.0", + "typescript": "^4.7.2", + "validate-commit-msg": "^2.14.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", + "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.0", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", + "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@log4js-node/sandboxed-module": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", + "integrity": "sha512-BtpxW7EReVwZ6WSNHPMyID2vVYuBKYkJyevJxbPsTtecWGqwm1wL4/O3oOQcyGhJsuNi7Y8JhNc5FE9jdXlZ0A==", + "dev": true, + "dependencies": { + "require-like": "0.1.2", + "stack-trace": "0.0.10" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-hook-domain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", + "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bind-obj-methods": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", + "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001344", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", + "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", + "dev": true, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/conventional-commit-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", + "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date-format": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.144", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", + "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", + "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "dependencies": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-parent-dir": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", + "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", + "dev": true + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/findit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", + "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", + "dev": true + }, + "node_modules/findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", + "dev": true, + "dependencies": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "bin": { + "findup": "bin/findup.js" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function-loop": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", + "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", + "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", + "dev": true, + "dependencies": { + "cliui": "^7.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jackspeak/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libtap": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", + "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", + "dev": true, + "dependencies": { + "async-hook-domain": "^2.0.4", + "bind-obj-methods": "^3.0.0", + "diff": "^4.0.2", + "function-loop": "^2.0.1", + "minipass": "^3.1.5", + "own-or": "^1.0.0", + "own-or-env": "^1.0.2", + "signal-exit": "^3.0.4", + "stack-utils": "^2.0.4", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.6", + "trivial-deferred": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", + "dev": true + }, + "node_modules/own-or-env": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", + "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", + "dev": true, + "dependencies": { + "own-or": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "dependencies": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/streamroller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", + "dependencies": { + "date-format": "^4.0.10", + "debug": "^4.3.4", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tap": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.2.0.tgz", + "integrity": "sha512-ikfNLy701p2+sH3R0pAXQ/Aen6ZByaguUY7UsoTLL4AXa2c9gYQL+pI21p13lq54R7/CEoLaViC1sexcWG32ig==", + "bundleDependencies": [ + "ink", + "treport", + "@types/react", + "@isaacs/import-jsx", + "react" + ], + "dev": true, + "dependencies": { + "@isaacs/import-jsx": "^4.0.1", + "@types/react": "^17", + "chokidar": "^3.3.0", + "findit": "^2.0.0", + "foreground-child": "^2.0.0", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.6", + "ink": "^3.2.0", + "isexe": "^2.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "jackspeak": "^1.4.1", + "libtap": "^1.4.0", + "minipass": "^3.1.1", + "mkdirp": "^1.0.4", + "nyc": "^15.1.0", + "opener": "^1.5.1", + "react": "^17.0.2", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.6", + "source-map-support": "^0.5.16", + "tap-mocha-reporter": "^5.0.3", + "tap-parser": "^11.0.1", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.7", + "treport": "^3.0.3", + "which": "^2.0.2" + }, + "bin": { + "tap": "bin/run.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "peerDependencies": { + "coveralls": "^3.1.1", + "flow-remove-types": ">=2.112.0", + "ts-node": ">=8.5.2", + "typescript": ">=3.7.2" + }, + "peerDependenciesMeta": { + "coveralls": { + "optional": true + }, + "flow-remove-types": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tap-mocha-reporter": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", + "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", + "dev": true, + "dependencies": { + "color-support": "^1.1.0", + "debug": "^4.1.1", + "diff": "^4.0.1", + "escape-string-regexp": "^2.0.0", + "glob": "^7.0.5", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "unicode-length": "^2.0.2" + }, + "bin": { + "tap-mocha-reporter": "index.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap-mocha-reporter/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap-parser": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", + "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "dev": true, + "dependencies": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", + "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "dev": true, + "dependencies": { + "yaml": "^1.5.0" + } + }, + "node_modules/tap/node_modules/@ampproject/remapping": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@babel/code-frame": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/compat-data": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/core": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/tap/node_modules/@babel/generator": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-compilation-targets": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-module-transforms": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-simple-access": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helpers": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/highlight": { + "version": "7.16.10", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/parser": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/template": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/traverse": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/types": { + "version": "7.17.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@isaacs/import-jsx": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/tap/node_modules/@types/prop-types": { + "version": "15.7.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@types/react": { + "version": "17.0.41", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/tap/node_modules/@types/scheduler": { + "version": "0.16.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@types/yoga-layout": { + "version": "1.9.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "inBundle": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/ansicolors": { + "version": "0.3.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/auto-bind": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/tap/node_modules/browserslist": { + "version": "4.20.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/tap/node_modules/caller-callsite": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/caller-path": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/caniuse-lite": { + "version": "1.0.30001319", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "inBundle": true, + "license": "CC-BY-4.0" + }, + "node_modules/tap/node_modules/cardinal": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/tap/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/code-excerpt": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tap/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/tap/node_modules/convert-to-spaces": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/tap/node_modules/csstype": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/electron-to-chromium": { + "version": "1.4.89", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tap/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/events-to-array": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/tap/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tap/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/tap/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/ink": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/ink/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tap/node_modules/ink/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/ink/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/ink/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/ink/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/tap/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/tap/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tap/node_modules/minipass": { + "version": "3.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/node-releases": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/once": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/tap/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/patch-console": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/react": { + "version": "17.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/react-devtools-core": { + "version": "4.24.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/tap/node_modules/react-reconciler": { + "version": "0.26.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/tap/node_modules/redeyed": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/tap/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tap/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/scheduler": { + "version": "0.20.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/tap/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tap/node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/tap-parser": { + "version": "11.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap/node_modules/tap-yaml": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yaml": "^1.5.0" + } + }, + "node_modules/tap/node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/treport": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/import-jsx": "^4.0.1", + "cardinal": "^2.1.1", + "chalk": "^3.0.0", + "ink": "^3.2.0", + "ms": "^2.1.2", + "tap-parser": "^11.0.0", + "unicode-length": "^2.0.2" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/treport/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/treport/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/treport/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/treport/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/treport/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/type-fest": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/unicode-length": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/tap/node_modules/unicode-length/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/unicode-length/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/ws": { + "version": "7.5.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/tap/node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tcompare": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", + "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", + "dev": true, + "dependencies": { + "diff": "^4.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", + "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-length": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", + "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", + "dev": true, + "dependencies": { + "punycode": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/unicode-length/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unicode-length/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/unicode-length/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-commit-msg": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", + "integrity": "sha1-5Tg2kQEsuycNzAvCpO/+vhSJDqw=", + "deprecated": "Check out CommitLint which provides the same functionality with a more user-focused experience.", + "dev": true, + "dependencies": { + "conventional-commit-types": "^2.0.0", + "find-parent-dir": "^0.3.0", + "findup": "0.1.5", + "semver-regex": "1.0.0" + }, + "bin": { + "validate-commit-msg": "lib/cli.js" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", @@ -484,12 +6644,6 @@ "stack-trace": "0.0.10" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -506,16 +6660,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "requires": { - "debug": "4" - } + "requires": {} }, "aggregate-error": { "version": "3.1.0", @@ -588,12 +6734,6 @@ "sprintf-js": "~1.0.2" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha512-dEamhpPEwRUBpLNHeuCm/v+g0anFByHahxodVO/BbAarHVBBg2MccCwf9K+o1Pof+2btdnkJelYVUWjW/VrATw==", - "dev": true - }, "array-includes": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", @@ -775,19 +6915,6 @@ "wrap-ansi": "^6.2.0" } }, - "codecov": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz", - "integrity": "sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==", - "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.4", - "js-yaml": "3.14.1", - "teeny-request": "7.1.1", - "urlgrey": "1.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1095,7 +7222,8 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -1305,15 +7433,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dev": true, - "requires": { - "punycode": "^1.3.2" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1625,27 +7744,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "husky": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", @@ -1658,15 +7756,6 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2168,15 +8257,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -2571,12 +8651,6 @@ "resolve": "^1.11.1" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2776,15 +8850,6 @@ } } }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dev": true, - "requires": { - "stubs": "^3.0.0" - } - }, "streamroller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", @@ -2849,12 +8914,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4104,7 +10163,8 @@ "ws": { "version": "7.5.7", "bundled": true, - "dev": true + "dev": true, + "requires": {} }, "yallist": { "version": "4.0.0", @@ -4179,19 +10239,6 @@ "diff": "^4.0.2" } }, - "teeny-request": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz", - "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -4224,12 +10271,6 @@ "is-number": "^7.0.0" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, "trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", @@ -4345,21 +10386,6 @@ } } }, - "urlgrey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz", - "integrity": "sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==", - "dev": true, - "requires": { - "fast-url-parser": "^1.1.3" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -4378,22 +10404,6 @@ "semver-regex": "1.0.0" } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index f0d2e3d4..f5c95948 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,7 @@ "pretest": "prettier --check . && eslint \"lib/**/*.js\" \"test/**/*.js\"", "prettier:fix": "prettier --write .", "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", - "typings": "tsc -p types/tsconfig.json", - "codecov": "tap \"test/tap/**/*.js\" --cov --coverage-report=lcov && codecov" + "typings": "tsc -p types/tsconfig.json" }, "directories": { "test": "test", @@ -53,7 +52,6 @@ "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", - "codecov": "^3.8.3", "deep-freeze": "0.0.1", "eslint": "^8.16.0", "eslint-config-airbnb-base": "^15.0.0", From a82260f78ab39cd72db8b912200f364852f7abac Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 23 Jun 2022 17:31:46 -0500 Subject: [PATCH 294/454] chore(deps): replace validate-commit-msg with commitlint --- commitlint.config.js | 1 + package-lock.json | 2889 +++++++++++++++++++++++++++++++++++++++--- package.json | 26 +- 3 files changed, 2691 insertions(+), 225 deletions(-) create mode 100644 commitlint.config.js diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..422b1944 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/package-lock.json b/package-lock.json index 1e5a66cd..d4d88084 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,8 @@ "streamroller": "^3.1.1" }, "devDependencies": { + "@commitlint/cli": "^17.0.2", + "@commitlint/config-conventional": "^17.0.2", "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", @@ -31,8 +33,7 @@ "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.2.0", - "typescript": "^4.7.2", - "validate-commit-msg": "^2.14.0" + "typescript": "^4.7.2" }, "engines": { "node": ">=8.0" @@ -435,6 +436,442 @@ "node": ">=6.9.0" } }, + "node_modules/@commitlint/cli": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.0.2.tgz", + "integrity": "sha512-Axe89Js0YzGGd4gxo3JLlF7yIdjOVpG1LbOorGc6PfYF+drBh14PvarSDLzyd2TNqdylUCq9wb9/A88ZjIdyhA==", + "dev": true, + "dependencies": { + "@commitlint/format": "^17.0.0", + "@commitlint/lint": "^17.0.0", + "@commitlint/load": "^17.0.0", + "@commitlint/read": "^17.0.0", + "@commitlint/types": "^17.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@commitlint/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@commitlint/cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@commitlint/cli/node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.0.2.tgz", + "integrity": "sha512-MfP0I/JbxKkzo+HXWB7B3WstGS4BiniotU3d3xQ9gK8cR0DbeZ4MuyGCWF65YDyrcDTS3WlrJ3ndSPA1pqhoPw==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.0.0.tgz", + "integrity": "sha512-78IQjoZWR4kDHp/U5y17euEWzswJpPkA9TDL5F6oZZZaLIEreWzrDZD5PWtM8MsSRl/K2LDU/UrzYju2bKLMpA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.0.0", + "ajv": "^6.12.6" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz", + "integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz", + "integrity": "sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/format": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz", + "integrity": "sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.0.0", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.0.0.tgz", + "integrity": "sha512-UmacD0XM/wWykgdXn5CEWVS4XGuqzU+ZGvM2hwv85+SXGnIOaG88XHrt81u37ZeVt1riWW+YdOxcJW6+nd5v5w==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.0.0", + "semver": "7.3.7" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/lint": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.0.0.tgz", + "integrity": "sha512-5FL7VLvGJQby24q0pd4UdM8FNFcL+ER1T/UBf8A9KRL5+QXV1Rkl6Zhcl7+SGpGlVo6Yo0pm6aLW716LVKWLGg==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^17.0.0", + "@commitlint/parse": "^17.0.0", + "@commitlint/rules": "^17.0.0", + "@commitlint/types": "^17.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.0.0.tgz", + "integrity": "sha512-XaiHF4yWQOPAI0O6wXvk+NYLtJn/Xb7jgZEeKd4C1ZWd7vR7u8z5h0PkWxSr0uLZGQsElGxv3fiZ32C5+q6M8w==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.0.0", + "@commitlint/execute-rule": "^17.0.0", + "@commitlint/resolve-extends": "^17.0.0", + "@commitlint/types": "^17.0.0", + "@types/node": ">=12", + "chalk": "^4.1.0", + "cosmiconfig": "^7.0.0", + "cosmiconfig-typescript-loader": "^2.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.6.4" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/message": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", + "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/parse": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", + "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/read": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.0.0.tgz", + "integrity": "sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^17.0.0", + "@commitlint/types": "^17.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.0.0.tgz", + "integrity": "sha512-wi60WiJmwaQ7lzMXK8Vbc18Hq9tE2j/6iv2AFfPUGV7fvfY6Sf1iNKuUHirSqR0fquUyufIXe4y/K9A6LVIIvw==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.0.0", + "@commitlint/types": "^17.0.0", + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", + "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^17.0.0", + "@commitlint/message": "^17.0.0", + "@commitlint/to-lines": "^17.0.0", + "@commitlint/types": "^17.0.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz", + "integrity": "sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/top-level": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz", + "integrity": "sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz", + "integrity": "sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -654,12 +1091,60 @@ "stack-trace": "0.0.10" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "node_modules/acorn": { "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", @@ -681,6 +1166,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -765,6 +1259,12 @@ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -774,6 +1274,12 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, "node_modules/array-includes": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", @@ -811,6 +1317,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/async-hook-domain": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", @@ -947,6 +1462,23 @@ "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001344", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", @@ -1065,30 +1597,22 @@ "color-support": "bin.js" } }, - "node_modules/colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", - "dev": true, - "engines": { - "node": ">= 0.6.x" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1101,11 +1625,52 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "node_modules/conventional-commit-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", - "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", - "dev": true + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", + "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/convert-source-map": { "version": "1.8.0", @@ -1116,6 +1681,47 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", + "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7", + "ts-node": "^10.8.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "typescript": ">=3" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1130,6 +1736,15 @@ "node": ">= 8" } }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/date-format": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", @@ -1163,6 +1778,28 @@ "node": ">=0.10.0" } }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", @@ -1233,6 +1870,18 @@ "node": ">=6.0.0" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.144", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", @@ -1245,6 +1894,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", @@ -1676,6 +2334,29 @@ "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", "dev": true }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1754,12 +2435,6 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-parent-dir": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", - "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", - "dev": true - }, "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -1778,22 +2453,6 @@ "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", "dev": true }, - "node_modules/findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", - "dev": true, - "dependencies": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - }, - "bin": { - "findup": "bin/findup.js" - }, - "engines": { - "node": ">=0.6" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1970,6 +2629,18 @@ "node": ">=8.0.0" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1986,6 +2657,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2018,6 +2708,18 @@ "node": ">=10.13.0" } }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/globals": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", @@ -2038,6 +2740,15 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2132,12 +2843,33 @@ "node": ">=8" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, "node_modules/husky": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", @@ -2212,6 +2944,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -2226,6 +2964,12 @@ "node": ">= 0.4" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2371,6 +3115,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", @@ -2380,6 +3133,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2450,6 +3212,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2659,6 +3433,12 @@ "node": ">=4" } }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2694,6 +3474,40 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2734,6 +3548,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -2747,6 +3567,12 @@ "node": ">=4" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -2759,6 +3585,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -2774,12 +3612,100 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2798,6 +3724,20 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/minipass": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", @@ -2857,6 +3797,36 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2866,6 +3836,18 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -3062,6 +4044,21 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -3169,10 +4166,28 @@ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/path-exists": { @@ -3208,6 +4223,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3367,6 +4391,186 @@ "resolve": "^1.11.1" } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3379,6 +4583,19 @@ "node": ">=8.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -3470,6 +4687,18 @@ "node": ">=4" } }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -3505,15 +4734,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -3597,6 +4817,47 @@ "node": ">=8" } }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -3646,6 +4907,35 @@ "node": ">=8.0" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3709,6 +4999,27 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5764,12 +7075,36 @@ "node": ">=8" } }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -5791,12 +7126,64 @@ "node": ">=8.0" } }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, + "node_modules/ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -5936,26 +7323,32 @@ "node": ">=6" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/validate-commit-msg": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", - "integrity": "sha1-5Tg2kQEsuycNzAvCpO/+vhSJDqw=", - "deprecated": "Check out CommitLint which provides the same functionality with a more user-focused experience.", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { - "conventional-commit-types": "^2.0.0", - "find-parent-dir": "^0.3.0", - "findup": "0.1.5", - "semver-regex": "1.0.0" - }, - "bin": { - "validate-commit-msg": "lib/cli.js" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "node_modules/which": { @@ -6161,6 +7554,27 @@ "engines": { "node": ">=8" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -6353,122 +7767,456 @@ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "dev": true + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", + "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.0", + "@babel/types": "^7.18.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/cli": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.0.2.tgz", + "integrity": "sha512-Axe89Js0YzGGd4gxo3JLlF7yIdjOVpG1LbOorGc6PfYF+drBh14PvarSDLzyd2TNqdylUCq9wb9/A88ZjIdyhA==", + "dev": true, + "requires": { + "@commitlint/format": "^17.0.0", + "@commitlint/lint": "^17.0.0", + "@commitlint/load": "^17.0.0", + "@commitlint/read": "^17.0.0", + "@commitlint/types": "^17.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } + } + }, + "@commitlint/config-conventional": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.0.2.tgz", + "integrity": "sha512-MfP0I/JbxKkzo+HXWB7B3WstGS4BiniotU3d3xQ9gK8cR0DbeZ4MuyGCWF65YDyrcDTS3WlrJ3ndSPA1pqhoPw==", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "^5.0.0" + } + }, + "@commitlint/config-validator": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.0.0.tgz", + "integrity": "sha512-78IQjoZWR4kDHp/U5y17euEWzswJpPkA9TDL5F6oZZZaLIEreWzrDZD5PWtM8MsSRl/K2LDU/UrzYju2bKLMpA==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "ajv": "^6.12.6" + } + }, + "@commitlint/ensure": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz", + "integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz", + "integrity": "sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==", + "dev": true + }, + "@commitlint/format": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz", + "integrity": "sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "chalk": "^4.1.0" + } + }, + "@commitlint/is-ignored": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.0.0.tgz", + "integrity": "sha512-UmacD0XM/wWykgdXn5CEWVS4XGuqzU+ZGvM2hwv85+SXGnIOaG88XHrt81u37ZeVt1riWW+YdOxcJW6+nd5v5w==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "semver": "7.3.7" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@commitlint/lint": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.0.0.tgz", + "integrity": "sha512-5FL7VLvGJQby24q0pd4UdM8FNFcL+ER1T/UBf8A9KRL5+QXV1Rkl6Zhcl7+SGpGlVo6Yo0pm6aLW716LVKWLGg==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^17.0.0", + "@commitlint/parse": "^17.0.0", + "@commitlint/rules": "^17.0.0", + "@commitlint/types": "^17.0.0" + } + }, + "@commitlint/load": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.0.0.tgz", + "integrity": "sha512-XaiHF4yWQOPAI0O6wXvk+NYLtJn/Xb7jgZEeKd4C1ZWd7vR7u8z5h0PkWxSr0uLZGQsElGxv3fiZ32C5+q6M8w==", + "dev": true, + "requires": { + "@commitlint/config-validator": "^17.0.0", + "@commitlint/execute-rule": "^17.0.0", + "@commitlint/resolve-extends": "^17.0.0", + "@commitlint/types": "^17.0.0", + "@types/node": ">=12", + "chalk": "^4.1.0", + "cosmiconfig": "^7.0.0", + "cosmiconfig-typescript-loader": "^2.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.6.4" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@commitlint/message": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", + "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", + "dev": true + }, + "@commitlint/parse": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", + "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + } + }, + "@commitlint/read": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.0.0.tgz", + "integrity": "sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==", + "dev": true, + "requires": { + "@commitlint/top-level": "^17.0.0", + "@commitlint/types": "^17.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.0.0.tgz", + "integrity": "sha512-wi60WiJmwaQ7lzMXK8Vbc18Hq9tE2j/6iv2AFfPUGV7fvfY6Sf1iNKuUHirSqR0fquUyufIXe4y/K9A6LVIIvw==", + "dev": true, + "requires": { + "@commitlint/config-validator": "^17.0.0", + "@commitlint/types": "^17.0.0", + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@commitlint/rules": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", + "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", + "dev": true, + "requires": { + "@commitlint/ensure": "^17.0.0", + "@commitlint/message": "^17.0.0", + "@commitlint/to-lines": "^17.0.0", + "@commitlint/types": "^17.0.0", + "execa": "^5.0.0" + } + }, + "@commitlint/to-lines": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz", + "integrity": "sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==", + "dev": true + }, + "@commitlint/top-level": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz", + "integrity": "sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "p-locate": "^5.0.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "yocto-queue": "^0.1.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "p-limit": "^3.0.2" } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, - "@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", - "dev": true - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "@commitlint/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz", + "integrity": "sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "chalk": "^4.1.0" } }, - "@babel/traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", - "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@jridgewell/trace-mapping": "0.3.9" }, "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } } } }, - "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -6644,12 +8392,60 @@ "stack-trace": "0.0.10" } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "acorn": { "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", @@ -6663,6 +8459,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -6725,6 +8527,12 @@ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6734,6 +8542,12 @@ "sprintf-js": "~1.0.2" } }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, "array-includes": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", @@ -6759,6 +8573,12 @@ "es-shim-unscopables": "^1.0.0" } }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, "async-hook-domain": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", @@ -6855,6 +8675,17 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, "caniuse-lite": { "version": "1.0.30001344", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", @@ -6936,24 +8767,22 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", - "dev": true - }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6966,11 +8795,40 @@ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "conventional-commit-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz", - "integrity": "sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ==", - "dev": true + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-conventionalcommits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", + "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } }, "convert-source-map": { "version": "1.8.0", @@ -6981,6 +8839,35 @@ "safe-buffer": "~5.1.1" } }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cosmiconfig-typescript-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", + "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", + "dev": true, + "requires": { + "cosmiconfig": "^7", + "ts-node": "^10.8.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6992,6 +8879,12 @@ "which": "^2.0.1" } }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, "date-format": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", @@ -7011,6 +8904,24 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, "deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", @@ -7065,6 +8976,15 @@ "esutils": "^2.0.2" } }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, "electron-to-chromium": { "version": "1.4.144", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", @@ -7077,6 +8997,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-abstract": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", @@ -7409,6 +9338,23 @@ "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", "dev": true }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7472,12 +9418,6 @@ "pkg-dir": "^4.1.0" } }, - "find-parent-dir": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", - "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", - "dev": true - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -7493,16 +9433,6 @@ "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", "dev": true }, - "findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", - "dev": true, - "requires": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -7628,6 +9558,12 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -7638,6 +9574,19 @@ "get-intrinsic": "^1.1.1" } }, + "git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7661,6 +9610,15 @@ "is-glob": "^4.0.3" } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "globals": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", @@ -7675,6 +9633,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7738,12 +9702,27 @@ } } }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, "husky": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", @@ -7794,6 +9773,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -7805,6 +9790,12 @@ "side-channel": "^1.0.4" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -7899,12 +9890,24 @@ "has-tostringtag": "^1.0.0" } }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, "is-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -7948,6 +9951,15 @@ "has-symbols": "^1.0.2" } }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8112,6 +10124,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -8142,6 +10160,28 @@ "universalify": "^2.0.0" } }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8173,6 +10213,12 @@ "trivial-deferred": "^1.0.1" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -8183,6 +10229,12 @@ "path-exists": "^3.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -8195,6 +10247,15 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -8204,12 +10265,75 @@ "semver": "^6.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8225,6 +10349,17 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, "minipass": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", @@ -8272,12 +10407,44 @@ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -8425,6 +10592,15 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -8514,6 +10690,18 @@ "callsites": "^3.0.0" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -8538,6 +10726,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8651,6 +10845,141 @@ "resolve": "^1.11.1" } }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -8660,6 +10989,16 @@ "picomatch": "^2.2.1" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -8721,6 +11060,15 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -8747,12 +11095,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -8821,6 +11163,47 @@ "which": "^2.0.1" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8860,6 +11243,23 @@ "fs-extra": "^10.1.0" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -8908,6 +11308,21 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -10250,12 +12665,33 @@ "minimatch": "^3.0.4" } }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -10271,12 +12707,39 @@ "is-number": "^7.0.0" } }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, "trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, + "ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -10386,22 +12849,32 @@ } } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "validate-commit-msg": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", - "integrity": "sha1-5Tg2kQEsuycNzAvCpO/+vhSJDqw=", + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "conventional-commit-types": "^2.0.0", - "find-parent-dir": "^0.3.0", - "findup": "0.1.5", - "semver-regex": "1.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { @@ -10564,6 +13037,18 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index f5c95948..b036cc99 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "streamroller": "^3.1.1" }, "devDependencies": { + "@commitlint/cli": "^17.0.2", + "@commitlint/config-conventional": "^17.0.2", "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", @@ -65,33 +67,11 @@ "prettier": "^2.6.0", "proxyquire": "^2.1.3", "tap": "^16.2.0", - "typescript": "^4.7.2", - "validate-commit-msg": "^2.14.0" + "typescript": "^4.7.2" }, "browser": { "os": false }, - "config": { - "validate-commit-msg": { - "types": [ - "feat", - "fix", - "docs", - "style", - "refactor", - "example", - "perf", - "test", - "chore", - "revert" - ], - "warnOnFail": false, - "maxSubjectLength": 72, - "subjectPattern": ".+", - "subjectPatternErrorMsg": "subject does not match subject pattern!", - "helpMessage": "\n# allowed type: feat, fix, docs, style, refactor, example, perf, test, chore, revert\n# subject no more than 50 chars\n# a body line no more than 72 chars" - } - }, "tap": { "check-coverage": true }, From e5e572997c3cd0c37d3f6ccae3640c4c20d3306d Mon Sep 17 00:00:00 2001 From: Zachary Haber Date: Thu, 23 Jun 2022 17:36:31 -0500 Subject: [PATCH 295/454] chore: set up husky --- .gitattributes | 1 + .husky/commit_msg | 4 ++++ .husky/pre-push | 4 ++++ package-lock.json | 34 ++++++++++++++++++++++++++++++++++ package.json | 8 ++------ 5 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 .husky/commit_msg create mode 100644 .husky/pre-push diff --git a/.gitattributes b/.gitattributes index 5af187f0..307a0319 100644 --- a/.gitattributes +++ b/.gitattributes @@ -22,6 +22,7 @@ *.txt text eol=lf *.xml text eol=lf *.yml text eol=lf +.husky/* text eol=lf # Exclude the `.htaccess` file from GitHub's language statistics # https://github.com/github/linguist#using-gitattributes diff --git a/.husky/commit_msg b/.husky/commit_msg new file mode 100644 index 00000000..e8105222 --- /dev/null +++ b/.husky/commit_msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no -- commitlint --edit $1 diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 00000000..d5a85978 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm test && npm run typings diff --git a/package-lock.json b/package-lock.json index d4d88084..ded13a5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.1", + "is-ci": "^3.0.1", "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", @@ -1550,6 +1551,12 @@ "node": ">= 6" } }, + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -3022,6 +3029,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -8729,6 +8748,12 @@ } } }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -9830,6 +9855,15 @@ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", diff --git a/package.json b/package.json index b036cc99..0921cb6d 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "node": ">=8.0" }, "scripts": { + "prepare": "is-ci || husky install", "pretest": "prettier --check . && eslint \"lib/**/*.js\" \"test/**/*.js\"", "prettier:fix": "prettier --write .", "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", @@ -63,6 +64,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs-extra": "^10.1.0", "husky": "^8.0.1", + "is-ci": "^3.0.1", "nyc": "^15.1.0", "prettier": "^2.6.0", "proxyquire": "^2.1.3", @@ -83,11 +85,5 @@ "require": [ "./test/sandbox-coverage" ] - }, - "husky": { - "hooks": { - "commit-msg": "validate-commit-msg", - "pre-push": "npm test && npm run typings" - } } } From 9f18c6d6b9f0c09d9020ea1d9ff7cfb9fbd7e2af Mon Sep 17 00:00:00 2001 From: Eugene YOBOUE Date: Sun, 3 Jul 2022 13:32:41 +0000 Subject: [PATCH 296/454] feat: adding function(req, res) support to connectLogger options->nolog arg --- lib/connect-logger.js | 8 +++++-- test/tap/connect-nolog-test.js | 38 ++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/lib/connect-logger.js b/lib/connect-logger.js index f3d3418c..c8b85800 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -248,14 +248,18 @@ module.exports = function getLogger(logger4js, options) { const thisLogger = logger4js; let level = levels.getLevel(options.level, levels.INFO); const fmt = options.format || DEFAULT_FORMAT; - const nolog = createNoLogCondition(options.nolog); return (req, res, next) => { // mount safety if (req._logging) return next(); // nologs - if (nolog && nolog.test(req.originalUrl)) return next(); + if (typeof options.nolog === 'function') { + if (options.nolog(req, res) === true) return next(); + } else { + const nolog = createNoLogCondition(options.nolog); + if (nolog && nolog.test(req.originalUrl)) return next(); + } if (thisLogger.isLevelEnabled(level) || options.level === 'auto') { const start = new Date(); diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 0f49d606..5d9b0232 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -346,5 +346,43 @@ test('log4js connect logger', (batch) => { t.end(); }); + batch.test('nolog function', (t) => { + const ml = new MockLogger(); + const cl = clm(ml, { nolog: (_req, res) => res.statusCode < 400 }); + + t.beforeEach(() => { + ml.messages = []; + }); + + t.test('check unmatch function return (statusCode < 400)', (assert) => { + const { messages } = ml; + const req = new MockRequest('my.remote.addr', 'GET', 'http://url/log'); + const res = new MockResponse(500); + cl(req, res, () => {}); + res.end('chunk', 'encoding'); + + assert.equal(messages.length, 1); + assert.ok(levels.INFO.isEqualTo(messages[0].level)); + assert.match(messages[0].message, 'GET'); + assert.match(messages[0].message, 'http://url'); + assert.match(messages[0].message, 'my.remote.addr'); + assert.match(messages[0].message, '500'); + assert.end(); + }); + + t.test('check match function return (statusCode >= 400)', (assert) => { + const { messages } = ml; + const req = new MockRequest('my.remote.addr', 'GET', 'http://url/nolog'); + const res = new MockResponse(200); + cl(req, res, () => {}); + res.end('chunk', 'encoding'); + + assert.equal(messages.length, 0); + assert.end(); + }); + + t.end(); + }); + batch.end(); }); From 60c9e53da04864383fc2d67bfe9bc74ab268f683 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 4 Jul 2022 00:25:30 +0800 Subject: [PATCH 297/454] fix: load CJS appenders for ESM projects --- lib/appenders/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/appenders/index.js b/lib/appenders/index.js index 3e26c127..aa81599c 100644 --- a/lib/appenders/index.js +++ b/lib/appenders/index.js @@ -22,10 +22,18 @@ coreAppenders.set('tcp', require('./tcp')); const appenders = new Map(); const tryLoading = (modulePath, config) => { - debug('Loading module from ', modulePath); + let resolvedPath; + try { + const modulePathCJS = `${modulePath}.cjs`; + resolvedPath = require.resolve(modulePathCJS); + debug('Loading module from ', modulePathCJS); + } catch (e) { + resolvedPath = modulePath; + debug('Loading module from ', modulePath); + } try { // eslint-disable-next-line global-require, import/no-dynamic-require - return require(modulePath); + return require(resolvedPath); } catch (e) { // if the module was found, and we still got an error, then raise it configuration.throwExceptionIf( From 2ff151bdc7140119a779d69a96f9a5e901d370ed Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 4 Jul 2022 01:25:22 +0800 Subject: [PATCH 298/454] test: renamed dummy-appender.js to dummy-appender.cjs for test coverage --- test/tap/{dummy-appender.js => dummy-appender.cjs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/tap/{dummy-appender.js => dummy-appender.cjs} (100%) diff --git a/test/tap/dummy-appender.js b/test/tap/dummy-appender.cjs similarity index 100% rename from test/tap/dummy-appender.js rename to test/tap/dummy-appender.cjs From 3279647175c95b160208ed8a572516da89cdb982 Mon Sep 17 00:00:00 2001 From: Eugene YOBOUE Date: Sun, 3 Jul 2022 19:47:47 +0000 Subject: [PATCH 299/454] chore(feat): Update #1279 docs --- docs/connect-logger.md | 16 ++++++++++++++-- lib/connect-logger.js | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/connect-logger.md b/docs/connect-logger.md index e63e420a..6dd59398 100644 --- a/docs/connect-logger.md +++ b/docs/connect-logger.md @@ -30,7 +30,7 @@ The log4js.connectLogger supports the passing of an options object that can be u - log level - log format string or function (the same as the connect/express logger) -- nolog expressions (represented as a string, regexp, or array) +- nolog expressions (represented as a string, regexp, array, or function(req, res)) - status code rulesets For example: @@ -97,7 +97,7 @@ app.use( ); ``` -The log4js.connectLogger also supports a nolog option where you can specify a string, regexp, or array to omit certain log messages. Example of 1.2 below. +The log4js.connectLogger also supports a nolog option where you can specify a string, regexp, array, or function(req, res) to omit certain log messages. Example of 1.2 below. ```javascript app.use( @@ -109,6 +109,18 @@ app.use( ); ``` +or + +```javascript +app.use( + log4js.connectLogger(logger, { + level: "auto", + format: ":method :url", + nolog: (req, res) => res.statusCode < 400, + }) +); +``` + The log4js.connectLogger can add a response of express to context if `context` flag is set to `true`. Application can use it in layouts or appenders. diff --git a/lib/connect-logger.js b/lib/connect-logger.js index c8b85800..bb5ac87c 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -215,7 +215,7 @@ function matchRules(statusCode, currentLevel, ruleSet) { * * - `format` Format string, see below for tokens * - `level` A log4js levels instance. Supports also 'auto' - * - `nolog` A string or RegExp to exclude target logs + * - `nolog` A string or RegExp to exclude target logs or function(req, res): boolean * - `statusRules` A array of rules for setting specific logging levels base on status codes * - `context` Whether to add a response of express to the context * From d06414cee990929d79554e01e50ff46f2181a002 Mon Sep 17 00:00:00 2001 From: Taoz1 Date: Fri, 1 Jul 2022 10:52:28 +0800 Subject: [PATCH 300/454] fix: types of logger --- types/log4js.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 5f4f76f5..bd3f343b 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -402,8 +402,8 @@ export interface Recording { erase(): void; } -export class Logger { - constructor(name: string); +export interface Logger { + new (name: string): Logger; readonly category: string; level: Level | string; From 35435b7c925fd41f1508bcf9a779c5ed648177b7 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Wed, 6 Jul 2022 23:21:17 +0800 Subject: [PATCH 301/454] docs: updated changelog for 6.6.0 --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0e03c68..a06a7ade 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # log4js-node Changelog +## 6.6.0 + +- [feat: adding function(req, res) support to connectLogger nolog](https://github.com/log4js-node/log4js-node/pull/1279) - thanks [@eyoboue](https://github.com/eyoboue) +- [fix: ability to load CJS appenders (through .cjs extension) for ESM packages](https://github.com/log4js-node/log4js-node/pull/1280) - thanks [@lamweili](https://github.com/lamweili) +- [type: consistent typing for Logger](https://github.com/log4js-node/log4js-node/pull/1276) - thanks [@taozi0818](https://github.com/taozi0818) +- [type: Make Appender Type extensible from other modules and the user](https://github.com/log4js-node/log4js-node/pull/1267) - thanks [@ZachHaber](https://github.com/ZachHaber) +- [refactor: clearer logic for invalid level and LOG synonym](https://github.com/log4js-node/log4js-node/pull/1264) - thanks [@lamweili](https://github.com/lamweili) +- [style: ran prettier and requires prettier for ci](https://github.com/log4js-node/log4js-node/pull/1271) - thanks [@ZachHaber](https://github.com/ZachHaber) +- [docs: renamed peteriman to lamweili in changelog](https://github.com/log4js-node/log4js-node/pull/1272) - thanks [@lamweili](https://github.com/lamweili) +- [ci: replaced validate-commit-msg, fixed husky config, removed codecov](https://github.com/log4js-node/log4js-node/pull/1274) - thanks [@ZachHaber](https://github.com/ZachHaber) +- [chore(deps): updated dependencies](https://github.com/log4js-node/log4js-node/pull/1266) - thanks [@lamweili](https://github.com/lamweili) + - chore(deps-dev): bump typescript from 4.6.4 to 4.7.2 + - chore(deps): bump date-format from 4.0.10 to 4.0.11 + - chore(deps): updated package-lock.json + ## 6.5.2 - [type: add LogEvent.serialise](https://github.com/log4js-node/log4js-node/pull/1260) - thanks [@marrowleaves](https://github.com/marrowleaves) From 28893ffd11cfeda001332114c34e4c4d2d7375a8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 6 Jul 2022 15:37:08 +0000 Subject: [PATCH 302/454] 6.6.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ded13a5b..a747409b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "log4js", - "version": "6.5.2", + "version": "6.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "log4js", - "version": "6.5.2", + "version": "6.6.0", "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.11", diff --git a/package.json b/package.json index 0921cb6d..3a6f2aab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js", - "version": "6.5.2", + "version": "6.6.0", "description": "Port of Log4js to work with node.", "homepage": "https://log4js-node.github.io/log4js-node/", "files": [ From 04cbdfe6abfd6767e7f5f51f771f43e119ffc716 Mon Sep 17 00:00:00 2001 From: Eugene YOBOUE Date: Fri, 8 Jul 2022 20:41:42 +0800 Subject: [PATCH 303/454] fix: update connect-logger.js #1284 --- lib/connect-logger.js | 15 +++++++++++---- test/tap/connect-nolog-test.js | 26 +++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/lib/connect-logger.js b/lib/connect-logger.js index bb5ac87c..6631c8c3 100755 --- a/lib/connect-logger.js +++ b/lib/connect-logger.js @@ -251,12 +251,10 @@ module.exports = function getLogger(logger4js, options) { return (req, res, next) => { // mount safety - if (req._logging) return next(); + if (req._logging !== undefined) return next(); // nologs - if (typeof options.nolog === 'function') { - if (options.nolog(req, res) === true) return next(); - } else { + if (typeof options.nolog !== 'function') { const nolog = createNoLogCondition(options.nolog); if (nolog && nolog.test(req.originalUrl)) return next(); } @@ -284,6 +282,15 @@ module.exports = function getLogger(logger4js, options) { return; } finished = true; + + // nologs + if (typeof options.nolog === 'function') { + if (options.nolog(req, res) === true) { + req._logging = false; + return; + } + } + res.responseTime = new Date() - start; // status code response level handling if (res.statusCode && options.level === 'auto') { diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 5d9b0232..a0b1e30d 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -348,7 +348,10 @@ test('log4js connect logger', (batch) => { batch.test('nolog function', (t) => { const ml = new MockLogger(); - const cl = clm(ml, { nolog: (_req, res) => res.statusCode < 400 }); + const cl = clm(ml, { + nolog: (_req, res) => + res.getHeader('content-type') === 'image/png' || res.statusCode < 400, + }); t.beforeEach(() => { ml.messages = []; @@ -381,6 +384,27 @@ test('log4js connect logger', (batch) => { assert.end(); }); + t.test( + 'check match function server response content-type header', + (assert) => { + const { messages } = ml; + const req = new MockRequest( + 'my.remote.addr', + 'GET', + 'http://url/nolog' + ); + const res = new MockResponse(500); + res.on('finish', () => { + res.setHeader('content-type', 'image/png'); + }); + cl(req, res, () => {}); + res.end('chunk', 'encoding'); + + assert.equal(messages.length, 0); + assert.end(); + } + ); + t.end(); }); From e71e0888e9a06200146bad9d104cc22536471669 Mon Sep 17 00:00:00 2001 From: Eugene YOBOUE Date: Fri, 8 Jul 2022 20:43:30 +0800 Subject: [PATCH 304/454] test: clean-up test/tap/freeze-date-file-test --- test/tap/configuration-validation-test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/tap/configuration-validation-test.js b/test/tap/configuration-validation-test.js index 401b5f97..cd0ad06c 100644 --- a/test/tap/configuration-validation-test.js +++ b/test/tap/configuration-validation-test.js @@ -274,7 +274,9 @@ test('log4js configuration validation', (batch) => { }) ) ); - t.end(); + log4js.shutdown(() => { + t.end(); + }); }); batch.test('should load appenders from core first', (t) => { From bf57536760e8cf89fbbab43dde130dab9cb9380f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 23 Jul 2022 16:16:59 +0800 Subject: [PATCH 305/454] test: polyfill `Promise.allSettled` for Node.js <12 --- test/sandbox-coverage.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/sandbox-coverage.js b/test/sandbox-coverage.js index 1632f427..eed75444 100644 --- a/test/sandbox-coverage.js +++ b/test/sandbox-coverage.js @@ -13,3 +13,21 @@ sandbox.configure({ }, }, }); + +// polyfill for Node.js <12 +Promise.allSettled = + Promise.allSettled || + ((promises) => + Promise.all( + promises.map((p) => + p + .then((value) => ({ + status: 'fulfilled', + value, + })) + .catch((reason) => ({ + status: 'rejected', + reason, + })) + ) + )); From 35080bde5ec1104b82a8f8e193bd248b7da9cf14 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 23 Jul 2022 22:54:24 +0800 Subject: [PATCH 306/454] test: polyfill `process.off` for Node.js <10 --- test/sandbox-coverage.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/sandbox-coverage.js b/test/sandbox-coverage.js index eed75444..b6c922fa 100644 --- a/test/sandbox-coverage.js +++ b/test/sandbox-coverage.js @@ -31,3 +31,6 @@ Promise.allSettled = })) ) )); + +// polyfill for Node.js <10 +process.off = process.off || process.removeListener; From abe8e67a5c04f5a9a248103067698d7f2c49716c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 24 Jul 2022 20:28:10 +0800 Subject: [PATCH 307/454] test: polyfill `fs.promises.unlink` for Node.js <10 --- test/sandbox-coverage.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/sandbox-coverage.js b/test/sandbox-coverage.js index b6c922fa..c6fb7595 100644 --- a/test/sandbox-coverage.js +++ b/test/sandbox-coverage.js @@ -34,3 +34,13 @@ Promise.allSettled = // polyfill for Node.js <10 process.off = process.off || process.removeListener; + +// polyfill for Node.js <10 +const fs = require('fs'); // eslint-disable-line import/newline-after-import +fs.promises = fs.promises || {}; +fs.promises.unlink = + fs.promises.unlink || + ((...args) => + new Promise((resolve, reject) => { + fs.unlink(...args, (err) => (err ? reject(err) : resolve())); + })); From adcc06fb88523a3bfe64c7883efd501f2ce59963 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 00:16:05 +0800 Subject: [PATCH 308/454] test: refactor `fs.mkdirSync(..., { recursive: true })` for Node.js <10.12.0 --- test/tap/fileSyncAppender-test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/tap/fileSyncAppender-test.js b/test/tap/fileSyncAppender-test.js index 1330d10b..912b1ab0 100644 --- a/test/tap/fileSyncAppender-test.js +++ b/test/tap/fileSyncAppender-test.js @@ -524,7 +524,9 @@ test('log4js fileSyncAppender', (batch) => { errorEROFS ); - fs.mkdirSync('tmpA/tmpB/tmpC', { recursive: true }); + fs.mkdirSync('tmpA'); + fs.mkdirSync('tmpA/tmpB'); + fs.mkdirSync('tmpA/tmpB/tmpC'); sandboxedLog4js = sandbox.require('../../lib/log4js', { requires: { From 09c4096c49d64d9893b4e8e2a4614dfabbee44ae Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 00:25:27 +0800 Subject: [PATCH 309/454] test: adjusted regexp for stacktrace for Node.js <=10 --- test/tap/layouts-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tap/layouts-test.js b/test/tap/layouts-test.js index e925bf54..8a77b483 100644 --- a/test/tap/layouts-test.js +++ b/test/tap/layouts-test.js @@ -121,7 +121,7 @@ test('log4js layouts', (batch) => { }, }, }), - /at (Test\.batch\.test\.t|Test\.)\s+\((.*)test[\\/]tap[\\/]layouts-test\.js:\d+:\d+\)/, + /at (Test\.batch\.test(\.t)?|Test\.)\s+\((.*)test[\\/]tap[\\/]layouts-test\.js:\d+:\d+\)/, 'regexp did not return a match - should print the stacks of a passed error objects' ); From 0a936d1831bbfeb93ca3f157c880bfed244cb2f0 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 00:27:29 +0800 Subject: [PATCH 310/454] test: extended timeout interval for OS operations --- test/tap/fileAppender-test.js | 2 +- test/tap/multiprocess-shutdown-test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index e7a79347..964942c8 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -151,7 +151,7 @@ test('log4js fileAppender', (batch) => { logger.info('This is an intermediate log message.'); logger.info('This is the second log message.'); // wait for the file system to catch up - await sleep(100); + await sleep(250); const fileContents = await fs.readFile(testFile, 'utf8'); t.match(fileContents, 'This is the second log message.'); t.equal(fileContents.indexOf('This is the first log message.'), -1); diff --git a/test/tap/multiprocess-shutdown-test.js b/test/tap/multiprocess-shutdown-test.js index e46fede7..e62cf765 100644 --- a/test/tap/multiprocess-shutdown-test.js +++ b/test/tap/multiprocess-shutdown-test.js @@ -4,7 +4,7 @@ const childProcess = require('child_process'); const sandbox = require('@log4js-node/sandboxed-module'); const log4js = require('../../lib/log4js'); -test('multiprocess appender shutdown (master)', { timeout: 5000 }, (t) => { +test('multiprocess appender shutdown (master)', { timeout: 10000 }, (t) => { log4js.configure({ appenders: { stdout: { type: 'stdout' }, From 84bd512054311837c0a8d2bb9585c4a5137f2fc4 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 16:10:45 +0800 Subject: [PATCH 311/454] chore(deps): bump date-format from 4.0.11 to 4.0.13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3a6f2aab..07a512ab 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "lib": "lib" }, "dependencies": { - "date-format": "^4.0.11", + "date-format": "^4.0.13", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", From 8f62f962a9f2f6addaca02467720e98c6678adee Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:21:43 +0800 Subject: [PATCH 312/454] chore(deps): bump flatted from 3.2.5 to 3.2.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07a512ab..4625f6e2 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "dependencies": { "date-format": "^4.0.13", "debug": "^4.3.4", - "flatted": "^3.2.5", + "flatted": "^3.2.6", "rfdc": "^1.3.0", "streamroller": "^3.1.1" }, From e7b20ecf197dccde0210a304d0b0cd8315abf4ef Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:22:15 +0800 Subject: [PATCH 313/454] chore(deps): bump streamroller from 3.1.1 to 3.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4625f6e2..a987f7ec 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "debug": "^4.3.4", "flatted": "^3.2.6", "rfdc": "^1.3.0", - "streamroller": "^3.1.1" + "streamroller": "^3.1.2" }, "devDependencies": { "@commitlint/cli": "^17.0.2", From da39df2234c2f5e4c4c1233e2e91955e0e06ef53 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:22:58 +0800 Subject: [PATCH 314/454] chore(deps-dev): bump @commitlint/cli from 17.0.2 to 17.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a987f7ec..e4ae07ee 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "streamroller": "^3.1.2" }, "devDependencies": { - "@commitlint/cli": "^17.0.2", + "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.2", "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", From 383335c38c24ccbc5de91eee45f486361c299050 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:23:18 +0800 Subject: [PATCH 315/454] chore(deps-dev): bump @commitlint/config-conventional from 17.0.2 to 17.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e4ae07ee..57001ff7 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ }, "devDependencies": { "@commitlint/cli": "^17.0.3", - "@commitlint/config-conventional": "^17.0.2", + "@commitlint/config-conventional": "^17.0.3", "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", From 4b9f209a62399e07928a425698e39012df947815 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:24:54 +0800 Subject: [PATCH 316/454] chore(deps-dev): bump eslint-plugin-prettier from 4.0.0 to 4.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 57001ff7..94dbbddf 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-prettier": "^4.2.1", "fs-extra": "^10.1.0", "husky": "^8.0.1", "is-ci": "^3.0.1", From fe3ee080a34ca0943da358096b3fd8530ae879de Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:25:23 +0800 Subject: [PATCH 317/454] chore(deps-dev): bump prettier from 2.6.0 to 2.7.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 94dbbddf..f938d7df 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "husky": "^8.0.1", "is-ci": "^3.0.1", "nyc": "^15.1.0", - "prettier": "^2.6.0", + "prettier": "^2.7.1", "proxyquire": "^2.1.3", "tap": "^16.2.0", "typescript": "^4.7.2" From c09113800bfb35e69e1105218d4deeca54b64175 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:26:20 +0800 Subject: [PATCH 318/454] chore(deps-dev): bump tap from 16.2.0 to 16.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f938d7df..7cd4566a 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "nyc": "^15.1.0", "prettier": "^2.7.1", "proxyquire": "^2.1.3", - "tap": "^16.2.0", + "tap": "^16.3.0", "typescript": "^4.7.2" }, "browser": { From 41daf93ff316419bd190e8429b87d7a7be1adb7b Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:26:39 +0800 Subject: [PATCH 319/454] chore(deps-dev): bump typescript from 4.7.2 to 4.7.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7cd4566a..d5b1770d 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "prettier": "^2.7.1", "proxyquire": "^2.1.3", "tap": "^16.3.0", - "typescript": "^4.7.2" + "typescript": "^4.7.4" }, "browser": { "os": false From b7718dcadf87ac82f05f6772b81026da6700d3ba Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 18:34:51 +0800 Subject: [PATCH 320/454] chore(deps): updated package-lock.json --- package-lock.json | 16474 ++++++++++++++------------------------------ 1 file changed, 4984 insertions(+), 11490 deletions(-) diff --git a/package-lock.json b/package-lock.json index a747409b..e256e2f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,451 +1,18 @@ { "name": "log4js", "version": "6.6.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "log4js", - "version": "6.6.0", - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.11", - "debug": "^4.3.4", - "flatted": "^3.2.5", - "rfdc": "^1.3.0", - "streamroller": "^3.1.1" - }, - "devDependencies": { - "@commitlint/cli": "^17.0.2", - "@commitlint/config-conventional": "^17.0.2", - "@log4js-node/sandboxed-module": "^2.2.1", - "callsites": "^3.1.0", - "deep-freeze": "0.0.1", - "eslint": "^8.16.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.0.0", - "fs-extra": "^10.1.0", - "husky": "^8.0.1", - "is-ci": "^3.0.1", - "nyc": "^15.1.0", - "prettier": "^2.6.0", - "proxyquire": "^2.1.3", - "tap": "^16.2.0", - "typescript": "^4.7.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", - "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@commitlint/cli": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.0.2.tgz", - "integrity": "sha512-Axe89Js0YzGGd4gxo3JLlF7yIdjOVpG1LbOorGc6PfYF+drBh14PvarSDLzyd2TNqdylUCq9wb9/A88ZjIdyhA==", + "dependencies": { + "@commitlint/cli": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.0.3.tgz", + "integrity": "sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A==", "dev": true, - "dependencies": { + "requires": { "@commitlint/format": "^17.0.0", - "@commitlint/lint": "^17.0.0", - "@commitlint/load": "^17.0.0", + "@commitlint/lint": "^17.0.3", + "@commitlint/load": "^17.0.3", "@commitlint/read": "^17.0.0", "@commitlint/types": "^17.0.0", "execa": "^5.0.0", @@ -454,8730 +21,2642 @@ "resolve-global": "1.0.0", "yargs": "^17.0.0" }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@commitlint/cli/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@commitlint/cli/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.0.2.tgz", - "integrity": "sha512-MfP0I/JbxKkzo+HXWB7B3WstGS4BiniotU3d3xQ9gK8cR0DbeZ4MuyGCWF65YDyrcDTS3WlrJ3ndSPA1pqhoPw==", - "dev": true, - "dependencies": { - "conventional-changelog-conventionalcommits": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.0.0.tgz", - "integrity": "sha512-78IQjoZWR4kDHp/U5y17euEWzswJpPkA9TDL5F6oZZZaLIEreWzrDZD5PWtM8MsSRl/K2LDU/UrzYju2bKLMpA==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.0.0", - "ajv": "^6.12.6" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/ensure": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz", - "integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.0.0", - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz", - "integrity": "sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz", - "integrity": "sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.0.0", - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.0.0.tgz", - "integrity": "sha512-UmacD0XM/wWykgdXn5CEWVS4XGuqzU+ZGvM2hwv85+SXGnIOaG88XHrt81u37ZeVt1riWW+YdOxcJW6+nd5v5w==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.0.0", - "semver": "7.3.7" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/lint": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.0.0.tgz", - "integrity": "sha512-5FL7VLvGJQby24q0pd4UdM8FNFcL+ER1T/UBf8A9KRL5+QXV1Rkl6Zhcl7+SGpGlVo6Yo0pm6aLW716LVKWLGg==", - "dev": true, - "dependencies": { - "@commitlint/is-ignored": "^17.0.0", - "@commitlint/parse": "^17.0.0", - "@commitlint/rules": "^17.0.0", - "@commitlint/types": "^17.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.0.0.tgz", - "integrity": "sha512-XaiHF4yWQOPAI0O6wXvk+NYLtJn/Xb7jgZEeKd4C1ZWd7vR7u8z5h0PkWxSr0uLZGQsElGxv3fiZ32C5+q6M8w==", - "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.0.0", - "@commitlint/execute-rule": "^17.0.0", - "@commitlint/resolve-extends": "^17.0.0", - "@commitlint/types": "^17.0.0", - "@types/node": ">=12", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "cosmiconfig-typescript-loader": "^2.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "typescript": "^4.6.4" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/message": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", - "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", - "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.0.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.0.0.tgz", - "integrity": "sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==", - "dev": true, - "dependencies": { - "@commitlint/top-level": "^17.0.0", - "@commitlint/types": "^17.0.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.0.0.tgz", - "integrity": "sha512-wi60WiJmwaQ7lzMXK8Vbc18Hq9tE2j/6iv2AFfPUGV7fvfY6Sf1iNKuUHirSqR0fquUyufIXe4y/K9A6LVIIvw==", - "dev": true, "dependencies": { - "@commitlint/config-validator": "^17.0.0", - "@commitlint/types": "^17.0.0", - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/rules": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", - "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", - "dev": true, - "dependencies": { - "@commitlint/ensure": "^17.0.0", - "@commitlint/message": "^17.0.0", - "@commitlint/to-lines": "^17.0.0", - "@commitlint/types": "^17.0.0", - "execa": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz", - "integrity": "sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/top-level": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz", - "integrity": "sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/types": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz", - "integrity": "sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@log4js-node/sandboxed-module": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", - "integrity": "sha512-BtpxW7EReVwZ6WSNHPMyID2vVYuBKYkJyevJxbPsTtecWGqwm1wL4/O3oOQcyGhJsuNi7Y8JhNc5FE9jdXlZ0A==", - "dev": true, - "dependencies": { - "require-like": "0.1.2", - "stack-trace": "0.0.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-hook-domain": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", - "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bind-obj-methods": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", - "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001344", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", - "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", - "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", - "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7", - "ts-node": "^10.8.1" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "typescript": ">=3" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/date-format": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", - "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-freeze": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-require-extensions/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.144", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", - "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", - "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", - "dev": true, - "dependencies": { - "is-object": "~1.0.1", - "merge-descriptors": "~1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", - "dev": true - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function-loop": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", - "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", - "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", - "dev": true, - "dependencies": { - "cliui": "^7.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/jackspeak/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libtap": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", - "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", - "dev": true, - "dependencies": { - "async-hook-domain": "^2.0.4", - "bind-obj-methods": "^3.0.0", - "diff": "^4.0.2", - "function-loop": "^2.0.1", - "minipass": "^3.1.5", - "own-or": "^1.0.0", - "own-or-env": "^1.0.2", - "signal-exit": "^3.0.4", - "stack-utils": "^2.0.4", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/nyc/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", - "dev": true - }, - "node_modules/own-or-env": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", - "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", - "dev": true, - "dependencies": { - "own-or": "^1.0.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/proxyquire": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", - "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", - "dev": true, - "dependencies": { - "fill-keys": "^1.0.2", - "module-not-found-error": "^1.0.1", - "resolve": "^1.11.1" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/streamroller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", - "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", - "dependencies": { - "date-format": "^4.0.10", - "debug": "^4.3.4", - "fs-extra": "^10.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tap": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.2.0.tgz", - "integrity": "sha512-ikfNLy701p2+sH3R0pAXQ/Aen6ZByaguUY7UsoTLL4AXa2c9gYQL+pI21p13lq54R7/CEoLaViC1sexcWG32ig==", - "bundleDependencies": [ - "ink", - "treport", - "@types/react", - "@isaacs/import-jsx", - "react" - ], - "dev": true, - "dependencies": { - "@isaacs/import-jsx": "^4.0.1", - "@types/react": "^17", - "chokidar": "^3.3.0", - "findit": "^2.0.0", - "foreground-child": "^2.0.0", - "fs-exists-cached": "^1.0.0", - "glob": "^7.1.6", - "ink": "^3.2.0", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "jackspeak": "^1.4.1", - "libtap": "^1.4.0", - "minipass": "^3.1.1", - "mkdirp": "^1.0.4", - "nyc": "^15.1.0", - "opener": "^1.5.1", - "react": "^17.0.2", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.6", - "source-map-support": "^0.5.16", - "tap-mocha-reporter": "^5.0.3", - "tap-parser": "^11.0.1", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.7", - "treport": "^3.0.3", - "which": "^2.0.2" - }, - "bin": { - "tap": "bin/run.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "peerDependencies": { - "coveralls": "^3.1.1", - "flow-remove-types": ">=2.112.0", - "ts-node": ">=8.5.2", - "typescript": ">=3.7.2" - }, - "peerDependenciesMeta": { - "coveralls": { - "optional": true - }, - "flow-remove-types": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tap-mocha-reporter": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", - "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", - "dev": true, - "dependencies": { - "color-support": "^1.1.0", - "debug": "^4.1.1", - "diff": "^4.0.1", - "escape-string-regexp": "^2.0.0", - "glob": "^7.0.5", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "bin": { - "tap-mocha-reporter": "index.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-mocha-reporter/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", - "dev": true, - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "dependencies": { - "yaml": "^1.5.0" - } - }, - "node_modules/tap/node_modules/@ampproject/remapping": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/compat-data": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/core": { - "version": "7.17.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/tap/node_modules/@babel/generator": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-compilation-targets": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helpers": { - "version": "7.17.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/highlight": { - "version": "7.16.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/parser": { - "version": "7.17.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.17.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/template": { - "version": "7.16.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/traverse": { - "version": "7.17.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/types": { - "version": "7.17.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^3.0.1", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/tap/node_modules/@types/prop-types": { - "version": "15.7.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/react": { - "version": "17.0.41", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/tap/node_modules/@types/scheduler": { - "version": "0.16.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/yoga-layout": { - "version": "1.9.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ansicolors": { - "version": "0.3.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/auto-bind": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/tap/node_modules/browserslist": { - "version": "4.20.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/tap/node_modules/caller-callsite": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/caller-path": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/caniuse-lite": { - "version": "1.0.30001319", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "inBundle": true, - "license": "CC-BY-4.0" - }, - "node_modules/tap/node_modules/cardinal": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/tap/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/cli-boxes": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/code-excerpt": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tap/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/tap/node_modules/convert-to-spaces": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/tap/node_modules/csstype": { - "version": "3.0.11", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/electron-to-chromium": { - "version": "1.4.89", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tap/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/events-to-array": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/tap/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ink": { - "version": "3.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.19.1", - "react-reconciler": "^0.26.2", - "scheduler": "^0.20.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-width": "^4.2.2", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.5.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ink/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ink/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/tap/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/json5": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/tap/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tap/node_modules/minipass": { - "version": "3.1.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/node-releases": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/patch-console": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/react": { - "version": "17.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/react-devtools-core": { - "version": "4.24.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/tap/node_modules/react-reconciler": { - "version": "0.26.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/redeyed": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/tap/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/scheduler": { - "version": "0.20.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/tap/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tap/node_modules/shell-quote": { - "version": "1.7.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/tap-parser": { - "version": "11.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap/node_modules/tap-yaml": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yaml": "^1.5.0" - } - }, - "node_modules/tap/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/treport": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/import-jsx": "^4.0.1", - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "ink": "^3.2.0", - "ms": "^2.1.2", - "tap-parser": "^11.0.0", - "unicode-length": "^2.0.2" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/treport/node_modules/chalk": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/treport/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/type-fest": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/unicode-length": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/tap/node_modules/unicode-length/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/unicode-length/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/widest-line": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ws": { - "version": "7.5.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@commitlint/config-validator": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.0.3.tgz", + "integrity": "sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "ajv": "^8.11.0" + } + }, + "@commitlint/ensure": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz", + "integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz", + "integrity": "sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==", + "dev": true + }, + "@commitlint/format": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz", + "integrity": "sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "chalk": "^4.1.0" + } + }, + "@commitlint/is-ignored": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.0.3.tgz", + "integrity": "sha512-/wgCXAvPtFTQZxsVxj7owLeRf5wwzcXLaYmrZPR4a87iD4sCvUIRl1/ogYrtOyUmHwWfQsvjqIB4mWE/SqWSnA==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "semver": "7.3.7" + } + }, + "@commitlint/lint": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.0.3.tgz", + "integrity": "sha512-2o1fk7JUdxBUgszyt41sHC/8Nd5PXNpkmuOo9jvGIjDHzOwXyV0PSdbEVTH3xGz9NEmjohFHr5l+N+T9fcxong==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^17.0.3", + "@commitlint/parse": "^17.0.0", + "@commitlint/rules": "^17.0.0", + "@commitlint/types": "^17.0.0" + } + }, + "@commitlint/load": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.0.3.tgz", + "integrity": "sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw==", + "dev": true, + "requires": { + "@commitlint/config-validator": "^17.0.3", + "@commitlint/execute-rule": "^17.0.0", + "@commitlint/resolve-extends": "^17.0.3", + "@commitlint/types": "^17.0.0", + "@types/node": ">=12", + "chalk": "^4.1.0", + "cosmiconfig": "^7.0.0", + "cosmiconfig-typescript-loader": "^2.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.6.4" + } + }, + "@commitlint/message": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", + "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", + "dev": true + }, + "@commitlint/parse": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", + "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", + "dev": true, + "requires": { + "@commitlint/types": "^17.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + } + }, + "@commitlint/read": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.0.0.tgz", + "integrity": "sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==", + "dev": true, + "requires": { + "@commitlint/top-level": "^17.0.0", + "@commitlint/types": "^17.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.0.3.tgz", + "integrity": "sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA==", + "dev": true, + "requires": { + "@commitlint/config-validator": "^17.0.3", + "@commitlint/types": "^17.0.0", + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@commitlint/rules": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", + "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", + "dev": true, + "requires": { + "@commitlint/ensure": "^17.0.0", + "@commitlint/message": "^17.0.0", + "@commitlint/to-lines": "^17.0.0", + "@commitlint/types": "^17.0.0", + "execa": "^5.0.0" + } + }, + "@commitlint/to-lines": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz", + "integrity": "sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==", + "dev": true + }, + "@commitlint/top-level": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz", + "integrity": "sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "@commitlint/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz", + "integrity": "sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "18.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", + "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cosmiconfig-typescript-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", + "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", + "dev": true, + "requires": { + "cosmiconfig": "^7", + "ts-node": "^10.8.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/tap/node_modules/yoga-layout-prebuilt": { - "version": "1.10.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/yoga-layout": "1.9.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tcompare": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", - "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", - "dev": true, - "dependencies": { - "diff": "^4.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } + } }, - "@swc/wasm": { - "optional": true + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", - "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-length": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", - "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", - "dev": true, - "dependencies": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/unicode-length/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unicode-length/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/unicode-length/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "dev": true - }, - "@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", + "@commitlint/config-conventional": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.0.3.tgz", + "integrity": "sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "conventional-changelog-conventionalcommits": "^5.0.0" }, "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "conventional-changelog-conventionalcommits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", + "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true } } }, - "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "@log4js-node/sandboxed-module": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", + "integrity": "sha512-BtpxW7EReVwZ6WSNHPMyID2vVYuBKYkJyevJxbPsTtecWGqwm1wL4/O3oOQcyGhJsuNi7Y8JhNc5FE9jdXlZ0A==", "dev": true, "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" + "require-like": "0.1.2", + "stack-trace": "0.0.10" }, "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true } } }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "dev": true, - "requires": { - "@babel/types": "^7.18.2" - } + "date-format": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.13.tgz", + "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==" }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "@babel/types": "^7.16.7" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", "dev": true }, - "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "has-flag": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } - } - } - }, - "@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", - "dev": true - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz", - "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@commitlint/cli": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.0.2.tgz", - "integrity": "sha512-Axe89Js0YzGGd4gxo3JLlF7yIdjOVpG1LbOorGc6PfYF+drBh14PvarSDLzyd2TNqdylUCq9wb9/A88ZjIdyhA==", - "dev": true, - "requires": { - "@commitlint/format": "^17.0.0", - "@commitlint/lint": "^17.0.0", - "@commitlint/load": "^17.0.0", - "@commitlint/read": "^17.0.0", - "@commitlint/types": "^17.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.19", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "estraverse": "^5.2.0" } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "flat-cache": "^3.0.4" } }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true - } - } - }, - "@commitlint/config-conventional": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.0.2.tgz", - "integrity": "sha512-MfP0I/JbxKkzo+HXWB7B3WstGS4BiniotU3d3xQ9gK8cR0DbeZ4MuyGCWF65YDyrcDTS3WlrJ3ndSPA1pqhoPw==", - "dev": true, - "requires": { - "conventional-changelog-conventionalcommits": "^5.0.0" - } - }, - "@commitlint/config-validator": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.0.0.tgz", - "integrity": "sha512-78IQjoZWR4kDHp/U5y17euEWzswJpPkA9TDL5F6oZZZaLIEreWzrDZD5PWtM8MsSRl/K2LDU/UrzYju2bKLMpA==", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "ajv": "^6.12.6" - } - }, - "@commitlint/ensure": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz", - "integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "lodash": "^4.17.19" - } - }, - "@commitlint/execute-rule": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz", - "integrity": "sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==", - "dev": true - }, - "@commitlint/format": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz", - "integrity": "sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "chalk": "^4.1.0" - } - }, - "@commitlint/is-ignored": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.0.0.tgz", - "integrity": "sha512-UmacD0XM/wWykgdXn5CEWVS4XGuqzU+ZGvM2hwv85+SXGnIOaG88XHrt81u37ZeVt1riWW+YdOxcJW6+nd5v5w==", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "semver": "7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - } - } - }, - "@commitlint/lint": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.0.0.tgz", - "integrity": "sha512-5FL7VLvGJQby24q0pd4UdM8FNFcL+ER1T/UBf8A9KRL5+QXV1Rkl6Zhcl7+SGpGlVo6Yo0pm6aLW716LVKWLGg==", - "dev": true, - "requires": { - "@commitlint/is-ignored": "^17.0.0", - "@commitlint/parse": "^17.0.0", - "@commitlint/rules": "^17.0.0", - "@commitlint/types": "^17.0.0" - } - }, - "@commitlint/load": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.0.0.tgz", - "integrity": "sha512-XaiHF4yWQOPAI0O6wXvk+NYLtJn/Xb7jgZEeKd4C1ZWd7vR7u8z5h0PkWxSr0uLZGQsElGxv3fiZ32C5+q6M8w==", - "dev": true, - "requires": { - "@commitlint/config-validator": "^17.0.0", - "@commitlint/execute-rule": "^17.0.0", - "@commitlint/resolve-extends": "^17.0.0", - "@commitlint/types": "^17.0.0", - "@types/node": ">=12", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "cosmiconfig-typescript-loader": "^2.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "typescript": "^4.6.4" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true - } - } - }, - "@commitlint/message": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", - "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", - "dev": true - }, - "@commitlint/parse": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", - "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - } - }, - "@commitlint/read": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.0.0.tgz", - "integrity": "sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==", - "dev": true, - "requires": { - "@commitlint/top-level": "^17.0.0", - "@commitlint/types": "^17.0.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0" - } - }, - "@commitlint/resolve-extends": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.0.0.tgz", - "integrity": "sha512-wi60WiJmwaQ7lzMXK8Vbc18Hq9tE2j/6iv2AFfPUGV7fvfY6Sf1iNKuUHirSqR0fquUyufIXe4y/K9A6LVIIvw==", - "dev": true, - "requires": { - "@commitlint/config-validator": "^17.0.0", - "@commitlint/types": "^17.0.0", - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true - } - } - }, - "@commitlint/rules": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", - "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", - "dev": true, - "requires": { - "@commitlint/ensure": "^17.0.0", - "@commitlint/message": "^17.0.0", - "@commitlint/to-lines": "^17.0.0", - "@commitlint/types": "^17.0.0", - "execa": "^5.0.0" - } - }, - "@commitlint/to-lines": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz", - "integrity": "sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==", - "dev": true - }, - "@commitlint/top-level": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz", - "integrity": "sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "is-extglob": "^2.1.1" } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "argparse": "^2.0.1" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - } - } - }, - "@commitlint/types": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz", - "integrity": "sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } - } - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { - "argparse": "^2.0.1" + "wrappy": "1" } - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "callsites": "^3.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "glob": "^7.1.3" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "shebang-regex": "^3.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@log4js-node/sandboxed-module": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@log4js-node/sandboxed-module/-/sandboxed-module-2.2.1.tgz", - "integrity": "sha512-BtpxW7EReVwZ6WSNHPMyID2vVYuBKYkJyevJxbPsTtecWGqwm1wL4/O3oOQcyGhJsuNi7Y8JhNc5FE9jdXlZ0A==", - "dev": true, - "requires": { - "require-like": "0.1.2", - "stack-trace": "0.0.10" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "async-hook-domain": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", - "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bind-obj-methods": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", - "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001344", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", - "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "punycode": "^2.1.0" } - } - } - }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", - "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cosmiconfig-typescript-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", - "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", - "dev": true, - "requires": { - "cosmiconfig": "^7", - "ts-node": "^10.8.1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "date-format": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", - "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true - } - } - }, - "deep-freeze": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true } } }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "electron-to-chromium": { - "version": "1.4.144", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz", - "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", + "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz", - "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "object.entries": "^1.1.5", + "semver": "^6.3.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "argparse": "^2.0.1" + "has-symbols": "^1.0.2" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } } } }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - } - }, "eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -9195,1342 +2674,1679 @@ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "^2.1.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { - "ms": "^2.1.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "ms": "2.0.0" + "function-bind": "^1.1.1" } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { - "esutils": "^2.0.2" + "get-intrinsic": "^1.1.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", - "dev": true, - "requires": { - "is-object": "~1.0.1", - "merge-descriptors": "~1.0.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function-loop": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", - "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true - } - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + } } }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { - "text-extensions": "^1.0.0" + "prettier-linter-helpers": "^1.0.0" + }, + "dependencies": { + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + } } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { - "append-transform": "^2.0.0" + "ci-info": "^3.2.0" + }, + "dependencies": { + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + } } }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { - "@babel/core": "^7.7.5", + "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", "make-dir": "^3.0.0", + "node-preload": "^0.2.1", "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", + "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.9", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", + "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", + "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "dev": true + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", + "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.9", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.9", + "@babel/types": "^7.18.9", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", + "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", - "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", - "dev": true, - "requires": { - "cliui": "^7.0.4" - }, - "dependencies": { + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz", + "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001366", + "electron-to-chromium": "^1.4.188", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.4" + } + }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001370", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", + "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, + "electron-to-chromium": { + "version": "1.4.199", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz", + "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "append-transform": "^2.0.0" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "libtap": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", - "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", - "dev": true, - "requires": { - "async-hook-domain": "^2.0.4", - "bind-obj-methods": "^3.0.0", - "diff": "^4.0.2", - "function-loop": "^2.0.1", - "minipass": "^3.1.5", - "own-or": "^1.0.0", - "own-or-env": "^1.0.2", - "signal-exit": "^3.0.4", - "stack-utils": "^2.0.4", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + }, + "istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "p-locate": "^4.1.0" } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "process-on-spawn": "^1.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "wrappy": "1" } }, "p-limit": { @@ -10551,837 +4367,509 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", - "dev": true - }, - "own-or-env": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", - "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "glob": "^7.1.3" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "shebang-regex": "^3.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "path-exists": { + "strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "proxyquire": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", - "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", - "dev": true, - "requires": { - "fill-keys": "^1.0.2", - "module-not-found-error": "^1.0.1", - "resolve": "^1.11.1" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "has-flag": "^3.0.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "is-typedarray": "^1.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "isexe": "^2.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "requires": { - "global-dirs": "^0.1.1" - } - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "streamroller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", - "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", - "requires": { - "date-format": "^4.0.10", - "debug": "^4.3.4", - "fs-extra": "^10.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + }, + "dependencies": { + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "requires": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + } } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "streamroller": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.2.tgz", + "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==", "requires": { - "has-flag": "^4.0.0" + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "tap": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/tap/-/tap-16.2.0.tgz", - "integrity": "sha512-ikfNLy701p2+sH3R0pAXQ/Aen6ZByaguUY7UsoTLL4AXa2c9gYQL+pI21p13lq54R7/CEoLaViC1sexcWG32ig==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.3.0.tgz", + "integrity": "sha512-J9GffPUAbX6FnWbQ/jj7ktzd9nnDFP1fH44OzidqOmxUfZ1hPLMOvpS99LnDiP0H2mO8GY3kGN5XoY0xIKbNFA==", "dev": true, "requires": { "@isaacs/import-jsx": "^4.0.1", @@ -11749,6 +5237,16 @@ "bundled": true, "dev": true }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ansi-escapes": { "version": "4.3.2", "bundled": true, @@ -11782,11 +5280,33 @@ "bundled": true, "dev": true }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "astral-regex": { "version": "2.0.0", "bundled": true, "dev": true }, + "async-hook-domain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", + "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", + "dev": true + }, "auto-bind": { "version": "4.0.0", "bundled": true, @@ -11797,6 +5317,18 @@ "bundled": true, "dev": true }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bind-obj-methods": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", + "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "bundled": true, @@ -11806,6 +5338,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browserslist": { "version": "4.20.2", "bundled": true, @@ -11818,6 +5359,12 @@ "picocolors": "^1.0.0" } }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "caller-callsite": { "version": "4.1.0", "bundled": true, @@ -11863,11 +5410,33 @@ "supports-color": "^5.3.0" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "ci-info": { "version": "2.0.0", "bundled": true, "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cli-boxes": { "version": "2.2.1", "bundled": true, @@ -11890,6 +5459,54 @@ "string-width": "^4.2.0" } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "code-excerpt": { "version": "3.0.0", "bundled": true, @@ -11911,6 +5528,12 @@ "bundled": true, "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "commondir": { "version": "1.0.1", "bundled": true, @@ -11934,6 +5557,17 @@ "bundled": true, "dev": true }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "csstype": { "version": "3.0.11", "bundled": true, @@ -11947,6 +5581,12 @@ "ms": "2.1.2" } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "electron-to-chromium": { "version": "1.4.89", "bundled": true, @@ -11977,6 +5617,15 @@ "bundled": true, "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-cache-dir": { "version": "3.3.2", "bundled": true, @@ -11996,11 +5645,46 @@ "path-exists": "^4.0.0" } }, + "findit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", + "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", + "dev": true + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "bundled": true, "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-loop": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", + "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "bundled": true, @@ -12019,6 +5703,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "bundled": true, @@ -12123,6 +5816,15 @@ } } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-ci": { "version": "2.0.0", "bundled": true, @@ -12131,11 +5833,67 @@ "ci-info": "^2.0.0" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "bundled": true, "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + } + }, + "jackspeak": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", + "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", + "dev": true, + "requires": { + "cliui": "^7.0.4" + } + }, "js-tokens": { "version": "4.0.0", "bundled": true, @@ -12151,6 +5909,27 @@ "bundled": true, "dev": true }, + "libtap": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", + "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", + "dev": true, + "requires": { + "async-hook-domain": "^2.0.4", + "bind-obj-methods": "^3.0.0", + "diff": "^4.0.2", + "function-loop": "^2.0.1", + "minipass": "^3.1.5", + "own-or": "^1.0.0", + "own-or-env": "^1.0.2", + "signal-exit": "^3.0.4", + "stack-utils": "^2.0.4", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.6", + "trivial-deferred": "^1.0.1" + } + }, "locate-path": { "version": "5.0.0", "bundled": true, @@ -12201,6 +5980,12 @@ "yallist": "^4.0.0" } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "ms": { "version": "2.1.2", "bundled": true, @@ -12211,6 +5996,12 @@ "bundled": true, "dev": true }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "object-assign": { "version": "4.1.1", "bundled": true, @@ -12232,6 +6023,27 @@ "mimic-fn": "^2.1.0" } }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", + "dev": true + }, + "own-or-env": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", + "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", + "dev": true, + "requires": { + "own-or": "^1.0.0" + } + }, "p-limit": { "version": "2.3.0", "bundled": true, @@ -12248,6 +6060,15 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "bundled": true, @@ -12268,11 +6089,23 @@ "bundled": true, "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "picocolors": { "version": "1.0.0", "bundled": true, "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "bundled": true, @@ -12314,6 +6147,15 @@ "scheduler": "^0.20.2" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "redeyed": { "version": "2.1.1", "bundled": true, @@ -12363,6 +6205,21 @@ "bundled": true, "dev": true }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shell-quote": { "version": "1.7.3", "bundled": true, @@ -12411,6 +6268,24 @@ "bundled": true, "dev": true }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "stack-utils": { "version": "2.0.5", "bundled": true, @@ -12452,6 +6327,30 @@ "has-flag": "^3.0.0" } }, + "tap-mocha-reporter": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", + "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", + "dev": true, + "requires": { + "color-support": "^1.1.0", + "debug": "^4.1.1", + "diff": "^4.0.1", + "escape-string-regexp": "^2.0.0", + "glob": "^7.0.5", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "unicode-length": "^2.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "tap-parser": { "version": "11.0.1", "bundled": true, @@ -12470,11 +6369,29 @@ "yaml": "^1.5.0" } }, + "tcompare": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", + "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", + "dev": true, + "requires": { + "diff": "^4.0.2" + } + }, "to-fast-properties": { "version": "2.0.0", "bundled": true, "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "treport": { "version": "3.0.3", "bundled": true, @@ -12534,6 +6451,12 @@ } } }, + "trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", + "dev": true + }, "type-fest": { "version": "0.12.0", "bundled": true, @@ -12563,6 +6486,21 @@ } } }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "widest-line": { "version": "3.1.0", "bundled": true, @@ -12612,8 +6550,7 @@ "ws": { "version": "7.5.7", "bundled": true, - "dev": true, - "requires": {} + "dev": true }, "yallist": { "version": "4.0.0", @@ -12635,453 +6572,10 @@ } } }, - "tap-mocha-reporter": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", - "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^4.1.1", - "diff": "^4.0.1", - "escape-string-regexp": "^2.0.0", - "glob": "^7.0.5", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "tcompare": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", - "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", - "dev": true, - "requires": { - "diff": "^4.0.2" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz", - "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-length": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", - "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true } } From 798feb3544af919880e9810c6b11d96f90ccda5f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 21:16:07 +0800 Subject: [PATCH 321/454] test: extended timeout interval for OS operations --- test/tap/fileAppender-test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/tap/fileAppender-test.js b/test/tap/fileAppender-test.js index 964942c8..b9d03ec9 100644 --- a/test/tap/fileAppender-test.js +++ b/test/tap/fileAppender-test.js @@ -40,7 +40,7 @@ test('log4js fileAppender', (batch) => { logger.info('This should be in the file.'); - await sleep(100); + await sleep(250); const fileContents = await fs.readFile(testFile, 'utf8'); t.match(fileContents, `This should be in the file.${EOL}`); t.match( @@ -219,7 +219,7 @@ test('log4js fileAppender', (batch) => { logger.info('This is the second log message.'); // wait for the file system to catch up - await sleep(100); + await sleep(250); const fileContents = await fs.readFile(testFile, 'utf8'); t.match(fileContents, 'This is the second log message.'); t.notMatch(fileContents, 'These are the log messages for the first file.'); @@ -272,7 +272,7 @@ test('log4js fileAppender', (batch) => { logger.info('This is the third log message.'); logger.info('This is the fourth log message.'); // give the system a chance to open the stream - await sleep(200); + await sleep(250); const files = await fs.readdir(__dirname); const logFiles = files .sort() @@ -334,7 +334,7 @@ test('log4js fileAppender', (batch) => { logger.info('This is the third log message.'); logger.info('This is the fourth log message.'); // give the system a chance to open the stream - await sleep(1000); + await sleep(250); const files = await fs.readdir(__dirname); const logFiles = files .sort() @@ -503,7 +503,7 @@ test('log4js fileAppender', (batch) => { [] ); - await sleep(100); + await sleep(250); let fileContents = await fs.readFile(testFilePlain, 'utf8'); t.match( fileContents, From 4fe3c57635b4e5d273b01fb869aad31470449ec7 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 21:28:00 +0800 Subject: [PATCH 322/454] chore(deps-dev): bump eslint from 8.16.0 to 8.20.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d5b1770d..5e48ef8d 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", - "eslint": "^8.16.0", + "eslint": "^8.20.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From 64a2c68bbf52e6e604a042d9a06e70b98c23bea6 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 21:41:04 +0800 Subject: [PATCH 323/454] chore(deps-dev): downgraded for Node.js 10.x compatibility --- package-lock.json | 469 +++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 382 insertions(+), 89 deletions(-) diff --git a/package-lock.json b/package-lock.json index e256e2f8..060dd228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1623,72 +1623,122 @@ "dev": true }, "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.3.2", + "debug": "^4.0.1", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", "minimatch": "^3.0.4" } @@ -1700,9 +1750,9 @@ "dev": true }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { @@ -1723,6 +1773,12 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1730,18 +1786,27 @@ "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "balanced-match": { @@ -1768,21 +1833,62 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "concat-map": { @@ -1817,6 +1923,21 @@ "esutils": "^2.0.2" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1824,49 +1945,63 @@ "dev": true }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -1874,6 +2009,14 @@ "dev": true, "requires": { "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "esrecurse": { @@ -1883,12 +2026,20 @@ "dev": true, "requires": { "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -1961,12 +2112,12 @@ } }, "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" } }, "globals": { @@ -1979,15 +2130,15 @@ } }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "import-fresh": { @@ -2028,6 +2179,12 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2043,13 +2200,20 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "json-schema-traverse": { @@ -2080,6 +2244,21 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2145,6 +2324,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -2157,6 +2342,12 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2172,6 +2363,15 @@ "glob": "^7.1.3" } }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2187,6 +2387,60 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2203,12 +2457,45 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "text-table": { @@ -2267,6 +2554,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, diff --git a/package.json b/package.json index 5e48ef8d..0f89d53c 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", - "eslint": "^8.20.0", + "eslint": "^7.32.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-node": "^0.3.6", From e04a4731bc4833f881fd6178600119bae0cc318c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 23 Jul 2022 14:35:52 +0800 Subject: [PATCH 324/454] ci: added tests for Node.js 10.x, 18.x --- .github/workflows/node.js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index a6d1f24c..bb4cf5dc 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x, 16.x] + node-version: [10.x, 12.x, 14.x, 16.x, 18.x] os: [ubuntu-latest, windows-latest] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ From 0a87f2b058b968206b7df24ee98e14e71045770c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sat, 23 Jul 2022 14:36:29 +0800 Subject: [PATCH 325/454] ci: added `npm audit` --- .github/workflows/node.js.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index bb4cf5dc..32e49535 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -31,4 +31,6 @@ jobs: - run: npm run build --if-present - run: npm test - run: npm run typings - + - run: npm audit + env: + NODE_ENV: production From 23e50fed74dc04dc687015cfc4a4fc93347b8b3c Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 22:09:53 +0800 Subject: [PATCH 326/454] ci: updated codeql from v1 to v2 CodeQL Action v1 will be deprecated on December 7th, 2022. Please upgrade to v2. For more information, see https://github.blog/changelog/2022-04-27-code-scanning-deprecation-of-codeql-action-v1/ --- .github/workflows/codeql-analysis.yml | 32 ++++++++++++++------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9ffc0339..0ec15528 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,10 +13,10 @@ name: "CodeQL" on: push: - branches: [ master ] + branches: [ "master" ] pull_request: # The branches below must be a subset of the branches above - branches: [ master ] + branches: [ "master" ] schedule: - cron: '15 11 * * 3' @@ -34,37 +34,39 @@ jobs: matrix: language: [ 'javascript' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://git.io/codeql-language-support + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - #- run: | - # make bootstrap - # make release + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From 5f617cc94b9d5aedaa81696bc00bcc07568bb477 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 24 Jul 2022 16:30:36 +0800 Subject: [PATCH 327/454] refactor(test): added `callback` for `beforeEach()` and `afterEach()` for tap v14 downgrade --- test/tap/appender-dependencies-test.js | 6 ++++-- test/tap/categoryFilter-test.js | 3 ++- test/tap/configuration-test.js | 4 +++- test/tap/connect-context-test.js | 6 ++++-- test/tap/connect-nolog-test.js | 18 ++++++++++++------ test/tap/logger-test.js | 3 ++- test/tap/multiprocess-test.js | 3 ++- test/tap/newLevel-test.js | 3 ++- test/tap/noLogFilter-test.js | 3 ++- 9 files changed, 33 insertions(+), 16 deletions(-) diff --git a/test/tap/appender-dependencies-test.js b/test/tap/appender-dependencies-test.js index 045c8c12..84afeb86 100644 --- a/test/tap/appender-dependencies-test.js +++ b/test/tap/appender-dependencies-test.js @@ -8,12 +8,14 @@ let log4js; let recording; test('log4js appender dependencies', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { log4js = require('../../lib/log4js'); recording = require('../../lib/appenders/recording'); + done(); }); - batch.afterEach(() => { + batch.afterEach((done) => { recording.erase(); + done(); }); batch.test('in order', (t) => { const config = { diff --git a/test/tap/categoryFilter-test.js b/test/tap/categoryFilter-test.js index af9bba7b..45f2f7d8 100644 --- a/test/tap/categoryFilter-test.js +++ b/test/tap/categoryFilter-test.js @@ -3,8 +3,9 @@ const log4js = require('../../lib/log4js'); const recording = require('../../lib/appenders/recording'); test('log4js categoryFilter', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { recording.reset(); + done(); }); batch.test('appender should exclude categories', (t) => { diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index 1fced152..dd359dd6 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -10,7 +10,7 @@ let dependencies; let fileRead; test('log4js configure', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { fileRead = 0; fakeFS = { @@ -55,6 +55,8 @@ test('log4js configure', (batch) => { fs: fakeFS, }, }; + + done(); }); batch.test( diff --git a/test/tap/connect-context-test.js b/test/tap/connect-context-test.js index f8432229..17f41a4e 100644 --- a/test/tap/connect-context-test.js +++ b/test/tap/connect-context-test.js @@ -68,8 +68,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { context: true }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.contexts = []; + done(); }); t.test('response should be included in context', (assert) => { @@ -96,8 +97,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, {}); - t.beforeEach(() => { + t.beforeEach((done) => { ml.contexts = []; + done(); }); t.test('response should not be included in context', (assert) => { diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index a0b1e30d..9ee0e9b6 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -59,8 +59,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: '\\.gif' }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch url request', (assert) => { @@ -106,8 +107,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: '\\.gif|\\.jpe?g' }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch url request (png)', (assert) => { @@ -167,8 +169,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: ['\\.gif', '\\.jpe?g'] }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch url request (png)', (assert) => { @@ -228,8 +231,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: /\.gif|\.jpe?g/ }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch url request (png)', (assert) => { @@ -289,8 +293,9 @@ test('log4js connect logger', (batch) => { const ml = new MockLogger(); const cl = clm(ml, { nolog: [/\.gif/, /\.jpe?g/] }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch url request (png)', (assert) => { @@ -353,8 +358,9 @@ test('log4js connect logger', (batch) => { res.getHeader('content-type') === 'image/png' || res.statusCode < 400, }); - t.beforeEach(() => { + t.beforeEach((done) => { ml.messages = []; + done(); }); t.test('check unmatch function return (statusCode < 400)', (assert) => { diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index a3eb7386..9b8930f2 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -35,9 +35,10 @@ const testConfig = { }; test('../../lib/logger', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { events.length = 0; testConfig.level = levels.TRACE; + done(); }); batch.test('constructor with no parameters', (t) => { diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index b67aa555..7fbc5b8f 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -51,8 +51,9 @@ function makeFakeNet() { } test('Multiprocess Appender', async (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { recording.erase(); + done(); }); batch.test('worker', (t) => { diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index 4f581489..1fa0e7f0 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -3,8 +3,9 @@ const log4js = require('../../lib/log4js'); const recording = require('../../lib/appenders/recording'); test('../../lib/logger', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { recording.reset(); + done(); }); batch.test('creating a new log level', (t) => { diff --git a/test/tap/noLogFilter-test.js b/test/tap/noLogFilter-test.js index d52cf485..0230d144 100644 --- a/test/tap/noLogFilter-test.js +++ b/test/tap/noLogFilter-test.js @@ -6,8 +6,9 @@ const recording = require('../../lib/appenders/recording'); * test a simple regexp */ test('log4js noLogFilter', (batch) => { - batch.beforeEach(() => { + batch.beforeEach((done) => { recording.reset(); + done(); }); batch.test( From 879e8c764691c0372878b830488d85d64946ce0f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 14:42:36 +0800 Subject: [PATCH 328/454] refactor(test): forward-compatible with tap v15 when `callback` is removed from `beforeEach` and `afterEach` in tap 15.0.0, libtap was added: https://github.com/tapjs/libtap/compare/v0.3.0...v1.0.0#diff-e41924228a867ab0a0d8689f84ae6d826da70a0d65fc59ae2c69539035c4ef6aL905-L915 --- test/tap/appender-dependencies-test.js | 8 ++++++-- test/tap/categoryFilter-test.js | 4 +++- test/tap/configuration-test.js | 4 +++- test/tap/connect-context-test.js | 8 ++++++-- test/tap/connect-nolog-test.js | 24 ++++++++++++++++++------ test/tap/logger-test.js | 4 +++- test/tap/multiprocess-test.js | 4 +++- test/tap/newLevel-test.js | 4 +++- test/tap/noLogFilter-test.js | 4 +++- 9 files changed, 48 insertions(+), 16 deletions(-) diff --git a/test/tap/appender-dependencies-test.js b/test/tap/appender-dependencies-test.js index 84afeb86..4c680e78 100644 --- a/test/tap/appender-dependencies-test.js +++ b/test/tap/appender-dependencies-test.js @@ -11,11 +11,15 @@ test('log4js appender dependencies', (batch) => { batch.beforeEach((done) => { log4js = require('../../lib/log4js'); recording = require('../../lib/appenders/recording'); - done(); + if (typeof done === 'function') { + done(); + } }); batch.afterEach((done) => { recording.erase(); - done(); + if (typeof done === 'function') { + done(); + } }); batch.test('in order', (t) => { const config = { diff --git a/test/tap/categoryFilter-test.js b/test/tap/categoryFilter-test.js index 45f2f7d8..40c28409 100644 --- a/test/tap/categoryFilter-test.js +++ b/test/tap/categoryFilter-test.js @@ -5,7 +5,9 @@ const recording = require('../../lib/appenders/recording'); test('log4js categoryFilter', (batch) => { batch.beforeEach((done) => { recording.reset(); - done(); + if (typeof done === 'function') { + done(); + } }); batch.test('appender should exclude categories', (t) => { diff --git a/test/tap/configuration-test.js b/test/tap/configuration-test.js index dd359dd6..dfcaeac8 100644 --- a/test/tap/configuration-test.js +++ b/test/tap/configuration-test.js @@ -56,7 +56,9 @@ test('log4js configure', (batch) => { }, }; - done(); + if (typeof done === 'function') { + done(); + } }); batch.test( diff --git a/test/tap/connect-context-test.js b/test/tap/connect-context-test.js index 17f41a4e..ffd88dcc 100644 --- a/test/tap/connect-context-test.js +++ b/test/tap/connect-context-test.js @@ -70,7 +70,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.contexts = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('response should be included in context', (assert) => { @@ -99,7 +101,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.contexts = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('response should not be included in context', (assert) => { diff --git a/test/tap/connect-nolog-test.js b/test/tap/connect-nolog-test.js index 9ee0e9b6..1d780a72 100644 --- a/test/tap/connect-nolog-test.js +++ b/test/tap/connect-nolog-test.js @@ -61,7 +61,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch url request', (assert) => { @@ -109,7 +111,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch url request (png)', (assert) => { @@ -171,7 +175,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch url request (png)', (assert) => { @@ -233,7 +239,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch url request (png)', (assert) => { @@ -295,7 +303,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch url request (png)', (assert) => { @@ -360,7 +370,9 @@ test('log4js connect logger', (batch) => { t.beforeEach((done) => { ml.messages = []; - done(); + if (typeof done === 'function') { + done(); + } }); t.test('check unmatch function return (statusCode < 400)', (assert) => { diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 9b8930f2..62c5834d 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -38,7 +38,9 @@ test('../../lib/logger', (batch) => { batch.beforeEach((done) => { events.length = 0; testConfig.level = levels.TRACE; - done(); + if (typeof done === 'function') { + done(); + } }); batch.test('constructor with no parameters', (t) => { diff --git a/test/tap/multiprocess-test.js b/test/tap/multiprocess-test.js index 7fbc5b8f..7577b1d4 100644 --- a/test/tap/multiprocess-test.js +++ b/test/tap/multiprocess-test.js @@ -53,7 +53,9 @@ function makeFakeNet() { test('Multiprocess Appender', async (batch) => { batch.beforeEach((done) => { recording.erase(); - done(); + if (typeof done === 'function') { + done(); + } }); batch.test('worker', (t) => { diff --git a/test/tap/newLevel-test.js b/test/tap/newLevel-test.js index 1fa0e7f0..10714fef 100644 --- a/test/tap/newLevel-test.js +++ b/test/tap/newLevel-test.js @@ -5,7 +5,9 @@ const recording = require('../../lib/appenders/recording'); test('../../lib/logger', (batch) => { batch.beforeEach((done) => { recording.reset(); - done(); + if (typeof done === 'function') { + done(); + } }); batch.test('creating a new log level', (t) => { diff --git a/test/tap/noLogFilter-test.js b/test/tap/noLogFilter-test.js index 0230d144..00fe6a3d 100644 --- a/test/tap/noLogFilter-test.js +++ b/test/tap/noLogFilter-test.js @@ -8,7 +8,9 @@ const recording = require('../../lib/appenders/recording'); test('log4js noLogFilter', (batch) => { batch.beforeEach((done) => { recording.reset(); - done(); + if (typeof done === 'function') { + done(); + } }); batch.test( From 7b51d72a79b06fe283c45757981463cb50add41d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 22:27:29 +0800 Subject: [PATCH 329/454] chore(deps-dev): downgraded for Node.js 8.x compatibility --- package-lock.json | 880 +++++++++++++++++++++++++++------------------- package.json | 10 +- 2 files changed, 527 insertions(+), 363 deletions(-) diff --git a/package-lock.json b/package-lock.json index 060dd228..3714ad26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -674,6 +674,17 @@ "path-exists": "^4.0.0" } }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -714,6 +725,12 @@ "ini": "^1.3.4" } }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -858,6 +875,16 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -1389,6 +1416,12 @@ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -1623,60 +1656,57 @@ "dev": true }, "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", + "levn": "^0.3.0", + "lodash": "^4.17.14", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.8.3", "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.18.6" } }, "@babel/helper-validator-identifier": { @@ -1694,61 +1724,8 @@ "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } } }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -1773,11 +1750,22 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } }, "ansi-regex": { "version": "5.0.1", @@ -1804,9 +1792,9 @@ } }, "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, "balanced-match": { @@ -1826,56 +1814,37 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1898,14 +1867,24 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "deep-is": { @@ -1929,19 +1908,10 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "eslint-scope": { @@ -1955,45 +1925,29 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -2048,6 +2002,17 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2066,25 +2031,41 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "flat-cache": "^2.0.1" } }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2121,12 +2102,12 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "type-fest": "^0.8.1" } }, "has-flag": { @@ -2135,6 +2116,15 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -2173,6 +2163,87 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2229,36 +2300,27 @@ "dev": true }, "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2268,12 +2330,39 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2283,20 +2372,35 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2313,15 +2417,15 @@ "dev": true }, "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, "progress": { @@ -2337,15 +2441,9 @@ "dev": true }, "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "resolve-from": { @@ -2354,72 +2452,88 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "tslib": "^1.9.0" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true } } @@ -2439,15 +2553,34 @@ "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + } } }, "strip-json-comments": { @@ -2466,35 +2599,39 @@ } }, "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true } } }, @@ -2504,19 +2641,40 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { - "prelude-ls": "^1.2.1" + "prelude-ls": "~1.1.2" } }, "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "uri-js": { @@ -2535,9 +2693,9 @@ "dev": true }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -2555,24 +2713,26 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } } } }, "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" + "object.entries": "^1.1.2" }, "dependencies": { "call-bind": { @@ -2879,12 +3039,6 @@ "functions-have-names": "^1.2.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -2946,10 +3100,21 @@ } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -3662,9 +3827,9 @@ } }, "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -3693,14 +3858,14 @@ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "dependencies": { "graceful-fs": { @@ -3710,19 +3875,18 @@ "dev": true }, "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.6" } }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } diff --git a/package.json b/package.json index 0f89d53c..37d78fed 100644 --- a/package.json +++ b/package.json @@ -56,13 +56,13 @@ "@log4js-node/sandboxed-module": "^2.2.1", "callsites": "^3.1.0", "deep-freeze": "0.0.1", - "eslint": "^7.32.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^6.8.0", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-prettier": "^6.15.0", "eslint-import-resolver-node": "^0.3.6", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.2.1", - "fs-extra": "^10.1.0", + "eslint-plugin-prettier": "^3.4.1", + "fs-extra": "^8.1.0", "husky": "^8.0.1", "is-ci": "^3.0.1", "nyc": "^15.1.0", From d6d70865310d2e99361a472b594bc11f92e6929f Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 26 Jul 2022 03:06:56 +0800 Subject: [PATCH 330/454] chore(deps-dev): downgraded prettier from 2.7.1 to 1.19.1 for Node.js 8.x compatibility --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3714ad26..6817ea14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5185,9 +5185,9 @@ } }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "proxyquire": { diff --git a/package.json b/package.json index 37d78fed..441f2b65 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "husky": "^8.0.1", "is-ci": "^3.0.1", "nyc": "^15.1.0", - "prettier": "^2.7.1", + "prettier": "^1.19.1", "proxyquire": "^2.1.3", "tap": "^16.3.0", "typescript": "^4.7.4" From 2dee68ddee07c3a65864ae67ed834f97b2d1c33d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Sun, 24 Jul 2022 00:44:14 +0800 Subject: [PATCH 331/454] style: forward-compatible prettier rules and cjs parser --- .prettierignore | 3 +-- package.json | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.prettierignore b/.prettierignore index 3ff683f2..b6f4cc40 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,2 @@ +**/.* coverage -.github -.nyc_output diff --git a/package.json b/package.json index 441f2b65..1ba5b107 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ }, "scripts": { "prepare": "is-ci || husky install", - "pretest": "prettier --check . && eslint \"lib/**/*.js\" \"test/**/*.js\"", - "prettier:fix": "prettier --write .", + "pretest": "prettier --check \"**/*.*\" && eslint \"lib/**/*.js\" \"test/**/*.js\"", + "prettier:fix": "prettier --write \"**/*.*\"", "test": "tap \"test/tap/**/*.js\" --cov --timeout=45", "typings": "tsc -p types/tsconfig.json" }, @@ -74,6 +74,16 @@ "browser": { "os": false }, + "prettier": { + "trailingComma": "es5", + "arrowParens": "always", + "overrides": [ + { + "files": ["*.cjs"], + "options": { "parser": "typescript" } + } + ] + }, "tap": { "check-coverage": true }, From 4bc5589a28217b0f0190a58bf10d251fc657ee1d Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Mon, 25 Jul 2022 14:36:42 +0800 Subject: [PATCH 332/454] style: ran prettier --- docs/_layouts/default.html | 4 ++-- docs/connect-logger.md | 2 +- docs/layouts.md | 6 +++--- examples/custom-layout.js | 2 +- examples/hipchat-appender.js | 2 +- examples/patternLayout-tokens.js | 2 +- lib/appenders/dateFile.js | 4 ++-- lib/appenders/file.js | 8 ++++---- lib/appenders/multiprocess.js | 9 ++++----- lib/appenders/recording.js | 2 +- lib/appenders/tcp.js | 9 ++++----- lib/layouts.js | 7 +++---- lib/logger.js | 4 ++-- package.json | 8 ++++++-- test/tap/configuration-inheritance-test.js | 15 +++++++++------ test/tap/configuration-validation-test.js | 5 +++-- test/tap/connect-logger-test.js | 4 ++-- test/tap/connect-nolog-test.js | 4 ++-- test/tap/default-settings-test.js | 7 ++++--- test/tap/file-sighup-test.js | 5 +++-- test/tap/layouts-test.js | 7 ++++--- test/tap/logger-test.js | 2 +- test/tap/logging-test.js | 6 +++--- test/tap/multi-file-appender-test.js | 4 ++-- test/tap/tcp-appender-test.js | 2 +- types/test.ts | 2 +- 26 files changed, 70 insertions(+), 62 deletions(-) diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index ba8235bb..b06aa7e9 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -87,11 +87,11 @@

      {{ site.title | default: site.github.repository_name }}

      {% if site.google_analytics %}