diff --git a/_scripts/example-usage.ts b/_scripts/example-usage.ts index 5c5f465..d4b01ea 100644 --- a/_scripts/example-usage.ts +++ b/_scripts/example-usage.ts @@ -38,7 +38,7 @@ async function readContractState() { logging: false // Enable network request logging }); - logger.debug('arweave created'); + logger.trace('arweave created'); const changedSrc = `function handle(state, action) { console.log("hello world from the new source:", SmartWeave.transaction.id); @@ -64,12 +64,12 @@ async function readContractState() { new LexicographicalInteractionsSorter(arweave) ); - logger.debug('swcClient created'); + logger.trace('swcClient created'); const jwk = readJSON('../../redstone-node/.secrets/redstone-dev-jwk.json'); const jwkAddress = await arweave.wallets.jwkToAddress(jwk); - logger.debug('jwkAddress:', jwkAddress); + logger.trace('jwkAddress:', jwkAddress); const { state, validity } = await swcClient.readState('OrO8n453N6bx921wtsEs-0OCImBLCItNU5oSbFKlFuU'); diff --git a/_scripts/state-comparator.ts b/_scripts/state-comparator.ts index a82ddfb..a9c619e 100644 --- a/_scripts/state-comparator.ts +++ b/_scripts/state-comparator.ts @@ -215,7 +215,7 @@ async function main() { logger.info('skipping ', contractTxId); errorContractTxIds.push(contractTxId); } finally { - logger.debug('Contracts with different states:', differentStatesContractTxIds); + logger.trace('Contracts with different states:', differentStatesContractTxIds); logger.info('\n\n ==== END'); } } @@ -268,7 +268,7 @@ async function getNextPage(arweave, variables) { variables }); - logger.debug('Status:', response.status); + logger.trace('Status:', response.status); if (response.status !== 200) { throw new Error('Wrong response from Ar GQL'); } diff --git a/_scripts/swc-stats.ts b/_scripts/swc-stats.ts index 33e01e3..087974b 100644 --- a/_scripts/swc-stats.ts +++ b/_scripts/swc-stats.ts @@ -69,7 +69,7 @@ async function main() { for (const contractTx of contractTxs) { const contractTxId = contractTx.node.id; - logger.debug( + logger.trace( `\n[${contractTxs.indexOf(contractTx) + 1} / ${contractTxs.length}] loading interactions of the ${contractTxId}` ); const interactions = await sendQuery( @@ -89,7 +89,7 @@ async function main() { transactionsQuery ); - logger.debug(`${contractTxId}: ${interactions.length}`); + logger.trace(`${contractTxId}: ${interactions.length}`); result[contractTxId] = interactions.length; @@ -113,7 +113,7 @@ async function main() { const sortedContracts = {}; sortable.forEach((item) => (sortedContracts[item[0]] = item[1])); - logger.debug(sortedContracts); + logger.trace(sortedContracts); fs.writeFileSync(path.join(__dirname, `swc-sorted-stats.json`), JSON.stringify(sortedContracts)); } diff --git a/package.json b/package.json index 605f5ce..9cbb3c4 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,7 @@ "bignumber.js": "^9.0.1", "bson": "^4.5.0", "json-beautify": "^1.1.1", - "tslog": "^3.2.1", - "winston": "^3.3.3" + "tslog": "^3.2.1" }, "devDependencies": { "@textury/arlocal": "^1.0.27", diff --git a/src/cache/impl/BsonFileBlockHeightCache.ts b/src/cache/impl/BsonFileBlockHeightCache.ts index 54da4df..0c4ce95 100644 --- a/src/cache/impl/BsonFileBlockHeightCache.ts +++ b/src/cache/impl/BsonFileBlockHeightCache.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; import BSON from 'bson'; import { BlockHeightCacheResult, BlockHeightKey, BlockHeightSwCache } from '@smartweave/cache'; -import { LoggerFactory } from '@smartweave/logging'; +import { Benchmark, LoggerFactory } from '@smartweave/logging'; const logger = LoggerFactory.INST.create(__filename); /** @@ -59,7 +59,7 @@ export class BsonFileBlockHeightSwCache implements BlockHeightSwCache { const cacheFilePath = path.join(cacheDirPath, file); @@ -69,7 +69,7 @@ export class BsonFileBlockHeightSwCache implements BlockHeightSwCache> { logger.info(`Read state for ${contractTxId}`); - logger.profile('Creating execution context'); + const benchmark = Benchmark.measure(); const executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions); - logger.profile('Creating execution context'); + logger.debug('Creating execution context', benchmark.elapsed()); - const now = Date.now(); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + benchmark.reset(); const result = await this.stateEvaluator.eval(executionContext, currentTx || []); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + logger.debug(`Evaluating ${contractTxId} state`, benchmark.elapsed()); return result as EvalStateResult; } @@ -63,9 +63,9 @@ export class HandlerBasedSwcClient implements SwcClient { evaluationOptions?: EvaluationOptions ): Promise> { logger.info(`View state for ${contractTxId}`); - logger.profile('Creating execution context'); + const benchmark = Benchmark.measure(); let executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions); - logger.profile('Creating execution context'); + logger.debug('Creating execution context', benchmark.elapsed()); if (!executionContext.currentBlockData) { const currentBlockData = executionContext.currentNetworkInfo @@ -85,10 +85,9 @@ export class HandlerBasedSwcClient implements SwcClient { caller }; - const now = Date.now(); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + benchmark.reset(); const evalStateResult = await this.stateEvaluator.eval(executionContext, []); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + logger.debug(`Evaluating ${contractTxId} state`, benchmark.elapsed()); const interaction: ContractInteraction = { input, @@ -122,14 +121,13 @@ export class HandlerBasedSwcClient implements SwcClient { evaluationOptions?: EvaluationOptions ): Promise> { logger.info(`Vies state for ${contractTxId}`, transaction); - logger.profile('Creating execution context'); + const benchmark = Benchmark.measure(); const executionContext = await this.createExecutionContextFromTx(contractTxId, transaction); - logger.profile('Creating execution context'); + logger.debug('Creating execution context', benchmark.elapsed()); - const now = Date.now(); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + benchmark.reset(); const evalStateResult = await this.stateEvaluator.eval(executionContext, []); - logger.profile(`\nEvaluating ${contractTxId} state ${now}`); + logger.debug(`Evaluating ${contractTxId} state`, benchmark.elapsed()); const interaction: ContractInteraction = { input, diff --git a/src/core/StateEvaluator.ts b/src/core/StateEvaluator.ts index 1d7309b..6934045 100644 --- a/src/core/StateEvaluator.ts +++ b/src/core/StateEvaluator.ts @@ -27,7 +27,7 @@ export class DefaultEvaluationOptions implements EvaluationOptions { // not even notice that there was an exception in state evaluation. // Current SDK version simply moves to next interaction in this case and ignores exception // - I believe this is not a proper behaviour. - ignoreExceptions = false; + ignoreExceptions = true; } // an interface for the contract EvaluationOptions - can be used to change the behaviour of some of the features. diff --git a/src/core/impl/DefaultStateEvaluator.ts b/src/core/impl/DefaultStateEvaluator.ts index 4a075f2..b8f46a5 100644 --- a/src/core/impl/DefaultStateEvaluator.ts +++ b/src/core/impl/DefaultStateEvaluator.ts @@ -1,4 +1,5 @@ import { + Benchmark, ContractInteraction, EvalStateResult, ExecutionContext, @@ -56,7 +57,7 @@ export class DefaultStateEvaluator implements StateEvaluator implements StateEvaluator { + this.registeredLoggers[key].setSettings({ + ...this.registeredLoggers[key].settings, + ...newOptions + }); + }); + } else { + // if logger already registered + if (this.registeredLoggers[moduleName]) { + // update its options + this.registeredLoggers[moduleName].setSettings({ + ...this.registeredLoggers[moduleName].settings, + ...newOptions + }); + } else { + // if logger not yet registered - save options that will be used for its creation + this.registeredOptions[moduleName] = { + ...this.defaultOptions, + ...newOptions + }; + } + } + } + + getOptions(moduleName?: string): ISettingsParam { + if (!moduleName) { + return this.defaultOptions; + } else { + if (this.registeredLoggers[moduleName]) { + return this.registeredLoggers[moduleName].settings; + } else if (this.registeredOptions[moduleName]) { + return this.registeredOptions[moduleName]; + } else { + return this.defaultOptions; + } + } + } + + logLevel(level: LogLevel, moduleName?: string) { + this.setOptions({ minLevel: level }, moduleName); + } + + create(moduleName = 'SWC'): RedStoneLogger { + // in case of passing '__dirname' as moduleName - leaves only the file name without extension. + const normalizedModuleName = path.basename(moduleName, path.extname(moduleName)); + if (!this.registeredLoggers[normalizedModuleName]) { + const logger = new Logger({ + ...this.getOptions(normalizedModuleName), + name: normalizedModuleName + }); + this.registeredLoggers[normalizedModuleName] = logger; + } + return this.registeredLoggers[normalizedModuleName] as RedStoneLogger; + } +} diff --git a/src/logging/node/WinstonLoggerFactory.ts b/src/logging/node/WinstonLoggerFactory.ts deleted file mode 100644 index 23c9eb5..0000000 --- a/src/logging/node/WinstonLoggerFactory.ts +++ /dev/null @@ -1,124 +0,0 @@ -import winston, { createLogger, format, LogEntry, LoggerOptions, transports } from 'winston'; -import path from 'path'; -import { Logger, LogLevel } from '@smartweave'; - -const { combine, errors, timestamp, colorize, printf } = format; -/** - * A wrapper around "Winston" logging library that allows to change logging settings at runtime - * (for each registered module independently, or globally - for all loggers). - */ -export class WinstonLoggerFactory { - public readonly baseFormat = combine( - timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }), - errors({ stack: true }), - format.splat(), - format((info) => { - info.level = info.level.toUpperCase(); - return info; - })() - ); - - public readonly prettyFormat = combine( - this.baseFormat, - colorize({ all: false }), - printf(({ timestamp, level, message, ...rest }) => { - let result = `[${timestamp}] [${rest.module || 'SWC'}] ${level}: ${message}`; - if (rest?.durationMs) { - result += ` - ${rest.durationMs}ms`; - } - return result; - }) - ); - - private readonly registeredLoggers: { [moduleName: string]: Logger } = {}; - private readonly registeredOptions: { [moduleName: string]: LoggerOptions } = {}; - - private defaultOptions: LoggerOptions = { - level: 'debug', - format: this.prettyFormat, - transports: [new transports.Console()], - exitOnError: false - }; - - public constructor() { - winston.addColors({ - error: 'bold redBG', - warn: 'bold magenta', - info: 'bold green', - http: 'bold magentaBG', - verbose: 'bold cyan', - debug: 'bold blue', - silly: 'grey' - }); - - this.setOptions = this.setOptions.bind(this); - this.getOptions = this.getOptions.bind(this); - this.create = this.create.bind(this); - this.logLevel = this.logLevel.bind(this); - } - - setOptions(newOptions: LoggerOptions, moduleName?: string): void { - // if moduleName not specified - if (!moduleName) { - // update default options - this.defaultOptions = newOptions; - // update options for all already registered loggers - Object.keys(this.registeredLoggers).forEach((key: string) => { - Object.assign(this.registeredLoggers[key], newOptions); - }); - } else { - // if logger already registered - if (this.registeredLoggers[moduleName]) { - // update its options - Object.assign(this.registeredLoggers[moduleName], newOptions); - } else { - // if logger not yet registered - save options that will be used for its creation - this.registeredOptions[moduleName] = { - ...this.defaultOptions, - ...newOptions - }; - } - } - } - - getOptions(moduleName?: string): LoggerOptions { - if (!moduleName) { - return this.defaultOptions; - } else { - if (this.registeredLoggers[moduleName]) { - // safe typecast in this case... - return this.registeredLoggers[moduleName] as LoggerOptions; - } else if (this.registeredOptions[moduleName]) { - return this.registeredOptions[moduleName]; - } else { - return this.defaultOptions; - } - } - } - - logLevel(level: LogLevel, moduleName?: string) { - this.setOptions({ level }, moduleName); - } - - create(moduleName = 'SWC'): Logger { - // in case of passing '__dirname' as moduleName - leaves only the file name without extension. - const normalizedModuleName = path.basename(moduleName, path.extname(moduleName)); - if (!this.registeredLoggers[normalizedModuleName]) { - const logger = createLogger({ - ...this.getOptions(normalizedModuleName), - // note: profiler this not currently honor defaultMeta - https://github.com/winstonjs/winston/pull/1935 - defaultMeta: { module: normalizedModuleName } - }); - // note: winston by default logs profile message with info level (to high IMO), - // with no option to set different default - so we're forcing level by - // overwriting default function... - const originalProfile = logger.profile.bind(logger); - logger.profile = (id: string | number, meta?: LogEntry) => { - return originalProfile(id, meta || { message: '', level: 'debug' }); - }; - this.registeredLoggers[normalizedModuleName] = logger; - } - - return this.registeredLoggers[normalizedModuleName]; - } -} diff --git a/src/logging/web/ConsoleLogger.ts b/src/logging/web/ConsoleLogger.ts index b541216..427796f 100644 --- a/src/logging/web/ConsoleLogger.ts +++ b/src/logging/web/ConsoleLogger.ts @@ -1,7 +1,7 @@ -import { Logger } from '@smartweave'; +import { RedStoneLogger } from '@smartweave'; -export class ConsoleLogger implements Logger { - debug(message?: any, ...optionalParams: any[]) { +export class ConsoleLogger implements RedStoneLogger { + trace(message?: any, ...optionalParams: any[]) { console.debug(message, optionalParams); } @@ -13,15 +13,11 @@ export class ConsoleLogger implements Logger { console.info(message, optionalParams); } - profile(id: any) { - console.warn('Profile not implemented for this logger!'); - } - silly(message?: any, ...optionalParams: any[]) { console.debug(message, optionalParams); } - verbose(message?: any, ...optionalParams: any[]) { + debug(message?: any, ...optionalParams: any[]) { console.debug(message, optionalParams); } @@ -32,4 +28,8 @@ export class ConsoleLogger implements Logger { log(message?: any, ...optionalParams: any[]) { console.info(message, optionalParams); } + + fatal(message?: any, ...optionalParams: any[]) { + console.error(message, optionalParams); + } } diff --git a/src/logging/web/ConsoleLoggerFactory.ts b/src/logging/web/ConsoleLoggerFactory.ts index 1749362..d597a85 100644 --- a/src/logging/web/ConsoleLoggerFactory.ts +++ b/src/logging/web/ConsoleLoggerFactory.ts @@ -1,6 +1,6 @@ -import { Logger, LogLevel } from '@smartweave'; -import { LoggerOptions } from 'winston'; +import { RedStoneLogger, LogLevel } from '@smartweave'; import { ConsoleLogger } from './ConsoleLogger'; +import { ISettingsParam } from 'tslog'; export class ConsoleLoggerFactory { constructor() { @@ -10,11 +10,11 @@ export class ConsoleLoggerFactory { this.logLevel = this.logLevel.bind(this); } - setOptions(newOptions: LoggerOptions, moduleName?: string): void { + setOptions(newOptions: ISettingsParam, moduleName?: string): void { // noop } - getOptions(moduleName?: string): LoggerOptions { + getOptions(moduleName?: string): ISettingsParam { return {}; } @@ -22,7 +22,7 @@ export class ConsoleLoggerFactory { // noop } - create(moduleName = 'SWC'): Logger { + create(moduleName = 'SWC'): RedStoneLogger { return new ConsoleLogger(); } } diff --git a/yarn.lock b/yarn.lock index 68d8fdd..014dab5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -365,15 +365,6 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" -"@dabh/diagnostics@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" - integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1526,11 +1517,6 @@ async-retry@^1.2.1: dependencies: retry "0.13.1" -async@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" - integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1906,7 +1892,7 @@ collect-v8-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1925,27 +1911,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.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" - colorette@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" @@ -1956,19 +1926,11 @@ colorette@^1.3.0: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== -colors@^1.2.1, colors@^1.3.3: +colors@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colorspace@1.1.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" - integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== - dependencies: - color "3.0.x" - text-hex "1.0.x" - combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2295,11 +2257,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - encodeurl@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2699,11 +2656,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz#dc2af48c46cf712b683e849b2bbd446b32de936f" - integrity sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag== - fastq@^1.6.0: version "1.12.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" @@ -2718,11 +2670,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fecha@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" - integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== - figlet@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" @@ -2788,11 +2735,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== - follow-redirects@^1.10.0: version "1.14.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.2.tgz#cecb825047c00f5e66b142f90fed4f515dec789b" @@ -3252,7 +3194,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3295,11 +3237,6 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -4152,11 +4089,6 @@ koa@2.13.1, koa@^2.13.1: type-is "^1.6.16" vary "^1.1.2" -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4210,17 +4142,6 @@ lodash@4.x, lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -logform@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.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.7, loglevel@^1.7.0: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" @@ -4629,13 +4550,6 @@ once@^1.3.0: dependencies: wrappy "1" -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -4928,7 +4842,7 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -readable-stream@2, readable-stream@^2.0.6, readable-stream@^2.3.7: +readable-stream@2, readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4941,15 +4855,6 @@ readable-stream@2, readable-stream@^2.0.6, readable-stream@^2.3.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -5104,7 +5009,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5207,13 +5112,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -5312,11 +5210,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -5404,13 +5297,6 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5575,11 +5461,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.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://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5661,11 +5542,6 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -triple-beam@^1.2.0, triple-beam@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" - integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== - ts-invariant@^0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" @@ -5870,7 +5746,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -6008,29 +5884,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -winston-transport@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.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://registry.yarnpkg.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://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"