From 0eb66a50df38e7497cb0f2bebfb4073d84b9f3a3 Mon Sep 17 00:00:00 2001 From: nrusso Date: Sat, 11 Feb 2023 13:54:10 -0300 Subject: [PATCH 1/3] refactor: add pino again to improve log performance --- package.json | 4 +- pnpm-lock.yaml | 189 +++++++++++++++++- .../Commands/ActiveUserCommand.ts | 2 +- .../Presentation/Commands/AddRoleCommand.ts | 2 +- .../Presentation/Commands/AddUserCommand.ts | 2 +- .../Commands/AddUserRoleCommand.ts | 2 +- .../Commands/AssingRoleToUserCommand.ts | 2 +- .../Commands/SyncRolesPermissionCommand.ts | 2 +- .../Commands/CreateBucketCommand.ts | 2 +- src/File/Presentation/Commands/CreateVapID.ts | 8 +- src/Shared/Application/Http/AppExpress.ts | 2 +- src/Shared/Application/Http/AppKoa.ts | 7 +- .../Application/Http/ErrorExpressHandler.ts | 4 +- .../Application/Http/ErrorKoaHandler.ts | 4 +- src/Shared/Application/Logger/Logger.ts | 68 ++++++- src/Shared/Factories/SeedFactory.ts | 10 +- src/Shared/Infrastructure/Crons/Cron.ts | 2 +- src/Shared/Infrastructure/Crons/TestCron.ts | 2 +- .../Database/CreateMikroORMConnection.ts | 6 +- .../Infrastructure/Events/UserCreatedEvent.ts | 2 +- .../Middlewares/LoggerExpressMiddleware.ts | 2 +- .../Middlewares/LoggerKoaMiddleware.ts | 2 +- src/command.ts | 2 +- src/index.ts | 2 +- tsconfig.json | 2 - 25 files changed, 286 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 110131fb..0ce2e546 100644 --- a/package.json +++ b/package.json @@ -76,13 +76,13 @@ "node-cron": "^3.0.1", "nodemailer": "6.7.7", "pg-promise": "^10.11.1", + "pino": "^8.10.0", "promise-events": "^0.2.4", "qs": "^6.11.0", "reflect-metadata": "^0.1.13", "shelljs": "^0.8.5", "tedis": "^0.1.12", "ts-mixer": "^6.0.2", - "tslog": "^4.7.0", "tsyringe": "^4.7.0", "typeorm": "^0.3.11", "web-push": "^3.5.0", @@ -107,6 +107,7 @@ "@types/koa": "^2.13.4", "@types/koa-bodyparser": "^4.3.7", "@types/koa-hbs": "^1.0.7", + "@types/koa-qs": "^2.0.0", "@types/koa-ratelimit": "^4.2.4", "@types/koa-router": "^7.4.4", "@types/koa__cors": "^3.3.0", @@ -139,6 +140,7 @@ "madge": "^6.0.0", "nodemon": "^2.0.20", "pg-mem": "^2.6.4", + "pino-pretty": "^9.2.0", "prettier": "^2.8.3", "rimraf": "^3.0.2", "supertest": "^6.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31a5fbe1..ff5a1c36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,6 +25,7 @@ specifiers: '@types/koa': ^2.13.4 '@types/koa-bodyparser': ^4.3.7 '@types/koa-hbs': ^1.0.7 + '@types/koa-qs': ^2.0.0 '@types/koa-ratelimit': ^4.2.4 '@types/koa-router': ^7.4.4 '@types/koa__cors': ^3.3.0 @@ -95,6 +96,8 @@ specifiers: nodemon: ^2.0.20 pg-mem: ^2.6.4 pg-promise: ^10.11.1 + pino: ^8.10.0 + pino-pretty: ^9.2.0 prettier: ^2.8.3 promise-events: ^0.2.4 qs: ^6.11.0 @@ -106,7 +109,6 @@ specifiers: ts-mixer: ^6.0.2 ts-node: ^10.9.1 tslib: ^2.4.1 - tslog: ^4.7.0 tsyringe: ^4.7.0 typeorm: ^0.3.11 typescript: ^4.9.4 @@ -158,13 +160,13 @@ dependencies: node-cron: 3.0.2 nodemailer: 6.7.7 pg-promise: 10.15.4 + pino: 8.10.0 promise-events: 0.2.4 qs: 6.11.0 reflect-metadata: 0.1.13 shelljs: 0.8.5 tedis: 0.1.12 ts-mixer: 6.0.2 - tslog: 4.7.0 tsyringe: 4.7.0 typeorm: 0.3.11_3uhpazrrxb2uqibsi63drezauq web-push: 3.5.0 @@ -189,6 +191,7 @@ devDependencies: '@types/koa': 2.13.5 '@types/koa-bodyparser': 4.3.10 '@types/koa-hbs': 1.0.7 + '@types/koa-qs': 2.0.0 '@types/koa-ratelimit': 4.2.4 '@types/koa-router': 7.4.4 '@types/koa__cors': 3.3.0 @@ -221,6 +224,7 @@ devDependencies: madge: 6.0.0 nodemon: 2.0.20 pg-mem: 2.6.4_bp26lo6jhtof3heoovidy7fwyu + pino-pretty: 9.2.0 prettier: 2.8.3 rimraf: 3.0.2 supertest: 6.3.2 @@ -2650,6 +2654,12 @@ packages: handlebars: 4.7.7 dev: true + /@types/koa-qs/2.0.0: + resolution: {integrity: sha512-cBfbUvW70JsU2FCgUCFOoretdvayGzRJ2vEyNQbnZ7vb2pZ/QA+gcNzE6nVxxCcrcnRtGB7tXIRHqHPXS51utA==} + dependencies: + '@types/koa': 2.13.5 + dev: true + /@types/koa-ratelimit/4.2.4: resolution: {integrity: sha512-rL+Q20Za2bqZ2koplBJbx7DpJXDi5uCLEYjJ01l+jVLkoQ14//Cg4x8Aqdmssbr95tJexHgwj91/29LSCRHUlw==} dependencies: @@ -3034,6 +3044,12 @@ packages: /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -3359,6 +3375,10 @@ packages: hasBin: true dev: true + /atomic-sleep/1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -3554,6 +3574,12 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces/2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} @@ -4297,6 +4323,10 @@ packages: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} + /dateformat/4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dev: true + /dayjs/1.11.7: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: false @@ -5145,6 +5175,14 @@ packages: engines: {node: '>= 0.6'} dev: false + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + /evp_bytestokey/1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: @@ -5307,6 +5345,10 @@ packages: resolution: {integrity: sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==} dev: false + /fast-copy/3.0.0: + resolution: {integrity: sha512-4HzS+9pQ5Yxtv13Lhs1Z1unMXamBdn5nA4bEi1abYpDNSpSp7ODYQ1KPMF6nTatfEzgH6/zPvXKU1zvHiUjWlA==} + dev: true + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -5336,6 +5378,11 @@ packages: boolean: 3.2.0 dev: false + /fast-redact/3.1.2: + resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} + engines: {node: '>=6'} + dev: false + /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true @@ -5770,6 +5817,17 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + /global-dirs/0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -5975,6 +6033,13 @@ packages: engines: {node: '>=12.0.0'} dev: false + /help-me/4.2.0: + resolution: {integrity: sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==} + dependencies: + glob: 8.1.0 + readable-stream: 3.6.0 + dev: true + /hexoid/1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} @@ -7076,6 +7141,11 @@ packages: - ts-node dev: true + /joycon/3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + /js-sdsl/4.2.0: resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} dev: true @@ -7868,6 +7938,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -8417,6 +8494,9 @@ packages: es-abstract: 1.20.4 dev: true + /on-exit-leak-free/2.1.0: + resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} + /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -8861,6 +8941,53 @@ packages: hasBin: true dev: true + /pino-abstract-transport/1.0.0: + resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + dependencies: + readable-stream: 4.3.0 + split2: 4.1.0 + + /pino-pretty/9.2.0: + resolution: {integrity: sha512-7CeszmFqrUD08+JvtYcFXowNE7duFlE1XScmR41qTMbwQOhn7gijYYrRb5udH+z8xq4+A8vN8rQNYVPCTfzmGw==} + hasBin: true + dependencies: + colorette: 2.0.19 + dateformat: 4.6.3 + fast-copy: 3.0.0 + fast-safe-stringify: 2.1.1 + help-me: 4.2.0 + joycon: 3.1.1 + minimist: 1.2.7 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.0.0 + pump: 3.0.0 + readable-stream: 4.3.0 + secure-json-parse: 2.7.0 + sonic-boom: 3.2.1 + strip-json-comments: 3.1.1 + dev: true + + /pino-std-serializers/6.1.0: + resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==} + dev: false + + /pino/8.10.0: + resolution: {integrity: sha512-ODfIe+giJtQGsvNAEj5/sHHpL3TFBg161JBH4W62Hc0l0PJjsDFD1R7meLI4PZ2aoHDJznxFNShkJcaG/qJToQ==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.1.2 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.0.0 + pino-std-serializers: 6.1.0 + process-warning: 2.1.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.2 + sonic-boom: 3.2.1 + thread-stream: 2.3.0 + dev: false + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -9010,6 +9137,14 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process-warning/2.1.0: + resolution: {integrity: sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg==} + dev: false + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + /promise-events/0.2.4: resolution: {integrity: sha512-GCM6DmJcSCC8XboZIzYJAlADwkIS1P54XFUJQYhB7dpE7rtXPzPrT13dsV4Qm0FMCKptwMTyF8ZCir803RfKzA==} engines: {node: '>=8.0.0'} @@ -9060,6 +9195,13 @@ packages: safe-buffer: 5.2.1 dev: false + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} @@ -9092,6 +9234,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'} @@ -9193,6 +9339,15 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readable-stream/4.3.0: + resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -9200,6 +9355,11 @@ packages: picomatch: 2.3.1 dev: true + /real-require/0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + /rechoir/0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -9422,6 +9582,11 @@ packages: ret: 0.1.15 dev: true + /safe-stable-stringify/2.4.2: + resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} + engines: {node: '>=10'} + dev: false + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -9451,6 +9616,10 @@ packages: xmlchars: 2.2.0 dev: true + /secure-json-parse/2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: true + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -9663,6 +9832,11 @@ packages: ip: 2.0.0 smart-buffer: 4.2.0 + /sonic-boom/3.2.1: + resolution: {integrity: sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A==} + dependencies: + atomic-sleep: 1.0.0 + /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -10088,6 +10262,12 @@ packages: dependencies: any-promise: 1.3.0 + /thread-stream/2.3.0: + resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==} + dependencies: + real-require: 0.2.0 + dev: false + /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -10285,11 +10465,6 @@ packages: /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - /tslog/4.7.0: - resolution: {integrity: sha512-u5N15NPAd6wTAFBKlwdNiYeqZTYXRjjYDNLPPGh5BTBvu+X0SCaqzwG9V9OKp4MlC6UZX5weyrAd1L4J4lG1fw==} - engines: {node: '>=16'} - dev: false - /tsscmp/1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} diff --git a/src/Auth/Presentation/Commands/ActiveUserCommand.ts b/src/Auth/Presentation/Commands/ActiveUserCommand.ts index b4293287..eef1d371 100644 --- a/src/Auth/Presentation/Commands/ActiveUserCommand.ts +++ b/src/Auth/Presentation/Commands/ActiveUserCommand.ts @@ -20,7 +20,7 @@ ActiveUserCommand await activeUserUseCase.handle(request); - Logger.info('User activated successfully.'); + await Logger.info('User activated successfully.'); }); export default ActiveUserCommand; diff --git a/src/Auth/Presentation/Commands/AddRoleCommand.ts b/src/Auth/Presentation/Commands/AddRoleCommand.ts index d643465d..ab71039c 100644 --- a/src/Auth/Presentation/Commands/AddRoleCommand.ts +++ b/src/Auth/Presentation/Commands/AddRoleCommand.ts @@ -24,7 +24,7 @@ AddRoleCommand if (role) { - Logger.info('Role created successfully.'); + await Logger.info('Role created successfully.'); } }); diff --git a/src/Auth/Presentation/Commands/AddUserCommand.ts b/src/Auth/Presentation/Commands/AddUserCommand.ts index d16622bf..86816d7a 100644 --- a/src/Auth/Presentation/Commands/AddUserCommand.ts +++ b/src/Auth/Presentation/Commands/AddUserCommand.ts @@ -30,7 +30,7 @@ AddUserCommand if (user) { - Logger.info('User created successfully.'); + await Logger.info('User created successfully.'); } }); diff --git a/src/Auth/Presentation/Commands/AddUserRoleCommand.ts b/src/Auth/Presentation/Commands/AddUserRoleCommand.ts index 5add2463..3fe0de48 100644 --- a/src/Auth/Presentation/Commands/AddUserRoleCommand.ts +++ b/src/Auth/Presentation/Commands/AddUserRoleCommand.ts @@ -38,7 +38,7 @@ AddUserRoleCommand if (user && role) { - Logger.info('User and Role created successfully.'); + await Logger.info('User and Role created successfully.'); } }); diff --git a/src/Auth/Presentation/Commands/AssingRoleToUserCommand.ts b/src/Auth/Presentation/Commands/AssingRoleToUserCommand.ts index 91808506..080e906c 100644 --- a/src/Auth/Presentation/Commands/AssingRoleToUserCommand.ts +++ b/src/Auth/Presentation/Commands/AssingRoleToUserCommand.ts @@ -20,7 +20,7 @@ AssignRoleToUserCommand if (user) { - Logger.info('Assign user to role successfully.'); + void Logger.info('Assign user to role successfully.'); } }); diff --git a/src/Auth/Presentation/Commands/SyncRolesPermissionCommand.ts b/src/Auth/Presentation/Commands/SyncRolesPermissionCommand.ts index 43b6e78e..076da23d 100644 --- a/src/Auth/Presentation/Commands/SyncRolesPermissionCommand.ts +++ b/src/Auth/Presentation/Commands/SyncRolesPermissionCommand.ts @@ -12,7 +12,7 @@ SyncRolesPermissionCommand const controller = new AuthController(); await controller.syncRolesPermissions(); - Logger.info('Sync successfully.'); + await Logger.info('Sync successfully.'); }); export default SyncRolesPermissionCommand; diff --git a/src/File/Presentation/Commands/CreateBucketCommand.ts b/src/File/Presentation/Commands/CreateBucketCommand.ts index 5784365e..f8a133b7 100644 --- a/src/File/Presentation/Commands/CreateBucketCommand.ts +++ b/src/File/Presentation/Commands/CreateBucketCommand.ts @@ -18,7 +18,7 @@ CreateBucketCommand await useCase.handle(request); - Logger.info('Bucket was created successfully'); + await Logger.info('Bucket was created successfully'); }); export default CreateBucketCommand; diff --git a/src/File/Presentation/Commands/CreateVapID.ts b/src/File/Presentation/Commands/CreateVapID.ts index 07689061..bb1cfe4a 100644 --- a/src/File/Presentation/Commands/CreateVapID.ts +++ b/src/File/Presentation/Commands/CreateVapID.ts @@ -13,10 +13,10 @@ CreateVapID if (vapidKeys) { - Logger.info('publicKey:'); - Logger.info(vapidKeys.publicKey); - Logger.info('privateKey:'); - Logger.info(vapidKeys.privateKey); + void Logger.info('publicKey:'); + void Logger.info(vapidKeys.publicKey); + void Logger.info('privateKey:'); + void Logger.info(vapidKeys.privateKey); } }); diff --git a/src/Shared/Application/Http/AppExpress.ts b/src/Shared/Application/Http/AppExpress.ts index 373ca2b1..3dbad643 100644 --- a/src/Shared/Application/Http/AppExpress.ts +++ b/src/Shared/Application/Http/AppExpress.ts @@ -93,7 +93,7 @@ class AppExpress implements IApp { this.serverExpress = this.app.listen(this.port, () => { - Logger.debug(`App listening on the port ${this.port}`); + void Logger.info(`App listening on the port ${this.port}`); }); } diff --git a/src/Shared/Application/Http/AppKoa.ts b/src/Shared/Application/Http/AppKoa.ts index 9b28af76..1f5be7d4 100644 --- a/src/Shared/Application/Http/AppKoa.ts +++ b/src/Shared/Application/Http/AppKoa.ts @@ -1,4 +1,5 @@ import cors from '@koa/cors'; +import koaQs from 'koa-qs'; import helmet from 'koa-helmet'; import { Server } from 'http'; @@ -37,8 +38,7 @@ class AppKoa implements IApp public initConfig(config: IAppConfig) { this.port = config.serverPort || 8090; - // eslint-disable-next-line @typescript-eslint/no-var-requires - this.app = require('koa-qs')(new Koa()); + this.app = koaQs(new Koa()); this.config = config; this.app.use(cors({ @@ -113,6 +113,7 @@ class AppKoa implements IApp await next(); }); + this.app.use(RedirectRouteNotFoundKoaMiddleware); } @@ -120,7 +121,7 @@ class AppKoa implements IApp { this.server = this.app.listen(this.port, () => { - Logger.info(`Koa is listening to http://localhost:${this.port}`); + void Logger.info(`Koa is listening to http://localhost:${this.port}`); }); return this.server; diff --git a/src/Shared/Application/Http/ErrorExpressHandler.ts b/src/Shared/Application/Http/ErrorExpressHandler.ts index 08ae208c..2c7052fb 100644 --- a/src/Shared/Application/Http/ErrorExpressHandler.ts +++ b/src/Shared/Application/Http/ErrorExpressHandler.ts @@ -10,9 +10,9 @@ export class ErrorExpressHandler const responder = new ExpressResponder(); const exception: ErrorHttpException = ExceptionFactory.getException(err); - if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') + if (process.env.NODE_ENV !== 'test') { - Logger.trace(err.stack); + void Logger.error(err.stack); } responder.error(exception, req, res, exception.statusCode, exception.metadata); diff --git a/src/Shared/Application/Http/ErrorKoaHandler.ts b/src/Shared/Application/Http/ErrorKoaHandler.ts index 3dfeff74..34901f15 100644 --- a/src/Shared/Application/Http/ErrorKoaHandler.ts +++ b/src/Shared/Application/Http/ErrorKoaHandler.ts @@ -17,9 +17,9 @@ export class ErrorKoaHandler const responder = new KoaResponder(); const exception: ErrorHttpException = ExceptionFactory.getException(err); - if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') + if (process.env.NODE_ENV !== 'test') { - Logger.trace(err.stack); + await Logger.error(err.stack); } responder.error(exception, ctx, exception.statusCode, exception.metadata); diff --git a/src/Shared/Application/Logger/Logger.ts b/src/Shared/Application/Logger/Logger.ts index f4860427..4341c1e0 100644 --- a/src/Shared/Application/Logger/Logger.ts +++ b/src/Shared/Application/Logger/Logger.ts @@ -1,5 +1,69 @@ -import { Logger as LoggerTs } from 'tslog'; +import MainConfig from '../../../Config/MainConfig'; +import PinoLogger from 'pino'; -const Logger = new LoggerTs(); +class DgLogger +{ + private logger; + + constructor() + { + const env = MainConfig.getInstance().getConfig().env; + + const prettyTransport = { + name: 'main', + level: 'debug', + transport: { + target: 'pino-pretty', + options: { + levelFirst: true, + translateTime: 'HH:MM:ss.l', + ignore: 'pid,hostname', + colorize: true + } + } + }; + + const stdoutTransport = { + name: 'main', + level: 'info' + }; + + const settings = env === 'development' ? prettyTransport : stdoutTransport; + + this.logger = PinoLogger(settings); + } + + public async trace(...args: unknown[]) + { + this.logger.trace(...args); + } + + public async debug(...args: unknown[]) + { + this.logger.debug(...args); + } + + public async info(...args: unknown[]) + { + this.logger.info(...args); + } + + public async warn(...args: unknown[]) + { + this.logger.warn(...args); + } + + public async error(...args: unknown[]) + { + this.logger.error(...args); + } + + public async fatal(...args: unknown[]) + { + this.logger.fatal(...args); + } +} + +const Logger = new DgLogger(); export default Logger; diff --git a/src/Shared/Factories/SeedFactory.ts b/src/Shared/Factories/SeedFactory.ts index 6a0c64a0..538d9304 100644 --- a/src/Shared/Factories/SeedFactory.ts +++ b/src/Shared/Factories/SeedFactory.ts @@ -16,8 +16,8 @@ class SeedFactory public list(): void { - Logger.info('⬐ Seed List'); - Object.keys(this.seeds).forEach(name => Logger.info(`↳ ${name}`)); + void Logger.info('⬐ Seed List'); + Object.keys(this.seeds).forEach(name => void Logger.info(`↳ ${name}`)); } public async init(): Promise @@ -31,17 +31,17 @@ class SeedFactory await (new this.seeds[name]()).init(); - Logger.info(`→ ${name} run successfully ✔`); + void Logger.info(`→ ${name} run successfully ✔`); } private async all(): Promise { - Logger.info('⬐ All Seed Run'); + void Logger.info('⬐ All Seed Run'); for await (const name of Object.keys(this.seeds)) { await (new this.seeds[name]()).init(); - Logger.info(`↳ ${name} run successfully ✔`); + void Logger.info(`↳ ${name} run successfully ✔`); } } diff --git a/src/Shared/Infrastructure/Crons/Cron.ts b/src/Shared/Infrastructure/Crons/Cron.ts index 73251748..bb842ed8 100644 --- a/src/Shared/Infrastructure/Crons/Cron.ts +++ b/src/Shared/Infrastructure/Crons/Cron.ts @@ -12,7 +12,7 @@ abstract class Cron // TODO: Log start time and end time of each executed cron void (async() => { - Logger.info(`Running ${this.cronName()}`); + await Logger.info(`Running ${this.cronName()}`); await this.task(); })(); }, { diff --git a/src/Shared/Infrastructure/Crons/TestCron.ts b/src/Shared/Infrastructure/Crons/TestCron.ts index 30f3d5d1..0c7cd7ef 100644 --- a/src/Shared/Infrastructure/Crons/TestCron.ts +++ b/src/Shared/Infrastructure/Crons/TestCron.ts @@ -15,7 +15,7 @@ class TestCron extends Cron async task(): Promise { - Logger.debug('hello world 2021'); + await Logger.info('hello world 2021'); } } diff --git a/src/Shared/Infrastructure/Database/CreateMikroORMConnection.ts b/src/Shared/Infrastructure/Database/CreateMikroORMConnection.ts index 28fe1465..7ae33693 100644 --- a/src/Shared/Infrastructure/Database/CreateMikroORMConnection.ts +++ b/src/Shared/Infrastructure/Database/CreateMikroORMConnection.ts @@ -87,13 +87,13 @@ class CreateMikroORMConnection implements ICreateConnection /* This isn't necessary, but informative */ const dropDump = await generator.getDropSchemaSQL(); - Logger.debug(dropDump); + await Logger.info(dropDump); const createDump = await generator.getCreateSchemaSQL(); - Logger.debug(createDump); + await Logger.info(createDump); const updateDump = await generator.getUpdateSchemaSQL(); - Logger.debug(updateDump); + await Logger.info(updateDump); await generator.refreshDatabase(); // without this, the schema 'll not update } diff --git a/src/Shared/Infrastructure/Events/UserCreatedEvent.ts b/src/Shared/Infrastructure/Events/UserCreatedEvent.ts index 1c9679c7..9c813891 100644 --- a/src/Shared/Infrastructure/Events/UserCreatedEvent.ts +++ b/src/Shared/Infrastructure/Events/UserCreatedEvent.ts @@ -8,7 +8,7 @@ class UserCreatedEvent { const { email } = props; - Logger.info(`User ${email} Created!`); + await Logger.info(`User ${email} Created!`); }; } diff --git a/src/Shared/Presentation/Middlewares/LoggerExpressMiddleware.ts b/src/Shared/Presentation/Middlewares/LoggerExpressMiddleware.ts index a93d4e8f..d2710501 100644 --- a/src/Shared/Presentation/Middlewares/LoggerExpressMiddleware.ts +++ b/src/Shared/Presentation/Middlewares/LoggerExpressMiddleware.ts @@ -2,7 +2,7 @@ import Logger from '../../../Shared/Application/Logger/Logger'; const LoggerExpressMiddleware = (req: any, res: any, next: any) => { - Logger.debug(`${req.method}: ${req.path} - ${req.ip}`); + void Logger.info(`${req.method}: ${req.path} - ${req.ip}`); next(); }; diff --git a/src/Shared/Presentation/Middlewares/LoggerKoaMiddleware.ts b/src/Shared/Presentation/Middlewares/LoggerKoaMiddleware.ts index c9457234..9c6262b0 100644 --- a/src/Shared/Presentation/Middlewares/LoggerKoaMiddleware.ts +++ b/src/Shared/Presentation/Middlewares/LoggerKoaMiddleware.ts @@ -3,7 +3,7 @@ import Logger from '../../../Shared/Application/Logger/Logger'; const LoggerKoaMiddleware = async(ctx: ParameterizedContext, next: Next) => { - Logger.debug(`${ctx.method}: ${ctx.path} - ${ctx.ip}`); + void Logger.info(`${ctx.method}: ${ctx.path} - ${ctx.ip}`); await next(); }; diff --git a/src/command.ts b/src/command.ts index 102bc3f8..aea23fb6 100644 --- a/src/command.ts +++ b/src/command.ts @@ -46,7 +46,7 @@ void (async() => catch (error) { // TODO: Add exception mapping to handle errors like server express - Logger.error(error); + await Logger.error(error); exit(); } })(); diff --git a/src/index.ts b/src/index.ts index 0fee989e..5396c0e0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -46,7 +46,7 @@ void (async() => } catch (error) { - Logger.info('Error while connecting to the database', error); + await Logger.info('Error while connecting to the database', error); throw error; } diff --git a/tsconfig.json b/tsconfig.json index 377e357e..d99393b6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,4 @@ { - "compileOnSave": false, "reflection": true, "compilerOptions": { "composite": true, @@ -19,7 +18,6 @@ "ESNext", "DOM" ], - "allowJs": true, "outDir": "./dist", "baseUrl": "./src", "module": "CommonJS", From cd6b6617ab542c98c5b9271b3e81187eb59aa04a Mon Sep 17 00:00:00 2001 From: nrusso Date: Sun, 12 Feb 2023 12:48:50 -0300 Subject: [PATCH 2/3] fix: add file to help transpile with tsc and add config on jest for that transpile --- jest.config.js | 2 ++ package.json | 2 +- rimraf_cpy.mjs | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 rimraf_cpy.mjs diff --git a/jest.config.js b/jest.config.js index 2f6938fa..658fad79 100644 --- a/jest.config.js +++ b/jest.config.js @@ -23,6 +23,8 @@ module.exports = { "dist/src/**/*.{js,jsx,ts,tsx}", "!/node_modules/", "!dist/src/initTestServer.{js,ts}", + "!dist/src/**/*.d.ts", + "!dist/src/**/*.d.ts.map", "!dist/src/register.{js,ts}", "!dist/src/seed.{js,ts}", "!dist/src/exceptions.{js,ts}", diff --git a/package.json b/package.json index 0ce2e546..1ad22559 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "scripts": { "build": "etsc", - "build-tsc": "tsc -p tsconfig.json --incremental", + "build-tsc": "node rimraf_cpy.mjs && tsc -p tsconfig.json --incremental", "ci": "npm run cpy-ci && npm run ts-check && npm run lint", "circular": "madge --circular dist/src/index.js", "circular-graph": "madge --circular --image graph.svg dist/src/index.js", diff --git a/rimraf_cpy.mjs b/rimraf_cpy.mjs new file mode 100644 index 00000000..1731f3c1 --- /dev/null +++ b/rimraf_cpy.mjs @@ -0,0 +1,13 @@ +import rimraf from "rimraf"; +console.log("prebuild"); +rimraf.sync("./dist"); + +console.log("postbuild"); +import cpy from "cpy"; +cpy([ + "src/**/*.graphql", // Copy all .graphql files + "!src/**/*.{ts,js}", // Ignore already built files + "src/**/*.json", + "src/**/*.hbs"], + "dist/src" +); From 004b6d3c5b0768fb3f2dc63d03a984f15e59fb74 Mon Sep 17 00:00:00 2001 From: nrusso Date: Thu, 16 Feb 2023 21:05:14 -0300 Subject: [PATCH 3/3] refactor: add deepkit/event --- jest.config.js | 2 +- package.json | 7 +- pnpm-lock.yaml | 309 +++++++++--------- .../Auth/ConfirmationTokenSchemaValidation.ts | 7 - src/File/Domain/Services/FileService.ts | 4 +- .../Presentation/DTO/FileBase64OptimizeDTO.ts | 2 +- .../Infrastructure/Events/EventHandler.ts | 37 ++- .../Events/ForgotPasswordEvent.ts | 13 +- .../Infrastructure/Events/IDataEvent.ts | 8 + .../Infrastructure/Events/RegisterEvent.ts | 13 +- .../Infrastructure/Events/SendMessageEvent.ts | 13 +- .../Infrastructure/Events/UserCreatedEvent.ts | 13 +- .../Events/VerifiedAccountEvent.ts | 13 +- 13 files changed, 248 insertions(+), 193 deletions(-) delete mode 100644 src/Auth/Presentation/Validations/Auth/ConfirmationTokenSchemaValidation.ts create mode 100644 src/Shared/Infrastructure/Events/IDataEvent.ts diff --git a/jest.config.js b/jest.config.js index 658fad79..7988797e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -90,7 +90,7 @@ module.exports = { global: { statements: '75', branches: '50', - functions: '55', + functions: '50', lines: '75', } }, diff --git a/package.json b/package.json index 1ad22559..1b00f313 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "license": "MIT", "dependencies": { "@deepkit/core": "1.0.1-alpha.77", + "@deepkit/event": "1.0.1-alpha.85", "@deepkit/type": "1.0.1-alpha.85", "@koa/cors": "^4.0.0", "@koa/multer": "^3.0.0", @@ -77,7 +78,6 @@ "nodemailer": "6.7.7", "pg-promise": "^10.11.1", "pino": "^8.10.0", - "promise-events": "^0.2.4", "qs": "^6.11.0", "reflect-metadata": "^0.1.13", "shelljs": "^0.8.5", @@ -89,8 +89,9 @@ "zod": "^3.20.2" }, "devDependencies": { - "@commitlint/cli": "^17.3.0", - "@commitlint/config-conventional": "^17.3.0", + "@commitlint/cli": "^17.4.4", + "@commitlint/config-conventional": "^17.4.4", + "@deepkit/type-compiler": "1.0.1-alpha.83", "@shelf/jest-mongodb": "^4.1.4", "@types/bcrypt": "^5.0.0", "@types/compression": "^1.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff5a1c36..04ec18ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,10 +1,12 @@ lockfileVersion: 5.4 specifiers: - '@commitlint/cli': ^17.3.0 - '@commitlint/config-conventional': ^17.3.0 + '@commitlint/cli': ^17.4.4 + '@commitlint/config-conventional': ^17.4.4 '@deepkit/core': 1.0.1-alpha.77 + '@deepkit/event': 1.0.1-alpha.85 '@deepkit/type': 1.0.1-alpha.85 + '@deepkit/type-compiler': 1.0.1-alpha.83 '@koa/cors': ^4.0.0 '@koa/multer': ^3.0.0 '@mikro-orm/core': ^5.6.2 @@ -99,7 +101,6 @@ specifiers: pino: ^8.10.0 pino-pretty: ^9.2.0 prettier: ^2.8.3 - promise-events: ^0.2.4 qs: ^6.11.0 reflect-metadata: ^0.1.13 rimraf: ^3.0.2 @@ -117,6 +118,7 @@ specifiers: dependencies: '@deepkit/core': 1.0.1-alpha.77 + '@deepkit/event': 1.0.1-alpha.85_snq4zqmy6xqcsypnjz7vpay3xu '@deepkit/type': 1.0.1-alpha.85_mcay55ktffdozwll5wgb6oqvwq '@koa/cors': 4.0.0 '@koa/multer': 3.0.2_multer@1.4.5-lts.1 @@ -161,7 +163,6 @@ dependencies: nodemailer: 6.7.7 pg-promise: 10.15.4 pino: 8.10.0 - promise-events: 0.2.4 qs: 6.11.0 reflect-metadata: 0.1.13 shelljs: 0.8.5 @@ -173,8 +174,9 @@ dependencies: zod: 3.20.2 devDependencies: - '@commitlint/cli': 17.3.0 - '@commitlint/config-conventional': 17.3.0 + '@commitlint/cli': 17.4.4 + '@commitlint/config-conventional': 17.4.4 + '@deepkit/type-compiler': 1.0.1-alpha.83_typescript@4.9.4 '@shelf/jest-mongodb': 4.1.4_xsglg7kzrgyixnruptip6gj6ja '@types/bcrypt': 5.0.0 '@types/compression': 1.7.2 @@ -1374,16 +1376,16 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@commitlint/cli/17.3.0: - resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} + /@commitlint/cli/17.4.4: + resolution: {integrity: sha512-HwKlD7CPVMVGTAeFZylVNy14Vm5POVY0WxPkZr7EXLC/os0LH/obs6z4HRvJtH/nHCMYBvUBQhGwnufKfTjd5g==} engines: {node: '>=v14'} hasBin: true dependencies: - '@commitlint/format': 17.0.0 - '@commitlint/lint': 17.3.0 - '@commitlint/load': 17.3.0 - '@commitlint/read': 17.2.0 - '@commitlint/types': 17.0.0 + '@commitlint/format': 17.4.4 + '@commitlint/lint': 17.4.4 + '@commitlint/load': 17.4.4 + '@commitlint/read': 17.4.4 + '@commitlint/types': 17.4.4 execa: 5.1.1 lodash.isfunction: 3.0.9 resolve-from: 5.0.0 @@ -1394,26 +1396,26 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional/17.3.0: - resolution: {integrity: sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==} + /@commitlint/config-conventional/17.4.4: + resolution: {integrity: sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 dev: true - /@commitlint/config-validator/17.1.0: - resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==} + /@commitlint/config-validator/17.4.4: + resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 ajv: 8.12.0 dev: true - /@commitlint/ensure/17.3.0: - resolution: {integrity: sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==} + /@commitlint/ensure/17.4.4: + resolution: {integrity: sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 @@ -1421,122 +1423,122 @@ packages: lodash.upperfirst: 4.3.1 dev: true - /@commitlint/execute-rule/17.0.0: - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} + /@commitlint/execute-rule/17.4.0: + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true - /@commitlint/format/17.0.0: - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} + /@commitlint/format/17.4.4: + resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 chalk: 4.1.2 dev: true - /@commitlint/is-ignored/17.2.0: - resolution: {integrity: sha512-rgUPUQraHxoMLxiE8GK430HA7/R2vXyLcOT4fQooNrZq9ERutNrP6dw3gdKLkq22Nede3+gEHQYUzL4Wu75ndg==} + /@commitlint/is-ignored/17.4.4: + resolution: {integrity: sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 - semver: 7.3.7 + '@commitlint/types': 17.4.4 + semver: 7.3.8 dev: true - /@commitlint/lint/17.3.0: - resolution: {integrity: sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==} + /@commitlint/lint/17.4.4: + resolution: {integrity: sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw==} engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 17.2.0 - '@commitlint/parse': 17.2.0 - '@commitlint/rules': 17.3.0 - '@commitlint/types': 17.0.0 + '@commitlint/is-ignored': 17.4.4 + '@commitlint/parse': 17.4.4 + '@commitlint/rules': 17.4.4 + '@commitlint/types': 17.4.4 dev: true - /@commitlint/load/17.3.0: - resolution: {integrity: sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==} + /@commitlint/load/17.4.4: + resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.1.0 - '@commitlint/execute-rule': 17.0.0 - '@commitlint/resolve-extends': 17.3.0 - '@commitlint/types': 17.0.0 - '@types/node': 14.18.34 + '@commitlint/config-validator': 17.4.4 + '@commitlint/execute-rule': 17.4.0 + '@commitlint/resolve-extends': 17.4.4 + '@commitlint/types': 17.4.4 + '@types/node': 18.11.18 chalk: 4.1.2 - cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 4.2.0_rlet5slz3ltveuzxg6noqqckla + cosmiconfig: 8.0.0 + cosmiconfig-typescript-loader: 4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_ewcgsh5jhk3o7xvttutb4bhery + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq typescript: 4.9.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/message/17.2.0: - resolution: {integrity: sha512-/4l2KFKxBOuoEn1YAuuNNlAU05Zt7sNsC9H0mPdPm3chOrT4rcX0pOqrQcLtdMrMkJz0gC7b3SF80q2+LtdL9Q==} + /@commitlint/message/17.4.2: + resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} engines: {node: '>=v14'} dev: true - /@commitlint/parse/17.2.0: - resolution: {integrity: sha512-vLzLznK9Y21zQ6F9hf8D6kcIJRb2haAK5T/Vt1uW2CbHYOIfNsR/hJs0XnF/J9ctM20Tfsqv4zBitbYvVw7F6Q==} + /@commitlint/parse/17.4.4: + resolution: {integrity: sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 conventional-changelog-angular: 5.0.13 conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/17.2.0: - resolution: {integrity: sha512-bbblBhrHkjxra3ptJNm0abxu7yeAaxumQ8ZtD6GIVqzURCETCP7Dm0tlVvGRDyXBuqX6lIJxh3W7oyKqllDsHQ==} + /@commitlint/read/17.4.4: + resolution: {integrity: sha512-B2TvUMJKK+Svzs6eji23WXsRJ8PAD+orI44lVuVNsm5zmI7O8RSGJMvdEZEikiA4Vohfb+HevaPoWZ7PiFZ3zA==} engines: {node: '>=v14'} dependencies: - '@commitlint/top-level': 17.0.0 - '@commitlint/types': 17.0.0 - fs-extra: 10.1.0 + '@commitlint/top-level': 17.4.0 + '@commitlint/types': 17.4.4 + fs-extra: 11.1.0 git-raw-commits: 2.0.11 minimist: 1.2.7 dev: true - /@commitlint/resolve-extends/17.3.0: - resolution: {integrity: sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==} + /@commitlint/resolve-extends/17.4.4: + resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.1.0 - '@commitlint/types': 17.0.0 + '@commitlint/config-validator': 17.4.4 + '@commitlint/types': 17.4.4 import-fresh: 3.3.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true - /@commitlint/rules/17.3.0: - resolution: {integrity: sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==} + /@commitlint/rules/17.4.4: + resolution: {integrity: sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ==} engines: {node: '>=v14'} dependencies: - '@commitlint/ensure': 17.3.0 - '@commitlint/message': 17.2.0 - '@commitlint/to-lines': 17.0.0 - '@commitlint/types': 17.0.0 + '@commitlint/ensure': 17.4.4 + '@commitlint/message': 17.4.2 + '@commitlint/to-lines': 17.4.0 + '@commitlint/types': 17.4.4 execa: 5.1.1 dev: true - /@commitlint/to-lines/17.0.0: - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} + /@commitlint/to-lines/17.4.0: + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} engines: {node: '>=v14'} dev: true - /@commitlint/top-level/17.0.0: - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} + /@commitlint/top-level/17.4.0: + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types/17.0.0: - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} + /@commitlint/types/17.4.4: + resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: chalk: 4.1.2 @@ -1555,9 +1557,48 @@ packages: to-fast-properties: 3.0.1 dev: false + /@deepkit/event/1.0.1-alpha.85_snq4zqmy6xqcsypnjz7vpay3xu: + resolution: {integrity: sha512-w+hvt6A+Z9os2tTRJwHsX/cTSg1pHQh9xH9cPa9oyuNMoxeYy2f/cy7+jvDTgQzdfVAnCvbcp44sz8jufBMMog==} + peerDependencies: + '@deepkit/core': ^1.0.1-alpha.13 + '@deepkit/injector': ^1.0.1-alpha.13 + '@deepkit/type': ^1.0.1-alpha.13 + dependencies: + '@deepkit/core': 1.0.1-alpha.77 + '@deepkit/injector': 1.0.1-alpha.85_kjxwvp6biua2rjf3r3qaivgofe + '@deepkit/type': 1.0.1-alpha.85_mcay55ktffdozwll5wgb6oqvwq + dev: false + + /@deepkit/injector/1.0.1-alpha.85_kjxwvp6biua2rjf3r3qaivgofe: + resolution: {integrity: sha512-QbcAQkz8lzRt3f3UteDc55tVgAbSDaemnQYBosDCmcsKx25wTtOEzee8QBNntohzENj+p8CwjqtrS5wfa0gBug==} + peerDependencies: + '@deepkit/core': ^1.0.1-alpha.13 + '@deepkit/type': ^1.0.1-alpha.13 + dependencies: + '@deepkit/core': 1.0.1-alpha.77 + '@deepkit/type': 1.0.1-alpha.85_mcay55ktffdozwll5wgb6oqvwq + dev: false + + /@deepkit/type-compiler/1.0.1-alpha.83_typescript@4.9.4: + resolution: {integrity: sha512-5kwAgOSSSmhtpHaADYQ2lUOdRVIWoxZNmrfX51+EwqtVMKcCBzxb3kX+qJYfegdnSIG8eBapDwFOPZBCaIcIhQ==} + hasBin: true + requiresBuild: true + peerDependencies: + typescript: ^4.8.2 + dependencies: + '@deepkit/type-spec': 1.0.1-alpha.77 + '@marcj/ts-clone-node': 2.0.0_typescript@4.9.4 + '@typescript/vfs': 1.4.0 + lz-string: 1.4.4 + micromatch: 4.0.5 + strip-json-comments: 3.1.1 + typescript: 4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + /@deepkit/type-spec/1.0.1-alpha.77: resolution: {integrity: sha512-YAY2mWR6r+oyeRP4hHbGSWcvhoN15Tc1ODdljbv4HrQPOyAPDrA0VARHy03zAUKl25K60ZH8eMa7XXYxMD7N/g==} - dev: false /@deepkit/type/1.0.1-alpha.85_mcay55ktffdozwll5wgb6oqvwq: resolution: {integrity: sha512-603LmckNa0RzGaEL6PIYkxVI9xpvE86jR1oJ1QtKP0S9c9kGXCSyAOiQGeEVw9U3B2Xg47AJSQG34zigeuVy1g==} @@ -2115,6 +2156,16 @@ packages: - supports-color dev: false + /@marcj/ts-clone-node/2.0.0_typescript@4.9.4: + resolution: {integrity: sha512-GPafMHAdvXPOFzJ8mtnOa+S4NR+fWQEggKo1laAejeSzzp9k223xZjogkNQSVLrzn8sinHCkvJv9f7nVaX3gPQ==} + engines: {node: '>=14.9.0'} + peerDependencies: + typescript: ^4.8 + dependencies: + compatfactory: 1.0.1_typescript@4.9.4 + typescript: 4.9.4 + dev: true + /@messageformat/core/3.0.1: resolution: {integrity: sha512-yxj2+0e46hcZqJfNf0ZYbC2q6WlcGoh4g11mCyRtTueR0AD8F9z4JMYAS1aOiFG8Vl1LZg/h5hZHKmWTAyZq8g==} dependencies: @@ -2737,10 +2788,6 @@ packages: resolution: {integrity: sha512-Qu9dpjkgj2JmzRmDMVzpt2dFKuJ7wma0mxEvbbgomwkhAdHKT2LpSLYHawzd9OeeP4HsyhmcV9o/xLgJyPNcgw==} dev: true - /@types/node/14.18.34: - resolution: {integrity: sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA==} - dev: true - /@types/node/18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} @@ -2754,10 +2801,6 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json/4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true - /@types/parse5/6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true @@ -3023,6 +3066,14 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /@typescript/vfs/1.4.0: + resolution: {integrity: sha512-Pood7yv5YWMIX+yCHo176OnF8WUlKGImFG7XlsuH14Zb1YN5+dYD3uUtS7lqZtsH7tAveNUi2NzdpQCN0yRbaw==} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /@zxing/text-encoding/0.9.0: resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} requiresBuild: true @@ -4035,6 +4086,16 @@ packages: dot-prop: 5.3.0 dev: true + /compatfactory/1.0.1_typescript@4.9.4: + resolution: {integrity: sha512-hR9u0HSZTKDNNchPtMHg6myeNx0XO+av7UZIJPsi4rPALJBHi/W5Mbwi19hC/xm6y3JkYpxVYjTqnSGsU5X/iw==} + engines: {node: '>=14.9.0'} + peerDependencies: + typescript: '>=3.x || >= 4.x' + dependencies: + helpertypes: 0.0.18 + typescript: 4.9.4 + dev: true + /component-emitter/1.3.0: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true @@ -4171,7 +4232,7 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader/4.2.0_rlet5slz3ltveuzxg6noqqckla: + /cosmiconfig-typescript-loader/4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4: resolution: {integrity: sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -4180,21 +4241,20 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 14.18.34 - cosmiconfig: 7.1.0 - ts-node: 10.9.1_ewcgsh5jhk3o7xvttutb4bhery + '@types/node': 18.11.18 + cosmiconfig: 8.0.0 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq typescript: 4.9.4 dev: true - /cosmiconfig/7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} + /cosmiconfig/8.0.0: + resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} + engines: {node: '>=14'} dependencies: - '@types/parse-json': 4.0.0 import-fresh: 3.3.0 + js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 dev: true /cp-file/9.1.0: @@ -5630,15 +5690,6 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra/11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -5646,7 +5697,6 @@ packages: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 - dev: false /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} @@ -6040,6 +6090,11 @@ packages: readable-stream: 3.6.0 dev: true + /helpertypes/0.0.18: + resolution: {integrity: sha512-XRhfbSEmR+poXUC5/8AbmYNJb2riOT6qPzjGJZr0S9YedHiaY+/tzPYzWMUclYMEdCYo/1l8PDYrQFCj02v97w==} + engines: {node: '>=10.0.0'} + dev: true + /hexoid/1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} @@ -7698,6 +7753,11 @@ packages: dependencies: yallist: 4.0.0 + /lz-string/1.4.4: + resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} + hasBin: true + dev: true + /madge/6.0.0: resolution: {integrity: sha512-dddxP62sj5pL+l9MJnq9C34VFqmRj+2+uSOdn/7lOTSliLRH0WyQ8uCEF3VxkPRNOBvMKK2xumnIE15HRSAL9A==} engines: {node: '>=14'} @@ -9145,11 +9205,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - /promise-events/0.2.4: - resolution: {integrity: sha512-GCM6DmJcSCC8XboZIzYJAlADwkIS1P54XFUJQYhB7dpE7rtXPzPrT13dsV4Qm0FMCKptwMTyF8ZCir803RfKzA==} - engines: {node: '>=8.0.0'} - dev: false - /prompt-sync/4.2.0: resolution: {integrity: sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==} dependencies: @@ -9634,14 +9689,6 @@ packages: hasBin: true dev: true - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver/7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -10415,37 +10462,6 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /ts-node/10.9.1_ewcgsh5jhk3o7xvttutb4bhery: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - 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 - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 14.18.34 - acorn: 8.8.1 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: @@ -11037,11 +11053,6 @@ packages: /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml/1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true - /yaml/2.1.3: resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==} engines: {node: '>= 14'} diff --git a/src/Auth/Presentation/Validations/Auth/ConfirmationTokenSchemaValidation.ts b/src/Auth/Presentation/Validations/Auth/ConfirmationTokenSchemaValidation.ts deleted file mode 100644 index 243b76eb..00000000 --- a/src/Auth/Presentation/Validations/Auth/ConfirmationTokenSchemaValidation.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -const ConfirmationSchemaValidation = z.object({ - confirmationToken: z.string() -}); - -export default ConfirmationSchemaValidation; diff --git a/src/File/Domain/Services/FileService.ts b/src/File/Domain/Services/FileService.ts index ede4bfc3..129259cf 100644 --- a/src/File/Domain/Services/FileService.ts +++ b/src/File/Domain/Services/FileService.ts @@ -5,10 +5,8 @@ import IFileVersionDomain from '../Entities/IFileVersionDomain'; import FilesystemFactory from '../../../Shared/Factories/FilesystemFactory'; import { REPOSITORIES } from '../../../Config/Injects'; import IFileVersionRepository from '../../Infrastructure/Repositories/IFileVersionRepository'; -import PresignedFileRepPayload from 'File/Domain/Payloads/PresignedFileRepPayload'; import ICriteria from '../../../Shared/Presentation/Requests/ICriteria'; import IPaginator from '../../../Shared/Infrastructure/Orm/IPaginator'; -import ListObjectsPayload from 'File/Domain/Payloads/ListObjectsPayload'; import FileBase64RepPayload from '../Payloads/FileBase64RepPayload'; import FileMultipartRepPayload from '../Payloads/FileMultipartRepPayload'; import CreateBucketPayload from '../Payloads/CreateBucketPayload'; @@ -31,6 +29,8 @@ import FileVersionOptimizeDTO from '../../Presentation/DTO/FileVersionOptimizeDT import IFileDTO from '../Models/IFileDTO'; import FileDTO from '../Models/FileDTO'; import DownloadPayload from '../Payloads/DownloadPayload'; +import PresignedFileRepPayload from '../Payloads/PresignedFileRepPayload'; +import ListObjectsPayload from '../Payloads/ListObjectsPayload'; // TODO: Refactor this file and separate responsibilities class FileService diff --git a/src/File/Presentation/DTO/FileBase64OptimizeDTO.ts b/src/File/Presentation/DTO/FileBase64OptimizeDTO.ts index 817bb3b8..81bdfc8d 100644 --- a/src/File/Presentation/DTO/FileBase64OptimizeDTO.ts +++ b/src/File/Presentation/DTO/FileBase64OptimizeDTO.ts @@ -1,4 +1,4 @@ -import FileOptionsQueryPayload from 'File/Domain/Payloads/FileOptionsQueryPayload'; +import FileOptionsQueryPayload from '../../Domain/Payloads/FileOptionsQueryPayload'; import FileBase64RepPayload from '../../Domain/Payloads/FileBase64RepPayload'; class FileBase64OptimizeDTO implements FileBase64RepPayload diff --git a/src/Shared/Infrastructure/Events/EventHandler.ts b/src/Shared/Infrastructure/Events/EventHandler.ts index 520ac636..f0ccf654 100644 --- a/src/Shared/Infrastructure/Events/EventHandler.ts +++ b/src/Shared/Infrastructure/Events/EventHandler.ts @@ -1,17 +1,21 @@ -import EventEmitter from 'promise-events'; +import { DataEventToken, EventDispatcher } from '@deepkit/event'; import UserCreatedEvent from './UserCreatedEvent'; import ForgotPasswordEvent from './ForgotPasswordEvent'; import SendMessageEvent from './SendMessageEvent'; import RegisterEvent from './RegisterEvent'; import VerifiedAccountEvent from './VerifiedAccountEvent'; +import IDataEvent from './IDataEvent'; -class EventHandler extends EventEmitter +class EventHandler { private static instance: EventHandler; + private dispatcher: EventDispatcher; + private readonly events: Map>; private constructor() { - super(); + this.dispatcher = new EventDispatcher(); + this.events = new Map>(); } static getInstance(): EventHandler @@ -24,27 +28,30 @@ class EventHandler extends EventEmitter return EventHandler.instance; } - public async execute(event: string | symbol, ...args: any[]) + public async execute(eventName: string, ...args: any[]) { - await this.emit(event, ...args); + const eventToken = this.events.get(eventName); + await this.dispatcher.dispatch(eventToken, ...args); } public async setListeners() { - await this.on(UserCreatedEvent.USER_CREATED_EVENT, UserCreatedEvent.handle); - await this.on(ForgotPasswordEvent.FORGOT_PASSWORD_EVENT, ForgotPasswordEvent.handle); - await this.on(SendMessageEvent.SEND_MESSAGE_EVENT, SendMessageEvent.handle); - await this.on(RegisterEvent.REGISTER_EVENT, RegisterEvent.handle); - await this.on(VerifiedAccountEvent.VERIFIED_ACCOUNT_EVENT, VerifiedAccountEvent.handle); + this.events.set(UserCreatedEvent.USER_CREATED_EVENT, new UserCreatedEvent()); + this.events.set(ForgotPasswordEvent.FORGOT_PASSWORD_EVENT, new ForgotPasswordEvent()); + this.events.set(SendMessageEvent.SEND_MESSAGE_EVENT, new SendMessageEvent()); + this.events.set(RegisterEvent.REGISTER_EVENT, new RegisterEvent()); + this.events.set(VerifiedAccountEvent.VERIFIED_ACCOUNT_EVENT, new VerifiedAccountEvent()); + + for (const tuple of this.events) + { + const [, eventToken] = tuple; + this.dispatcher.listen(eventToken, eventToken.handle); + } } public async removeListeners() { - await this.removeAllListeners(UserCreatedEvent.USER_CREATED_EVENT); - await this.removeAllListeners(ForgotPasswordEvent.FORGOT_PASSWORD_EVENT); - await this.removeAllListeners(SendMessageEvent.SEND_MESSAGE_EVENT); - await this.removeAllListeners(RegisterEvent.REGISTER_EVENT); - await this.removeAllListeners(VerifiedAccountEvent.VERIFIED_ACCOUNT_EVENT); + // TODO: removeListeners } } diff --git a/src/Shared/Infrastructure/Events/ForgotPasswordEvent.ts b/src/Shared/Infrastructure/Events/ForgotPasswordEvent.ts index 2ad8214d..57e428ef 100644 --- a/src/Shared/Infrastructure/Events/ForgotPasswordEvent.ts +++ b/src/Shared/Infrastructure/Events/ForgotPasswordEvent.ts @@ -1,13 +1,20 @@ import { FACTORIES } from '../../../Config/Injects'; import NotifierFactory from '../../../Notification/Shared/NotifierFactory'; +import { DataEventToken } from '@deepkit/event'; +import IDataEvent from './IDataEvent'; -class ForgotPasswordEvent +class ForgotPasswordEvent extends DataEventToken implements IDataEvent { public static FORGOT_PASSWORD_EVENT = 'FORGOT_PASSWORD_EVENT'; - public static handle = async(props: any) => + constructor() { - const { emailNotification, args } = props; + super(ForgotPasswordEvent.FORGOT_PASSWORD_EVENT); + } + + public handle = async(props: any) => + { + const { emailNotification, args } = props.data; const emailNotificator: any = NotifierFactory.create(FACTORIES.EmailStrategy); diff --git a/src/Shared/Infrastructure/Events/IDataEvent.ts b/src/Shared/Infrastructure/Events/IDataEvent.ts new file mode 100644 index 00000000..bc92024b --- /dev/null +++ b/src/Shared/Infrastructure/Events/IDataEvent.ts @@ -0,0 +1,8 @@ + +interface IDataEvent +{ + handle: (props: any) => void; +} + +export default IDataEvent; + diff --git a/src/Shared/Infrastructure/Events/RegisterEvent.ts b/src/Shared/Infrastructure/Events/RegisterEvent.ts index 658f61cc..d56edd3a 100644 --- a/src/Shared/Infrastructure/Events/RegisterEvent.ts +++ b/src/Shared/Infrastructure/Events/RegisterEvent.ts @@ -1,13 +1,20 @@ import { FACTORIES } from '../../../Config/Injects'; import NotifierFactory from '../../../Notification/Shared/NotifierFactory'; +import { DataEventToken } from '@deepkit/event'; +import IDataEvent from './IDataEvent'; -class RegisterEvent +class RegisterEvent extends DataEventToken implements IDataEvent { public static REGISTER_EVENT = 'REGISTER_EVENT'; - public static handle = async(props: any) => + constructor() { - const { emailNotification, args } = props; + super(RegisterEvent.REGISTER_EVENT); + } + + public handle = async(props: any) => + { + const { emailNotification, args } = props.data; const emailNotifier: any = NotifierFactory.create(FACTORIES.EmailStrategy); diff --git a/src/Shared/Infrastructure/Events/SendMessageEvent.ts b/src/Shared/Infrastructure/Events/SendMessageEvent.ts index 7be09ece..68cdd037 100644 --- a/src/Shared/Infrastructure/Events/SendMessageEvent.ts +++ b/src/Shared/Infrastructure/Events/SendMessageEvent.ts @@ -1,13 +1,20 @@ import { FACTORIES } from '../../../Config/Injects'; import NotifierFactory from '../../../Notification/Shared/NotifierFactory'; +import { DataEventToken } from '@deepkit/event'; +import IDataEvent from './IDataEvent'; -class SendMessageEvent +class SendMessageEvent extends DataEventToken implements IDataEvent { public static SEND_MESSAGE_EVENT = 'SEND_MESSAGE_EVENT'; - public static handle = async(props: any) => + constructor() { - const { pushNotification, message } = props; + super(SendMessageEvent.SEND_MESSAGE_EVENT); + } + + public handle = async(props: any) => + { + const { pushNotification, message } = props.data; const webPushNotifier: any = NotifierFactory.create(FACTORIES.WebPushStrategy); diff --git a/src/Shared/Infrastructure/Events/UserCreatedEvent.ts b/src/Shared/Infrastructure/Events/UserCreatedEvent.ts index 9c813891..0c3703ec 100644 --- a/src/Shared/Infrastructure/Events/UserCreatedEvent.ts +++ b/src/Shared/Infrastructure/Events/UserCreatedEvent.ts @@ -1,12 +1,19 @@ import Logger from '../../Application/Logger/Logger'; +import { DataEventToken } from '@deepkit/event'; +import IDataEvent from './IDataEvent'; -class UserCreatedEvent +class UserCreatedEvent extends DataEventToken implements IDataEvent { public static USER_CREATED_EVENT = 'USER_CREATED_EVENT'; - public static handle = async(props: any) => + constructor() { - const { email } = props; + super(UserCreatedEvent.USER_CREATED_EVENT); + } + + public handle = async(props: any) => + { + const { email } = props.data; await Logger.info(`User ${email} Created!`); }; diff --git a/src/Shared/Infrastructure/Events/VerifiedAccountEvent.ts b/src/Shared/Infrastructure/Events/VerifiedAccountEvent.ts index e98b0403..63f3fb8f 100644 --- a/src/Shared/Infrastructure/Events/VerifiedAccountEvent.ts +++ b/src/Shared/Infrastructure/Events/VerifiedAccountEvent.ts @@ -1,13 +1,20 @@ import { FACTORIES } from '../../../Config/Injects'; import NotifierFactory from '../../../Notification/Shared/NotifierFactory'; +import { DataEventToken } from '@deepkit/event'; +import IDataEvent from './IDataEvent'; -class VerifiedAccountEvent +class VerifiedAccountEvent extends DataEventToken implements IDataEvent { public static VERIFIED_ACCOUNT_EVENT = 'VERIFIED_ACCOUNT_EVENT'; - public static handle = async(props: any) => + constructor() { - const { emailNotification, args } = props; + super(VerifiedAccountEvent.VERIFIED_ACCOUNT_EVENT); + } + + public handle = async(props: any) => + { + const { emailNotification, args } = props.data; const emailNotifier: any = NotifierFactory.create(FACTORIES.EmailStrategy);