From a68a223d328ee52bd5b14e83a0e79164458d0b86 Mon Sep 17 00:00:00 2001 From: Innei Date: Wed, 16 Mar 2022 11:03:20 +0800 Subject: [PATCH] chore: code style --- package.json | 6 +- pnpm-lock.yaml | 302 ++++++------------ src/bootstrap.ts | 8 +- src/cluster.ts | 14 +- src/common/adapters/fastify.adapter.ts | 2 +- src/common/decorator/auth.decorator.ts | 4 +- src/common/decorator/cookie.decorator.ts | 2 +- .../decorator/current-user.decorator.ts | 2 +- src/common/decorator/http.decorator.ts | 2 +- src/common/decorator/ip.decorator.ts | 2 +- src/common/decorator/openapi.decorator.ts | 2 +- src/common/decorator/role.decorator.ts | 2 +- src/common/filters/any-exception.filter.ts | 20 +- src/common/guard/spider.guard.ts | 2 +- .../interceptors/analyze.interceptor.ts | 4 +- .../json-serialize.interceptor.ts | 2 +- .../interceptors/logging.interceptor.ts | 6 +- .../middlewares/attach-auth.middleware.ts | 2 +- src/global/consola.global.ts | 18 +- src/global/index.global.ts | 23 +- src/modules/aggregate/aggregate.controller.ts | 8 +- src/modules/aggregate/aggregate.module.ts | 4 +- src/modules/aggregate/aggregate.service.ts | 35 +- src/modules/analyze/analyze.controller.ts | 12 +- src/modules/analyze/analyze.model.ts | 2 +- src/modules/analyze/analyze.service.ts | 4 +- src/modules/auth/auth.controller.ts | 4 +- src/modules/auth/auth.module.ts | 4 +- src/modules/auth/auth.service.ts | 19 +- src/modules/backup/backup.controller.ts | 4 +- src/modules/backup/backup.service.ts | 24 +- src/modules/category/category.controller.ts | 12 +- src/modules/category/category.dto.ts | 2 +- src/modules/category/category.module.ts | 2 +- src/modules/category/category.service.ts | 4 +- src/modules/comment/comment.controller.ts | 20 +- src/modules/comment/comment.model.ts | 8 +- src/modules/comment/comment.module.ts | 2 +- src/modules/comment/comment.service.ts | 12 +- src/modules/configs/configs.dto.ts | 2 +- src/modules/configs/configs.model.ts | 2 +- src/modules/configs/configs.service.ts | 16 +- src/modules/debug/debug.controller.ts | 6 +- src/modules/feed/feed.controller.ts | 8 +- src/modules/health/health.controller.ts | 8 +- src/modules/init/init.controller.ts | 2 +- src/modules/init/init.service.ts | 2 +- src/modules/link/link.controller.ts | 6 +- src/modules/link/link.model.ts | 2 +- src/modules/link/link.module.ts | 2 +- src/modules/link/link.service.ts | 4 +- src/modules/markdown/markdown.controller.ts | 28 +- src/modules/markdown/markdown.service.ts | 18 +- src/modules/note/note.controller.ts | 20 +- src/modules/note/note.module.ts | 2 +- src/modules/note/note.service.ts | 2 +- .../controllers/base.option.controller.ts | 6 +- .../controllers/email.option.controller.ts | 4 +- src/modules/option/option.decorator.ts | 6 +- src/modules/option/option.module.ts | 2 +- src/modules/page/page.controller.ts | 6 +- src/modules/page/page.module.ts | 2 +- src/modules/page/page.service.ts | 2 +- src/modules/pageproxy/pageproxy.controller.ts | 12 +- src/modules/pageproxy/pageproxy.service.ts | 8 +- src/modules/post/post.controller.ts | 6 +- src/modules/post/post.model.ts | 6 +- src/modules/post/post.module.ts | 2 +- src/modules/post/post.service.ts | 8 +- src/modules/project/project.controller.ts | 2 +- src/modules/pty/pty.controller.ts | 2 +- src/modules/recently/recently.controller.ts | 4 +- src/modules/recently/recently.service.ts | 2 +- src/modules/say/say.controller.ts | 2 +- src/modules/search/search.controller.ts | 2 +- src/modules/search/search.module.ts | 2 +- src/modules/search/search.service.ts | 8 +- .../serverless/serverless.controller.ts | 8 +- src/modules/serverless/serverless.service.ts | 20 +- src/modules/sitemap/sitemap.controller.ts | 2 +- src/modules/snippet/snippet.controller.ts | 4 +- src/modules/snippet/snippet.module.ts | 2 +- src/modules/snippet/snippet.service.ts | 6 +- src/modules/tool/tool.controller.ts | 6 +- src/modules/tool/tool.service.ts | 16 +- src/modules/user/user.controller.ts | 8 +- src/modules/user/user.model.ts | 2 +- src/modules/user/user.service.ts | 8 +- src/processors/cache/cache.module.ts | 2 +- src/processors/database/database.module.ts | 8 +- src/processors/database/database.service.ts | 4 +- src/processors/gateway/admin/auth.gateway.ts | 4 +- .../gateway/admin/events.gateway.ts | 8 +- src/processors/gateway/admin/pty.gateway.ts | 8 +- .../gateway/web/dtos/danmaku.dto.ts | 6 +- src/processors/gateway/web/events.gateway.ts | 6 +- src/processors/helper/helper.asset.service.ts | 4 +- .../helper/helper.counting.service.ts | 12 +- src/processors/helper/helper.cron.service.ts | 20 +- src/processors/helper/helper.email.service.ts | 6 +- src/processors/helper/helper.http.service.ts | 8 +- src/processors/helper/helper.image.service.ts | 4 +- src/processors/helper/helper.module.ts | 16 +- src/processors/helper/helper.tq.service.ts | 6 +- src/processors/logger/logger.service.ts | 6 +- src/shared/dto/id.dto.ts | 2 +- src/utils/crud.util.ts | 2 +- src/utils/ip.util.ts | 4 +- src/utils/jsonschema.util.ts | 2 +- src/utils/pic.util.ts | 4 +- src/utils/redis-subpub.util.ts | 6 +- src/utils/redis.util.ts | 2 +- src/utils/safe-eval.util.ts | 2 +- src/utils/tool.util.ts | 4 +- src/utils/validator/isBooleanOrString.ts | 2 +- src/utils/validator/isMongoIdOrInt.ts | 2 +- src/utils/validator/isNilOrString.ts | 6 +- src/utils/validator/simpleValidatorFactory.ts | 4 +- .../common/attach-auth.middleware.e2e-spec.ts | 4 +- .../snippet/snippet.controller.e2e-spec.ts | 4 +- .../modules/user/user.controller.e2e-spec.ts | 2 +- 121 files changed, 478 insertions(+), 615 deletions(-) diff --git a/package.json b/package.json index 456f03ad..fed1fb35 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "class-validator": "0.13.2", "consola": "*", "cos-nodejs-sdk-v5": "2.11.6", - "dayjs": "1.10.8", + "dayjs": "1.11.0", "ejs": "3.1.6", "fastify-cookie": "5.6.0", "fastify-multipart": "5.3.1", @@ -131,8 +131,8 @@ "zx": "4.3.0" }, "devDependencies": { - "@innei-util/eslint-config-ts": "latest", - "@innei-util/prettier": "0.2.2", + "@innei-util/eslint-config-ts": "0.5.0", + "@innei-util/prettier": "0.4.1", "@nestjs/cli": "8.2.3", "@nestjs/schematics": "8.0.8", "@nestjs/testing": "8.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be227154..032a8746 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ specifiers: '@algolia/client-search': '*' '@babel/core': 7.17.7 '@babel/plugin-transform-typescript': 7.16.8 - '@innei-util/eslint-config-ts': latest - '@innei-util/prettier': 0.2.2 + '@innei-util/eslint-config-ts': 0.5.0 + '@innei-util/prettier': 0.4.1 '@innei/class-validator-jsonschema': 3.1.1 '@nestjs/cli': 8.2.3 '@nestjs/common': 8.4.1 @@ -63,7 +63,7 @@ specifiers: cos-nodejs-sdk-v5: 2.11.6 cron: '*' cross-env: 7.0.3 - dayjs: 1.10.8 + dayjs: 1.11.0 ejs: 3.1.6 eslint: '*' fastify-cookie: 5.6.0 @@ -140,7 +140,7 @@ dependencies: '@typegoose/auto-increment': 1.2.0_mongoose@6.2.4 '@typegoose/typegoose': 9.7.0_mongoose@6.2.4 algoliasearch: 4.13.0 - axios: 0.26.0 + axios: 0.26.1 axios-retry: 3.2.4 bcrypt: 5.0.1 cache-manager: 3.6.0 @@ -150,7 +150,7 @@ dependencies: class-validator: 0.13.2 consola: 2.15.3 cos-nodejs-sdk-v5: 2.11.6 - dayjs: 1.10.8 + dayjs: 1.11.0 ejs: 3.1.6 fastify-cookie: 5.6.0 fastify-multipart: 5.3.1 @@ -192,8 +192,8 @@ optionalDependencies: redis-memory-server: 0.5.0 devDependencies: - '@innei-util/eslint-config-ts': 0.4.0_typescript@4.6.2 - '@innei-util/prettier': 0.2.2_typescript@4.6.2 + '@innei-util/eslint-config-ts': 0.5.0_typescript@4.6.2 + '@innei-util/prettier': 0.4.1 '@nestjs/cli': 8.2.3 '@nestjs/schematics': 8.0.8_typescript@4.6.2 '@nestjs/testing': 8.4.1_214a294e539403889bf33d78c1f08a26 @@ -219,7 +219,7 @@ devDependencies: '@vercel/ncc': 0.33.3 cron: 1.7.2 cross-env: 7.0.3 - eslint: 8.10.0 + eslint: 8.11.0 husky: 7.0.4 i: 0.3.7 ioredis: 4.28.5 @@ -487,30 +487,6 @@ packages: resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} engines: {node: '>=6.9.0'} - /@babel/core/7.13.10: - resolution: {integrity: sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.7 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.13.10 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helpers': 7.17.7 - '@babel/parser': 7.17.7 - '@babel/template': 7.16.7 - '@babel/traverse': 7.17.3 - '@babel/types': 7.17.0 - convert-source-map: 1.8.0 - debug: 4.3.3 - gensync: 1.0.0-beta.2 - json5: 2.2.0 - lodash: 4.17.21 - semver: 6.3.0 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/core/7.17.7: resolution: {integrity: sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==} engines: {node: '>=6.9.0'} @@ -533,14 +509,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator/7.13.9: - resolution: {integrity: sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==} - dependencies: - '@babel/types': 7.17.0 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - /@babel/generator/7.17.7: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} @@ -556,19 +524,6 @@ packages: '@babel/types': 7.17.0 dev: false - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.13.10: - resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.17.7 - '@babel/core': 7.13.10 - '@babel/helper-validator-option': 7.16.7 - browserslist: 4.19.3 - semver: 6.3.0 - dev: true - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.7: resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} engines: {node: '>=6.9.0'} @@ -715,12 +670,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.14.6: - resolution: {integrity: sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dev: true - /@babel/parser/7.17.3: resolution: {integrity: sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==} engines: {node: '>=6.0.0'} @@ -879,22 +828,6 @@ packages: '@babel/parser': 7.17.7 '@babel/types': 7.17.0 - /@babel/traverse/7.13.0: - resolution: {integrity: sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==} - dependencies: - '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.7 - '@babel/helper-function-name': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/parser': 7.17.7 - '@babel/types': 7.17.0 - debug: 4.3.3 - globals: 11.12.0 - lodash: 4.17.21 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/traverse/7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} engines: {node: '>=6.9.0'} @@ -912,14 +845,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types/7.13.0: - resolution: {integrity: sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==} - dependencies: - '@babel/helper-validator-identifier': 7.16.7 - lodash: 4.17.21 - to-fast-properties: 2.0.0 - dev: true - /@babel/types/7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} @@ -943,15 +868,15 @@ packages: '@cspotcode/source-map-consumer': 0.8.0 dev: true - /@eslint/eslintrc/1.2.0: - resolution: {integrity: sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==} + /@eslint/eslintrc/1.2.1: + resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.3 espree: 9.3.1 - globals: 13.12.1 - ignore: 4.0.6 + globals: 13.13.0 + ignore: 5.2.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -988,31 +913,26 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@innei-util/eslint-config-ts/0.4.0_typescript@4.6.2: - resolution: {integrity: sha512-AJaDdhPUp4VJvQK4VisfU305dVdz7uhccSJUiY4dXBRto1VEDDvp6G5Yu81sB0rBb6l90C1Ik3VgnBT+zVx/1A==} + /@innei-util/eslint-config-ts/0.5.0_typescript@4.6.2: + resolution: {integrity: sha512-5r/nzXmAEvIjWyRUYH78ifkkwQI24ejVQ2pXd8nrQabqQlUsSB4K3RJiuNmgaZJ8xVzSa985sq1U7JVOzaoseg==} peerDependencies: typescript: '>=4' dependencies: - '@typescript-eslint/eslint-plugin': 5.10.1_33fffc354ccfa91fbe7d1677b9395a0a - '@typescript-eslint/parser': 5.13.0_eslint@8.10.0+typescript@4.6.2 - eslint: 8.10.0 - eslint-config-prettier: 8.5.0_eslint@8.10.0 - eslint-plugin-import: 2.25.4_eslint@8.10.0 + '@typescript-eslint/eslint-plugin': 5.10.2_f2c49ce7d0e93ebcfdb4b7d25b131b28 + '@typescript-eslint/parser': 5.15.0_eslint@8.11.0+typescript@4.6.2 + eslint: 8.11.0 + eslint-config-prettier: 8.5.0_eslint@8.11.0 + eslint-plugin-import: 2.25.4_eslint@8.11.0 typescript: 4.6.2 transitivePeerDependencies: - supports-color dev: true - /@innei-util/prettier/0.2.2_typescript@4.6.2: - resolution: {integrity: sha512-2bSj6hOGSd2VuPOb9OA2o+DT7ARozmvvatqf+7kOz4ZKSHnBbvl2YW4cpBc+bgkFzuxcPhz3Ou/jiTOHsE0OuQ==} + /@innei-util/prettier/0.4.1: + resolution: {integrity: sha512-wodhITa9pR9141ASldYHX1n5B1gZ6KRorJjAU37Qiva8KaeJ4+FJVCl/O0abSwwuLOgM6GRuYcLmg9b3ZAjLRA==} dependencies: - '@trivago/prettier-plugin-sort-imports': 3.1.1_prettier@2.5.1 prettier: 2.5.1 prettier-package-json: 2.6.0 - prettier-plugin-organize-imports: 2.3.4_prettier@2.5.1+typescript@4.6.2 - transitivePeerDependencies: - - supports-color - - typescript dev: true /@innei/class-validator-jsonschema/3.1.1_279461c9b8c03a205cdbc4878bc60cf8: @@ -1650,23 +1570,6 @@ packages: engines: {node: '>= 10'} dev: false - /@trivago/prettier-plugin-sort-imports/3.1.1_prettier@2.5.1: - resolution: {integrity: sha512-T9EJNEOugWts4WxdmpWeY+sp+2fUHhvGh9QSBCowEGJfcbnu355HQRqok5bKwejdieMaI1+uGZhuTNMZwjqOCQ==} - peerDependencies: - prettier: 2.x - dependencies: - '@babel/core': 7.13.10 - '@babel/generator': 7.13.9 - '@babel/parser': 7.14.6 - '@babel/traverse': 7.13.0 - '@babel/types': 7.13.0 - javascript-natural-sort: 0.7.1 - lodash: 4.17.21 - prettier: 2.5.1 - transitivePeerDependencies: - - supports-color - dev: true - /@tsconfig/node10/1.0.8: resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} dev: true @@ -2064,8 +1967,8 @@ packages: dev: false optional: true - /@typescript-eslint/eslint-plugin/5.10.1_33fffc354ccfa91fbe7d1677b9395a0a: - resolution: {integrity: sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==} + /@typescript-eslint/eslint-plugin/5.10.2_f2c49ce7d0e93ebcfdb4b7d25b131b28: + resolution: {integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -2075,12 +1978,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.13.0_eslint@8.10.0+typescript@4.6.2 - '@typescript-eslint/scope-manager': 5.10.1 - '@typescript-eslint/type-utils': 5.10.1_eslint@8.10.0+typescript@4.6.2 - '@typescript-eslint/utils': 5.10.1_eslint@8.10.0+typescript@4.6.2 + '@typescript-eslint/parser': 5.15.0_eslint@8.11.0+typescript@4.6.2 + '@typescript-eslint/scope-manager': 5.10.2 + '@typescript-eslint/type-utils': 5.10.2_eslint@8.11.0+typescript@4.6.2 + '@typescript-eslint/utils': 5.10.2_eslint@8.11.0+typescript@4.6.2 debug: 4.3.3 - eslint: 8.10.0 + eslint: 8.11.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 @@ -2091,8 +1994,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.13.0_eslint@8.10.0+typescript@4.6.2: - resolution: {integrity: sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==} + /@typescript-eslint/parser/5.15.0_eslint@8.11.0+typescript@4.6.2: + resolution: {integrity: sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2101,34 +2004,34 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.13.0 - '@typescript-eslint/types': 5.13.0 - '@typescript-eslint/typescript-estree': 5.13.0_typescript@4.6.2 + '@typescript-eslint/scope-manager': 5.15.0 + '@typescript-eslint/types': 5.15.0 + '@typescript-eslint/typescript-estree': 5.15.0_typescript@4.6.2 debug: 4.3.3 - eslint: 8.10.0 + eslint: 8.11.0 typescript: 4.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.10.1: - resolution: {integrity: sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==} + /@typescript-eslint/scope-manager/5.10.2: + resolution: {integrity: sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/visitor-keys': 5.10.1 + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/visitor-keys': 5.10.2 dev: true - /@typescript-eslint/scope-manager/5.13.0: - resolution: {integrity: sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==} + /@typescript-eslint/scope-manager/5.15.0: + resolution: {integrity: sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.13.0 - '@typescript-eslint/visitor-keys': 5.13.0 + '@typescript-eslint/types': 5.15.0 + '@typescript-eslint/visitor-keys': 5.15.0 dev: true - /@typescript-eslint/type-utils/5.10.1_eslint@8.10.0+typescript@4.6.2: - resolution: {integrity: sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==} + /@typescript-eslint/type-utils/5.10.2_eslint@8.11.0+typescript@4.6.2: + resolution: {integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2137,27 +2040,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.10.1_eslint@8.10.0+typescript@4.6.2 + '@typescript-eslint/utils': 5.10.2_eslint@8.11.0+typescript@4.6.2 debug: 4.3.3 - eslint: 8.10.0 + eslint: 8.11.0 tsutils: 3.21.0_typescript@4.6.2 typescript: 4.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.10.1: - resolution: {integrity: sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==} + /@typescript-eslint/types/5.10.2: + resolution: {integrity: sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.13.0: - resolution: {integrity: sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==} + /@typescript-eslint/types/5.15.0: + resolution: {integrity: sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.10.1_typescript@4.6.2: - resolution: {integrity: sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==} + /@typescript-eslint/typescript-estree/5.10.2_typescript@4.6.2: + resolution: {integrity: sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2165,8 +2068,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/visitor-keys': 5.10.1 + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/visitor-keys': 5.10.2 debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 @@ -2177,8 +2080,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.13.0_typescript@4.6.2: - resolution: {integrity: sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==} + /@typescript-eslint/typescript-estree/5.15.0_typescript@4.6.2: + resolution: {integrity: sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2186,8 +2089,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.13.0 - '@typescript-eslint/visitor-keys': 5.13.0 + '@typescript-eslint/types': 5.15.0 + '@typescript-eslint/visitor-keys': 5.15.0 debug: 4.3.3 globby: 11.1.0 is-glob: 4.0.3 @@ -2198,37 +2101,37 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.10.1_eslint@8.10.0+typescript@4.6.2: - resolution: {integrity: sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==} + /@typescript-eslint/utils/5.10.2_eslint@8.11.0+typescript@4.6.2: + resolution: {integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.10.1 - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/typescript-estree': 5.10.1_typescript@4.6.2 - eslint: 8.10.0 + '@typescript-eslint/scope-manager': 5.10.2 + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/typescript-estree': 5.10.2_typescript@4.6.2 + eslint: 8.11.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.10.0 + eslint-utils: 3.0.0_eslint@8.11.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.10.1: - resolution: {integrity: sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==} + /@typescript-eslint/visitor-keys/5.10.2: + resolution: {integrity: sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.1 + '@typescript-eslint/types': 5.10.2 eslint-visitor-keys: 3.3.0 dev: true - /@typescript-eslint/visitor-keys/5.13.0: - resolution: {integrity: sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==} + /@typescript-eslint/visitor-keys/5.15.0: + resolution: {integrity: sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.13.0 + '@typescript-eslint/types': 5.15.0 eslint-visitor-keys: 3.3.0 dev: true @@ -2715,14 +2618,6 @@ packages: is-retry-allowed: 2.2.0 dev: false - /axios/0.26.0: - resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==} - dependencies: - follow-redirects: 1.14.9 - transitivePeerDependencies: - - debug - dev: false - /axios/0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: @@ -3390,8 +3285,8 @@ packages: whatwg-url: 10.0.0 dev: false - /dayjs/1.10.8: - resolution: {integrity: sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==} + /dayjs/1.11.0: + resolution: {integrity: sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==} dev: false /debounce-fn/4.0.0: @@ -3768,13 +3663,13 @@ packages: optionalDependencies: source-map: 0.6.1 - /eslint-config-prettier/8.5.0_eslint@8.10.0: + /eslint-config-prettier/8.5.0_eslint@8.11.0: resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.10.0 + eslint: 8.11.0 dev: true /eslint-import-resolver-node/0.3.6: @@ -3792,7 +3687,7 @@ packages: find-up: 2.1.0 dev: true - /eslint-plugin-import/2.25.4_eslint@8.10.0: + /eslint-plugin-import/2.25.4_eslint@8.11.0: resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} engines: {node: '>=4'} peerDependencies: @@ -3802,7 +3697,7 @@ packages: array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.10.0 + eslint: 8.11.0 eslint-import-resolver-node: 0.3.6 eslint-module-utils: 2.7.3 has: 1.0.3 @@ -3830,13 +3725,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.10.0: + /eslint-utils/3.0.0_eslint@8.11.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.10.0 + eslint: 8.11.0 eslint-visitor-keys: 2.1.0 dev: true @@ -3850,12 +3745,12 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.10.0: - resolution: {integrity: sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==} + /eslint/8.11.0: + resolution: {integrity: sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.2.0 + '@eslint/eslintrc': 1.2.1 '@humanwhocodes/config-array': 0.9.5 ajv: 6.12.6 chalk: 4.1.2 @@ -3864,7 +3759,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.10.0 + eslint-utils: 3.0.0_eslint@8.11.0 eslint-visitor-keys: 3.3.0 espree: 9.3.1 esquery: 1.4.0 @@ -3873,7 +3768,7 @@ packages: file-entry-cache: 6.0.1 functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 - globals: 13.12.1 + globals: 13.13.0 ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 @@ -4558,8 +4453,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals/13.12.1: - resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} + /globals/13.13.0: + resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -4778,11 +4673,6 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore/4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - dev: true - /ignore/5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} @@ -5148,10 +5038,6 @@ packages: minimatch: 3.1.2 dev: false - /javascript-natural-sort/0.7.1: - resolution: {integrity: sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=} - dev: true - /jest-changed-files/27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5913,8 +5799,8 @@ packages: engines: {node: '>=10'} dev: true - /lines-and-columns/1.1.6: - resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /lint-staged/12.3.5: @@ -6807,7 +6693,7 @@ packages: '@babel/code-frame': 7.16.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.1.6 + lines-and-columns: 1.2.4 dev: true /parse5/6.0.1: @@ -6963,16 +6849,6 @@ packages: sort-order: 1.0.1 dev: true - /prettier-plugin-organize-imports/2.3.4_prettier@2.5.1+typescript@4.6.2: - resolution: {integrity: sha512-R8o23sf5iVL/U71h9SFUdhdOEPsi3nm42FD/oDYIZ2PQa4TNWWuWecxln6jlIQzpZTDMUeO1NicJP6lLn2TtRw==} - peerDependencies: - prettier: '>=2.0' - typescript: '>=2.9' - dependencies: - prettier: 2.5.1 - typescript: 4.6.2 - dev: true - /prettier/2.5.1: resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} engines: {node: '>=10.13.0'} diff --git a/src/bootstrap.ts b/src/bootstrap.ts index ba3d075d..aaf27ee1 100644 --- a/src/bootstrap.ts +++ b/src/bootstrap.ts @@ -1,8 +1,8 @@ +import cluster from 'cluster' +import { performance } from 'perf_hooks' import { Logger, RequestMethod, ValidationPipe } from '@nestjs/common' import { NestFactory } from '@nestjs/core' import { NestFastifyApplication } from '@nestjs/platform-fastify' -import cluster from 'cluster' -import { performance } from 'perf_hooks' import { API_VERSION, CROSS_DOMAIN, PORT } from './app.config' import { AppModule } from './app.module' import { fastifyApp } from './common/adapters/fastify.adapter' @@ -96,9 +96,7 @@ export async function bootstrap() { consola.success( `[${prefix + pid}] Admin Local Dashboard: ${url}/proxy/qaqdmin`, ) - Logger.log( - 'Server is up. ' + chalk.yellow('+' + (performance.now() | 0) + 'ms'), - ) + Logger.log(`Server is up. ${chalk.yellow(`+${performance.now() | 0}ms`)}`) }) if (module.hot) { diff --git a/src/cluster.ts b/src/cluster.ts index febd8c50..597b03b2 100644 --- a/src/cluster.ts +++ b/src/cluster.ts @@ -7,9 +7,9 @@ export class Cluster { const cpus = os.cpus().length consola.info(`Primary server started on ${process.pid}`) - consola.info('CPU:' + cpus) - //ensure workers exit cleanly - process.on('SIGINT', function () { + consola.info(`CPU:${cpus}`) + // ensure workers exit cleanly + process.on('SIGINT', () => { consola.info('Cluster shutting down...') for (const id in cluster.workers) { cluster.workers[id].kill() @@ -24,15 +24,15 @@ export class Cluster { cluster.fork() } - cluster.on('fork', function (worker) { - worker.on('message', function (msg) { - Object.keys(cluster.workers).forEach(function (id) { + cluster.on('fork', (worker) => { + worker.on('message', (msg) => { + Object.keys(cluster.workers).forEach((id) => { cluster.workers[id].send(msg) }) }) }) - cluster.on('online', function (worker) { + cluster.on('online', (worker) => { consola.info('Worker %s is online', worker.process.pid) }) cluster.on('exit', (worker, code, signal) => { diff --git a/src/common/adapters/fastify.adapter.ts b/src/common/adapters/fastify.adapter.ts index 8fdb1fbc..309379c2 100644 --- a/src/common/adapters/fastify.adapter.ts +++ b/src/common/adapters/fastify.adapter.ts @@ -63,7 +63,7 @@ const logWarn = (desc: string, req: FastifyRequest, context: string) => { const ua = req.raw.headers['user-agent'] Logger.warn( // prettier-ignore - desc + '\n' + + `${desc}\n` + `Path: ${req.url}\n` + `IP: ${getIp(req)}\n` + `UA: ${ua}`, diff --git a/src/common/decorator/auth.decorator.ts b/src/common/decorator/auth.decorator.ts index 9b4eb5a7..c8d06f8e 100644 --- a/src/common/decorator/auth.decorator.ts +++ b/src/common/decorator/auth.decorator.ts @@ -1,7 +1,7 @@ -import { applyDecorators, UseGuards } from '@nestjs/common' +import { UseGuards, applyDecorators } from '@nestjs/common' import { ApiBearerAuth, ApiUnauthorizedResponse } from '@nestjs/swagger' -import { SECURITY } from '~/app.config' import { JWTAuthGuard } from '../guard/auth.guard' +import { SECURITY } from '~/app.config' export function Auth() { const decorators = [] diff --git a/src/common/decorator/cookie.decorator.ts b/src/common/decorator/cookie.decorator.ts index 63f873c6..145a5c35 100644 --- a/src/common/decorator/cookie.decorator.ts +++ b/src/common/decorator/cookie.decorator.ts @@ -1,4 +1,4 @@ -import { createParamDecorator, ExecutionContext } from '@nestjs/common' +import { ExecutionContext, createParamDecorator } from '@nestjs/common' import { FastifyRequest } from 'fastify' export const Cookies = createParamDecorator( diff --git a/src/common/decorator/current-user.decorator.ts b/src/common/decorator/current-user.decorator.ts index 1c9c1e41..c1f79a7d 100644 --- a/src/common/decorator/current-user.decorator.ts +++ b/src/common/decorator/current-user.decorator.ts @@ -1,4 +1,4 @@ -import { createParamDecorator, ExecutionContext } from '@nestjs/common' +import { ExecutionContext, createParamDecorator } from '@nestjs/common' import { getNestExecutionContextRequest } from '~/utils/nest.util' export const CurrentUser = createParamDecorator( diff --git a/src/common/decorator/http.decorator.ts b/src/common/decorator/http.decorator.ts index 9c80854f..16b18e79 100644 --- a/src/common/decorator/http.decorator.ts +++ b/src/common/decorator/http.decorator.ts @@ -1,4 +1,4 @@ -import { applyDecorators, SetMetadata } from '@nestjs/common' +import { SetMetadata, applyDecorators } from '@nestjs/common' import { ApiBody, ApiConsumes } from '@nestjs/swagger' import { HTTP_RES_TRANSFORM_PAGINATE } from '~/constants/meta.constant' import * as SYSTEM from '~/constants/system.constant' diff --git a/src/common/decorator/ip.decorator.ts b/src/common/decorator/ip.decorator.ts index 54c5adf0..bccd3a48 100644 --- a/src/common/decorator/ip.decorator.ts +++ b/src/common/decorator/ip.decorator.ts @@ -7,7 +7,7 @@ * @Coding with Love */ -import { createParamDecorator, ExecutionContext } from '@nestjs/common' +import { ExecutionContext, createParamDecorator } from '@nestjs/common' import { FastifyRequest } from 'fastify' import { getIp } from '~/utils/ip.util' diff --git a/src/common/decorator/openapi.decorator.ts b/src/common/decorator/openapi.decorator.ts index a8a34a87..cde33737 100644 --- a/src/common/decorator/openapi.decorator.ts +++ b/src/common/decorator/openapi.decorator.ts @@ -5,5 +5,5 @@ export const ApiName: ClassDecorator = (target) => { return } const [name] = target.name.split('Controller') - ApiTags(name + ' Routes').call(null, target) + ApiTags(`${name} Routes`).call(null, target) } diff --git a/src/common/decorator/role.decorator.ts b/src/common/decorator/role.decorator.ts index 4ddbbbcc..34170c80 100644 --- a/src/common/decorator/role.decorator.ts +++ b/src/common/decorator/role.decorator.ts @@ -1,4 +1,4 @@ -import { createParamDecorator, ExecutionContext } from '@nestjs/common' +import { ExecutionContext, createParamDecorator } from '@nestjs/common' import { getNestExecutionContextRequest } from '~/utils/nest.util' export const IsGuest = createParamDecorator( diff --git a/src/common/filters/any-exception.filter.ts b/src/common/filters/any-exception.filter.ts index e7d17d06..208adc74 100644 --- a/src/common/filters/any-exception.filter.ts +++ b/src/common/filters/any-exception.filter.ts @@ -1,3 +1,5 @@ +import { WriteStream } from 'fs' +import { resolve } from 'path' import { ArgumentsHost, Catch, @@ -9,14 +11,12 @@ import { } from '@nestjs/common' import { Reflector } from '@nestjs/core' import { FastifyReply, FastifyRequest } from 'fastify' -import { WriteStream } from 'fs' -import { resolve } from 'path' +import { getIp } from '../../utils/ip.util' +import { LoggingInterceptor } from '../interceptors/logging.interceptor' import { HTTP_REQUEST_TIME } from '~/constants/meta.constant' import { LOG_DIR } from '~/constants/path.constant' import { REFLECTOR } from '~/constants/system.constant' import { isDev } from '~/global/env.global' -import { getIp } from '../../utils/ip.util' -import { LoggingInterceptor } from '../interceptors/logging.interceptor' type myError = { readonly status: number @@ -62,9 +62,7 @@ export class AllExceptionsFilter implements ExceptionFilter { `[${new Date().toISOString()}] ${decodeURI(request.raw.url)}: ${ (exception as any)?.response?.message || (exception as myError)?.message - }\n` + - (exception as Error).stack + - '\n', + }\n${(exception as Error).stack}\n`, ) } } else { @@ -79,11 +77,11 @@ export class AllExceptionsFilter implements ExceptionFilter { const prevRequestTs = this.reflector.get(HTTP_REQUEST_TIME, request as any) if (prevRequestTs) { - const content = request.method + ' -> ' + request.url + const content = `${request.method} -> ${request.url}` Logger.debug( - '--- 响应异常请求:' + - content + - chalk.yellow(` +${+new Date() - prevRequestTs}ms`), + `--- 响应异常请求:${content}${chalk.yellow( + ` +${+new Date() - prevRequestTs}ms`, + )}`, LoggingInterceptor.name, ) } diff --git a/src/common/guard/spider.guard.ts b/src/common/guard/spider.guard.ts index a47ce925..c07b4bbd 100644 --- a/src/common/guard/spider.guard.ts +++ b/src/common/guard/spider.guard.ts @@ -31,7 +31,7 @@ export class SpiderGuard implements CanActivate { if (ua && !isSpiderUA) { return true } - throw new ForbiddenException('爬虫是被禁止的哦,UA: ' + ua) + throw new ForbiddenException(`爬虫是被禁止的哦,UA: ${ua}`) } getRequest(context: ExecutionContext) { diff --git a/src/common/interceptors/analyze.interceptor.ts b/src/common/interceptors/analyze.interceptor.ts index 8102a685..dd08c94c 100644 --- a/src/common/interceptors/analyze.interceptor.ts +++ b/src/common/interceptors/analyze.interceptor.ts @@ -4,6 +4,7 @@ * @module interceptor/analyze * @author Innei */ +import { URL } from 'url' import { CallHandler, ExecutionContext, @@ -15,7 +16,6 @@ import isbot from 'isbot' import { InjectModel } from 'nestjs-typegoose' import { Observable } from 'rxjs' import UAParser from 'ua-parser-js' -import { URL } from 'url' import { RedisKeys } from '~/constants/cache.constant' import { AnalyzeModel } from '~/modules/analyze/analyze.model' import { OptionModel } from '~/modules/configs/configs.model' @@ -82,7 +82,7 @@ export class AnalyzeInterceptor implements NestInterceptor { await this.model.create({ ip, ua, - path: new URL('http://a.com' + url).pathname, + path: new URL(`http://a.com${url}`).pathname, }) const apiCallTimeRecord = await this.options.findOne({ name: 'apiCallTime', diff --git a/src/common/interceptors/json-serialize.interceptor.ts b/src/common/interceptors/json-serialize.interceptor.ts index 723cd270..7582a8cc 100644 --- a/src/common/interceptors/json-serialize.interceptor.ts +++ b/src/common/interceptors/json-serialize.interceptor.ts @@ -10,7 +10,7 @@ import { } from '@nestjs/common' import { Reflector } from '@nestjs/core' import { isArrayLike, isObjectLike } from 'lodash' -import { map, Observable } from 'rxjs' +import { Observable, map } from 'rxjs' import snakecaseKeys from 'snakecase-keys' import { RESPONSE_PASSTHROUGH_METADATA } from '~/constants/system.constant' diff --git a/src/common/interceptors/logging.interceptor.ts b/src/common/interceptors/logging.interceptor.ts index 112da5d0..b3e8970f 100644 --- a/src/common/interceptors/logging.interceptor.ts +++ b/src/common/interceptors/logging.interceptor.ts @@ -31,15 +31,15 @@ export class LoggingInterceptor implements NestInterceptor { ): Observable { const call$ = next.handle() const request = this.getRequest(context) - const content = request.method + ' -> ' + request.url - this.logger.debug('+++ 收到请求:' + content) + const content = `${request.method} -> ${request.url}` + this.logger.debug(`+++ 收到请求:${content}`) const now = +new Date() SetMetadata(HTTP_REQUEST_TIME, now)(this.getRequest(context) as any) return call$.pipe( tap(() => this.logger.debug( - '--- 响应请求:' + content + chalk.yellow(` +${+new Date() - now}ms`), + `--- 响应请求:${content}${chalk.yellow(` +${+new Date() - now}ms`)}`, ), ), ) diff --git a/src/common/middlewares/attach-auth.middleware.ts b/src/common/middlewares/attach-auth.middleware.ts index 34bf0a9d..579ba39a 100644 --- a/src/common/middlewares/attach-auth.middleware.ts +++ b/src/common/middlewares/attach-auth.middleware.ts @@ -3,8 +3,8 @@ * @author Innei */ -import { Injectable, NestMiddleware } from '@nestjs/common' import { IncomingMessage, ServerResponse } from 'http' +import { Injectable, NestMiddleware } from '@nestjs/common' import { parseRelativeUrl } from '~/utils/ip.util' @Injectable() diff --git a/src/global/consola.global.ts b/src/global/consola.global.ts index 2f0dd1ab..1f919dc0 100644 --- a/src/global/consola.global.ts +++ b/src/global/consola.global.ts @@ -1,17 +1,17 @@ /* eslint-disable prefer-rest-params */ -import { CronExpression } from '@nestjs/schedule' -import consola_, { FancyReporter, LogLevel } from 'consola' -import { CronJob } from 'cron' import { createWriteStream } from 'fs' import { resolve } from 'path' +import consola_, { FancyReporter, LogLevel } from 'consola' +import { CronJob } from 'cron' +import { CronExpression } from '@nestjs/schedule' import { argv } from 'zx' -import { LOG_DIR } from '~/constants/path.constant' import { redisSubPub } from '../utils/redis-subpub.util' import { getShortDate, getShortTime } from '../utils/time.util' import { isDev, isTest } from './env.global' +import { LOG_DIR } from '~/constants/path.constant' export const getTodayLogFilePath = () => - resolve(LOG_DIR, 'stdout_' + getShortDate(new Date()) + '.log') + resolve(LOG_DIR, `stdout_${getShortDate(new Date())}.log`) class Reporter extends FancyReporter { isInVirtualTerminal = typeof process.stdout.columns === 'undefined' // HACK: if got `undefined` that means in PM2 pty @@ -21,11 +21,9 @@ class Reporter extends FancyReporter { protected formatLogObj(): string { return this.isInVirtualTerminal - ? ( - chalk.gray(getShortTime(new Date())) + - ' ' + - super.formatLogObj.apply(this, arguments).replace(/^\n/, '') - ).trimEnd() + ? `${chalk.gray(getShortTime(new Date()))} ${super.formatLogObj + .apply(this, arguments) + .replace(/^\n/, '')}`.trimEnd() : super.formatLogObj.apply(this, arguments) } } diff --git a/src/global/index.global.ts b/src/global/index.global.ts index 5c7c4878..0dc0c658 100644 --- a/src/global/index.global.ts +++ b/src/global/index.global.ts @@ -1,36 +1,39 @@ -import { Logger } from '@nestjs/common' +/* eslint-disable import/order */ +import 'zx/globals' +import './dayjs.global' +import { consola, registerStdLogger } from './consola.global' + import cluster from 'cluster' import { mkdirSync } from 'fs' -import 'zx/globals' -import { CLUSTER } from '~/app.config' +import { Logger } from '@nestjs/common' import { DATA_DIR, LOG_DIR, TEMP_DIR, USER_ASSET_DIR, } from '~/constants/path.constant' -import { consola, registerStdLogger } from './consola.global' -import './dayjs.global' + import { isDev } from './env.global' +import { CLUSTER } from '~/app.config' // 建立目录 function mkdirs() { if (!CLUSTER.enable || cluster.isPrimary) { mkdirSync(DATA_DIR, { recursive: true }) - Logger.log(chalk.blue('数据目录已经建好: ' + DATA_DIR)) + Logger.log(chalk.blue(`数据目录已经建好: ${DATA_DIR}`)) mkdirSync(TEMP_DIR, { recursive: true }) - Logger.log(chalk.blue('临时目录已经建好: ' + TEMP_DIR)) + Logger.log(chalk.blue(`临时目录已经建好: ${TEMP_DIR}`)) mkdirSync(LOG_DIR, { recursive: true }) - Logger.log(chalk.blue('日志目录已经建好: ' + LOG_DIR)) + Logger.log(chalk.blue(`日志目录已经建好: ${LOG_DIR}`)) mkdirSync(USER_ASSET_DIR, { recursive: true }) - Logger.log(chalk.blue('资源目录已经建好: ' + USER_ASSET_DIR)) + Logger.log(chalk.blue(`资源目录已经建好: ${USER_ASSET_DIR}`)) } } function registerGlobal() { $.verbose = isDev Object.assign(globalThis, { - isDev: isDev, + isDev, consola, }) console.debug = (...rest) => { diff --git a/src/modules/aggregate/aggregate.controller.ts b/src/modules/aggregate/aggregate.controller.ts index a63b7332..c780b713 100644 --- a/src/modules/aggregate/aggregate.controller.ts +++ b/src/modules/aggregate/aggregate.controller.ts @@ -1,14 +1,14 @@ import { CacheKey, CacheTTL, Controller, Get, Query } from '@nestjs/common' import { ApiProperty } from '@nestjs/swagger' import { omit } from 'lodash' -import { Auth } from '~/common/decorator/auth.decorator' -import { ApiName } from '~/common/decorator/openapi.decorator' -import { IsMaster } from '~/common/decorator/role.decorator' -import { CacheKeys } from '~/constants/cache.constant' import { AnalyzeService } from '../analyze/analyze.service' import { ConfigsService } from '../configs/configs.service' import { TimelineQueryDto, TopQueryDto } from './aggregate.dto' import { AggregateService } from './aggregate.service' +import { Auth } from '~/common/decorator/auth.decorator' +import { ApiName } from '~/common/decorator/openapi.decorator' +import { IsMaster } from '~/common/decorator/role.decorator' +import { CacheKeys } from '~/constants/cache.constant' @Controller('aggregate') @ApiName diff --git a/src/modules/aggregate/aggregate.module.ts b/src/modules/aggregate/aggregate.module.ts index 4b5d3233..c37d96bc 100644 --- a/src/modules/aggregate/aggregate.module.ts +++ b/src/modules/aggregate/aggregate.module.ts @@ -1,5 +1,4 @@ -import { forwardRef, Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' +import { Module, forwardRef } from '@nestjs/common' import { AnalyzeModule } from '../analyze/analyze.module' import { CategoryModule } from '../category/category.module' import { CommentModule } from '../comment/comment.module' @@ -11,6 +10,7 @@ import { RecentlyModule } from '../recently/recently.module' import { SayModule } from '../say/say.module' import { AggregateController } from './aggregate.controller' import { AggregateService } from './aggregate.service' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ imports: [ diff --git a/src/modules/aggregate/aggregate.service.ts b/src/modules/aggregate/aggregate.service.ts index 63f54e39..e54c6e7b 100644 --- a/src/modules/aggregate/aggregate.service.ts +++ b/src/modules/aggregate/aggregate.service.ts @@ -1,18 +1,11 @@ -import { forwardRef, Inject, Injectable } from '@nestjs/common' -import { OnEvent } from '@nestjs/event-emitter' -import { DocumentType, ReturnModelType } from '@typegoose/typegoose' -import { AnyParamConstructor } from '@typegoose/typegoose/lib/types' -import dayjs from 'dayjs' -import { pick } from 'lodash' -import { FilterQuery } from 'mongoose' import { URL } from 'url' -import { CacheKeys, RedisKeys } from '~/constants/cache.constant' -import { EventBusEvents } from '~/constants/event.constant' -import { CacheService } from '~/processors/cache/cache.service' -import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' -import { addYearCondition } from '~/utils/query.util' -import { getRedisKey } from '~/utils/redis.util' -import { getShortDate } from '~/utils/time.util' +import { FilterQuery } from 'mongoose' +import { pick } from 'lodash' +import dayjs from 'dayjs' +import { AnyParamConstructor } from '@typegoose/typegoose/lib/types' +import { DocumentType, ReturnModelType } from '@typegoose/typegoose' +import { OnEvent } from '@nestjs/event-emitter' +import { Inject, Injectable, forwardRef } from '@nestjs/common' import { CategoryModel } from '../category/category.model' import { CategoryService } from '../category/category.service' import { CommentState } from '../comment/comment.model' @@ -28,6 +21,13 @@ import { RecentlyService } from '../recently/recently.service' import { SayService } from '../say/say.service' import { TimelineType } from './aggregate.dto' import { RSSProps } from './aggregate.interface' +import { getShortDate } from '~/utils/time.util' +import { getRedisKey } from '~/utils/redis.util' +import { addYearCondition } from '~/utils/query.util' +import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' +import { CacheService } from '~/processors/cache/cache.service' +import { CacheKeys, RedisKeys } from '~/constants/cache.constant' +import { EventBusEvents } from '~/constants/event.constant' @Injectable() export class AggregateService { constructor( @@ -138,10 +138,7 @@ export class AggregateService { // ? item.text.slice(0, 150) + '...' // : item.text), url: encodeURI( - '/posts/' + - (item.category as CategoryModel).slug + - '/' + - item.slug, + `/posts/${(item.category as CategoryModel).slug}/${item.slug}`, ), })), ) @@ -296,7 +293,7 @@ export class AggregateService { text: isSecret ? '这篇文章暂时没有公开呢' : note.text, created: note.created, modified: note.modified, - link: new URL('/notes/' + note.nid, baseURL).toString(), + link: new URL(`/notes/${note.nid}`, baseURL).toString(), } }) return postsRss diff --git a/src/modules/analyze/analyze.controller.ts b/src/modules/analyze/analyze.controller.ts index 70140dbd..02ffe592 100644 --- a/src/modules/analyze/analyze.controller.ts +++ b/src/modules/analyze/analyze.controller.ts @@ -1,5 +1,7 @@ import { Controller, Delete, Get, HttpCode, Query, Scope } from '@nestjs/common' import dayjs from 'dayjs' +import { AnalyzeDto } from './analyze.dto' +import { AnalyzeService } from './analyze.service' import { Auth } from '~/common/decorator/auth.decorator' import { Paginator } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' @@ -8,8 +10,6 @@ import { CacheService } from '~/processors/cache/cache.service' import { PagerDto } from '~/shared/dto/pager.dto' import { getRedisKey } from '~/utils/redis.util' import { getTodayEarly, getWeekStart } from '~/utils/time.util' -import { AnalyzeDto } from './analyze.dto' -import { AnalyzeService } from './analyze.service' @Controller({ path: 'analyze', scope: Scope.REQUEST }) @ApiName @@ -67,12 +67,12 @@ export class AnalyzeController { .map((v, i) => { return [ { - hour: i + '时', + hour: `${i}时`, key: 'ip', value: day[i.toString().padStart(2, '0')]?.ip || 0, }, { - hour: i + '时', + hour: `${i}时`, key: 'pv', value: day[i.toString().padStart(2, '0')]?.pv || 0, }, @@ -83,11 +83,11 @@ export class AnalyzeController { const weekData = all .slice(0, 7) .map((item) => { - const date = - '周' + + const date = `周${ ['日', '一', '二', '三', '四', '五', '六'][ dayjs(item.date).get('day') ] + }` return [ { day: date, diff --git a/src/modules/analyze/analyze.model.ts b/src/modules/analyze/analyze.model.ts index feba4d1f..d48b65fa 100644 --- a/src/modules/analyze/analyze.model.ts +++ b/src/modules/analyze/analyze.model.ts @@ -1,5 +1,5 @@ import { ApiHideProperty } from '@nestjs/swagger' -import { index, modelOptions, prop, Severity } from '@typegoose/typegoose' +import { Severity, index, modelOptions, prop } from '@typegoose/typegoose' import { SchemaTypes } from 'mongoose' import type { UAParser } from 'ua-parser-js' import { BaseModel } from '~/shared/model/base.model' diff --git a/src/modules/analyze/analyze.service.ts b/src/modules/analyze/analyze.service.ts index a49a1dd8..086b0c91 100644 --- a/src/modules/analyze/analyze.service.ts +++ b/src/modules/analyze/analyze.service.ts @@ -4,11 +4,11 @@ import dayjs from 'dayjs' import { merge } from 'lodash' import { PipelineStage } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' +import { OptionModel } from '../configs/configs.model' +import { AnalyzeModel } from './analyze.model' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/cache/cache.service' import { getRedisKey } from '~/utils/redis.util' -import { OptionModel } from '../configs/configs.model' -import { AnalyzeModel } from './analyze.model' @Injectable() export class AnalyzeService { diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index 94c77c51..1b4ec8db 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -12,17 +12,17 @@ import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger' import { Transform } from 'class-transformer' import { IsDate, - isMongoId, IsNotEmpty, IsOptional, IsString, + isMongoId, } from 'class-validator' +import { AuthService } from './auth.service' import { Auth } from '~/common/decorator/auth.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { IsMaster as Master } from '~/common/decorator/role.decorator' import { EventBusEvents } from '~/constants/event.constant' import { MongoIdDto } from '~/shared/dto/id.dto' -import { AuthService } from './auth.service' export class TokenDto { @IsDate() diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts index 9150540a..8b0872ed 100644 --- a/src/modules/auth/auth.module.ts +++ b/src/modules/auth/auth.module.ts @@ -1,12 +1,12 @@ +import cluster from 'cluster' import { Module } from '@nestjs/common' import { JwtModule } from '@nestjs/jwt' import { PassportModule } from '@nestjs/passport' -import cluster from 'cluster' import { machineIdSync } from 'node-machine-id' -import { CLUSTER, SECURITY } from '~/app.config' import { AuthController } from './auth.controller' import { AuthService } from './auth.service' import { JwtStrategy } from './jwt.strategy' +import { CLUSTER, SECURITY } from '~/app.config' const getMachineId = () => { const id = machineIdSync() diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts index a3ddd1a5..860ff6fb 100644 --- a/src/modules/auth/auth.service.ts +++ b/src/modules/auth/auth.service.ts @@ -5,13 +5,13 @@ import dayjs from 'dayjs' import { isDate, omit } from 'lodash' import { customAlphabet } from 'nanoid/async' import { InjectModel } from 'nestjs-typegoose' -import { - TokenModel, - UserDocument, - UserModel as User, -} from '~/modules/user/user.model' import { TokenDto } from './auth.controller' import { JwtPayload } from './interfaces/jwt-payload.interface' +import { + TokenModel, + UserModel as User, + UserDocument, +} from '~/modules/user/user.model' @Injectable() export class AuthService { @@ -53,11 +53,10 @@ export class AuthService { async generateAccessToken() { const ap = customAlphabet( - '1234567890' + - Array(26) - .fill(null) - .map((_, i) => String.fromCharCode(97 + i)) - .join(''), + `1234567890${Array(26) + .fill(null) + .map((_, i) => String.fromCharCode(97 + i)) + .join('')}`, 40, ) return await ap() diff --git a/src/modules/backup/backup.controller.ts b/src/modules/backup/backup.controller.ts index 1b0ebf37..24eb2aaa 100644 --- a/src/modules/backup/backup.controller.ts +++ b/src/modules/backup/backup.controller.ts @@ -1,3 +1,4 @@ +import { Readable } from 'stream' import { BadRequestException, Controller, @@ -14,13 +15,12 @@ import { } from '@nestjs/common' import { ApiProperty, ApiResponseProperty } from '@nestjs/swagger' import { FastifyRequest } from 'fastify' -import { Readable } from 'stream' +import { BackupService } from './backup.service' import { Auth } from '~/common/decorator/auth.decorator' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { UploadService } from '~/processors/helper/helper.upload.service' import { getMediumDateTime } from '~/utils' -import { BackupService } from './backup.service' @Controller({ path: 'backups', scope: Scope.REQUEST }) @ApiName diff --git a/src/modules/backup/backup.service.ts b/src/modules/backup/backup.service.ts index 9c26b0a9..3d79385f 100644 --- a/src/modules/backup/backup.service.ts +++ b/src/modules/backup/backup.service.ts @@ -1,23 +1,23 @@ +import { exec } from 'child_process' +import { existsSync, statSync } from 'fs' +import { readFile, readdir, rm, writeFile } from 'fs/promises' +import { join, resolve } from 'path' +import { Readable } from 'stream' +import { promisify } from 'util' +import mkdirp from 'mkdirp' import { BadRequestException, Injectable, InternalServerErrorException, Logger, } from '@nestjs/common' -import { exec } from 'child_process' -import { existsSync, statSync } from 'fs' -import { readdir, readFile, rm, writeFile } from 'fs/promises' -import mkdirp from 'mkdirp' -import { join, resolve } from 'path' -import { Readable } from 'stream' -import { promisify } from 'util' +import { ConfigsService } from '../configs/configs.service' import { MONGO_DB } from '~/app.config' import { BACKUP_DIR, DATA_DIR } from '~/constants/path.constant' import { AdminEventsGateway } from '~/processors/gateway/admin/events.gateway' import { EventTypes } from '~/processors/gateway/events.types' import { getMediumDateTime } from '~/utils' import { getFolderSize } from '~/utils/system.util' -import { ConfigsService } from '../configs/configs.service' @Injectable() export class BackupService { @@ -94,12 +94,12 @@ export class BackupService { this.logger.log('--> 备份成功') } catch (e) { this.logger.error( - '--> 备份失败, 请确保已安装 zip 或 mongo-tools, mongo-tools 的版本需要与 mongod 版本一致, ' + - e.message || e.stderr, + `--> 备份失败, 请确保已安装 zip 或 mongo-tools, mongo-tools 的版本需要与 mongod 版本一致, ${e.message}` || + e.stderr, ) throw e } - const path = join(backupDirPath, 'backup-' + dateDir + '.zip') + const path = join(backupDirPath, `backup-${dateDir}.zip`) return { buffer: await readFile(path), @@ -118,7 +118,7 @@ export class BackupService { } checkBackupExist(dirname: string) { - const path = join(BACKUP_DIR, dirname, 'backup-' + dirname + '.zip') + const path = join(BACKUP_DIR, dirname, `backup-${dirname}.zip`) if (!existsSync(path)) { throw new BadRequestException('文件不存在') } diff --git a/src/modules/category/category.controller.ts b/src/modules/category/category.controller.ts index 460f9631..840cf3f7 100644 --- a/src/modules/category/category.controller.ts +++ b/src/modules/category/category.controller.ts @@ -3,7 +3,6 @@ import { Body, Controller, Delete, - forwardRef, Get, HttpCode, Inject, @@ -12,14 +11,10 @@ import { Post, Put, Query, + forwardRef, } from '@nestjs/common' import { ApiQuery } from '@nestjs/swagger' import { isValidObjectId } from 'mongoose' -import { Auth } from '~/common/decorator/auth.decorator' -import { ApiName } from '~/common/decorator/openapi.decorator' -import { IsMaster } from '~/common/decorator/role.decorator' -import { CannotFindException } from '~/common/exceptions/cant-find.exception' -import { MongoIdDto } from '~/shared/dto/id.dto' import { PostService } from '../post/post.service' import { MultiCategoriesQueryDto, @@ -32,6 +27,11 @@ import { PartialCategoryModel, } from './category.model' import { CategoryService } from './category.service' +import { Auth } from '~/common/decorator/auth.decorator' +import { ApiName } from '~/common/decorator/openapi.decorator' +import { IsMaster } from '~/common/decorator/role.decorator' +import { CannotFindException } from '~/common/exceptions/cant-find.exception' +import { MongoIdDto } from '~/shared/dto/id.dto' @Controller({ path: 'categories' }) @ApiName diff --git a/src/modules/category/category.dto.ts b/src/modules/category/category.dto.ts index 6097b2de..34d8b72b 100644 --- a/src/modules/category/category.dto.ts +++ b/src/modules/category/category.dto.ts @@ -9,8 +9,8 @@ import { IsString, } from 'class-validator' import { uniq } from 'lodash' -import { IsBooleanOrString } from '~/utils/validator/isBooleanOrString' import { CategoryType } from './category.model' +import { IsBooleanOrString } from '~/utils/validator/isBooleanOrString' export class SlugOrIdDto { @IsString() diff --git a/src/modules/category/category.module.ts b/src/modules/category/category.module.ts index 502c3824..8e208b58 100644 --- a/src/modules/category/category.module.ts +++ b/src/modules/category/category.module.ts @@ -1,4 +1,4 @@ -import { forwardRef, Module } from '@nestjs/common' +import { Module, forwardRef } from '@nestjs/common' import { PostModule } from '../post/post.module' import { CategoryController } from './category.controller' import { CategoryService } from './category.service' diff --git a/src/modules/category/category.service.ts b/src/modules/category/category.service.ts index 212fd5d7..c2f0de36 100644 --- a/src/modules/category/category.service.ts +++ b/src/modules/category/category.service.ts @@ -1,12 +1,12 @@ -import { forwardRef, Inject, Injectable } from '@nestjs/common' +import { Inject, Injectable, forwardRef } from '@nestjs/common' import { DocumentType, ReturnModelType } from '@typegoose/typegoose' import { omit } from 'lodash' import { FilterQuery } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' -import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { PostModel } from '../post/post.model' import { PostService } from '../post/post.service' import { CategoryModel, CategoryType } from './category.model' +import { CannotFindException } from '~/common/exceptions/cant-find.exception' @Injectable() export class CategoryService { diff --git a/src/modules/comment/comment.controller.ts b/src/modules/comment/comment.controller.ts index 817de9ee..9a5a84d3 100644 --- a/src/modules/comment/comment.controller.ts +++ b/src/modules/comment/comment.controller.ts @@ -14,6 +14,16 @@ import { } from '@nestjs/common' import { ApiOperation, ApiParam } from '@nestjs/swagger' import { DocumentType } from '@typegoose/typegoose' +import { UserModel } from '../user/user.model' +import { + CommentDto, + CommentRefTypesDto, + StateDto, + TextOnlyDto, +} from './comment.dto' +import { CommentFilterEmailInterceptor } from './comment.interceptor' +import { CommentModel, CommentState } from './comment.model' +import { CommentService } from './comment.service' import { Auth } from '~/common/decorator/auth.decorator' import { CurrentUser } from '~/common/decorator/current-user.decorator' import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator' @@ -26,16 +36,6 @@ import { ReplyMailType } from '~/processors/helper/helper.email.service' import { MongoIdDto } from '~/shared/dto/id.dto' import { PagerDto } from '~/shared/dto/pager.dto' import { transformDataToPaginate } from '~/utils/transfrom.util' -import { UserModel } from '../user/user.model' -import { - CommentDto, - CommentRefTypesDto, - StateDto, - TextOnlyDto, -} from './comment.dto' -import { CommentFilterEmailInterceptor } from './comment.interceptor' -import { CommentModel, CommentState } from './comment.model' -import { CommentService } from './comment.service' @Controller({ path: 'comments' }) @UseInterceptors(CommentFilterEmailInterceptor) diff --git a/src/modules/comment/comment.model.ts b/src/modules/comment/comment.model.ts index 6c89ea00..970d8228 100644 --- a/src/modules/comment/comment.model.ts +++ b/src/modules/comment/comment.model.ts @@ -1,18 +1,18 @@ +import { URL } from 'url' import { DocumentType, + Ref, modelOptions, pre, prop, - Ref, } from '@typegoose/typegoose' import { BeAnObject } from '@typegoose/typegoose/lib/types' import { Query, Types } from 'mongoose' -import { URL } from 'url' -import { BaseModel } from '~/shared/model/base.model' -import { getAvatar } from '~/utils' import { NoteModel } from '../note/note.model' import { PageModel } from '../page/page.model' import { PostModel } from '../post/post.model' +import { getAvatar } from '~/utils' +import { BaseModel } from '~/shared/model/base.model' function autoPopulateSubs( this: Query< diff --git a/src/modules/comment/comment.module.ts b/src/modules/comment/comment.module.ts index 1626bae6..482336ec 100644 --- a/src/modules/comment/comment.module.ts +++ b/src/modules/comment/comment.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' import { UserModule } from '../user/user.module' import { CommentController } from './comment.controller' import { CommentService } from './comment.service' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ controllers: [CommentController], diff --git a/src/modules/comment/comment.service.ts b/src/modules/comment/comment.service.ts index cd3fe471..f1905177 100644 --- a/src/modules/comment/comment.service.ts +++ b/src/modules/comment/comment.service.ts @@ -1,9 +1,13 @@ +import { URL } from 'url' import { BadRequestException, Injectable, Logger } from '@nestjs/common' import { DocumentType } from '@typegoose/typegoose' import { BeAnObject } from '@typegoose/typegoose/lib/types' import { LeanDocument, Types } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' -import { URL } from 'url' +import { ConfigsService } from '../configs/configs.service' +import { UserService } from '../user/user.service' +import BlockedKeywords from './block-keywords.json' +import { CommentModel, CommentRefTypes } from './comment.model' import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { DatabaseService } from '~/processors/database/database.service' import { @@ -12,10 +16,6 @@ import { } from '~/processors/helper/helper.email.service' import { WriteBaseModel } from '~/shared/model/base.model' import { hasChinese } from '~/utils' -import { ConfigsService } from '../configs/configs.service' -import { UserService } from '../user/user.service' -import BlockedKeywords from './block-keywords.json' -import { CommentModel, CommentRefTypes } from './comment.model' @Injectable() export class CommentService { private readonly logger: Logger = new Logger(CommentService.name) @@ -234,7 +234,7 @@ export class CommentService { } = await this.configs.waitForConfigReady() switch (type) { case CommentRefTypes.Note: { - return new URL('/notes/' + model.nid, base).toString() + return new URL(`/notes/${model.nid}`, base).toString() } case CommentRefTypes.Page: { return new URL(`/${model.slug}`, base).toString() diff --git a/src/modules/configs/configs.dto.ts b/src/modules/configs/configs.dto.ts index 1f2b8c42..736e8f65 100644 --- a/src/modules/configs/configs.dto.ts +++ b/src/modules/configs/configs.dto.ts @@ -5,8 +5,8 @@ import { ArrayUnique, IsBoolean, IsEmail, - IsInt, IsIP, + IsInt, IsNotEmpty, IsOptional, IsString, diff --git a/src/modules/configs/configs.model.ts b/src/modules/configs/configs.model.ts index 86e545f2..f7bc1524 100644 --- a/src/modules/configs/configs.model.ts +++ b/src/modules/configs/configs.model.ts @@ -1,4 +1,4 @@ -import { modelOptions, prop, Severity } from '@typegoose/typegoose' +import { Severity, modelOptions, prop } from '@typegoose/typegoose' import { Schema } from 'mongoose' @modelOptions({ diff --git a/src/modules/configs/configs.service.ts b/src/modules/configs/configs.service.ts index 91b4ebdd..69aeca47 100644 --- a/src/modules/configs/configs.service.ts +++ b/src/modules/configs/configs.service.ts @@ -1,3 +1,4 @@ +import cluster from 'cluster' import { BadRequestException, Injectable, @@ -9,16 +10,10 @@ import { DocumentType, ReturnModelType } from '@typegoose/typegoose' import { BeAnObject } from '@typegoose/typegoose/lib/types' import camelcaseKeys from 'camelcase-keys' import { ClassConstructor, plainToInstance } from 'class-transformer' -import { validateSync, ValidatorOptions } from 'class-validator' -import cluster from 'cluster' +import { ValidatorOptions, validateSync } from 'class-validator' import { cloneDeep, mergeWith } from 'lodash' import { LeanDocument } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' -import { RedisKeys } from '~/constants/cache.constant' -import { EventBusEvents } from '~/constants/event.constant' -import { CacheService } from '~/processors/cache/cache.service' -import { sleep } from '~/utils' -import { getRedisKey } from '~/utils/redis.util' import * as optionDtos from '../configs/configs.dto' import { UserModel } from '../user/user.model' import { UserService } from '../user/user.service' @@ -29,6 +24,11 @@ import { } from './configs.dto' import { IConfig, IConfigKeys } from './configs.interface' import { OptionModel } from './configs.model' +import { RedisKeys } from '~/constants/cache.constant' +import { EventBusEvents } from '~/constants/event.constant' +import { CacheService } from '~/processors/cache/cache.service' +import { sleep } from '~/utils' +import { getRedisKey } from '~/utils/redis.util' const allOptionKeys: Set = new Set() const map: Record = Object.entries(optionDtos).reduce( @@ -50,7 +50,7 @@ const generateDefaultConfig: () => IConfig = () => ({ description: '哈喽~欢迎光临', }, url: { - wsUrl: '', //todo + wsUrl: '', // todo adminUrl: '', serverUrl: '', webUrl: '', diff --git a/src/modules/debug/debug.controller.ts b/src/modules/debug/debug.controller.ts index 21b9d0d1..8d92362a 100644 --- a/src/modules/debug/debug.controller.ts +++ b/src/modules/debug/debug.controller.ts @@ -7,14 +7,14 @@ import { Request, Response, } from '@nestjs/common' +import { createMockedContextResponse } from '../serverless/mock-response.util' +import { ServerlessService } from '../serverless/serverless.service' +import { SnippetModel, SnippetType } from '../snippet/snippet.model' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { AdminEventsGateway } from '~/processors/gateway/admin/events.gateway' import { EventTypes } from '~/processors/gateway/events.types' import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' import { PagerDto } from '~/shared/dto/pager.dto' -import { createMockedContextResponse } from '../serverless/mock-response.util' -import { ServerlessService } from '../serverless/serverless.service' -import { SnippetModel, SnippetType } from '../snippet/snippet.model' @Controller('debug') export class DebugController { diff --git a/src/modules/feed/feed.controller.ts b/src/modules/feed/feed.controller.ts index 8496d04c..be526c95 100644 --- a/src/modules/feed/feed.controller.ts +++ b/src/modules/feed/feed.controller.ts @@ -1,12 +1,12 @@ import { CacheKey, CacheTTL, Controller, Get, Header } from '@nestjs/common' import { minify } from 'html-minifier' import xss from 'xss' -import { HTTPDecorators } from '~/common/decorator/http.decorator' -import { ApiName } from '~/common/decorator/openapi.decorator' -import { CacheKeys } from '~/constants/cache.constant' import { AggregateService } from '../aggregate/aggregate.service' import { ConfigsService } from '../configs/configs.service' import { MarkdownService } from '../markdown/markdown.service' +import { HTTPDecorators } from '~/common/decorator/http.decorator' +import { ApiName } from '~/common/decorator/openapi.decorator' +import { CacheKeys } from '~/constants/cache.constant' @Controller('feed') @ApiName @@ -62,7 +62,7 @@ export class FeedController { )}'>${xss(item.link)} ${this.markdownService.renderMarkdownContent(item.text)}

- 看完了?说点什么呢 + 看完了?说点什么呢

`, { collapseWhitespace: true, diff --git a/src/modules/health/health.controller.ts b/src/modules/health/health.controller.ts index 08930618..4ea7d3f2 100644 --- a/src/modules/health/health.controller.ts +++ b/src/modules/health/health.controller.ts @@ -1,3 +1,5 @@ +import { resolve } from 'path' +import { Readable } from 'stream' import { BadRequestException, Controller, @@ -14,8 +16,7 @@ import { Reflector } from '@nestjs/core' import { SchedulerRegistry } from '@nestjs/schedule' import type { FastifyReply } from 'fastify' import { isFunction, isString } from 'lodash' -import { resolve } from 'path' -import { Readable } from 'stream' +import { LogQueryDto, LogTypeDto } from './health.dto' import { Auth } from '~/common/decorator/auth.decorator' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' @@ -25,7 +26,6 @@ import { SCHEDULE_CRON_OPTIONS } from '~/constants/system.constant' import { getTodayLogFilePath } from '~/global/consola.global' import { CronService } from '~/processors/helper/helper.cron.service' import { TaskQueueService } from '~/processors/helper/helper.tq.service' -import { LogQueryDto, LogTypeDto } from './health.dto' @Controller({ path: 'health', scope: Scope.REQUEST, @@ -174,7 +174,7 @@ export class HealthController { throw new BadRequestException('log dir not exists') } const filename = - __filename ?? `mx-server-${type}${index === 0 ? '' : '-' + index}.log` + __filename ?? `mx-server-${type}${index === 0 ? '' : `-${index}`}.log` const logPath = path.join(logDir, filename) if (!fs.existsSync(logPath)) { throw new BadRequestException('log file not exists') diff --git a/src/modules/init/init.controller.ts b/src/modules/init/init.controller.ts index 9c5f8e8f..4a2b4da1 100644 --- a/src/modules/init/init.controller.ts +++ b/src/modules/init/init.controller.ts @@ -9,10 +9,10 @@ import { Scope, UnprocessableEntityException, } from '@nestjs/common' -import { ApiName } from '~/common/decorator/openapi.decorator' import { ConfigsService } from '../configs/configs.service' import { ConfigKeyDto } from '../option/dtos/config.dto' import { InitService } from './init.service' +import { ApiName } from '~/common/decorator/openapi.decorator' @Controller({ path: '/init', diff --git a/src/modules/init/init.service.ts b/src/modules/init/init.service.ts index 9b6298ca..bcb1bdf0 100644 --- a/src/modules/init/init.service.ts +++ b/src/modules/init/init.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common' -import { DATA_DIR, TEMP_DIR } from '~/constants/path.constant' import { UserService } from '../user/user.service' +import { DATA_DIR, TEMP_DIR } from '~/constants/path.constant' @Injectable() export class InitService { diff --git a/src/modules/link/link.controller.ts b/src/modules/link/link.controller.ts index 66c96da2..205a2d53 100644 --- a/src/modules/link/link.controller.ts +++ b/src/modules/link/link.controller.ts @@ -8,15 +8,15 @@ import { Post, Query, } from '@nestjs/common' +import { LinkQueryDto } from './link.dto' +import { LinkModel } from './link.model' +import { LinkService } from './link.service' import { Auth } from '~/common/decorator/auth.decorator' import { Paginator } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { IsMaster } from '~/common/decorator/role.decorator' import { PagerDto } from '~/shared/dto/pager.dto' import { BaseCrudFactory } from '~/utils/crud.util' -import { LinkQueryDto } from './link.dto' -import { LinkModel } from './link.model' -import { LinkService } from './link.service' const paths = ['links', 'friends'] @Controller(paths) diff --git a/src/modules/link/link.model.ts b/src/modules/link/link.model.ts index f311554a..17f6f897 100644 --- a/src/modules/link/link.model.ts +++ b/src/modules/link/link.model.ts @@ -1,3 +1,4 @@ +import { URL } from 'url' import { ApiProperty } from '@nestjs/swagger' import { modelOptions, prop } from '@typegoose/typegoose' import { Transform } from 'class-transformer' @@ -10,7 +11,6 @@ import { MaxLength, } from 'class-validator' import { range } from 'lodash' -import { URL } from 'url' import { BaseModel } from '~/shared/model/base.model' export enum LinkType { diff --git a/src/modules/link/link.module.ts b/src/modules/link/link.module.ts index d80cd133..77703599 100644 --- a/src/modules/link/link.module.ts +++ b/src/modules/link/link.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' import { LinkController, LinkControllerCrud } from './link.controller' import { LinkService } from './link.service' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ controllers: [LinkController, LinkControllerCrud], diff --git a/src/modules/link/link.service.ts b/src/modules/link/link.service.ts index e905b2c7..62b1ec5d 100644 --- a/src/modules/link/link.service.ts +++ b/src/modules/link/link.service.ts @@ -1,5 +1,7 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common' import { InjectModel } from 'nestjs-typegoose' +import { ConfigsService } from '../configs/configs.service' +import { LinkModel, LinkState, LinkType } from './link.model' import { isDev } from '~/global/env.global' import { AdminEventsGateway } from '~/processors/gateway/admin/events.gateway' import { EventTypes } from '~/processors/gateway/events.types' @@ -8,8 +10,6 @@ import { LinkApplyEmailType, } from '~/processors/helper/helper.email.service' import { HttpService } from '~/processors/helper/helper.http.service' -import { ConfigsService } from '../configs/configs.service' -import { LinkModel, LinkState, LinkType } from './link.model' @Injectable() export class LinkService { diff --git a/src/modules/markdown/markdown.controller.ts b/src/modules/markdown/markdown.controller.ts index 0802da45..668e2cf3 100644 --- a/src/modules/markdown/markdown.controller.ts +++ b/src/modules/markdown/markdown.controller.ts @@ -1,3 +1,7 @@ +import { join } from 'path' +import { performance } from 'perf_hooks' +import { Readable } from 'stream' +import { URL } from 'url' import { Body, CacheTTL, @@ -15,19 +19,7 @@ import { render } from 'ejs' import { minify } from 'html-minifier' import JSZip from 'jszip' import { isNil } from 'lodash' -import { join } from 'path' -import { performance } from 'perf_hooks' -import { Readable } from 'stream' -import { URL } from 'url' import xss from 'xss' -import { Auth } from '~/common/decorator/auth.decorator' -import { HttpCache } from '~/common/decorator/cache.decorator' -import { HTTPDecorators } from '~/common/decorator/http.decorator' -import { ApiName } from '~/common/decorator/openapi.decorator' -import { IsMaster } from '~/common/decorator/role.decorator' -import { ArticleTypeEnum } from '~/constants/article.constant' -import { MongoIdDto } from '~/shared/dto/id.dto' -import { getShortDateTime } from '~/utils' import { CategoryModel } from '../category/category.model' import { ConfigsService } from '../configs/configs.service' import { NoteModel } from '../note/note.model' @@ -40,6 +32,14 @@ import { } from './markdown.dto' import { MarkdownYAMLProperty } from './markdown.interface' import { MarkdownService } from './markdown.service' +import { Auth } from '~/common/decorator/auth.decorator' +import { HttpCache } from '~/common/decorator/cache.decorator' +import { HTTPDecorators } from '~/common/decorator/http.decorator' +import { ApiName } from '~/common/decorator/openapi.decorator' +import { IsMaster } from '~/common/decorator/role.decorator' +import { ArticleTypeEnum } from '~/constants/article.constant' +import { MongoIdDto } from '~/shared/dto/id.dto' +import { getShortDateTime } from '~/utils' @Controller('markdown') @ApiName @@ -109,7 +109,7 @@ export class MarkdownController { convertor(post, { categories: (post.category as CategoryModel).name, type: 'post', - permalink: 'posts/' + post.slug, + permalink: `posts/${post.slug}`, }), ) const convertNote = notes.map((note) => @@ -117,7 +117,7 @@ export class MarkdownController { mood: note.mood, weather: note.weather, id: note.nid, - permalink: 'notes/' + note.nid, + permalink: `notes/${note.nid}`, type: 'note', slug: note.nid.toString(), }), diff --git a/src/modules/markdown/markdown.service.ts b/src/modules/markdown/markdown.service.ts index 28d003d8..3498c9a5 100644 --- a/src/modules/markdown/markdown.service.ts +++ b/src/modules/markdown/markdown.service.ts @@ -7,14 +7,14 @@ import { marked } from 'marked' import { Types } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' import xss from 'xss' -import { DatabaseService } from '~/processors/database/database.service' -import { AssetService } from '~/processors/helper/helper.asset.service' import { CategoryModel } from '../category/category.model' import { NoteModel } from '../note/note.model' import { PageModel } from '../page/page.model' import { PostModel } from '../post/post.model' import { DatatypeDto } from './markdown.dto' import { MarkdownYAMLProperty } from './markdown.interface' +import { AssetService } from '~/processors/helper/helper.asset.service' +import { DatabaseService } from '~/processors/database/database.service' @Injectable() export class MarkdownService { constructor( @@ -74,7 +74,7 @@ export class MarkdownService { for await (const item of data) { if (!item.meta) { models.push({ - title: '未命名-' + count++, + title: `未命名-${count++}`, slug: new Date().getTime(), text: item.text, ...genDate(item), @@ -294,13 +294,11 @@ ${text.trim()} code(code, lang) { if (lang == 'mermaid') { - return '
' + code + '
' + return `
${code}
` } else { - return ( - `
` +
-              xss(code) +
-              '
' - ) + return `
${xss(
+              code,
+            )}
` } }, }, @@ -319,7 +317,7 @@ ${text.trim()} }) const themeStyleSheet = await this.assetService.getAsset( - '/markdown/theme/' + theme + '.css', + `/markdown/theme/${theme}.css`, { encoding: 'utf-8' }, ) return { diff --git a/src/modules/note/note.controller.ts b/src/modules/note/note.controller.ts index b6cd1cdc..aafcba51 100644 --- a/src/modules/note/note.controller.ts +++ b/src/modules/note/note.controller.ts @@ -13,6 +13,14 @@ import { Query, } from '@nestjs/common' import { ApiOperation } from '@nestjs/swagger' +import { + ListQueryDto, + NidType, + NoteQueryDto, + PasswordQueryDto, +} from './note.dto' +import { NoteModel, PartialNoteModel } from './note.model' +import { NoteService } from './note.service' import { Auth } from '~/common/decorator/auth.decorator' import { Paginator } from '~/common/decorator/http.decorator' import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator' @@ -26,14 +34,6 @@ import { addHidePasswordAndHideCondition, addYearCondition, } from '~/utils/query.util' -import { - ListQueryDto, - NidType, - NoteQueryDto, - PasswordQueryDto, -} from './note.dto' -import { NoteModel, PartialNoteModel } from './note.model' -import { NoteService } from './note.service' @ApiName @Controller({ path: 'notes' }) @@ -54,7 +54,7 @@ export class NoteController { isMaster ? '+location +coordinates' : '-location -coordinates', ) - return { data: latest, next: next } + return { data: latest, next } } @Get('/') @@ -92,7 +92,7 @@ export class NoteController { _id: id, ...condition, }) - .select('+password ' + (isMaster ? '+location +coordinates' : '')) + .select(`+password ${isMaster ? '+location +coordinates' : ''}`) .lean() if (!current) { throw new CannotFindException() diff --git a/src/modules/note/note.module.ts b/src/modules/note/note.module.ts index a40e08c8..56de383f 100644 --- a/src/modules/note/note.module.ts +++ b/src/modules/note/note.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' import { NoteController } from './note.controller' import { NoteService } from './note.service' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ controllers: [NoteController], diff --git a/src/modules/note/note.service.ts b/src/modules/note/note.service.ts index 138d3001..0d71b0c5 100644 --- a/src/modules/note/note.service.ts +++ b/src/modules/note/note.service.ts @@ -4,13 +4,13 @@ import { DocumentType } from '@typegoose/typegoose' import { isDefined, isMongoId } from 'class-validator' import { FilterQuery } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' +import { NoteModel } from './note.model' import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { EventBusEvents } from '~/constants/event.constant' import { EventTypes } from '~/processors/gateway/events.types' import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' import { ImageService } from '~/processors/helper/helper.image.service' import { deleteKeys } from '~/utils' -import { NoteModel } from './note.model' @Injectable() export class NoteService { diff --git a/src/modules/option/controllers/base.option.controller.ts b/src/modules/option/controllers/base.option.controller.ts index 1d08c25b..6df6c983 100644 --- a/src/modules/option/controllers/base.option.controller.ts +++ b/src/modules/option/controllers/base.option.controller.ts @@ -7,12 +7,12 @@ import { UnprocessableEntityException, } from '@nestjs/common' import { instanceToPlain } from 'class-transformer' +import { ConfigKeyDto } from '../dtos/config.dto' +import { OptionController } from '../option.decorator' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { IConfig } from '~/modules/configs/configs.interface' import { ConfigsService } from '~/modules/configs/configs.service' import { classToJsonSchema } from '~/utils/jsonschema.util' -import { ConfigKeyDto } from '../dtos/config.dto' -import { OptionController } from '../option.decorator' @OptionController() export class BaseOptionController { @@ -36,7 +36,7 @@ export class BaseOptionController { async getOptionKey(@Param('key') key: keyof IConfig) { if (typeof key !== 'string' && !key) { throw new UnprocessableEntityException( - 'key must be IConfigKeys, got ' + key, + `key must be IConfigKeys, got ${key}`, ) } const value = await this.configs.get(key) diff --git a/src/modules/option/controllers/email.option.controller.ts b/src/modules/option/controllers/email.option.controller.ts index 74ee8c0a..9e83a547 100644 --- a/src/modules/option/controllers/email.option.controller.ts +++ b/src/modules/option/controllers/email.option.controller.ts @@ -1,11 +1,11 @@ import { Body, Delete, Get, Put, Query } from '@nestjs/common' +import { ReplyEmailBodyDto, ReplyEmailTypeDto } from '../dtos/email.dto' +import { OptionController } from '../option.decorator' import { EmailService, EmailTemplateRenderProps, ReplyMailType, } from '~/processors/helper/helper.email.service' -import { ReplyEmailBodyDto, ReplyEmailTypeDto } from '../dtos/email.dto' -import { OptionController } from '../option.decorator' @OptionController('Email', 'email') export class EmailOptionController { diff --git a/src/modules/option/option.decorator.ts b/src/modules/option/option.decorator.ts index f9e7058e..5a25a71f 100644 --- a/src/modules/option/option.decorator.ts +++ b/src/modules/option/option.decorator.ts @@ -1,4 +1,4 @@ -import { applyDecorators, Controller } from '@nestjs/common' +import { Controller, applyDecorators } from '@nestjs/common' import { ApiTags } from '@nestjs/swagger' import { Auth } from '~/common/decorator/auth.decorator' @@ -7,8 +7,8 @@ export function OptionController(name?: string, postfixRoute?: string) { return applyDecorators( Auth(), Controller( - postfixRoute ? routes.map((route) => route + '/' + postfixRoute) : routes, + postfixRoute ? routes.map((route) => `${route}/${postfixRoute}`) : routes, ), - ApiTags(`${name ? name + ' ' : ''}Option Routes`), + ApiTags(`${name ? `${name} ` : ''}Option Routes`), ) } diff --git a/src/modules/option/option.module.ts b/src/modules/option/option.module.ts index 6060621a..5c4bc754 100644 --- a/src/modules/option/option.module.ts +++ b/src/modules/option/option.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' import { BaseOptionController } from './controllers/base.option.controller' import { EmailOptionController } from './controllers/email.option.controller' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ imports: [GatewayModule], diff --git a/src/modules/page/page.controller.ts b/src/modules/page/page.controller.ts index 1820e2a5..b9319453 100644 --- a/src/modules/page/page.controller.ts +++ b/src/modules/page/page.controller.ts @@ -10,14 +10,14 @@ import { Put, Query, } from '@nestjs/common' +import { PageQueryDto } from './page.dto' +import { PageModel, PartialPageModel } from './page.model' +import { PageService } from './page.service' import { Auth } from '~/common/decorator/auth.decorator' import { Paginator } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { MongoIdDto } from '~/shared/dto/id.dto' -import { PageQueryDto } from './page.dto' -import { PageModel, PartialPageModel } from './page.model' -import { PageService } from './page.service' @Controller('pages') @ApiName diff --git a/src/modules/page/page.module.ts b/src/modules/page/page.module.ts index c51d1a3d..62f26955 100644 --- a/src/modules/page/page.module.ts +++ b/src/modules/page/page.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common' -import { GatewayModule } from '~/processors/gateway/gateway.module' import { PageController } from './page.controller' import { PageService } from './page.service' +import { GatewayModule } from '~/processors/gateway/gateway.module' @Module({ imports: [GatewayModule], diff --git a/src/modules/page/page.service.ts b/src/modules/page/page.service.ts index fca4cd94..7ffdaa6e 100644 --- a/src/modules/page/page.service.ts +++ b/src/modules/page/page.service.ts @@ -2,10 +2,10 @@ import { Injectable } from '@nestjs/common' import { isDefined } from 'class-validator' import { omit } from 'lodash' import { InjectModel } from 'nestjs-typegoose' +import { PageModel } from './page.model' import { EventTypes } from '~/processors/gateway/events.types' import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' import { ImageService } from '~/processors/helper/helper.image.service' -import { PageModel } from './page.model' @Injectable() export class PageService { diff --git a/src/modules/pageproxy/pageproxy.controller.ts b/src/modules/pageproxy/pageproxy.controller.ts index c116b5e0..556e28d3 100644 --- a/src/modules/pageproxy/pageproxy.controller.ts +++ b/src/modules/pageproxy/pageproxy.controller.ts @@ -1,3 +1,6 @@ +import { createReadStream, existsSync, statSync } from 'fs' +import fs from 'fs/promises' +import { extname, join } from 'path' import { Controller, Get, @@ -7,11 +10,11 @@ import { Res, } from '@nestjs/common' import type { FastifyReply, FastifyRequest } from 'fastify' -import { createReadStream, existsSync, statSync } from 'fs' -import fs from 'fs/promises' import { isNull } from 'lodash' import PKG from 'package.json' -import { extname, join } from 'path' +import { dashboard } from '../../../package.json' +import { PageProxyDebugDto } from './pageproxy.dto' +import { PageProxyService } from './pageproxy.service' import { Cookies } from '~/common/decorator/cookie.decorator' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' @@ -19,9 +22,6 @@ import { RedisKeys } from '~/constants/cache.constant' import { LOCAL_ADMIN_ASSET_PATH } from '~/constants/path.constant' import { CacheService } from '~/processors/cache/cache.service' import { getRedisKey } from '~/utils/redis.util' -import { dashboard } from '../../../package.json' -import { PageProxyDebugDto } from './pageproxy.dto' -import { PageProxyService } from './pageproxy.service' @Controller('/') @ApiName diff --git a/src/modules/pageproxy/pageproxy.service.ts b/src/modules/pageproxy/pageproxy.service.ts index 66e61314..b2bd45c7 100644 --- a/src/modules/pageproxy/pageproxy.service.ts +++ b/src/modules/pageproxy/pageproxy.service.ts @@ -1,10 +1,10 @@ +import { URL } from 'url' import { Injectable, InternalServerErrorException } from '@nestjs/common' import jsdom from 'jsdom' -import { URL } from 'url' -import PKG from '~/../package.json' -import { API_VERSION } from '~/app.config' import { ConfigsService } from '../configs/configs.service' import { InitService } from '../init/init.service' +import PKG from '~/../package.json' +import { API_VERSION } from '~/app.config' @Injectable() export class PageProxyService { constructor( @@ -63,7 +63,7 @@ export class PageProxyService { BASE_API ? `window.injectData.BASE_API = '${BASE_API}'` : `window.injectData.BASE_API = location.origin + '${ - !isDev ? '/api/v' + API_VERSION : '' + !isDev ? `/api/v${API_VERSION}` : '' }';` } ${ diff --git a/src/modules/post/post.controller.ts b/src/modules/post/post.controller.ts index 3f9d427a..3731cca2 100644 --- a/src/modules/post/post.controller.ts +++ b/src/modules/post/post.controller.ts @@ -14,6 +14,9 @@ import { } from '@nestjs/common' import { ApiOperation } from '@nestjs/swagger' import { Types } from 'mongoose' +import { CategoryAndSlugDto, PostQueryDto } from './post.dto' +import { PartialPostModel, PostModel } from './post.model' +import { PostService } from './post.service' import { Auth } from '~/common/decorator/auth.decorator' import { Paginator } from '~/common/decorator/http.decorator' import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator' @@ -24,9 +27,6 @@ import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { CountingService } from '~/processors/helper/helper.counting.service' import { MongoIdDto } from '~/shared/dto/id.dto' import { addYearCondition } from '~/utils/query.util' -import { CategoryAndSlugDto, PostQueryDto } from './post.dto' -import { PartialPostModel, PostModel } from './post.model' -import { PostService } from './post.service' @Controller('posts') @ApiName diff --git a/src/modules/post/post.model.ts b/src/modules/post/post.model.ts index d55b99ef..5b39fa94 100644 --- a/src/modules/post/post.model.ts +++ b/src/modules/post/post.model.ts @@ -2,12 +2,12 @@ import { PartialType } from '@nestjs/mapped-types' import { ApiHideProperty, ApiProperty } from '@nestjs/swagger' import { DocumentType, + Ref, + Severity, index, modelOptions, pre, prop, - Ref, - Severity, } from '@typegoose/typegoose' import { BeAnObject } from '@typegoose/typegoose/lib/types' import { @@ -19,9 +19,9 @@ import { IsString, } from 'class-validator' import { Query } from 'mongoose' +import { CategoryModel as Category } from '../category/category.model' import { Paginator } from '~/shared/interface/paginator.interface' import { CountMixed as Count, WriteBaseModel } from '~/shared/model/base.model' -import { CategoryModel as Category } from '../category/category.model' function autoPopulateCategory( this: Query< diff --git a/src/modules/post/post.module.ts b/src/modules/post/post.module.ts index 56655c94..a8d7acb8 100644 --- a/src/modules/post/post.module.ts +++ b/src/modules/post/post.module.ts @@ -1,4 +1,4 @@ -import { forwardRef, Module } from '@nestjs/common' +import { Module, forwardRef } from '@nestjs/common' import { CategoryModule } from '../category/category.module' import { PostController } from './post.controller' import { PostService } from './post.service' diff --git a/src/modules/post/post.service.ts b/src/modules/post/post.service.ts index 328597a0..f8dd6100 100644 --- a/src/modules/post/post.service.ts +++ b/src/modules/post/post.service.ts @@ -1,21 +1,21 @@ import { BadRequestException, - forwardRef, Inject, Injectable, + forwardRef, } from '@nestjs/common' import { EventEmitter2 } from '@nestjs/event-emitter' import { isDefined } from 'class-validator' import { omit } from 'lodash' import { FilterQuery, PaginateOptions } from 'mongoose' import { InjectModel } from 'nestjs-typegoose' +import { CategoryService } from '../category/category.service' +import { CommentModel } from '../comment/comment.model' +import { PostModel } from './post.model' import { EventBusEvents } from '~/constants/event.constant' import { EventTypes } from '~/processors/gateway/events.types' import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' import { ImageService } from '~/processors/helper/helper.image.service' -import { CategoryService } from '../category/category.service' -import { CommentModel } from '../comment/comment.model' -import { PostModel } from './post.model' @Injectable() export class PostService { diff --git a/src/modules/project/project.controller.ts b/src/modules/project/project.controller.ts index 14ed7716..b41aa891 100644 --- a/src/modules/project/project.controller.ts +++ b/src/modules/project/project.controller.ts @@ -1,5 +1,5 @@ -import { BaseCrudFactory } from '~/utils/crud.util' import { ProjectModel } from './project.model' +import { BaseCrudFactory } from '~/utils/crud.util' export class ProjectController extends BaseCrudFactory({ model: ProjectModel, diff --git a/src/modules/pty/pty.controller.ts b/src/modules/pty/pty.controller.ts index 8f5321d5..5f7d01ed 100644 --- a/src/modules/pty/pty.controller.ts +++ b/src/modules/pty/pty.controller.ts @@ -1,6 +1,6 @@ import { Controller, Get, Scope } from '@nestjs/common' -import { Auth } from '~/common/decorator/auth.decorator' import { PTYService } from './pty.service' +import { Auth } from '~/common/decorator/auth.decorator' @Auth() @Controller({ path: 'pty', scope: Scope.REQUEST }) diff --git a/src/modules/recently/recently.controller.ts b/src/modules/recently/recently.controller.ts index 1425be58..6980c89a 100644 --- a/src/modules/recently/recently.controller.ts +++ b/src/modules/recently/recently.controller.ts @@ -10,12 +10,12 @@ import { Post, Query, } from '@nestjs/common' +import { RecentlyModel } from './recently.model' +import { RecentlyService } from './recently.service' import { Auth } from '~/common/decorator/auth.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { MongoIdDto } from '~/shared/dto/id.dto' import { OffsetDto } from '~/shared/dto/pager.dto' -import { RecentlyModel } from './recently.model' -import { RecentlyService } from './recently.service' @Controller(['recently', 'shorthand']) @ApiName diff --git a/src/modules/recently/recently.service.ts b/src/modules/recently/recently.service.ts index 1c426fe8..5511b153 100644 --- a/src/modules/recently/recently.service.ts +++ b/src/modules/recently/recently.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@nestjs/common' import { InjectModel } from 'nestjs-typegoose' +import { RecentlyModel } from './recently.model' import { EventTypes } from '~/processors/gateway/events.types' import { WebEventsGateway } from '~/processors/gateway/web/events.gateway' -import { RecentlyModel } from './recently.model' @Injectable() export class RecentlyService { diff --git a/src/modules/say/say.controller.ts b/src/modules/say/say.controller.ts index 88e0141b..256ca685 100644 --- a/src/modules/say/say.controller.ts +++ b/src/modules/say/say.controller.ts @@ -1,10 +1,10 @@ import { Body, Delete, Get, Param, Post } from '@nestjs/common' import { sample } from 'lodash' +import { SayModel } from './say.model' import { Auth } from '~/common/decorator/auth.decorator' import { EventTypes } from '~/processors/gateway/events.types' import { MongoIdDto } from '~/shared/dto/id.dto' import { BaseCrudFactory } from '~/utils/crud.util' -import { SayModel } from './say.model' export class SayController extends BaseCrudFactory({ model: SayModel }) { @Get('/random') diff --git a/src/modules/search/search.controller.ts b/src/modules/search/search.controller.ts index 07843956..88db1639 100644 --- a/src/modules/search/search.controller.ts +++ b/src/modules/search/search.controller.ts @@ -5,11 +5,11 @@ import { Param, Query, } from '@nestjs/common' +import { SearchService } from './search.service' import { HttpCache } from '~/common/decorator/cache.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { IsMaster } from '~/common/decorator/role.decorator' import { SearchDto } from '~/modules/search/search.dto' -import { SearchService } from './search.service' @Controller('search') @ApiName diff --git a/src/modules/search/search.module.ts b/src/modules/search/search.module.ts index 832aa41e..b2ed9ea0 100644 --- a/src/modules/search/search.module.ts +++ b/src/modules/search/search.module.ts @@ -1,4 +1,4 @@ -import { forwardRef, Module } from '@nestjs/common' +import { Module, forwardRef } from '@nestjs/common' import { NoteModule } from '../note/note.module' import { PostModule } from '../post/post.module' import { SearchController } from './search.controller' diff --git a/src/modules/search/search.service.ts b/src/modules/search/search.service.ts index 0e538462..473ea881 100644 --- a/src/modules/search/search.service.ts +++ b/src/modules/search/search.service.ts @@ -1,18 +1,18 @@ import type { SearchResponse } from '@algolia/client-search' import { BadRequestException, - forwardRef, Inject, Injectable, + forwardRef, } from '@nestjs/common' import algoliasearch from 'algoliasearch' +import { ConfigsService } from '../configs/configs.service' +import { NoteService } from '../note/note.service' +import { PostService } from '../post/post.service' import { SearchDto } from '~/modules/search/search.dto' import { DatabaseService } from '~/processors/database/database.service' import { Pagination } from '~/shared/interface/paginator.interface' import { transformDataToPaginate } from '~/utils/transfrom.util' -import { ConfigsService } from '../configs/configs.service' -import { NoteService } from '../note/note.service' -import { PostService } from '../post/post.service' @Injectable() export class SearchService { diff --git a/src/modules/serverless/serverless.controller.ts b/src/modules/serverless/serverless.controller.ts index 985f5d0b..c231cbe9 100644 --- a/src/modules/serverless/serverless.controller.ts +++ b/src/modules/serverless/serverless.controller.ts @@ -10,14 +10,14 @@ import { Response, } from '@nestjs/common' import type { FastifyReply, FastifyRequest } from 'fastify' -import { Auth } from '~/common/decorator/auth.decorator' -import { HTTPDecorators } from '~/common/decorator/http.decorator' -import { ApiName } from '~/common/decorator/openapi.decorator' -import { IsMaster } from '~/common/decorator/role.decorator' import { SnippetType } from '../snippet/snippet.model' import { createMockedContextResponse } from './mock-response.util' import { ServerlessReferenceDto } from './serverless.dto' import { ServerlessService } from './serverless.service' +import { Auth } from '~/common/decorator/auth.decorator' +import { HTTPDecorators } from '~/common/decorator/http.decorator' +import { ApiName } from '~/common/decorator/openapi.decorator' +import { IsMaster } from '~/common/decorator/role.decorator' @ApiName @Controller('serverless') diff --git a/src/modules/serverless/serverless.service.ts b/src/modules/serverless/serverless.service.ts index a9967ca0..4cf0a99c 100644 --- a/src/modules/serverless/serverless.service.ts +++ b/src/modules/serverless/serverless.service.ts @@ -1,3 +1,6 @@ +import fs, { mkdir, stat } from 'fs/promises' +import path from 'path' +import { nextTick } from 'process' import { transformAsync } from '@babel/core' import { Injectable, @@ -6,11 +9,14 @@ import { } from '@nestjs/common' import { Interval } from '@nestjs/schedule' import { isURL } from 'class-validator' -import fs, { mkdir, stat } from 'fs/promises' import { cloneDeep } from 'lodash' import { InjectModel } from 'nestjs-typegoose' -import path from 'path' -import { nextTick } from 'process' +import PKG from '../../../package.json' +import { SnippetModel } from '../snippet/snippet.model' +import { + FunctionContextRequest, + FunctionContextResponse, +} from './function.types' import { RedisKeys } from '~/constants/cache.constant' import { DATA_DIR, NODE_REQUIRE_PATH } from '~/constants/path.constant' import { CacheService } from '~/processors/cache/cache.service' @@ -21,12 +27,6 @@ import { UniqueArray } from '~/ts-hepler/unique' import { getRedisKey, safePathJoin } from '~/utils' import { safeEval } from '~/utils/safe-eval.util' import { isBuiltinModule } from '~/utils/sys.util' -import PKG from '../../../package.json' -import { SnippetModel } from '../snippet/snippet.model' -import { - FunctionContextRequest, - FunctionContextResponse, -} from './function.types' @Injectable() export class ServerlessService { constructor( @@ -73,7 +73,7 @@ export class ServerlessService { context: { req: FunctionContextRequest; res: FunctionContextResponse }, ) { const { raw: functionString } = model - const logger = new Logger('ServerlessFunction/' + model.name) + const logger = new Logger(`ServerlessFunction/${model.name}`) const document = await this.model.findById(model.id) const globalContext = { context: { diff --git a/src/modules/sitemap/sitemap.controller.ts b/src/modules/sitemap/sitemap.controller.ts index 282690cb..08415222 100644 --- a/src/modules/sitemap/sitemap.controller.ts +++ b/src/modules/sitemap/sitemap.controller.ts @@ -1,9 +1,9 @@ import { CacheKey, CacheTTL, Controller, Get, Header } from '@nestjs/common' import { minify } from 'html-minifier' +import { AggregateService } from '../aggregate/aggregate.service' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { CacheKeys } from '~/constants/cache.constant' -import { AggregateService } from '../aggregate/aggregate.service' @Controller('sitemap') @ApiName export class SitemapController { diff --git a/src/modules/snippet/snippet.controller.ts b/src/modules/snippet/snippet.controller.ts index 4ae78c78..2644db4b 100644 --- a/src/modules/snippet/snippet.controller.ts +++ b/src/modules/snippet/snippet.controller.ts @@ -9,6 +9,8 @@ import { Put, Query, } from '@nestjs/common' +import { SnippetModel, SnippetType } from './snippet.model' +import { SnippetService } from './snippet.service' import { Auth } from '~/common/decorator/auth.decorator' import { HTTPDecorators } from '~/common/decorator/http.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' @@ -16,8 +18,6 @@ import { IsMaster } from '~/common/decorator/role.decorator' import { MongoIdDto } from '~/shared/dto/id.dto' import { PagerDto } from '~/shared/dto/pager.dto' import { transformDataToPaginate } from '~/utils/transfrom.util' -import { SnippetModel, SnippetType } from './snippet.model' -import { SnippetService } from './snippet.service' @ApiName @Controller('snippets') diff --git a/src/modules/snippet/snippet.module.ts b/src/modules/snippet/snippet.module.ts index e8ede909..98509c2e 100644 --- a/src/modules/snippet/snippet.module.ts +++ b/src/modules/snippet/snippet.module.ts @@ -1,7 +1,7 @@ /** * 数据配置区块 */ -import { forwardRef, Module } from '@nestjs/common' +import { Module, forwardRef } from '@nestjs/common' import { ServerlessModule } from '../serverless/serverless.module' import { SnippetController } from './snippet.controller' import { SnippetService } from './snippet.service' diff --git a/src/modules/snippet/snippet.service.ts b/src/modules/snippet/snippet.service.ts index 3fd6a2cc..17d01d7b 100644 --- a/src/modules/snippet/snippet.service.ts +++ b/src/modules/snippet/snippet.service.ts @@ -1,17 +1,17 @@ import { BadRequestException, - forwardRef, Inject, Injectable, NotFoundException, + forwardRef, } from '@nestjs/common' import { load } from 'js-yaml' import { InjectModel } from 'nestjs-typegoose' +import { ServerlessService } from '../serverless/serverless.service' +import { SnippetModel, SnippetType } from './snippet.model' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/cache/cache.service' import { getRedisKey } from '~/utils' -import { ServerlessService } from '../serverless/serverless.service' -import { SnippetModel, SnippetType } from './snippet.model' @Injectable() export class SnippetService { diff --git a/src/modules/tool/tool.controller.ts b/src/modules/tool/tool.controller.ts index a0b6851b..7350207c 100644 --- a/src/modules/tool/tool.controller.ts +++ b/src/modules/tool/tool.controller.ts @@ -1,13 +1,13 @@ import { CacheTTL, Controller, Get, Param, Query } from '@nestjs/common' +import { ConfigsService } from '../configs/configs.service' +import { GaodeMapLocationDto, GaodeMapSearchDto, IpDto } from './tool.dto' +import { ToolService } from './tool.service' import { Auth } from '~/common/decorator/auth.decorator' import { HttpCache } from '~/common/decorator/cache.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/cache/cache.service' import { getRedisKey } from '~/utils/redis.util' -import { ConfigsService } from '../configs/configs.service' -import { GaodeMapLocationDto, GaodeMapSearchDto, IpDto } from './tool.dto' -import { ToolService } from './tool.service' @Controller('tools') @ApiName diff --git a/src/modules/tool/tool.service.ts b/src/modules/tool/tool.service.ts index 11307d13..4c750dd7 100644 --- a/src/modules/tool/tool.service.ts +++ b/src/modules/tool/tool.service.ts @@ -1,14 +1,14 @@ +import { isIPv4, isIPv6 } from 'net' +import { URLSearchParams } from 'url' import { BadRequestException, Injectable, InternalServerErrorException, UnprocessableEntityException, } from '@nestjs/common' -import { isIPv4, isIPv6 } from 'net' -import { URLSearchParams } from 'url' -import { HttpService } from '~/processors/helper/helper.http.service' import { ConfigsService } from '../configs/configs.service' import { IP } from './tool.interface' +import { HttpService } from '~/processors/helper/helper.http.service' @Injectable() export class ToolService { @@ -26,12 +26,12 @@ export class ToolService { if (isV4) { const { data } = await this.httpService.axiosRef.get( - 'https://api.i-meto.com/ip/v1/qqwry/' + ip, + `https://api.i-meto.com/ip/v1/qqwry/${ip}`, ) return data as IP } else { const { data } = (await this.httpService.axiosRef.get( - 'http://ip-api.com/json/' + ip, + `http://ip-api.com/json/${ip}`, )) as any return { @@ -53,9 +53,7 @@ export class ToolService { throw new BadRequestException('高德地图 API Key 未配置') } const data = await fetch( - 'https://restapi.amap.com/v3/geocode/regeo?key=' + - gaodemapKey + - '&location=' + + `https://restapi.amap.com/v3/geocode/regeo?key=${gaodemapKey}&location=` + `${longitude},${latitude}`, ) .then((response) => response.json()) @@ -85,7 +83,7 @@ export class ToolService { ]) const data = await fetch( - 'https://restapi.amap.com/v3/place/text?' + params.toString(), + `https://restapi.amap.com/v3/place/text?${params.toString()}`, ) .then((response) => response.json()) // eslint-disable-next-line @typescript-eslint/no-empty-function diff --git a/src/modules/user/user.controller.ts b/src/modules/user/user.controller.ts index 071e3a87..a9ff6270 100644 --- a/src/modules/user/user.controller.ts +++ b/src/modules/user/user.controller.ts @@ -1,5 +1,9 @@ import { Body, Controller, Get, HttpCode, Patch, Post } from '@nestjs/common' import { ApiOperation } from '@nestjs/swagger' +import { AuthService } from '../auth/auth.service' +import { LoginDto, UserDto, UserPatchDto } from './user.dto' +import { UserDocument, UserModel } from './user.model' +import { UserService } from './user.service' import { Auth } from '~/common/decorator/auth.decorator' import { HttpCache } from '~/common/decorator/cache.decorator' import { CurrentUser } from '~/common/decorator/current-user.decorator' @@ -7,10 +11,6 @@ import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator' import { ApiName } from '~/common/decorator/openapi.decorator' import { IsMaster } from '~/common/decorator/role.decorator' import { getAvatar } from '~/utils' -import { AuthService } from '../auth/auth.service' -import { LoginDto, UserDto, UserPatchDto } from './user.dto' -import { UserDocument, UserModel } from './user.model' -import { UserService } from './user.service' @ApiName @Controller(['master', 'user']) diff --git a/src/modules/user/user.model.ts b/src/modules/user/user.model.ts index 3259db9f..cc6c7ef8 100644 --- a/src/modules/user/user.model.ts +++ b/src/modules/user/user.model.ts @@ -1,8 +1,8 @@ import { DocumentType, + Severity, modelOptions, prop, - Severity, } from '@typegoose/typegoose' import { hashSync } from 'bcrypt' import { Schema } from 'mongoose' diff --git a/src/modules/user/user.service.ts b/src/modules/user/user.service.ts index 7a536dda..d51d76b7 100644 --- a/src/modules/user/user.service.ts +++ b/src/modules/user/user.service.ts @@ -9,12 +9,12 @@ import { ReturnModelType } from '@typegoose/typegoose' import { compareSync } from 'bcrypt' import { nanoid } from 'nanoid' import { InjectModel } from 'nestjs-typegoose' +import { AuthService } from '../auth/auth.service' +import { UserDocument, UserModel } from './user.model' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/cache/cache.service' import { getAvatar, sleep } from '~/utils' import { getRedisKey } from '~/utils/redis.util' -import { AuthService } from '../auth/auth.service' -import { UserDocument, UserModel } from './user.model' @Injectable() export class UserService { @@ -45,7 +45,7 @@ export class UserService { async getMasterInfo(getLoginIp = false) { const user = await this.userModel .findOne() - .select('-authCode' + (getLoginIp ? ' +lastLoginIp' : '')) + .select(`-authCode${getLoginIp ? ' +lastLoginIp' : ''}`) .lean({ virtuals: true }) if (!user) { throw new BadRequestException('没有完成初始化!') @@ -137,7 +137,7 @@ export class UserService { ) }) - this.Logger.warn('主人已登录, IP: ' + ip) + this.Logger.warn(`主人已登录, IP: ${ip}`) return PrevFootstep } diff --git a/src/processors/cache/cache.module.ts b/src/processors/cache/cache.module.ts index 5a7e6f8f..0ce6d5f7 100644 --- a/src/processors/cache/cache.module.ts +++ b/src/processors/cache/cache.module.ts @@ -5,7 +5,7 @@ * @author Surmon */ -import { CacheModule as NestCacheModule, Global, Module } from '@nestjs/common' +import { Global, Module, CacheModule as NestCacheModule } from '@nestjs/common' import { CacheConfigService } from './cache.config.service' import { CacheService } from './cache.service' diff --git a/src/processors/database/database.module.ts b/src/processors/database/database.module.ts index 53546170..57f00e45 100644 --- a/src/processors/database/database.module.ts +++ b/src/processors/database/database.module.ts @@ -1,5 +1,9 @@ import { Global, Module } from '@nestjs/common' import { TypegooseModule } from 'nestjs-typegoose' +import { CategoryModel } from '../../modules/category/category.model' +import { PostModel } from '../../modules/post/post.model' +import { UserModel } from '../../modules/user/user.model' +import { DatabaseService } from './database.service' import { MONGO_DB } from '~/app.config' import { AnalyzeModel } from '~/modules/analyze/analyze.model' import { CommentModel } from '~/modules/comment/comment.model' @@ -11,10 +15,6 @@ import { ProjectModel } from '~/modules/project/project.model' import { RecentlyModel } from '~/modules/recently/recently.model' import { SayModel } from '~/modules/say/say.model' import { SnippetModel } from '~/modules/snippet/snippet.model' -import { CategoryModel } from '../../modules/category/category.model' -import { PostModel } from '../../modules/post/post.model' -import { UserModel } from '../../modules/user/user.model' -import { DatabaseService } from './database.service' const models = TypegooseModule.forFeature([ AnalyzeModel, diff --git a/src/processors/database/database.service.ts b/src/processors/database/database.service.ts index 8bcb9b5b..424ebc3e 100644 --- a/src/processors/database/database.service.ts +++ b/src/processors/database/database.service.ts @@ -1,6 +1,6 @@ import { Inject, Injectable } from '@nestjs/common' -import { mongoose, ReturnModelType } from '@typegoose/typegoose' -import { getConnectionToken, InjectModel } from 'nestjs-typegoose' +import { ReturnModelType, mongoose } from '@typegoose/typegoose' +import { InjectModel, getConnectionToken } from 'nestjs-typegoose' import { NoteModel } from '~/modules/note/note.model' import { PageModel } from '~/modules/page/page.model' import { PostModel } from '~/modules/post/post.model' diff --git a/src/processors/gateway/admin/auth.gateway.ts b/src/processors/gateway/admin/auth.gateway.ts index b8a10684..51fbe65a 100644 --- a/src/processors/gateway/admin/auth.gateway.ts +++ b/src/processors/gateway/admin/auth.gateway.ts @@ -6,10 +6,10 @@ import { WebSocketServer, } from '@nestjs/websockets' import { Namespace, Socket } from 'socket.io' -import { EventBusEvents } from '~/constants/event.constant' -import { AuthService } from '~/modules/auth/auth.service' import { BaseGateway } from '../base.gateway' import { EventTypes } from '../events.types' +import { EventBusEvents } from '~/constants/event.constant' +import { AuthService } from '~/modules/auth/auth.service' export abstract class AuthGateway extends BaseGateway diff --git a/src/processors/gateway/admin/events.gateway.ts b/src/processors/gateway/admin/events.gateway.ts index 0ec182ae..0b502cf7 100644 --- a/src/processors/gateway/admin/events.gateway.ts +++ b/src/processors/gateway/admin/events.gateway.ts @@ -1,3 +1,4 @@ +import { resolve } from 'path' import { JwtService } from '@nestjs/jwt' import { GatewayMetadata, @@ -7,14 +8,13 @@ import { WebSocketGateway, } from '@nestjs/websockets' import { Emitter } from '@socket.io/redis-emitter' -import { resolve } from 'path' import SocketIO, { Socket } from 'socket.io' -import { LOG_DIR } from '~/constants/path.constant' -import { getTodayLogFilePath } from '~/global/consola.global' -import { CacheService } from '~/processors/cache/cache.service' import { AuthService } from '../../../modules/auth/auth.service' import { EventTypes } from '../events.types' import { AuthGateway } from './auth.gateway' +import { LOG_DIR } from '~/constants/path.constant' +import { getTodayLogFilePath } from '~/global/consola.global' +import { CacheService } from '~/processors/cache/cache.service' @WebSocketGateway({ namespace: 'admin' }) export class AdminEventsGateway diff --git a/src/processors/gateway/admin/pty.gateway.ts b/src/processors/gateway/admin/pty.gateway.ts index 42de69c1..2eab4550 100644 --- a/src/processors/gateway/admin/pty.gateway.ts +++ b/src/processors/gateway/admin/pty.gateway.ts @@ -10,13 +10,13 @@ import { isNil } from 'lodash' import { nanoid } from 'nanoid' import { IPty, spawn } from 'node-pty' import { Socket } from 'socket.io' +import { EventTypes } from '../events.types' +import { AuthGateway } from './auth.gateway' import { RedisKeys } from '~/constants/cache.constant' import { AuthService } from '~/modules/auth/auth.service' import { ConfigsService } from '~/modules/configs/configs.service' import { CacheService } from '~/processors/cache/cache.service' import { getIp, getRedisKey } from '~/utils' -import { EventTypes } from '../events.types' -import { AuthGateway } from './auth.gateway' @WebSocketGateway({ namespace: 'pty' }) export class PTYGateway @@ -100,7 +100,7 @@ export class PTYGateway getRedisKey(RedisKeys.PTYSession), nid, - new Date().toISOString() + ',' + ip, + `${new Date().toISOString()},${ip}`, ) pty.onExit(async () => { const hvalue = await this.cacheService @@ -112,7 +112,7 @@ export class PTYGateway .hset( getRedisKey(RedisKeys.PTYSession), nid, - hvalue + ',' + new Date().toISOString(), + `${hvalue},${new Date().toISOString()}`, ) } }) diff --git a/src/processors/gateway/web/dtos/danmaku.dto.ts b/src/processors/gateway/web/dtos/danmaku.dto.ts index fe241e20..19e4d17e 100644 --- a/src/processors/gateway/web/dtos/danmaku.dto.ts +++ b/src/processors/gateway/web/dtos/danmaku.dto.ts @@ -1,9 +1,9 @@ import { - IsString, - IsOptional, + IsHexColor, IsInt, IsNotEmpty, - IsHexColor, + IsOptional, + IsString, MaxLength, } from 'class-validator' export class DanmakuDto { diff --git a/src/processors/gateway/web/events.gateway.ts b/src/processors/gateway/web/events.gateway.ts index d568456e..e5f90398 100644 --- a/src/processors/gateway/web/events.gateway.ts +++ b/src/processors/gateway/web/events.gateway.ts @@ -12,13 +12,13 @@ import { Emitter } from '@socket.io/redis-emitter' import { plainToClass } from 'class-transformer' import { validate } from 'class-validator' import SocketIO from 'socket.io' +import { BaseGateway } from '../base.gateway' +import { EventTypes } from '../events.types' +import { DanmakuDto } from './dtos/danmaku.dto' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/cache/cache.service' import { getRedisKey } from '~/utils/redis.util' import { getShortDate } from '~/utils/time.util' -import { BaseGateway } from '../base.gateway' -import { EventTypes } from '../events.types' -import { DanmakuDto } from './dtos/danmaku.dto' @WebSocketGateway({ namespace: 'web', diff --git a/src/processors/helper/helper.asset.service.ts b/src/processors/helper/helper.asset.service.ts index 596bed65..852c7f13 100644 --- a/src/processors/helper/helper.asset.service.ts +++ b/src/processors/helper/helper.asset.service.ts @@ -3,12 +3,12 @@ * @author Innei * @description 用于获取静态资源的服务 */ -import { Injectable, Logger } from '@nestjs/common' import { existsSync } from 'fs' import fs from 'fs/promises' import path, { join } from 'path' -import { USER_ASSET_DIR } from '~/constants/path.constant' +import { Injectable, Logger } from '@nestjs/common' import { HttpService } from './helper.http.service' +import { USER_ASSET_DIR } from '~/constants/path.constant' // 先从 ASSET_DIR 找用户自定义的资源, 没有就从默认的 ASSET_DIR 找, 没有就从网上拉取, 存到默认的 ASSET_DIR @Injectable() diff --git a/src/processors/helper/helper.counting.service.ts b/src/processors/helper/helper.counting.service.ts index 8b42a7ae..97e255ee 100644 --- a/src/processors/helper/helper.counting.service.ts +++ b/src/processors/helper/helper.counting.service.ts @@ -1,12 +1,12 @@ import { Injectable, Logger } from '@nestjs/common' import { InjectModel } from 'nestjs-typegoose' +import { CacheService } from '../cache/cache.service' +import { DatabaseService } from '../database/database.service' import { ArticleType } from '~/constants/article.constant' import { RedisKeys } from '~/constants/cache.constant' import { NoteModel } from '~/modules/note/note.model' import { PostModel } from '~/modules/post/post.model' import { getRedisKey } from '~/utils/redis.util' -import { CacheService } from '../cache/cache.service' -import { DatabaseService } from '../database/database.service' @Injectable() export class CountingService { @@ -58,14 +58,14 @@ export class CountingService { ip, ) if (isReadBefore) { - this.logger.debug('已经增加过计数了, ' + id) + this.logger.debug(`已经增加过计数了, ${id}`) return } await Promise.all([ redis.sadd(getRedisKey(RedisKeys.Read, doc._id), ip), doc.updateOne({ $inc: { 'count.read': 1 } }), ]) - this.logger.debug('增加阅读计数, (' + doc.title) + this.logger.debug(`增加阅读计数, (${doc.title}`) } public async updateLikeCount( @@ -91,14 +91,14 @@ export class CountingService { ip, ) if (isLikeBefore) { - this.logger.debug('已经增加过计数了, ' + id) + this.logger.debug(`已经增加过计数了, ${id}`) return false } await Promise.all([ redis.sadd(getRedisKey(RedisKeys.Like, doc._id), ip), doc.updateOne({ $inc: { 'count.like': 1 } }), ]) - this.logger.debug('增加喜欢计数, (' + doc.title) + this.logger.debug(`增加喜欢计数, (${doc.title}`) return true } } diff --git a/src/processors/helper/helper.cron.service.ts b/src/processors/helper/helper.cron.service.ts index aa0532ca..586d488f 100644 --- a/src/processors/helper/helper.cron.service.ts +++ b/src/processors/helper/helper.cron.service.ts @@ -1,14 +1,16 @@ -import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common' -import { OnEvent } from '@nestjs/event-emitter' -import { Cron, CronExpression } from '@nestjs/schedule' import cluster from 'cluster' -import COS from 'cos-nodejs-sdk-v5' -import dayjs from 'dayjs' import { existsSync } from 'fs' import { readdir, rm } from 'fs/promises' +import { join } from 'path' +import { Inject, Injectable, Logger, forwardRef } from '@nestjs/common' +import { OnEvent } from '@nestjs/event-emitter' +import { Cron, CronExpression } from '@nestjs/schedule' +import COS from 'cos-nodejs-sdk-v5' +import dayjs from 'dayjs' import mkdirp from 'mkdirp' import { InjectModel } from 'nestjs-typegoose' -import { join } from 'path' +import { CacheService } from '../cache/cache.service' +import { HttpService } from './helper.http.service' import { isMainCluster } from '~/app.config' import { CronDescription } from '~/common/decorator/cron-description.decorator' import { RedisKeys } from '~/constants/cache.constant' @@ -23,8 +25,6 @@ import { PageService } from '~/modules/page/page.service' import { PostService } from '~/modules/post/post.service' import { SearchService } from '~/modules/search/search.service' import { getRedisKey } from '~/utils/redis.util' -import { CacheService } from '../cache/cache.service' -import { HttpService } from './helper.http.service' @Injectable() export class CronService { @@ -185,7 +185,7 @@ export class CronService { mkdirp.sync(TEMP_DIR) this.logger.log('--> 清理临时文件成功') } - //“At 00:05.” + // “At 00:05.” @Cron('5 0 * * *', { name: 'cleanTempDirectory' }) @CronDescription('清理日志文件') async cleanLogFile() { @@ -241,7 +241,7 @@ export class CronService { this.logger.log(`百度站长提交结果: ${JSON.stringify(res.data)}`) return res.data } catch (e) { - this.logger.error('百度推送错误: ' + e.message) + this.logger.error(`百度推送错误: ${e.message}`) throw e } } diff --git a/src/processors/helper/helper.email.service.ts b/src/processors/helper/helper.email.service.ts index e6a95e81..6f3dd604 100644 --- a/src/processors/helper/helper.email.service.ts +++ b/src/processors/helper/helper.email.service.ts @@ -1,13 +1,13 @@ +import cluster from 'cluster' import { Injectable, Logger } from '@nestjs/common' import { OnEvent } from '@nestjs/event-emitter' -import cluster from 'cluster' import { render } from 'ejs' import { createTransport } from 'nodemailer' +import { CacheService } from '../cache/cache.service' +import { AssetService } from './helper.asset.service' import { EventBusEvents } from '~/constants/event.constant' import { ConfigsService } from '~/modules/configs/configs.service' import { LinkModel } from '~/modules/link/link.model' -import { CacheService } from '../cache/cache.service' -import { AssetService } from './helper.asset.service' export enum ReplyMailType { Owner = 'owner', diff --git a/src/processors/helper/helper.http.service.ts b/src/processors/helper/helper.http.service.ts index 8013efc0..7684c003 100644 --- a/src/processors/helper/helper.http.service.ts +++ b/src/processors/helper/helper.http.service.ts @@ -2,11 +2,11 @@ import { Injectable, Logger } from '@nestjs/common' import type { AxiosInstance } from 'axios' import axios from 'axios' import axiosRetry from 'axios-retry' +import { version } from '../../../package.json' +import { CacheService } from '../cache/cache.service' import { AXIOS_CONFIG } from '~/app.config' import { RedisKeys } from '~/constants/cache.constant' import { getRedisKey } from '~/utils' -import { version } from '../../../package.json' -import { CacheService } from '../cache/cache.service' @Injectable() export class HttpService { private http: AxiosInstance @@ -16,9 +16,7 @@ export class HttpService { this.http = axios.create({ ...AXIOS_CONFIG, headers: { - 'user-agent': - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 MX-Space/' + - version, + 'user-agent': `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 MX-Space/${version}`, }, }) axiosRetry(this.http, { diff --git a/src/processors/helper/helper.image.service.ts b/src/processors/helper/helper.image.service.ts index bb05a21d..fdb04e97 100644 --- a/src/processors/helper/helper.image.service.ts +++ b/src/processors/helper/helper.image.service.ts @@ -1,10 +1,10 @@ import { Injectable, Logger } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' import imageSize from 'image-size' +import { HttpService } from './helper.http.service' import { ConfigsService } from '~/modules/configs/configs.service' import { TextImageRecordType, WriteBaseModel } from '~/shared/model/base.model' import { getAverageRGB, pickImagesFromMarkdown } from '~/utils/pic.util' -import { HttpService } from './helper.http.service' @Injectable() export class ImageService { @@ -46,7 +46,7 @@ export class ImageService { continue } const promise = new Promise((resolve) => { - this.logger.log('Get --> ' + src) + this.logger.log(`Get --> ${src}`) this.getOnlineImageSizeAndMeta(src) .then(({ size, accent }) => { const filename = src.split('/').pop() diff --git a/src/processors/helper/helper.module.ts b/src/processors/helper/helper.module.ts index 0e918fda..c76de963 100644 --- a/src/processors/helper/helper.module.ts +++ b/src/processors/helper/helper.module.ts @@ -1,12 +1,6 @@ -import { forwardRef, Global, Module, Provider } from '@nestjs/common' +import { Global, Module, Provider, forwardRef } from '@nestjs/common' import { EventEmitterModule } from '@nestjs/event-emitter' import { ScheduleModule } from '@nestjs/schedule' -import { AggregateModule } from '~/modules/aggregate/aggregate.module' -import { BackupModule } from '~/modules/backup/backup.module' -import { NoteModule } from '~/modules/note/note.module' -import { PageModule } from '~/modules/page/page.module' -import { PostModule } from '~/modules/post/post.module' -import { SearchModule } from '~/modules/search/search.module' import { AssetService } from './helper.asset.service' import { CountingService } from './helper.counting.service' import { CronService } from './helper.cron.service' @@ -15,6 +9,12 @@ import { HttpService } from './helper.http.service' import { ImageService } from './helper.image.service' import { TaskQueueService } from './helper.tq.service' import { UploadService } from './helper.upload.service' +import { SearchModule } from '~/modules/search/search.module' +import { PostModule } from '~/modules/post/post.module' +import { PageModule } from '~/modules/page/page.module' +import { NoteModule } from '~/modules/note/note.module' +import { BackupModule } from '~/modules/backup/backup.module' +import { AggregateModule } from '~/modules/aggregate/aggregate.module' const providers: Provider[] = [ HttpService, @@ -53,7 +53,7 @@ const providers: Provider[] = [ forwardRef(() => SearchModule), forwardRef(() => BackupModule), ], - providers: providers, + providers, exports: providers, }) @Global() diff --git a/src/processors/helper/helper.tq.service.ts b/src/processors/helper/helper.tq.service.ts index 90c94dee..b398cf7a 100644 --- a/src/processors/helper/helper.tq.service.ts +++ b/src/processors/helper/helper.tq.service.ts @@ -1,8 +1,8 @@ +import { isAsyncFunction } from 'util/types' import { Injectable } from '@nestjs/common' import IORedis from 'ioredis' -import { isAsyncFunction } from 'util/types' -import { safeJSONParse } from '~/utils' import { CacheService } from '../cache/cache.service' +import { safeJSONParse } from '~/utils' type ITask = RedisMap< string, @@ -64,7 +64,7 @@ class RedisMap { private readonly redis: IORedis.Redis, private readonly hashName: string, ) { - this.hashName = RedisMap.key + `${hashName}#` + this.hashName = `${RedisMap.key}${hashName}#` } static key = 'redis-map#' diff --git a/src/processors/logger/logger.service.ts b/src/processors/logger/logger.service.ts index 86ca495e..337f21d2 100644 --- a/src/processors/logger/logger.service.ts +++ b/src/processors/logger/logger.service.ts @@ -1,7 +1,7 @@ /* eslint-disable prefer-rest-params */ -import { ConsoleLogger, ConsoleLoggerOptions } from '@nestjs/common' import cluster from 'cluster' import { performance } from 'perf_hooks' +import { ConsoleLogger, ConsoleLoggerOptions } from '@nestjs/common' export class MyLogger extends ConsoleLogger { constructor(context?: string, options?: ConsoleLoggerOptions) { @@ -76,10 +76,10 @@ export class MyLogger extends ConsoleLogger { if (context && !argv.length) { print(`${workerPrefix} [${chalk.yellow(context)}] `, formatMessage, diff) } else if (!argv.length) { - print(`${workerPrefix} ` + this.defaultContextPrefix, formatMessage, diff) + print(`${workerPrefix} ${this.defaultContextPrefix}`, formatMessage, diff) } else { print( - `${workerPrefix} ` + this.defaultContextPrefix, + `${workerPrefix} ${this.defaultContextPrefix}`, message, context, ...argv, diff --git a/src/shared/dto/id.dto.ts b/src/shared/dto/id.dto.ts index a8d73404..aee7eac2 100644 --- a/src/shared/dto/id.dto.ts +++ b/src/shared/dto/id.dto.ts @@ -1,7 +1,7 @@ import { UnprocessableEntityException } from '@nestjs/common' import { ApiProperty } from '@nestjs/swagger' import { Transform } from 'class-transformer' -import { IsDefined, isMongoId, IsMongoId } from 'class-validator' +import { IsDefined, IsMongoId, isMongoId } from 'class-validator' export class MongoIdDto { @IsMongoId() diff --git a/src/utils/crud.util.ts b/src/utils/crud.util.ts index 847bf9d1..1b8986d3 100644 --- a/src/utils/crud.util.ts +++ b/src/utils/crud.util.ts @@ -31,7 +31,7 @@ export function BaseCrudFactory< class Dto extends model {} - @ApiTags(tagPrefix + ' Routes') + @ApiTags(`${tagPrefix} Routes`) @Controller(pluralize(prefix)) class BaseCrud { constructor( diff --git a/src/utils/ip.util.ts b/src/utils/ip.util.ts index 7dc65899..6ad8ccc4 100644 --- a/src/utils/ip.util.ts +++ b/src/utils/ip.util.ts @@ -2,9 +2,9 @@ * @module utils/ip * @description IP utility functions */ -import type { FastifyRequest } from 'fastify' import { IncomingMessage } from 'http' import { URL } from 'url' +import type { FastifyRequest } from 'fastify' export const getIp = (request: FastifyRequest | IncomingMessage) => { const req = request as any @@ -27,5 +27,5 @@ export const parseRelativeUrl = (path: string) => { if (!path || !path.startsWith('/')) { return new URL('http://a.com') } - return new URL('http://a.com' + path) + return new URL(`http://a.com${path}`) } diff --git a/src/utils/jsonschema.util.ts b/src/utils/jsonschema.util.ts index cedae71e..ca80e855 100644 --- a/src/utils/jsonschema.util.ts +++ b/src/utils/jsonschema.util.ts @@ -3,7 +3,7 @@ import { targetConstructorToSchema } from '@innei/class-validator-jsonschema' import { ISchemaConverters } from '@innei/class-validator-jsonschema/build/defaultConverters' import { IOptions } from '@innei/class-validator-jsonschema/build/options' import { defaultMetadataStorage } from 'class-transformer/cjs/storage.js' -import { getMetadataStorage, ValidationTypes } from 'class-validator' +import { ValidationTypes, getMetadataStorage } from 'class-validator' import { ValidationMetadata } from 'class-validator/types/metadata/ValidationMetadata' export { JSONSchema as IsSchema } from '@innei/class-validator-jsonschema' diff --git a/src/utils/pic.util.ts b/src/utils/pic.util.ts index 57927e85..83970488 100644 --- a/src/utils/pic.util.ts +++ b/src/utils/pic.util.ts @@ -37,9 +37,9 @@ export async function getAverageRGB( function componentToHex(c: number) { const hex = c.toString(16) - return hex.length == 1 ? '0' + hex : hex + return hex.length == 1 ? `0${hex}` : hex } export function rgbToHex({ r, g, b }: { r: number; g: number; b: number }) { - return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b) + return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}` } diff --git a/src/utils/redis-subpub.util.ts b/src/utils/redis-subpub.util.ts index 4fc1c43a..fc01148c 100644 --- a/src/utils/redis-subpub.util.ts +++ b/src/utils/redis-subpub.util.ts @@ -1,7 +1,7 @@ import { Logger } from '@nestjs/common' import IORedis from 'ioredis' -import { REDIS } from '~/app.config' import { isTest } from '../global/env.global' +import { REDIS } from '~/app.config' class RedisSubPub { public pubClient: IORedis.Redis public subClient: IORedis.Redis @@ -23,7 +23,7 @@ class RedisSubPub { const channel = this.channelPrefix + event const _data = JSON.stringify(data) if (event !== 'log') { - Logger.debug(`发布事件:${channel} <- ` + _data, RedisSubPub.name) + Logger.debug(`发布事件:${channel} <- ${_data}`, RedisSubPub.name) } await this.pubClient.publish(channel, _data) } @@ -37,7 +37,7 @@ class RedisSubPub { const cb = (channel, message) => { if (channel === myChannel) { if (event !== 'log') { - Logger.debug(`接收事件:${channel} -> ` + message, RedisSubPub.name) + Logger.debug(`接收事件:${channel} -> ${message}`, RedisSubPub.name) } callback(JSON.parse(message)) } diff --git a/src/utils/redis.util.ts b/src/utils/redis.util.ts index 51887395..79d6589c 100644 --- a/src/utils/redis.util.ts +++ b/src/utils/redis.util.ts @@ -5,6 +5,6 @@ export const getRedisKey = ( ...concatKeys: string[] ): `mx:${RedisKeys}${string | ''}` => { return `mx:${key}${ - concatKeys && concatKeys.length ? '_' + concatKeys.join('_') : '' + concatKeys && concatKeys.length ? `_${concatKeys.join('_')}` : '' }` } diff --git a/src/utils/safe-eval.util.ts b/src/utils/safe-eval.util.ts index e1fbf7f4..6a0696db 100644 --- a/src/utils/safe-eval.util.ts +++ b/src/utils/safe-eval.util.ts @@ -6,7 +6,7 @@ export function safeEval(code: string, context = {}) { code = `((() => { ${code} })())` if (context) { - Object.keys(context).forEach(function (key) { + Object.keys(context).forEach((key) => { sandbox[key] = context[key] }) } diff --git a/src/utils/tool.util.ts b/src/utils/tool.util.ts index 2f24a2b0..b18c826a 100644 --- a/src/utils/tool.util.ts +++ b/src/utils/tool.util.ts @@ -1,5 +1,5 @@ -import { isObject } from 'lodash' import { join } from 'path' +import { isObject } from 'lodash' export const md5 = (text: string) => require('crypto').createHash('md5').update(text).digest('hex') @@ -36,7 +36,7 @@ export function deleteKeys( ...keys: any[] ): Partial { if (!isObject(target)) { - throw new TypeError('target must be Object, got ' + target) + throw new TypeError(`target must be Object, got ${target}`) } if (Array.isArray(keys[0])) { diff --git a/src/utils/validator/isBooleanOrString.ts b/src/utils/validator/isBooleanOrString.ts index 69b16dd8..2da645ea 100644 --- a/src/utils/validator/isBooleanOrString.ts +++ b/src/utils/validator/isBooleanOrString.ts @@ -6,7 +6,7 @@ * @FilePath: /mx-server/src/common/decorators/isBooleanOrString.ts * @Coding with Love */ -import { isString, ValidationOptions } from 'class-validator' +import { ValidationOptions, isString } from 'class-validator' import { isBoolean, merge } from 'lodash' import { validatorFactory } from './simpleValidatorFactory' diff --git a/src/utils/validator/isMongoIdOrInt.ts b/src/utils/validator/isMongoIdOrInt.ts index 7dc5da75..717feaed 100644 --- a/src/utils/validator/isMongoIdOrInt.ts +++ b/src/utils/validator/isMongoIdOrInt.ts @@ -7,7 +7,7 @@ * @Mark: Coding with Love */ -import { isInt, isMongoId, ValidationOptions } from 'class-validator' +import { ValidationOptions, isInt, isMongoId } from 'class-validator' import { merge } from 'lodash' import { validatorFactory } from './simpleValidatorFactory' diff --git a/src/utils/validator/isNilOrString.ts b/src/utils/validator/isNilOrString.ts index 3afa089f..29824383 100644 --- a/src/utils/validator/isNilOrString.ts +++ b/src/utils/validator/isNilOrString.ts @@ -1,10 +1,10 @@ import { - registerDecorator, + ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface, - ValidationArguments, isString, + registerDecorator, } from 'class-validator' import { isNil } from 'lodash' @@ -19,7 +19,7 @@ export function IsNilOrString(validationOptions?: ValidationOptions) { return function (object: Object, propertyName: string) { registerDecorator({ target: object.constructor, - propertyName: propertyName, + propertyName, options: validationOptions, constraints: [], validator: IsNilOrStringConstraint, diff --git a/src/utils/validator/simpleValidatorFactory.ts b/src/utils/validator/simpleValidatorFactory.ts index be515349..3d21d085 100644 --- a/src/utils/validator/simpleValidatorFactory.ts +++ b/src/utils/validator/simpleValidatorFactory.ts @@ -8,11 +8,11 @@ */ import { - registerDecorator, ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface, + registerDecorator, } from 'class-validator' export function validatorFactory(validator: (value: any) => boolean) { @@ -27,7 +27,7 @@ export function validatorFactory(validator: (value: any) => boolean) { return function (object: Object, propertyName: string) { registerDecorator({ target: object.constructor, - propertyName: propertyName, + propertyName, options: validationOptions, constraints: [], validator: IsBooleanOrStringConstraint, diff --git a/test/src/common/attach-auth.middleware.e2e-spec.ts b/test/src/common/attach-auth.middleware.e2e-spec.ts index 173c7338..962baaa2 100644 --- a/test/src/common/attach-auth.middleware.e2e-spec.ts +++ b/test/src/common/attach-auth.middleware.e2e-spec.ts @@ -49,11 +49,11 @@ describe('AuthMiddleware (e2e)', () => { app .inject({ method: 'GET', - url: '/?token=Bearer ' + token, + url: `/?token=Bearer ${token}`, }) .then(async (res) => { expect(res.statusCode).toBe(200) - expect(res.body).toBe('Bearer ' + token) + expect(res.body).toBe(`Bearer ${token}`) }) }) }) diff --git a/test/src/modules/snippet/snippet.controller.e2e-spec.ts b/test/src/modules/snippet/snippet.controller.e2e-spec.ts index 19010343..152b6126 100644 --- a/test/src/modules/snippet/snippet.controller.e2e-spec.ts +++ b/test/src/modules/snippet/snippet.controller.e2e-spec.ts @@ -117,7 +117,7 @@ describe('test /snippets', () => { await app .inject({ method: 'GET', - url: '/snippets/' + id, + url: `/snippets/${id}`, }) .then((res) => { const json = res.json() @@ -131,7 +131,7 @@ describe('test /snippets', () => { await app .inject({ method: 'GET', - url: '/snippets/root/' + mockPayload1.name, + url: `/snippets/root/${mockPayload1.name}`, }) .then((res) => { const json = res.json() diff --git a/test/src/modules/user/user.controller.e2e-spec.ts b/test/src/modules/user/user.controller.e2e-spec.ts index 9706f1d6..697c7aad 100644 --- a/test/src/modules/user/user.controller.e2e-spec.ts +++ b/test/src/modules/user/user.controller.e2e-spec.ts @@ -33,7 +33,7 @@ describe('AppController (e2e)', () => { provide: AuthService, useValue: { signToken(val) { - return '' + val + return `${val}` }, }, },