From 7ec64ce846d49b3f918cb8bf8ca1bf3ca30d77ae Mon Sep 17 00:00:00 2001 From: Pavlo Buidenkov Date: Mon, 31 Aug 2020 15:29:53 +0300 Subject: [PATCH] added custom electron-log logger, husky post-commit --- app/server/inactive_rooms.ts | 9 +- app/server/index.ts | 12 +- app/server/socket.ts | 1 + app/utils/logger.spec.ts | 92 +++++++++++++++ app/utils/logger.ts | 45 ++++++++ babel.config.js | 9 ++ package.json | 17 ++- test/integration/app/server/index.spec.ts | 18 +++ yarn.lock | 131 +++++++++++++++++++++- 9 files changed, 320 insertions(+), 14 deletions(-) create mode 100644 app/utils/logger.spec.ts create mode 100644 app/utils/logger.ts create mode 100644 test/integration/app/server/index.spec.ts diff --git a/app/server/inactive_rooms.ts b/app/server/inactive_rooms.ts index ece811d..dffe35d 100644 --- a/app/server/inactive_rooms.ts +++ b/app/server/inactive_rooms.ts @@ -1,12 +1,15 @@ /* eslint-disable no-console */ import getStore from './store'; +import Logger from '../utils/logger'; + +const log = new Logger('app/server/inactive_rooms.ts'); export default async function pollForInactiveRooms() { const store = getStore(); - console.log('Checking for inactive rooms...'); + log.info('Checking for inactive rooms...'); const rooms = (await store.getAll('rooms')) || {}; - console.log(`${Object.keys(rooms).length} rooms found`); + log.info(`${Object.keys(rooms).length} rooms found`); Object.keys(rooms).forEach(async (roomId) => { const room = JSON.parse(rooms[roomId]); @@ -15,7 +18,7 @@ export default async function pollForInactiveRooms() { timeSinceUpdatedInSeconds / 60 / 60 / 24 ); if (timeSinceUpdatedInDays > 7) { - console.log( + log.info( `Deleting roomId ${roomId} which hasn't been used in ${timeSinceUpdatedInDays} days` ); await store.del('rooms', roomId); diff --git a/app/server/index.ts b/app/server/index.ts index 3d22559..abacbe9 100644 --- a/app/server/index.ts +++ b/app/server/index.ts @@ -14,6 +14,14 @@ import Socket from './socket'; import pollForInactiveRooms from './inactive_rooms'; import getStore from './store'; +import Logger from '../utils/logger'; + +const log = new Logger('app/server/index.ts'); + +// const log = (...args) => { +// logger. +// }; + let isDev; try { // eslint-disable-next-line global-require @@ -101,7 +109,7 @@ const init = async (PORT: number) => { pollForInactiveRooms(); return server.listen(PORT, () => { - console.log(`Signaling server is online at port ${PORT}`); + log.info(`Signaling server is online at port ${PORT}`); }); }; @@ -123,7 +131,7 @@ class SignalingServer { public async start(): Promise { this.port = await getPort({ port: 3131 }); this.server = await init(this.port); - console.log(`\n\nDeskreen signaling server started at port: ${this.port}`); + log.info(`Deskreen signaling server started at port: ${this.port}`); return this.server; } diff --git a/app/server/socket.ts b/app/server/socket.ts index e007313..953cb16 100644 --- a/app/server/socket.ts +++ b/app/server/socket.ts @@ -1,4 +1,5 @@ /* eslint-disable no-async-promise-executor */ +import regeneratorRuntime from 'regenerator-runtime'; import _ from 'lodash'; import Io from 'socket.io'; // eslint-disable-next-line import/no-cycle diff --git a/app/utils/logger.spec.ts b/app/utils/logger.spec.ts new file mode 100644 index 0000000..f1d5a8c --- /dev/null +++ b/app/utils/logger.spec.ts @@ -0,0 +1,92 @@ +import Logger from './logger'; + +describe('LoggerWithFilePrefix that uses electron-log', () => { + const filePath = 'some/file/path'; + let log = new Logger(filePath); + const mockLoggerInfoProperty = jest.fn(); + const mockLoggerErrorProperty = jest.fn(); + const mockLoggerWarnProperty = jest.fn(); + const mockLoggerVerboseProperty = jest.fn(); + const mockLoggerDebugProperty = jest.fn(); + const mockLoggerSillyProperty = jest.fn(); + + beforeEach(() => { + mockLoggerInfoProperty.mockClear(); + mockLoggerErrorProperty.mockClear(); + mockLoggerWarnProperty.mockClear(); + mockLoggerVerboseProperty.mockClear(); + mockLoggerDebugProperty.mockClear(); + mockLoggerDebugProperty.mockClear(); + + log = new Logger(filePath); + Object.defineProperty(log, 'electronLog', { + value: { + info: mockLoggerInfoProperty, + error: mockLoggerErrorProperty, + warn: mockLoggerWarnProperty, + verbose: mockLoggerVerboseProperty, + debug: mockLoggerDebugProperty, + silly: mockLoggerSillyProperty, + }, + }); + }); + it('should use internal electronLog.info() with filePath as first argument, when .info() is called', () => { + log.info('some info() log here'); + + expect(mockLoggerInfoProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); + + it('should use internal electronLog.error() with filePath as first argument, when .error() is called', () => { + log.error('some error() log here'); + + expect(mockLoggerErrorProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); + + it('should use internal electronLog.warn() with filePath as first argument, when .warn() is called', () => { + log.warn('some warn() log here'); + + expect(mockLoggerWarnProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); + + it('should use internal electronLog.verbose() with filePath as first argument, when .verbose() is called', () => { + log.verbose('some verbose() log here'); + + expect(mockLoggerVerboseProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); + + it('should use internal electronLog.debug() with filePath as first argument, when .debug() is called', () => { + log.debug('some debug() log here'); + + expect(mockLoggerDebugProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); + + it('should use internal electronLog.silly() with filePath as first argument, when .silly() is called', () => { + log.silly('some silly() log here'); + + expect(mockLoggerSillyProperty).toHaveBeenCalledWith( + filePath, + expect.anything(), + expect.anything() + ); + }); +}); diff --git a/app/utils/logger.ts b/app/utils/logger.ts new file mode 100644 index 0000000..c78af5d --- /dev/null +++ b/app/utils/logger.ts @@ -0,0 +1,45 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +const log = require('electron-log'); + +log.transports.file.level = 'warn'; + +if (process.env.NODE_ENV !== 'production') { + log.transports.console.level = 'silly'; +} else { + log.transports.console.level = 'silly'; // TODO: make false when doing release +} + +export default class LoggerWithFilePrefix { + filenamePath: string; + + electronLog: typeof log; + + constructor(_filenamePath: string) { + this.filenamePath = _filenamePath; + this.electronLog = log; + } + + error(...args: any[]) { + this.electronLog.error(this.filenamePath, ':', ...args); + } + + warn(...args: any[]) { + this.electronLog.warn(this.filenamePath, ':', ...args); + } + + info(...args: any[]) { + this.electronLog.info(this.filenamePath, ':', ...args); + } + + verbose(...args: any[]) { + this.electronLog.verbose(this.filenamePath, ':', ...args); + } + + debug(...args: any[]) { + this.electronLog.debug(this.filenamePath, ':', ...args); + } + + silly(...args: any[]) { + this.electronLog.silly(this.filenamePath, ':', ...args); + } +} diff --git a/babel.config.js b/babel.config.js index efad5dc..2badc21 100644 --- a/babel.config.js +++ b/babel.config.js @@ -56,6 +56,15 @@ module.exports = (api) => { [require('@babel/plugin-proposal-class-properties'), { loose: true }], require('@babel/plugin-proposal-json-strings'), + // Stage 4 + [ + require('@babel/plugin-transform-runtime'), + { + helpers: false, + regenerator: true, + }, + ], + ...(development ? developmentPlugins : productionPlugins), ], }; diff --git a/package.json b/package.json index e6a0a50..b9a057d 100644 --- a/package.json +++ b/package.json @@ -145,8 +145,14 @@ "homepage": "https://github.com/pavlobu/deskreen#readme", "jest": { "testURL": "http://localhost/", - "coveragePathIgnorePatterns": ["/node_modules/", "app/client"], - "testPathIgnorePatterns": ["/node_modules/", "app/client"], + "coveragePathIgnorePatterns": [ + "/node_modules/", + "app/client" + ], + "testPathIgnorePatterns": [ + "/node_modules/", + "app/client" + ], "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/internals/mocks/fileMock.js", "\\.(css|less|sass|scss)$": "identity-obj-proxy" @@ -198,6 +204,7 @@ "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-react-constant-elements": "^7.10.4", "@babel/plugin-transform-react-inline-elements": "^7.10.4", + "@babel/plugin-transform-runtime": "^7.11.0", "@babel/preset-env": "^7.11.0", "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", @@ -333,7 +340,8 @@ "shortid": "^2.2.15", "socket.io": "^2.3.0", "socket.io-client": "^2.3.0", - "source-map-support": "^0.5.19" + "source-map-support": "^0.5.19", + "winston": "^3.3.3" }, "devEngines": { "node": ">=7.x", @@ -373,7 +381,8 @@ }, "husky": { "hooks": { - "pre-commit": "lint-staged" + "pre-commit": "lint-staged", + "post-commit": "yarn coverage &> /dev/null && yarn sonar &> /dev/null &" } }, "jestSonar": { diff --git a/test/integration/app/server/index.spec.ts b/test/integration/app/server/index.spec.ts new file mode 100644 index 0000000..93c117e --- /dev/null +++ b/test/integration/app/server/index.spec.ts @@ -0,0 +1,18 @@ +import http from 'http'; +import SignalingServer from '../../../../app/server/index'; + +describe('signaling server', () => { + let server: typeof SignalingServer; + beforeEach(() => { + server = SignalingServer; + }); + + afterEach(() => { + server.stop(); + }); + + it('start() should return http.Server', async () => { + const res = await server.start(); + expect(res instanceof http.Server).toBe(true); + }); +}); diff --git a/yarn.lock b/yarn.lock index 6946777..dd760dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -896,6 +896,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-runtime@^7.11.0": + version "7.11.0" + resolved "https://packages.deskreen.com/@babel%2fplugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + "@babel/plugin-transform-shorthand-properties@^7.10.4": version "7.10.4" resolved "https://packages.deskreen.com/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" @@ -1161,6 +1171,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@dabh/diagnostics@^2.0.2": + version "2.0.2" + resolved "https://packages.deskreen.com/@dabh%2fdiagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" + integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@develar/schema-utils@~2.6.5": version "2.6.5" resolved "https://packages.deskreen.com/@develar%2fschema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" @@ -2746,6 +2765,11 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.1.0: + version "3.2.0" + resolved "https://packages.deskreen.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + asynckit@^0.4.0: version "0.4.0" resolved "https://packages.deskreen.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4564,6 +4588,14 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" +color@3.0.x: + version "3.0.0" + resolved "https://packages.deskreen.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + color@^3.0.0: version "3.1.2" resolved "https://packages.deskreen.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" @@ -4577,11 +4609,19 @@ colorette@^1.2.1: resolved "https://packages.deskreen.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -colors@^1.3.3: +colors@^1.2.1, colors@^1.3.3: version "1.4.0" resolved "https://packages.deskreen.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colorspace@1.1.x: + version "1.1.2" + resolved "https://packages.deskreen.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" + integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + dependencies: + color "3.0.x" + text-hex "1.0.x" + colour@0.7.1: version "0.7.1" resolved "https://packages.deskreen.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" @@ -5891,6 +5931,11 @@ emojis-list@^3.0.0: resolved "https://packages.deskreen.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +enabled@2.0.x: + version "2.0.0" + resolved "https://packages.deskreen.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://packages.deskreen.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -6725,6 +6770,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://packages.deskreen.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.0.4: + version "2.0.7" + resolved "https://packages.deskreen.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + fastq@^1.6.0: version "1.8.0" resolved "https://packages.deskreen.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" @@ -6760,6 +6810,11 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fecha@^4.2.0: + version "4.2.0" + resolved "https://packages.deskreen.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" + integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://packages.deskreen.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -6933,6 +6988,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +fn.name@1.x.x: + version "1.1.0" + resolved "https://packages.deskreen.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + follow-redirects@1.5.10: version "1.5.10" resolved "https://packages.deskreen.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -9341,6 +9401,11 @@ koa@^2.13.0: type-is "^1.6.16" vary "^1.1.2" +kuler@^2.0.0: + version "2.0.0" + resolved "https://packages.deskreen.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + language-subtag-registry@~0.3.2: version "0.3.20" resolved "https://packages.deskreen.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" @@ -9588,6 +9653,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +logform@^2.2.0: + version "2.2.0" + resolved "https://packages.deskreen.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" + integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== + dependencies: + colors "^1.2.1" + fast-safe-stringify "^2.0.4" + fecha "^4.2.0" + ms "^2.1.1" + triple-beam "^1.3.0" + loglevel@^1.6.8: version "1.7.0" resolved "https://packages.deskreen.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" @@ -10535,6 +10611,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://packages.deskreen.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^2.0.0, onetime@^2.0.1: version "2.0.1" resolved "https://packages.deskreen.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -11975,7 +12058,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: version "2.3.7" resolved "https://packages.deskreen.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -11988,7 +12071,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://packages.deskreen.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -12388,7 +12471,7 @@ resolve-url@^0.2.1: resolved "https://packages.deskreen.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1: version "1.17.0" resolved "https://packages.deskreen.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -12650,7 +12733,7 @@ semver-regex@^2.0.0: resolved "https://packages.deskreen.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://packages.deskreen.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -13179,6 +13262,11 @@ stable@^0.1.8: resolved "https://packages.deskreen.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-trace@0.0.x: + version "0.0.10" + resolved "https://packages.deskreen.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + stack-utils@^2.0.2: version "2.0.2" resolved "https://packages.deskreen.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" @@ -13936,6 +14024,11 @@ testcafe@^1.8.8: tree-kill "^1.1.0" typescript "^3.3.3" +text-hex@1.0.x: + version "1.0.0" + resolved "https://packages.deskreen.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://packages.deskreen.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -14136,6 +14229,11 @@ trim@0.0.1: resolved "https://packages.deskreen.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= +triple-beam@^1.2.0, triple-beam@^1.3.0: + version "1.3.0" + resolved "https://packages.deskreen.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + trough@^1.0.0: version "1.0.5" resolved "https://packages.deskreen.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" @@ -14967,6 +15065,29 @@ wildcard@^2.0.0: resolved "https://packages.deskreen.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== +winston-transport@^4.4.0: + version "4.4.0" + resolved "https://packages.deskreen.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" + integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== + dependencies: + readable-stream "^2.3.7" + triple-beam "^1.2.0" + +winston@^3.3.3: + version "3.3.3" + resolved "https://packages.deskreen.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.1.0" + is-stream "^2.0.0" + logform "^2.2.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.4.0" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://packages.deskreen.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"