From 589bd57f6966f82800434948ba7faba87099a143 Mon Sep 17 00:00:00 2001 From: fantasticit Date: Sat, 21 May 2022 14:39:56 +0800 Subject: [PATCH] server: add log --- packages/config/yaml/dev.yaml | 1 + packages/server/package.json | 7 + packages/server/src/app.module.ts | 46 ++++- packages/server/src/helpers/log.helper.ts | 7 + packages/server/src/main.ts | 4 +- pnpm-lock.yaml | 236 +++++++++++++++++++++- 6 files changed, 292 insertions(+), 9 deletions(-) create mode 100644 packages/server/src/helpers/log.helper.ts diff --git a/packages/config/yaml/dev.yaml b/packages/config/yaml/dev.yaml index 4a95c97c..aea35a38 100644 --- a/packages/config/yaml/dev.yaml +++ b/packages/config/yaml/dev.yaml @@ -4,6 +4,7 @@ server: port: 5001 collaborationPort: 5003 maxDocumentVersion: 20 # 最大版本记录数 + logRetainDays: 3 # 日志保留天数,比如只保留近三天日志 client: port: 5002 diff --git a/packages/server/package.json b/packages/server/package.json index e0311eaf..0a7a6e01 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -26,6 +26,7 @@ "@nestjs/jwt": "^8.0.0", "@nestjs/passport": "^8.1.0", "@nestjs/platform-express": "^8.0.0", + "@nestjs/schedule": "^2.0.1", "@nestjs/typeorm": "^8.0.3", "@think/config": "workspace:^1.0.0", "@think/constants": "workspace:^1.0.0", @@ -37,13 +38,18 @@ "date-fns": "^2.28.0", "express": "^4.17.2", "express-rate-limit": "^6.2.0", + "fs-extra": "^10.0.0", "helmet": "^5.0.2", "ioredis": "^5.0.1", "lodash": "^4.17.21", "mysql2": "^2.3.3", + "nestjs-pino": "^2.5.2", "nuid": "^1.1.6", "passport": "^0.5.2", "passport-jwt": "^4.0.0", + "pino": "^7.11.0", + "pino-http": "^7.0.0", + "pino-pretty": "^7.6.1", "prosemirror-model": "^1.16.1", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", @@ -57,6 +63,7 @@ "@nestjs/cli": "^8.0.0", "@nestjs/schematics": "^8.0.0", "@nestjs/testing": "^8.0.0", + "@types/cron": "^2.0.0", "@types/express": "^4.17.13", "@types/jest": "27.0.2", "@types/node": "^16.0.0", diff --git a/packages/server/src/app.module.ts b/packages/server/src/app.module.ts index 443f28bc..bd3039cd 100644 --- a/packages/server/src/app.module.ts +++ b/packages/server/src/app.module.ts @@ -8,6 +8,7 @@ import { UserEntity } from '@entities/user.entity'; import { ViewEntity } from '@entities/view.entity'; import { WikiEntity } from '@entities/wiki.entity'; import { WikiUserEntity } from '@entities/wiki-user.entity'; +import { getLogFileName } from '@helpers/log.helper'; import { CollectorModule } from '@modules/collector.module'; import { CommentModule } from '@modules/comment.module'; import { DocumentModule } from '@modules/document.module'; @@ -17,10 +18,15 @@ import { TemplateModule } from '@modules/template.module'; import { UserModule } from '@modules/user.module'; import { ViewModule } from '@modules/view.module'; import { WikiModule } from '@modules/wiki.module'; -import { Module } from '@nestjs/common'; +import { forwardRef, Inject, Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; +import { Cron, ScheduleModule } from '@nestjs/schedule'; import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; import { getConfig } from '@think/config'; +import * as fs from 'fs-extra'; +import { LoggerModule } from 'nestjs-pino'; +import * as path from 'path'; +import pino from 'pino'; const ENTITIES = [ UserEntity, @@ -47,6 +53,8 @@ const MODULES = [ ViewModule, ]; +const ONE_DAY = 24 * 60 * 60 * 1000; + @Module({ imports: [ ConfigModule.forRoot({ @@ -54,6 +62,18 @@ const MODULES = [ load: [getConfig], isGlobal: true, }), + ScheduleModule.forRoot(), + process.env.NODE_ENV === 'production' && + LoggerModule.forRoot({ + pinoHttp: { + stream: pino.destination({ + dest: `./logs/${getLogFileName(new Date())}`, + minLength: 4096, + mkdir: true, + sync: false, + }), + }, + }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], @@ -67,8 +87,28 @@ const MODULES = [ }, }), ...MODULES, - ], + ].filter(Boolean), controllers: [], providers: [], }) -export class AppModule {} +export class AppModule { + constructor( + @Inject(forwardRef(() => ConfigService)) + private readonly configService: ConfigService + ) {} + + /** + * 每天早上9点,清理日志 + */ + @Cron('0 0 9 * * *') + deleteLog() { + let retainDays = this.configService.get('server.logRetainDays'); + const startDate = new Date(new Date().valueOf() - retainDays * ONE_DAY).valueOf(); + + do { + const filepath = path.join(__dirname, '../logs', getLogFileName(startDate, retainDays)); + fs.removeSync(filepath); + retainDays -= 1; + } while (retainDays > 0); + } +} diff --git a/packages/server/src/helpers/log.helper.ts b/packages/server/src/helpers/log.helper.ts new file mode 100644 index 00000000..d622ad4f --- /dev/null +++ b/packages/server/src/helpers/log.helper.ts @@ -0,0 +1,7 @@ +import { dateFormat } from './date.helper'; + +const ONE_DAY = 24 * 60 * 60 * 1000; + +export function getLogFileName(date: Date | number, offsetDay = 0) { + return dateFormat(new Date(new Date(date).valueOf() - offsetDay * ONE_DAY), 'yyyy-MM-dd') + '.log'; +} diff --git a/packages/server/src/main.ts b/packages/server/src/main.ts index 88bb727f..16c241d1 100644 --- a/packages/server/src/main.ts +++ b/packages/server/src/main.ts @@ -9,7 +9,9 @@ import helmet from 'helmet'; import { AppModule } from './app.module'; async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { + logger: false, + }); const config = app.get(ConfigService); app.enableCors(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4397fe45..381e4242 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -273,12 +273,14 @@ importers: '@nestjs/jwt': ^8.0.0 '@nestjs/passport': ^8.1.0 '@nestjs/platform-express': ^8.0.0 + '@nestjs/schedule': ^2.0.1 '@nestjs/schematics': ^8.0.0 '@nestjs/testing': ^8.0.0 '@nestjs/typeorm': ^8.0.3 '@think/config': workspace:^1.0.0 '@think/constants': workspace:^1.0.0 '@think/domains': workspace:^1.0.0 + '@types/cron': ^2.0.0 '@types/express': ^4.17.13 '@types/jest': 27.0.2 '@types/node': ^16.0.0 @@ -297,14 +299,19 @@ importers: eslint-plugin-simple-import-sort: ^7.0.0 express: ^4.17.2 express-rate-limit: ^6.2.0 + fs-extra: ^10.0.0 helmet: ^5.0.2 ioredis: ^5.0.1 jest: ^27.2.5 lodash: ^4.17.21 mysql2: ^2.3.3 + nestjs-pino: ^2.5.2 nuid: ^1.1.6 passport: ^0.5.2 passport-jwt: ^4.0.0 + pino: ^7.11.0 + pino-http: ^7.0.0 + pino-pretty: ^7.6.1 prettier: ^2.3.2 prosemirror-model: ^1.16.1 reflect-metadata: ^0.1.13 @@ -330,6 +337,7 @@ importers: '@nestjs/jwt': 8.0.0_@nestjs+common@8.2.6 '@nestjs/passport': 8.1.0_469354efd308cbdee43194b5fd6a2c15 '@nestjs/platform-express': 8.2.6_732a54a2558f64827b8cc4f9baac4f1f + '@nestjs/schedule': 2.0.1_d86dd164971a98d71cc003a4f36ff106 '@nestjs/typeorm': 8.0.3_7d295ee70f5e60cc7bb984ed65836a4c '@think/config': link:../config '@think/constants': link:../constants @@ -341,13 +349,18 @@ importers: date-fns: 2.28.0 express: 4.17.2 express-rate-limit: 6.2.0_express@4.17.2 + fs-extra: 10.0.0 helmet: 5.0.2 ioredis: 5.0.1 lodash: 4.17.21 mysql2: 2.3.3 + nestjs-pino: 2.5.2_61f1f701bb68c430ae2e1a4fec1d7a2d nuid: 1.1.6 passport: 0.5.2 passport-jwt: 4.0.0 + pino: 7.11.0 + pino-http: 7.0.0 + pino-pretty: 7.6.1 prosemirror-model: 1.16.1 reflect-metadata: 0.1.13 rimraf: 3.0.2 @@ -360,6 +373,7 @@ importers: '@nestjs/cli': 8.2.0_eslint@8.14.0 '@nestjs/schematics': 8.0.5_typescript@4.5.5 '@nestjs/testing': 8.2.6_b893ca8083ee374883b6d648098a9aeb + '@types/cron': 2.0.0 '@types/express': 4.17.13 '@types/jest': 27.0.2 '@types/node': 16.11.21 @@ -2349,6 +2363,20 @@ packages: tslib: 2.3.1 dev: false + /@nestjs/schedule/2.0.1_d86dd164971a98d71cc003a4f36ff106: + resolution: {integrity: sha512-NqiCk3P7HDMw55kpefNIzAAQEsP+6dDIXUt4/KQANtAZ+opdLzo8rkzI0j8vDqgYeTh+PKq+V6zwSRjR61xPAQ==} + peerDependencies: + '@nestjs/common': ^6.10.11 || ^7.0.0 || ^8.0.0 + '@nestjs/core': ^7.0.0 || ^8.0.0 + reflect-metadata: ^0.1.12 + dependencies: + '@nestjs/common': 8.2.6_e2dd7264172553abc41c1a07952dd8ca + '@nestjs/core': 8.2.6_2d4ee36c4446df4873bb38fb1c4583da + cron: 2.0.0 + reflect-metadata: 0.1.13 + uuid: 8.3.2 + dev: false + /@nestjs/schematics/8.0.5_chokidar@3.5.2+typescript@4.5.4: resolution: {integrity: sha512-nK1hWQeLNbdhsiJDX/XJXLqq7nC6/xxC8CN+seFTQmly+H3gG2xaFnl6JPHURumuQaYJX8JEpC8m0+4tz+wvOg==} peerDependencies: @@ -3075,6 +3103,13 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true + /@types/cron/2.0.0: + resolution: {integrity: sha512-xZM08fqvwIXgghtPVkSPKNgC+JoMQ2OHazEvyTKnNf7aWu1aB6/4lBbQFrb03Td2cUGG7ITzMv3mFYnMu6xRaQ==} + dependencies: + '@types/luxon': 2.3.2 + '@types/node': 17.0.35 + dev: true + /@types/eslint-scope/3.7.3: resolution: {integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==} dependencies: @@ -3173,6 +3208,10 @@ packages: resolution: {integrity: sha512-R83q/yPX2nIlo9D3WtSjyUDd57t8s+GVLaL8YIv3k7zMMWpYpOXqjJgrWp80qXUJB/a1t76nTyBpxrv0JNYaEg==} dev: false + /@types/luxon/2.3.2: + resolution: {integrity: sha512-WOehptuhKIXukSUUkRgGbj2c997Uv/iUgYgII8U7XLJqq9W2oF0kQ6frEznRQbdurioz+L/cdaIm4GutTQfgmA==} + dev: true + /@types/mime/1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true @@ -3857,6 +3896,16 @@ packages: /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + /args/5.0.3: + resolution: {integrity: sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==} + engines: {node: '>= 6.0.0'} + dependencies: + camelcase: 5.0.0 + chalk: 2.4.2 + leven: 2.1.0 + mri: 1.1.4 + dev: false + /array-flatten/1.1.1: resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} dev: false @@ -3949,6 +3998,11 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + /atomic-sleep/1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -4273,6 +4327,11 @@ packages: quick-lru: 4.0.1 dev: true + /camelcase/5.0.0: + resolution: {integrity: sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==} + engines: {node: '>=6'} + dev: false + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -4505,7 +4564,6 @@ packages: /colorette/2.0.16: resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} - dev: true /colors/1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} @@ -4685,6 +4743,12 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cron/2.0.0: + resolution: {integrity: sha512-RPeRunBCFr/WEo7WLp8Jnm45F/ziGJiHVvVQEBSDTSGu6uHW49b2FOP2O14DcXlGJRLhwE7TIoDzHHK4KmlL6g==} + dependencies: + luxon: 1.28.0 + dev: false + /cross-env/7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -4785,6 +4849,10 @@ packages: resolution: {integrity: sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=} dev: false + /dateformat/4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dev: false + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: @@ -5022,6 +5090,15 @@ packages: engines: {node: '>=10'} dev: false + /duplexify/4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.0 + stream-shift: 1.0.1 + dev: false + /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -5604,9 +5681,20 @@ packages: /fast-levenshtein/2.0.6: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + /fast-redact/3.1.1: + resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} + engines: {node: '>=6'} + dev: false + /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + /fast-url-parser/1.1.3: + resolution: {integrity: sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=} + dependencies: + punycode: 1.4.1 + dev: false + /fastest-levenshtein/1.0.12: resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} dev: true @@ -7136,6 +7224,11 @@ packages: - utf-8-validate dev: true + /joycon/3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: false + /js-base64/2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: false @@ -7352,6 +7445,11 @@ packages: ms: 2.1.3 dev: false + /leven/2.1.0: + resolution: {integrity: sha1-wuep93IJTe6dNCAq6KzORoeHVYA=} + engines: {node: '>=0.10.0'} + dev: false + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -7603,6 +7701,10 @@ packages: dependencies: yallist: 4.0.0 + /luxon/1.28.0: + resolution: {integrity: sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==} + dev: false + /macos-release/2.5.0: resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} engines: {node: '>=6'} @@ -7831,6 +7933,11 @@ packages: hasBin: true dev: false + /mri/1.1.4: + resolution: {integrity: sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==} + engines: {node: '>=4'} + dev: false + /ms/2.0.0: resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} @@ -7922,6 +8029,18 @@ packages: /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /nestjs-pino/2.5.2_61f1f701bb68c430ae2e1a4fec1d7a2d: + resolution: {integrity: sha512-CJDiHRLJTucpgi5blY98Hh+2lj21fhKksyVR3R7ObOhM+/9tf+kmX02LuIL/eot+oYEPzLhHuTqVegL/kiDk6g==} + engines: {node: '>=12.17.0 || >=13.10.0'} + requiresBuild: true + peerDependencies: + '@nestjs/common': ^8.0.0 + pino-http: ^6.4.0 + dependencies: + '@nestjs/common': 8.2.6_e2dd7264172553abc41c1a07952dd8ca + pino-http: 7.0.0 + dev: false + /netmask/2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -8131,6 +8250,10 @@ packages: es-abstract: 1.19.1 dev: true + /on-exit-leak-free/0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + dev: false + /on-finished/2.3.0: resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} engines: {node: '>= 0.8'} @@ -8448,6 +8571,66 @@ packages: engines: {node: '>=0.10.0'} dev: false + /pino-abstract-transport/0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + dependencies: + duplexify: 4.1.2 + split2: 4.1.0 + dev: false + + /pino-http/7.0.0: + resolution: {integrity: sha512-6qSe+hv/gkAakQOuM9gLcCaaNvG+qioC9Cgm5WflCIhYOgDNNT3NyDQ7p4kAuyVzN1B8RZfIU3u7SsFFEBVMGg==} + dependencies: + fast-url-parser: 1.1.3 + get-caller-file: 2.0.5 + pino: 7.11.0 + pino-std-serializers: 5.2.0 + dev: false + + /pino-pretty/7.6.1: + resolution: {integrity: sha512-H7N6ZYkiyrfwBGW9CSjx0uyO9Q2Lyt73881+OTYk8v3TiTdgN92QHrWlEq/LeWw5XtDP64jeSk3mnc6T+xX9/w==} + hasBin: true + dependencies: + args: 5.0.3 + colorette: 2.0.16 + dateformat: 4.6.3 + fast-safe-stringify: 2.1.1 + joycon: 3.1.1 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pump: 3.0.0 + readable-stream: 3.6.0 + rfdc: 1.3.0 + secure-json-parse: 2.4.0 + sonic-boom: 2.8.0 + strip-json-comments: 3.1.1 + dev: false + + /pino-std-serializers/4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + dev: false + + /pino-std-serializers/5.2.0: + resolution: {integrity: sha512-tnEZoW/OpiQoL0laBC0CWJ0HPeISW2lrjUK0twYjqdGnggM8ZYk1XG8ucvjMCV0R7kMxO7Z63a27UhpkQw7Rrg==} + dev: false + + /pino/7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.1.1 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.3.1 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + dev: false + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -8608,6 +8791,10 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false + /process-warning/1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + dev: false + /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -8768,6 +8955,10 @@ packages: end-of-stream: 1.4.4 once: 1.4.0 + /punycode/1.4.1: + resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=} + dev: false + /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} @@ -8791,6 +8982,10 @@ packages: /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /quick-format-unescaped/4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -9032,7 +9227,6 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -9040,6 +9234,11 @@ packages: dependencies: picomatch: 2.3.1 + /real-require/0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + dev: false + /rechoir/0.6.2: resolution: {integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=} engines: {node: '>= 0.10'} @@ -9190,7 +9389,6 @@ packages: /rfdc/1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true /rimraf/2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} @@ -9264,6 +9462,11 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-stable-stringify/2.3.1: + resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} + engines: {node: '>=10'} + dev: false + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -9364,6 +9567,10 @@ packages: get-ready: 1.0.0 dev: false + /secure-json-parse/2.4.0: + resolution: {integrity: sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==} + dev: false + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -9544,6 +9751,12 @@ packages: smart-buffer: 4.2.0 dev: false + /sonic-boom/2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} dev: false @@ -9611,6 +9824,11 @@ packages: hasBin: true dev: true + /split2/4.1.0: + resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js/1.0.3: resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true @@ -9646,6 +9864,10 @@ packages: xtend: 4.0.2 dev: false + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: false + /stream-wormhole/1.1.0: resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==} engines: {node: '>=4.0.0'} @@ -9724,7 +9946,6 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - dev: true /stringify-object/3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} @@ -9778,7 +9999,6 @@ packages: /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true /style-loader/1.3.0: resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==} @@ -10210,6 +10430,12 @@ packages: any-promise: 1.3.0 dev: false + /thread-stream/0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + dependencies: + real-require: 0.1.0 + dev: false + /throat/6.0.1: resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} dev: true