From 817b81a983a82aec94590c0b2a2b5bef734177d8 Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 16 Aug 2024 12:30:06 +0800 Subject: [PATCH] chore: format Signed-off-by: Innei --- .prettierrc.mjs | 2 +- apps/core/package.json | 1 - apps/core/src/app.config.ts | 10 +++---- apps/core/src/app.module.ts | 14 +++++----- apps/core/src/bootstrap.ts | 8 +++--- .../src/common/adapters/fastify.adapter.ts | 5 ++-- .../src/common/adapters/socket.adapter.ts | 3 +- .../src/common/contexts/request.context.ts | 3 +- .../decorators/api-controller.decorator.ts | 3 +- .../src/common/decorators/auth.decorator.ts | 2 +- .../src/common/decorators/cookie.decorator.ts | 3 +- .../decorators/current-user.decorator.ts | 3 +- .../src/common/decorators/demo.decorator.ts | 6 ++-- .../src/common/decorators/http.decorator.ts | 3 +- .../src/common/decorators/ip.decorator.ts | 6 ++-- .../src/common/decorators/role.decorator.ts | 3 +- .../common/filters/any-exception.filter.ts | 6 ++-- apps/core/src/common/guards/auth.guard.ts | 6 ++-- apps/core/src/common/guards/roles.guard.ts | 3 +- apps/core/src/common/guards/spider.guard.ts | 9 +++--- .../core/src/common/guards/throttler.guard.ts | 5 ++-- .../allow-all-cors.interceptor.ts | 3 +- .../interceptors/analyze.interceptor.ts | 12 ++++---- .../common/interceptors/cache.interceptor.ts | 14 +++++----- .../interceptors/db-query.interceptor.ts | 6 ++-- .../interceptors/idempotence.interceptor.ts | 12 ++++---- .../json-transform.interceptor.ts | 12 ++++---- .../interceptors/logging.interceptor.ts | 12 ++++---- .../interceptors/response.interceptor.ts | 12 ++++---- .../middlewares/request-context.middleware.ts | 6 ++-- apps/core/src/common/pipes/validation.pipe.ts | 3 +- apps/core/src/decorators/dto/isAllowedUrl.ts | 3 +- .../src/decorators/dto/isBooleanOrString.ts | 3 +- .../core/src/decorators/dto/isMongoIdOrInt.ts | 3 +- apps/core/src/decorators/dto/isNilOrString.ts | 4 +-- apps/core/src/dump.ts | 3 +- apps/core/src/global/dayjs.global.ts | 3 +- apps/core/src/global/index.global.ts | 2 -- .../src/migration/helper/encrypt-configs.ts | 4 +-- apps/core/src/migration/version/v4.6.0-1.ts | 3 +- apps/core/src/migration/version/v4.6.0.ts | 3 +- apps/core/src/modules/ack/ack.controller.ts | 2 +- .../src/modules/activity/activity.module.ts | 2 +- .../src/modules/activity/activity.service.ts | 28 +++++++++---------- .../modules/aggregate/aggregate.controller.ts | 2 +- .../src/modules/aggregate/aggregate.module.ts | 2 +- .../modules/aggregate/aggregate.service.ts | 12 ++++---- .../ai/ai-summary/ai-summary.service.ts | 5 ++-- .../ai/ai-writer/ai-writer.controller.ts | 2 ++ .../modules/ai/ai-writer/ai-writer.service.ts | 5 ++-- apps/core/src/modules/ai/ai.module.ts | 4 +-- apps/core/src/modules/ai/ai.service.ts | 2 ++ .../src/modules/analyze/analyze.controller.ts | 2 +- .../core/src/modules/analyze/analyze.model.ts | 2 +- .../src/modules/analyze/analyze.service.ts | 2 +- apps/core/src/modules/auth/auth.controller.ts | 2 +- apps/core/src/modules/auth/auth.service.ts | 8 +++--- apps/core/src/modules/authn/authn.service.ts | 23 +++++++-------- .../core/src/modules/backup/backup.service.ts | 2 +- .../modules/category/category.controller.ts | 2 +- .../src/modules/category/category.model.ts | 2 +- .../src/modules/category/category.module.ts | 2 +- .../src/modules/category/category.service.ts | 8 +++--- .../src/modules/comment/comment.controller.ts | 6 ++-- .../modules/comment/comment.interceptor.ts | 10 +++---- .../core/src/modules/comment/comment.model.ts | 4 +-- .../src/modules/comment/comment.module.ts | 2 +- .../src/modules/comment/comment.service.ts | 24 ++++++++-------- .../src/modules/configs/configs.default.ts | 3 +- apps/core/src/modules/configs/configs.dto.ts | 2 +- .../src/modules/configs/configs.interface.ts | 13 +++++---- .../core/src/modules/configs/configs.model.ts | 2 +- .../src/modules/configs/configs.service.ts | 4 +-- apps/core/src/modules/feed/feed.controller.ts | 2 +- apps/core/src/modules/file/file.service.ts | 8 +++--- .../health/sub-controller/log.controller.ts | 3 +- apps/core/src/modules/init/init.guard.ts | 3 +- apps/core/src/modules/link/link.controller.ts | 3 +- apps/core/src/modules/link/link.model.ts | 4 +-- apps/core/src/modules/link/link.service.ts | 3 +- .../modules/markdown/markdown.controller.ts | 4 +-- .../src/modules/markdown/markdown.service.ts | 4 +-- apps/core/src/modules/note/note.controller.ts | 3 +- apps/core/src/modules/note/note.model.ts | 2 +- apps/core/src/modules/note/note.module.ts | 2 +- apps/core/src/modules/note/note.service.ts | 6 ++-- .../modules/pageproxy/pageproxy.controller.ts | 2 +- .../modules/pageproxy/pageproxy.service.ts | 2 +- apps/core/src/modules/post/post.controller.ts | 5 ++-- apps/core/src/modules/post/post.model.ts | 8 +++--- apps/core/src/modules/post/post.module.ts | 2 +- apps/core/src/modules/post/post.service.ts | 6 ++-- .../src/modules/recently/recently.module.ts | 2 +- .../src/modules/recently/recently.service.ts | 2 +- .../src/modules/render/render.controller.ts | 6 ++-- apps/core/src/modules/search/search.module.ts | 2 +- .../core/src/modules/search/search.service.ts | 16 +++++------ .../modules/server-time/server-time.module.ts | 3 +- .../modules/serverless/mock-response.util.ts | 3 +- .../modules/serverless/serverless.model.ts | 2 +- .../modules/serverless/serverless.service.ts | 12 ++++---- .../src/modules/serverless/serverless.util.ts | 5 ++-- .../slug-tracker/slug-tracker.service.ts | 3 +- .../src/modules/snippet/snippet.module.ts | 2 +- .../src/modules/snippet/snippet.service.ts | 4 +-- .../subscribe/subscribe.email.default.ts | 3 +- .../modules/subscribe/subscribe.service.ts | 14 +++++----- .../sync-update/sync-update.service.ts | 7 +++-- apps/core/src/modules/sync/sync.service.ts | 12 ++++---- .../src/modules/update/update.controller.ts | 4 +-- .../core/src/modules/update/update.service.ts | 7 +++-- apps/core/src/modules/user/user.controller.ts | 5 ++-- apps/core/src/modules/user/user.model.ts | 4 +-- apps/core/src/modules/user/user.module.ts | 2 +- apps/core/src/modules/user/user.service.ts | 2 +- .../modules/webhook/webhook-event.model.ts | 2 +- .../src/modules/webhook/webhook.service.ts | 6 ++-- .../processors/database/database.service.ts | 5 ++-- .../gateway/admin/events.gateway.ts | 14 +++++----- .../src/processors/gateway/base.gateway.ts | 3 +- .../src/processors/gateway/gateway.service.ts | 13 +++++---- .../processors/gateway/shared/auth.gateway.ts | 1 + .../gateway/shared/events.gateway.ts | 3 +- .../processors/gateway/web/events.gateway.ts | 24 ++++++++-------- .../helper/helper.counting.service.ts | 3 +- .../processors/helper/helper.cron.service.ts | 10 +++++-- .../processors/helper/helper.email.service.ts | 4 +-- .../processors/helper/helper.event.service.ts | 4 +-- .../processors/helper/helper.http.service.ts | 2 +- .../processors/helper/helper.image.service.ts | 2 +- .../src/processors/helper/helper.module.ts | 7 +++-- .../processors/helper/helper.tq.service.ts | 2 +- .../helper/helper.upload.service.ts | 3 +- .../helper/helper.url-builder.service.ts | 6 ++-- .../src/processors/redis/cache.service.ts | 2 +- .../processors/redis/redis.config.service.ts | 6 ++-- apps/core/src/shared/model/base.model.ts | 2 +- .../core/src/shared/model/write-base.model.ts | 2 +- .../transformers/crud-factor.transformer.ts | 10 +++---- .../src/transformers/get-req.transformer.ts | 2 +- .../src/transformers/model.transformer.ts | 5 ++-- .../src/transformers/paginate.transformer.ts | 2 +- apps/core/src/utils/database.util.ts | 2 +- apps/core/src/utils/redis-subpub.util.ts | 6 ++-- apps/core/src/utils/redis.util.ts | 3 +- apps/core/src/utils/tool.util.ts | 1 + apps/core/test/global.d.ts | 2 +- .../mock/interceptors/counting.interceptor.ts | 15 +++++----- .../modules/link/link.controller.e2e-spec.ts | 2 +- eslint.config.mjs | 1 + package.json | 1 + .../api-client/__tests__/core/client.test.ts | 12 ++++---- .../__tests__/helpers/adaptor-test.ts | 7 +++-- .../api-client/__tests__/helpers/instance.ts | 5 ++-- .../api-client/__tests__/helpers/response.ts | 3 +- packages/api-client/controllers/ack.ts | 5 ++-- packages/api-client/controllers/activity.ts | 3 +- packages/api-client/controllers/aggregate.ts | 6 ++-- packages/api-client/controllers/ai.ts | 3 +- packages/api-client/controllers/base.ts | 3 +- packages/api-client/controllers/category.ts | 10 ++++--- packages/api-client/controllers/comment.ts | 3 +- packages/api-client/controllers/link.ts | 6 ++-- packages/api-client/controllers/note.ts | 3 +- packages/api-client/controllers/page.ts | 3 +- packages/api-client/controllers/post.ts | 3 +- packages/api-client/controllers/project.ts | 6 ++-- packages/api-client/controllers/recently.ts | 3 +- packages/api-client/controllers/say.ts | 6 ++-- packages/api-client/controllers/search.ts | 3 +- packages/api-client/controllers/severless.ts | 3 +- packages/api-client/controllers/snippet.ts | 3 +- packages/api-client/controllers/subscribe.ts | 3 +- packages/api-client/controllers/topic.ts | 6 ++-- packages/api-client/controllers/user.ts | 3 +- packages/api-client/core/client.ts | 14 ++++++---- packages/api-client/models/comment.ts | 3 +- packages/webhook/src/handler.ts | 3 +- 178 files changed, 509 insertions(+), 412 deletions(-) diff --git a/.prettierrc.mjs b/.prettierrc.mjs index 85bce16f..ad5ccc06 100644 --- a/.prettierrc.mjs +++ b/.prettierrc.mjs @@ -3,7 +3,7 @@ import { factory } from '@innei/prettier' export default { ...factory({ tailwindcss: false, - importSort: false, + importSort: true, }), importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'], } diff --git a/apps/core/package.json b/apps/core/package.json index 3adc2de7..d6e186f8 100644 --- a/apps/core/package.json +++ b/apps/core/package.json @@ -21,7 +21,6 @@ "dev": "npm run start", "repl": "npm run start -- --entryFile repl", "bundle": "rimraf out && npm run build && cd dist/src && npx ncc build main.js -o ../../out --minify -s && cd ../.. && chmod +x out/index.js && node scripts/after-bundle.js", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"packages/**/*.ts\"", "start": "cross-env NODE_ENV=development nest start -w --path tsconfig.json -- ", "start:debug": "cross-env NODE_ENV=development nest start --debug --watch", "start:cluster": "cross-env NODE_ENV=development nest start --watch -- --cluster --cluster_workers 2", diff --git a/apps/core/src/app.config.ts b/apps/core/src/app.config.ts index 392fca30..90dbe82c 100644 --- a/apps/core/src/app.config.ts +++ b/apps/core/src/app.config.ts @@ -1,15 +1,15 @@ import { readFileSync } from 'node:fs' import path from 'node:path' -import { seconds } from '@nestjs/throttler' import { program } from 'commander' import { load as yamlLoad } from 'js-yaml' - import { machineIdSync } from 'node-machine-id' -import { isDebugMode, isDev } from './global/env.global' - -import { parseBooleanishValue } from './utils/tool.util' import type { AxiosRequestConfig } from 'axios' +import { seconds } from '@nestjs/throttler' + +import { isDebugMode, isDev } from './global/env.global' +import { parseBooleanishValue } from './utils/tool.util' + const { PORT: ENV_PORT, ALLOWED_ORIGINS, MX_ENCRYPT_KEY } = process.env const commander = program diff --git a/apps/core/src/app.module.ts b/apps/core/src/app.module.ts index 766193bd..f4271636 100644 --- a/apps/core/src/app.module.ts +++ b/apps/core/src/app.module.ts @@ -1,5 +1,11 @@ -import { LoggerModule } from '@innei/pretty-logger-nestjs' +import type { + DynamicModule, + MiddlewareConsumer, + NestModule, + Type, +} from '@nestjs/common' +import { LoggerModule } from '@innei/pretty-logger-nestjs' import { Module } from '@nestjs/common' import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core' @@ -60,12 +66,6 @@ import { DatabaseModule } from './processors/database/database.module' import { GatewayModule } from './processors/gateway/gateway.module' import { HelperModule } from './processors/helper/helper.module' import { RedisModule } from './processors/redis/redis.module' -import type { - DynamicModule, - MiddlewareConsumer, - NestModule, - Type, -} from '@nestjs/common' @Module({ imports: [ diff --git a/apps/core/src/bootstrap.ts b/apps/core/src/bootstrap.ts index 7bf733ce..87ebf668 100644 --- a/apps/core/src/bootstrap.ts +++ b/apps/core/src/bootstrap.ts @@ -1,10 +1,12 @@ import cluster from 'node:cluster' import { performance } from 'node:perf_hooks' +import wcmatch from 'wildcard-match' +import type { LogLevel } from '@nestjs/common' +import type { NestFastifyApplication } from '@nestjs/platform-fastify' + import { Logger } from '@innei/pretty-logger-nestjs' import { NestFactory } from '@nestjs/core' -import wcmatch from 'wildcard-match' - import { CROSS_DOMAIN, DEBUG_MODE, PORT } from './app.config' import { AppModule } from './app.module' import { fastifyApp } from './common/adapters/fastify.adapter' @@ -15,8 +17,6 @@ import { ExtendedValidationPipe } from './common/pipes/validation.pipe' import { logger } from './global/consola.global' import { isMainProcess, isTest } from './global/env.global' import { checkInit } from './utils/check-init.util' -import type { LogLevel } from '@nestjs/common' -import type { NestFastifyApplication } from '@nestjs/platform-fastify' const Origin: false | string[] = Array.isArray(CROSS_DOMAIN.allowedOrigins) ? [...CROSS_DOMAIN.allowedOrigins, '*.shizuri.net', '22333322.xyz'] diff --git a/apps/core/src/common/adapters/fastify.adapter.ts b/apps/core/src/common/adapters/fastify.adapter.ts index 08849fc7..ef2491ad 100644 --- a/apps/core/src/common/adapters/fastify.adapter.ts +++ b/apps/core/src/common/adapters/fastify.adapter.ts @@ -1,10 +1,11 @@ +import type { FastifyRequest } from 'fastify' + import fastifyCookie from '@fastify/cookie' import FastifyMultipart from '@fastify/multipart' import { Logger } from '@nestjs/common' import { FastifyAdapter } from '@nestjs/platform-fastify' import { getIp } from '~/utils' -import type { FastifyRequest } from 'fastify' const app: FastifyAdapter = new FastifyAdapter({ trustProxy: true, @@ -38,7 +39,7 @@ app.getInstance().addHook('onRequest', (request, reply, done) => { logWarn('PHP 是世界上最好的语言!!!!!', request, 'GodPHP') return reply.code(418).send() - } else if (/\/(adminer|admin|wp-login|phpmyadmin|\.env)$/gi.test(url)) { + } else if (/\/(?:adminer|admin|wp-login|phpmyadmin|\.env)$/i.test(url)) { const isMxSpaceClient = ua?.match('mx-space') reply.raw.statusMessage = 'Hey, What the fuck are you doing!' reply.raw.statusCode = isMxSpaceClient ? 666 : 200 diff --git a/apps/core/src/common/adapters/socket.adapter.ts b/apps/core/src/common/adapters/socket.adapter.ts index 330c310b..36a384e3 100644 --- a/apps/core/src/common/adapters/socket.adapter.ts +++ b/apps/core/src/common/adapters/socket.adapter.ts @@ -1,8 +1,9 @@ +import type { Server } from 'socket.io' + import { IoAdapter } from '@nestjs/platform-socket.io' import { createAdapter } from '@socket.io/redis-adapter' import { redisSubPub } from '~/utils/redis-subpub.util' -import type { Server } from 'socket.io' export const RedisIoAdapterKey = 'mx-core-socket' diff --git a/apps/core/src/common/contexts/request.context.ts b/apps/core/src/common/contexts/request.context.ts index d9a8d3d8..2eb534d3 100644 --- a/apps/core/src/common/contexts/request.context.ts +++ b/apps/core/src/common/contexts/request.context.ts @@ -1,10 +1,11 @@ /* eslint-disable dot-notation */ // @reference https://github.com/ever-co/ever-gauzy/blob/d36b4f40b1446f3c33d02e0ba00b53a83109d950/packages/core/src/core/context/request-context.ts import * as cls from 'cls-hooked' -import { UnauthorizedException } from '@nestjs/common' import type { UserDocument } from '~/modules/user/user.model' import type { IncomingMessage, ServerResponse } from 'node:http' +import { UnauthorizedException } from '@nestjs/common' + type Nullable = T | null export class RequestContext { readonly id: number diff --git a/apps/core/src/common/decorators/api-controller.decorator.ts b/apps/core/src/common/decorators/api-controller.decorator.ts index 0960b9e0..a6ceb3c7 100644 --- a/apps/core/src/common/decorators/api-controller.decorator.ts +++ b/apps/core/src/common/decorators/api-controller.decorator.ts @@ -1,8 +1,9 @@ +import type { ControllerOptions } from '@nestjs/common' + import { Controller } from '@nestjs/common' import { API_VERSION } from '~/app.config' import { isDev } from '~/global/env.global' -import type { ControllerOptions } from '@nestjs/common' export const apiRoutePrefix = isDev ? '' : `/api/v${API_VERSION}` export const ApiController: ( diff --git a/apps/core/src/common/decorators/auth.decorator.ts b/apps/core/src/common/decorators/auth.decorator.ts index 0520d1a9..22a6b198 100644 --- a/apps/core/src/common/decorators/auth.decorator.ts +++ b/apps/core/src/common/decorators/auth.decorator.ts @@ -1,4 +1,4 @@ -import { UseGuards, applyDecorators } from '@nestjs/common' +import { applyDecorators, UseGuards } from '@nestjs/common' import { AuthGuard } from '../guards/auth.guard' diff --git a/apps/core/src/common/decorators/cookie.decorator.ts b/apps/core/src/common/decorators/cookie.decorator.ts index 39a10da2..5e7e4738 100644 --- a/apps/core/src/common/decorators/cookie.decorator.ts +++ b/apps/core/src/common/decorators/cookie.decorator.ts @@ -1,7 +1,8 @@ -import { createParamDecorator } from '@nestjs/common' import type { ExecutionContext } from '@nestjs/common' import type { FastifyRequest } from 'fastify' +import { createParamDecorator } from '@nestjs/common' + export const Cookies = createParamDecorator( (data: string, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest() diff --git a/apps/core/src/common/decorators/current-user.decorator.ts b/apps/core/src/common/decorators/current-user.decorator.ts index d457522f..27e1216d 100644 --- a/apps/core/src/common/decorators/current-user.decorator.ts +++ b/apps/core/src/common/decorators/current-user.decorator.ts @@ -1,7 +1,8 @@ +import type { ExecutionContext } from '@nestjs/common' + import { createParamDecorator } from '@nestjs/common' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import type { ExecutionContext } from '@nestjs/common' export const CurrentUser = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { diff --git a/apps/core/src/common/decorators/demo.decorator.ts b/apps/core/src/common/decorators/demo.decorator.ts index fca3be52..1003ce1d 100644 --- a/apps/core/src/common/decorators/demo.decorator.ts +++ b/apps/core/src/common/decorators/demo.decorator.ts @@ -1,8 +1,10 @@ -import { UseGuards, applyDecorators } from '@nestjs/common' -import { banInDemo } from '~/utils' import type { CanActivate } from '@nestjs/common' import type { Observable } from 'rxjs' +import { applyDecorators, UseGuards } from '@nestjs/common' + +import { banInDemo } from '~/utils' + class DemoGuard implements CanActivate { canActivate(): boolean | Promise | Observable { banInDemo() diff --git a/apps/core/src/common/decorators/http.decorator.ts b/apps/core/src/common/decorators/http.decorator.ts index a2a157a8..b139d95f 100644 --- a/apps/core/src/common/decorators/http.decorator.ts +++ b/apps/core/src/common/decorators/http.decorator.ts @@ -1,3 +1,5 @@ +import type { IdempotenceOption } from '../interceptors/idempotence.interceptor' + import { SetMetadata } from '@nestjs/common' import { @@ -5,7 +7,6 @@ import { HTTP_RES_TRANSFORM_PAGINATE, } from '~/constants/meta.constant' import * as SYSTEM from '~/constants/system.constant' -import type { IdempotenceOption } from '../interceptors/idempotence.interceptor' /** * @description 分页转换 diff --git a/apps/core/src/common/decorators/ip.decorator.ts b/apps/core/src/common/decorators/ip.decorator.ts index 93007eb4..53072834 100644 --- a/apps/core/src/common/decorators/ip.decorator.ts +++ b/apps/core/src/common/decorators/ip.decorator.ts @@ -6,11 +6,13 @@ * @FilePath: /mx-server/src/core/decorators/ip.decorator.ts * @Coding with Love */ -import { createParamDecorator } from '@nestjs/common' -import { getIp } from '~/utils/ip.util' import type { ExecutionContext } from '@nestjs/common' import type { FastifyRequest } from 'fastify' +import { createParamDecorator } from '@nestjs/common' + +import { getIp } from '~/utils/ip.util' + export type IpRecord = { ip: string agent: string diff --git a/apps/core/src/common/decorators/role.decorator.ts b/apps/core/src/common/decorators/role.decorator.ts index 9b16428d..8d143b34 100644 --- a/apps/core/src/common/decorators/role.decorator.ts +++ b/apps/core/src/common/decorators/role.decorator.ts @@ -1,8 +1,9 @@ +import type { ExecutionContext } from '@nestjs/common' + import { createParamDecorator } from '@nestjs/common' import { isTest } from '~/global/env.global' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import type { ExecutionContext } from '@nestjs/common' export const IsGuest = createParamDecorator( (data: unknown, ctx: ExecutionContext) => { diff --git a/apps/core/src/common/filters/any-exception.filter.ts b/apps/core/src/common/filters/any-exception.filter.ts index 93a32dd2..88ea8521 100644 --- a/apps/core/src/common/filters/any-exception.filter.ts +++ b/apps/core/src/common/filters/any-exception.filter.ts @@ -1,4 +1,7 @@ import { resolve } from 'node:path' +import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common' +import type { FastifyReply, FastifyRequest } from 'fastify' +import type { WriteStream } from 'node:fs' import { Catch, @@ -21,9 +24,6 @@ import { EventManagerService } from '~/processors/helper/helper.event.service' import { getIp } from '../../utils/ip.util' import { BizException } from '../exceptions/biz.exception' import { LoggingInterceptor } from '../interceptors/logging.interceptor' -import type { WriteStream } from 'node:fs' -import type { FastifyReply, FastifyRequest } from 'fastify' -import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common' type myError = { readonly status: number diff --git a/apps/core/src/common/guards/auth.guard.ts b/apps/core/src/common/guards/auth.guard.ts index d2911f66..e6e7c47b 100644 --- a/apps/core/src/common/guards/auth.guard.ts +++ b/apps/core/src/common/guards/auth.guard.ts @@ -1,4 +1,7 @@ import { isJWT } from 'class-validator' +import type { CanActivate, ExecutionContext } from '@nestjs/common' +import type { UserModel } from '~/modules/user/user.model' +import type { FastifyBizRequest } from '~/transformers/get-req.transformer' import { Injectable, UnauthorizedException } from '@nestjs/common' @@ -6,9 +9,6 @@ import { AuthService } from '~/modules/auth/auth.service' import { ConfigsService } from '~/modules/configs/configs.service' import { UserService } from '~/modules/user/user.service' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import type { FastifyBizRequest } from '~/transformers/get-req.transformer' -import type { UserModel } from '~/modules/user/user.model' -import type { CanActivate, ExecutionContext } from '@nestjs/common' /** * JWT auth guard diff --git a/apps/core/src/common/guards/roles.guard.ts b/apps/core/src/common/guards/roles.guard.ts index c8908f4c..b7f6907c 100644 --- a/apps/core/src/common/guards/roles.guard.ts +++ b/apps/core/src/common/guards/roles.guard.ts @@ -1,3 +1,5 @@ +import type { CanActivate, ExecutionContext } from '@nestjs/common' + import { Injectable } from '@nestjs/common' import { AuthService } from '~/modules/auth/auth.service' @@ -6,7 +8,6 @@ import { UserService } from '~/modules/user/user.service' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' import { AuthGuard } from './auth.guard' -import type { CanActivate, ExecutionContext } from '@nestjs/common' /** * 区分游客和主人的守卫 diff --git a/apps/core/src/common/guards/spider.guard.ts b/apps/core/src/common/guards/spider.guard.ts index a7ae0b2a..09c3b7b1 100644 --- a/apps/core/src/common/guards/spider.guard.ts +++ b/apps/core/src/common/guards/spider.guard.ts @@ -4,12 +4,13 @@ * @author Innei */ +import type { CanActivate, ExecutionContext } from '@nestjs/common' +import type { Observable } from 'rxjs' + import { ForbiddenException, Injectable } from '@nestjs/common' import { isDev } from '~/global/env.global' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import type { Observable } from 'rxjs' -import type { CanActivate, ExecutionContext } from '@nestjs/common' @Injectable() export class SpiderGuard implements CanActivate { @@ -24,8 +25,8 @@ export class SpiderGuard implements CanActivate { const headers = request.headers const ua: string = headers['user-agent'] || '' const isSpiderUA = - !!/(scrapy|httpclient|axios|python|requests)/i.test(ua) && - !/(mx-space|rss|google|baidu|bing)/gi.test(ua) + !!/scrapy|httpclient|axios|python|requests/i.test(ua) && + !/mx-space|rss|google|baidu|bing/i.test(ua) if (ua && !isSpiderUA) { return true } diff --git a/apps/core/src/common/guards/throttler.guard.ts b/apps/core/src/common/guards/throttler.guard.ts index 822dce3e..42e14c7c 100644 --- a/apps/core/src/common/guards/throttler.guard.ts +++ b/apps/core/src/common/guards/throttler.guard.ts @@ -1,10 +1,11 @@ +import type { ExecutionContext } from '@nestjs/common' +import type { FastifyBizRequest } from '~/transformers/get-req.transformer' + import { Injectable } from '@nestjs/common' import { ThrottlerGuard } from '@nestjs/throttler' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' import { getIp } from '~/utils' -import type { FastifyBizRequest } from '~/transformers/get-req.transformer' -import type { ExecutionContext } from '@nestjs/common' @Injectable() export class ExtendThrottlerGuard extends ThrottlerGuard { diff --git a/apps/core/src/common/interceptors/allow-all-cors.interceptor.ts b/apps/core/src/common/interceptors/allow-all-cors.interceptor.ts index 21509868..a04af50e 100644 --- a/apps/core/src/common/interceptors/allow-all-cors.interceptor.ts +++ b/apps/core/src/common/interceptors/allow-all-cors.interceptor.ts @@ -1,4 +1,3 @@ -import { RequestMethod } from '@nestjs/common' import type { CallHandler, ExecutionContext, @@ -6,6 +5,8 @@ import type { } from '@nestjs/common' import type { FastifyReply } from 'fastify' +import { RequestMethod } from '@nestjs/common' + export class AllowAllCorsInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler) { const handle = next.handle() diff --git a/apps/core/src/common/interceptors/analyze.interceptor.ts b/apps/core/src/common/interceptors/analyze.interceptor.ts index 0b180836..44b8138c 100644 --- a/apps/core/src/common/interceptors/analyze.interceptor.ts +++ b/apps/core/src/common/interceptors/analyze.interceptor.ts @@ -7,6 +7,12 @@ import { URL } from 'node:url' import { isbot } from 'isbot' import UAParser from 'ua-parser-js' +import type { + CallHandler, + ExecutionContext, + NestInterceptor, +} from '@nestjs/common' +import type { Observable } from 'rxjs' import { Inject, Injectable } from '@nestjs/common' import { Reflector } from '@nestjs/core' @@ -23,12 +29,6 @@ import { InjectModel } from '~/transformers/model.transformer' import { scheduleManager } from '~/utils' import { getIp } from '~/utils/ip.util' import { getRedisKey } from '~/utils/redis.util' -import type { Observable } from 'rxjs' -import type { - CallHandler, - ExecutionContext, - NestInterceptor, -} from '@nestjs/common' @Injectable() export class AnalyzeInterceptor implements NestInterceptor { diff --git a/apps/core/src/common/interceptors/cache.interceptor.ts b/apps/core/src/common/interceptors/cache.interceptor.ts index a71bc0e3..d6d1f60f 100644 --- a/apps/core/src/common/interceptors/cache.interceptor.ts +++ b/apps/core/src/common/interceptors/cache.interceptor.ts @@ -6,6 +6,13 @@ * @author Innei */ import { of, tap } from 'rxjs' +import type { + CallHandler, + ExecutionContext, + NestInterceptor, +} from '@nestjs/common' +import type { FastifyReply } from 'fastify' +import type { Observable } from 'rxjs' import { Inject, Injectable, Logger, RequestMethod } from '@nestjs/common' import { HttpAdapterHost, Reflector } from '@nestjs/core' @@ -17,13 +24,6 @@ import * as SYSTEM from '~/constants/system.constant' import { CacheService } from '~/processors/redis/cache.service' import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' import { hashString } from '~/utils' -import type { Observable } from 'rxjs' -import type { FastifyReply } from 'fastify' -import type { - CallHandler, - ExecutionContext, - NestInterceptor, -} from '@nestjs/common' /** * @class HttpCacheInterceptor diff --git a/apps/core/src/common/interceptors/db-query.interceptor.ts b/apps/core/src/common/interceptors/db-query.interceptor.ts index 7dec6b71..1ae90a81 100644 --- a/apps/core/src/common/interceptors/db-query.interceptor.ts +++ b/apps/core/src/common/interceptors/db-query.interceptor.ts @@ -1,6 +1,4 @@ import qs from 'qs' -import { Injectable } from '@nestjs/common' -import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' import type { CallHandler, ExecutionContext, @@ -8,6 +6,10 @@ import type { } from '@nestjs/common' import type { Observable } from 'rxjs' +import { Injectable } from '@nestjs/common' + +import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' + /** 此拦截器用于转换 req.query.query -> js object,用于直接数据库查询,需要鉴权 */ @Injectable() export class DbQueryInterceptor implements NestInterceptor { diff --git a/apps/core/src/common/interceptors/idempotence.interceptor.ts b/apps/core/src/common/interceptors/idempotence.interceptor.ts index fb3f87e2..4c2c2c3b 100644 --- a/apps/core/src/common/interceptors/idempotence.interceptor.ts +++ b/apps/core/src/common/interceptors/idempotence.interceptor.ts @@ -1,4 +1,10 @@ import { catchError, tap } from 'rxjs' +import type { + CallHandler, + ExecutionContext, + NestInterceptor, +} from '@nestjs/common' +import type { FastifyRequest } from 'fastify' import { ConflictException, @@ -15,12 +21,6 @@ import { import { REFLECTOR } from '~/constants/system.constant' import { CacheService } from '~/processors/redis/cache.service' import { getIp, getRedisKey, hashString } from '~/utils' -import type { FastifyRequest } from 'fastify' -import type { - CallHandler, - ExecutionContext, - NestInterceptor, -} from '@nestjs/common' const IdempotenceHeaderKey = 'x-idempotence' diff --git a/apps/core/src/common/interceptors/json-transform.interceptor.ts b/apps/core/src/common/interceptors/json-transform.interceptor.ts index fe0760c7..ce5df9b3 100644 --- a/apps/core/src/common/interceptors/json-transform.interceptor.ts +++ b/apps/core/src/common/interceptors/json-transform.interceptor.ts @@ -5,17 +5,17 @@ import { isObjectLike } from 'lodash' import { map } from 'rxjs' import snakecaseKeys from 'snakecase-keys' - -import { Injectable } from '@nestjs/common' -import { Reflector } from '@nestjs/core' - -import { RESPONSE_PASSTHROUGH_METADATA } from '~/constants/system.constant' -import type { Observable } from 'rxjs' import type { CallHandler, ExecutionContext, NestInterceptor, } from '@nestjs/common' +import type { Observable } from 'rxjs' + +import { Injectable } from '@nestjs/common' +import { Reflector } from '@nestjs/core' + +import { RESPONSE_PASSTHROUGH_METADATA } from '~/constants/system.constant' @Injectable() export class JSONTransformInterceptor implements NestInterceptor { diff --git a/apps/core/src/common/interceptors/logging.interceptor.ts b/apps/core/src/common/interceptors/logging.interceptor.ts index dc64f098..bd01696d 100644 --- a/apps/core/src/common/interceptors/logging.interceptor.ts +++ b/apps/core/src/common/interceptors/logging.interceptor.ts @@ -6,17 +6,17 @@ * @author Innei */ import { tap } from 'rxjs/operators' - -import { Injectable, Logger, SetMetadata } from '@nestjs/common' - -import { HTTP_REQUEST_TIME } from '~/constants/meta.constant' -import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import type { Observable } from 'rxjs' import type { CallHandler, ExecutionContext, NestInterceptor, } from '@nestjs/common' +import type { Observable } from 'rxjs' + +import { Injectable, Logger, SetMetadata } from '@nestjs/common' + +import { HTTP_REQUEST_TIME } from '~/constants/meta.constant' +import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' @Injectable() export class LoggingInterceptor implements NestInterceptor { diff --git a/apps/core/src/common/interceptors/response.interceptor.ts b/apps/core/src/common/interceptors/response.interceptor.ts index 2a9214bd..e4a5209d 100644 --- a/apps/core/src/common/interceptors/response.interceptor.ts +++ b/apps/core/src/common/interceptors/response.interceptor.ts @@ -4,6 +4,12 @@ */ import { isArrayLike } from 'lodash' import { map } from 'rxjs/operators' +import type { + CallHandler, + ExecutionContext, + NestInterceptor, +} from '@nestjs/common' +import type { Observable } from 'rxjs' import { Injectable } from '@nestjs/common' import { Reflector } from '@nestjs/core' @@ -11,12 +17,6 @@ import { Reflector } from '@nestjs/core' import { HTTP_RES_TRANSFORM_PAGINATE } from '~/constants/meta.constant' import * as SYSTEM from '~/constants/system.constant' import { transformDataToPaginate } from '~/transformers/paginate.transformer' -import type { Observable } from 'rxjs' -import type { - CallHandler, - ExecutionContext, - NestInterceptor, -} from '@nestjs/common' export interface Response { data: T diff --git a/apps/core/src/common/middlewares/request-context.middleware.ts b/apps/core/src/common/middlewares/request-context.middleware.ts index 83f8aa41..ec5aef24 100644 --- a/apps/core/src/common/middlewares/request-context.middleware.ts +++ b/apps/core/src/common/middlewares/request-context.middleware.ts @@ -1,11 +1,13 @@ // https://github.dev/ever-co/ever-gauzy/packages/core/src/core/context/request-context.middleware.ts -import { Injectable } from '@nestjs/common' import * as cls from 'cls-hooked' -import { RequestContext } from '../contexts/request.context' import type { NestMiddleware } from '@nestjs/common' import type { IncomingMessage, ServerResponse } from 'node:http' +import { Injectable } from '@nestjs/common' + +import { RequestContext } from '../contexts/request.context' + @Injectable() export class RequestContextMiddleware implements NestMiddleware { use(req: IncomingMessage, res: ServerResponse, next: () => any) { diff --git a/apps/core/src/common/pipes/validation.pipe.ts b/apps/core/src/common/pipes/validation.pipe.ts index 188c6011..f859516d 100644 --- a/apps/core/src/common/pipes/validation.pipe.ts +++ b/apps/core/src/common/pipes/validation.pipe.ts @@ -1,7 +1,8 @@ +import type { ValidationPipeOptions } from '@nestjs/common' + import { Injectable, ValidationPipe } from '@nestjs/common' import { isDev } from '~/global/env.global' -import type { ValidationPipeOptions } from '@nestjs/common' @Injectable() export class ExtendedValidationPipe extends ValidationPipe { diff --git a/apps/core/src/decorators/dto/isAllowedUrl.ts b/apps/core/src/decorators/dto/isAllowedUrl.ts index b27ae78b..ce549649 100644 --- a/apps/core/src/decorators/dto/isAllowedUrl.ts +++ b/apps/core/src/decorators/dto/isAllowedUrl.ts @@ -1,7 +1,8 @@ import { isURL } from 'class-validator' -import { validatorFactory } from '../simpleValidatorFactory' import type { ValidationOptions } from 'class-validator' +import { validatorFactory } from '../simpleValidatorFactory' + export const IsAllowedUrl = (validationOptions?: ValidationOptions) => { return validatorFactory((val) => isURL(val, { require_protocol: true, require_tld: false }), diff --git a/apps/core/src/decorators/dto/isBooleanOrString.ts b/apps/core/src/decorators/dto/isBooleanOrString.ts index d647f793..f6a79c9b 100644 --- a/apps/core/src/decorators/dto/isBooleanOrString.ts +++ b/apps/core/src/decorators/dto/isBooleanOrString.ts @@ -1,8 +1,9 @@ import { isString } from 'class-validator' import { isBoolean, merge } from 'lodash' -import { validatorFactory } from '../simpleValidatorFactory' import type { ValidationOptions } from 'class-validator' +import { validatorFactory } from '../simpleValidatorFactory' + export function IsBooleanOrString(validationOptions?: ValidationOptions) { return validatorFactory((value) => isBoolean(value) || isString(value))( merge(validationOptions || {}, { diff --git a/apps/core/src/decorators/dto/isMongoIdOrInt.ts b/apps/core/src/decorators/dto/isMongoIdOrInt.ts index b9a8bba5..8d6a52b9 100644 --- a/apps/core/src/decorators/dto/isMongoIdOrInt.ts +++ b/apps/core/src/decorators/dto/isMongoIdOrInt.ts @@ -1,8 +1,9 @@ import { isInt, isMongoId } from 'class-validator' import { merge } from 'lodash' -import { validatorFactory } from '../simpleValidatorFactory' import type { ValidationOptions } from 'class-validator' +import { validatorFactory } from '../simpleValidatorFactory' + export function IsBooleanOrString(validationOptions?: ValidationOptions) { return validatorFactory((value) => isInt(value) || isMongoId(value))( merge(validationOptions || {}, { diff --git a/apps/core/src/decorators/dto/isNilOrString.ts b/apps/core/src/decorators/dto/isNilOrString.ts index 799266e5..f39ad0a0 100644 --- a/apps/core/src/decorators/dto/isNilOrString.ts +++ b/apps/core/src/decorators/dto/isNilOrString.ts @@ -1,7 +1,7 @@ import { - ValidatorConstraint, isString, registerDecorator, + ValidatorConstraint, } from 'class-validator' import { isNil } from 'lodash' import type { @@ -18,7 +18,7 @@ class IsNilOrStringConstraint implements ValidatorConstraintInterface { } export function IsNilOrString(validationOptions?: ValidationOptions) { - return function (object: Object, propertyName: string) { + return function (object: object, propertyName: string) { registerDecorator({ target: object.constructor, propertyName, diff --git a/apps/core/src/dump.ts b/apps/core/src/dump.ts index 3fb96bf1..5e4fb679 100644 --- a/apps/core/src/dump.ts +++ b/apps/core/src/dump.ts @@ -1,5 +1,6 @@ -import v8 from 'node:v8' import fs from 'node:fs' +import v8 from 'node:v8' + import { TEMP_DIR } from './constants/path.constant' export function registerForMemoryDump() { diff --git a/apps/core/src/global/dayjs.global.ts b/apps/core/src/global/dayjs.global.ts index 30db6f24..aa84214d 100644 --- a/apps/core/src/global/dayjs.global.ts +++ b/apps/core/src/global/dayjs.global.ts @@ -1,9 +1,8 @@ import dayjs from 'dayjs' - import duration from 'dayjs/plugin/duration' - import localizedFormat from 'dayjs/plugin/localizedFormat' import relativeTime from 'dayjs/plugin/relativeTime' + import 'dayjs/locale/zh-cn' dayjs.locale('zh-cn') diff --git a/apps/core/src/global/index.global.ts b/apps/core/src/global/index.global.ts index b54c8276..5ffe6beb 100644 --- a/apps/core/src/global/index.global.ts +++ b/apps/core/src/global/index.global.ts @@ -4,7 +4,6 @@ import { mkdirSync } from 'node:fs' import { Logger } from '@nestjs/common' import { CLUSTER } from '~/app.config' - import { DATA_DIR, LOG_DIR, @@ -16,7 +15,6 @@ import { import { consola, logger } from './consola.global' import { cwd, isDev } from './env.global' - import { registerJSONGlobal } from './json.global' import './dayjs.global' diff --git a/apps/core/src/migration/helper/encrypt-configs.ts b/apps/core/src/migration/helper/encrypt-configs.ts index adaa4807..3bb68e1b 100644 --- a/apps/core/src/migration/helper/encrypt-configs.ts +++ b/apps/core/src/migration/helper/encrypt-configs.ts @@ -1,14 +1,14 @@ import { plainToInstance } from 'class-transformer' +import type { IConfigKeys } from '~/modules/configs/configs.interface' import { ENCRYPT } from '~/app.config' - import { register } from '~/global/index.global' import { generateDefaultConfig } from '~/modules/configs/configs.default' import * as optionDtos from '~/modules/configs/configs.dto' import { encryptObject } from '~/modules/configs/configs.encrypt.util' import { IConfig } from '~/modules/configs/configs.interface' import { getDatabaseConnection } from '~/utils/database.util' -import type { IConfigKeys } from '~/modules/configs/configs.interface' + import 'reflect-metadata' console.log(ENCRYPT) diff --git a/apps/core/src/migration/version/v4.6.0-1.ts b/apps/core/src/migration/version/v4.6.0-1.ts index c047400e..459a6448 100644 --- a/apps/core/src/migration/version/v4.6.0-1.ts +++ b/apps/core/src/migration/version/v4.6.0-1.ts @@ -1,8 +1,9 @@ +import type { Db } from 'mongodb' + import { NOTE_COLLECTION_NAME, POST_COLLECTION_NAME, } from '~/constants/db.constant' -import type { Db } from 'mongodb' export default (async function v4_6_0__4(db: Db) { const countDefault = { diff --git a/apps/core/src/migration/version/v4.6.0.ts b/apps/core/src/migration/version/v4.6.0.ts index 9b36a579..9cc90ec9 100644 --- a/apps/core/src/migration/version/v4.6.0.ts +++ b/apps/core/src/migration/version/v4.6.0.ts @@ -1,10 +1,11 @@ // patch for version lower than v4.6.0 +import type { Db } from 'mongodb' + import { NOTE_COLLECTION_NAME, PAGE_COLLECTION_NAME, } from '~/constants/db.constant' -import type { Db } from 'mongodb' export default (async function v4_6_0(db: Db) { await Promise.all([ diff --git a/apps/core/src/modules/ack/ack.controller.ts b/apps/core/src/modules/ack/ack.controller.ts index 01a5ce24..d2ca814f 100644 --- a/apps/core/src/modules/ack/ack.controller.ts +++ b/apps/core/src/modules/ack/ack.controller.ts @@ -1,6 +1,7 @@ import { plainToInstance } from 'class-transformer' import { validateSync } from 'class-validator' import { FastifyReply } from 'fastify' +import type { CountModel } from '~/shared/model/count.model' import { Body, HttpCode, Inject, Post, Res } from '@nestjs/common' @@ -14,7 +15,6 @@ import { CountingService } from '~/processors/helper/helper.counting.service' import { CacheService } from '~/processors/redis/cache.service' import { AckDto, AckEventType, AckReadPayloadDto } from './ack.dto' -import type { CountModel } from '~/shared/model/count.model' @ApiController('ack') export class AckController { diff --git a/apps/core/src/modules/activity/activity.module.ts b/apps/core/src/modules/activity/activity.module.ts index a723c722..b037d463 100644 --- a/apps/core/src/modules/activity/activity.module.ts +++ b/apps/core/src/modules/activity/activity.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { GatewayModule } from '~/processors/gateway/gateway.module' diff --git a/apps/core/src/modules/activity/activity.service.ts b/apps/core/src/modules/activity/activity.service.ts index 2ef9c632..29efae62 100644 --- a/apps/core/src/modules/activity/activity.service.ts +++ b/apps/core/src/modules/activity/activity.service.ts @@ -1,12 +1,25 @@ import { omit, pick, uniqBy } from 'lodash' import { Types } from 'mongoose' +import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' +import type { Collection } from 'mongodb' +import type { Socket } from 'socket.io' +import type { NoteModel } from '../note/note.model' +import type { PageModel } from '../page/page.model' +import type { PostModel } from '../post/post.model' +import type { RecentlyModel } from '../recently/recently.model' +import type { + ActivityLikePayload, + ActivityLikeSupportType, + ActivityPresence, +} from './activity.interface' +import type { UpdatePresenceDto } from './dtos/presence.dto' import { BadRequestException, + forwardRef, Inject, Injectable, Logger, - forwardRef, } from '@nestjs/common' import { ArticleTypeEnum } from '~/constants/article.constant' @@ -37,19 +50,6 @@ import { isValidRoomName, parseRoomName, } from './activity.util' -import type { UpdatePresenceDto } from './dtos/presence.dto' -import type { - ActivityLikePayload, - ActivityLikeSupportType, - ActivityPresence, -} from './activity.interface' -import type { RecentlyModel } from '../recently/recently.model' -import type { PostModel } from '../post/post.model' -import type { PageModel } from '../page/page.model' -import type { NoteModel } from '../note/note.model' -import type { Socket } from 'socket.io' -import type { Collection } from 'mongodb' -import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' declare module '~/types/socket-meta' { interface SocketMetadata { diff --git a/apps/core/src/modules/aggregate/aggregate.controller.ts b/apps/core/src/modules/aggregate/aggregate.controller.ts index 18ddfb5b..03e489a6 100644 --- a/apps/core/src/modules/aggregate/aggregate.controller.ts +++ b/apps/core/src/modules/aggregate/aggregate.controller.ts @@ -5,10 +5,10 @@ import { Get, Query } from '@nestjs/common' import { ApiController } from '~/common/decorators/api-controller.decorator' import { Auth } from '~/common/decorators/auth.decorator' +import { HttpCache } from '~/common/decorators/cache.decorator' import { IsAuthenticated } from '~/common/decorators/role.decorator' import { CacheKeys } from '~/constants/cache.constant' -import { HttpCache } from '~/common/decorators/cache.decorator' import { AnalyzeService } from '../analyze/analyze.service' import { ConfigsService } from '../configs/configs.service' import { NoteService } from '../note/note.service' diff --git a/apps/core/src/modules/aggregate/aggregate.module.ts b/apps/core/src/modules/aggregate/aggregate.module.ts index 75e72ec5..21ce8bce 100644 --- a/apps/core/src/modules/aggregate/aggregate.module.ts +++ b/apps/core/src/modules/aggregate/aggregate.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { GatewayModule } from '~/processors/gateway/gateway.module' diff --git a/apps/core/src/modules/aggregate/aggregate.service.ts b/apps/core/src/modules/aggregate/aggregate.service.ts index 10368e08..ce03cc56 100644 --- a/apps/core/src/modules/aggregate/aggregate.service.ts +++ b/apps/core/src/modules/aggregate/aggregate.service.ts @@ -1,7 +1,12 @@ import { URL } from 'node:url' import { pick } from 'lodash' +import type { ReturnModelType } from '@typegoose/typegoose' +import type { AnyParamConstructor } from '@typegoose/typegoose/lib/types' +import type { PipelineStage } from 'mongoose' +import type { CategoryModel } from '../category/category.model' +import type { RSSProps } from './aggregate.interface' -import { Inject, Injectable, forwardRef } from '@nestjs/common' +import { forwardRef, Inject, Injectable } from '@nestjs/common' import { OnEvent } from '@nestjs/event-emitter' import { @@ -30,11 +35,6 @@ import { RecentlyService } from '../recently/recently.service' import { SayService } from '../say/say.service' import { UserService } from '../user/user.service' import { ReadAndLikeCountDocumentType, TimelineType } from './aggregate.dto' -import type { RSSProps } from './aggregate.interface' -import type { CategoryModel } from '../category/category.model' -import type { PipelineStage } from 'mongoose' -import type { AnyParamConstructor } from '@typegoose/typegoose/lib/types' -import type { ReturnModelType } from '@typegoose/typegoose' @Injectable() export class AggregateService { diff --git a/apps/core/src/modules/ai/ai-summary/ai-summary.service.ts b/apps/core/src/modules/ai/ai-summary/ai-summary.service.ts index f2a14fdc..a33d45fd 100644 --- a/apps/core/src/modules/ai/ai-summary/ai-summary.service.ts +++ b/apps/core/src/modules/ai/ai-summary/ai-summary.service.ts @@ -1,9 +1,10 @@ +import { JsonOutputFunctionsParser } from 'langchain/output_parsers' import removeMdCodeblock from 'remove-md-codeblock' +import type { PagerDto } from '~/shared/dto/pager.dto' import { Injectable, Logger } from '@nestjs/common' import { OnEvent } from '@nestjs/event-emitter' -import { JsonOutputFunctionsParser } from 'langchain/output_parsers' import { BizException } from '~/common/exceptions/biz.exception' import { BusinessEvents } from '~/constants/business-event.constant' import { CollectionRefTypes } from '~/constants/db.constant' @@ -18,7 +19,7 @@ import { ConfigsService } from '../../configs/configs.service' import { DEFAULT_SUMMARY_LANG, LANGUAGE_CODE_TO_NAME } from '../ai.constants' import { AiService } from '../ai.service' import { AISummaryModel } from './ai-summary.model' -import type { PagerDto } from '~/shared/dto/pager.dto' + @Injectable() export class AiSummaryService { private readonly logger: Logger diff --git a/apps/core/src/modules/ai/ai-writer/ai-writer.controller.ts b/apps/core/src/modules/ai/ai-writer/ai-writer.controller.ts index 84296ff9..41f09536 100644 --- a/apps/core/src/modules/ai/ai-writer/ai-writer.controller.ts +++ b/apps/core/src/modules/ai/ai-writer/ai-writer.controller.ts @@ -1,6 +1,8 @@ import { Body, Post } from '@nestjs/common' + import { ApiController } from '~/common/decorators/api-controller.decorator' import { Auth } from '~/common/decorators/auth.decorator' + import { AiQueryType, GenerateAiDto } from './ai-writer.dto' import { AiWriterService } from './ai-writer.service' diff --git a/apps/core/src/modules/ai/ai-writer/ai-writer.service.ts b/apps/core/src/modules/ai/ai-writer/ai-writer.service.ts index aec92ce4..0ace5307 100644 --- a/apps/core/src/modules/ai/ai-writer/ai-writer.service.ts +++ b/apps/core/src/modules/ai/ai-writer/ai-writer.service.ts @@ -1,8 +1,9 @@ +import { JsonOutputFunctionsParser } from 'langchain/output_parsers' +import type { FunctionDefinition } from '@langchain/core/language_models/base' + import { Injectable, Logger } from '@nestjs/common' -import { JsonOutputFunctionsParser } from 'langchain/output_parsers' import { AiService } from '../ai.service' -import type { FunctionDefinition } from '@langchain/core/language_models/base' @Injectable() export class AiWriterService { diff --git a/apps/core/src/modules/ai/ai.module.ts b/apps/core/src/modules/ai/ai.module.ts index 0eedbe2c..619df33f 100644 --- a/apps/core/src/modules/ai/ai.module.ts +++ b/apps/core/src/modules/ai/ai.module.ts @@ -2,9 +2,9 @@ import { Module } from '@nestjs/common' import { AiSummaryController } from './ai-summary/ai-summary.controller' import { AiSummaryService } from './ai-summary/ai-summary.service' -import { AiService } from './ai.service' -import { AiWriterService } from './ai-writer/ai-writer.service' import { AiWriterController } from './ai-writer/ai-writer.controller' +import { AiWriterService } from './ai-writer/ai-writer.service' +import { AiService } from './ai.service' @Module({ providers: [AiSummaryService, AiService, AiWriterService], diff --git a/apps/core/src/modules/ai/ai.service.ts b/apps/core/src/modules/ai/ai.service.ts index 51318092..c41a036b 100644 --- a/apps/core/src/modules/ai/ai.service.ts +++ b/apps/core/src/modules/ai/ai.service.ts @@ -1,7 +1,9 @@ import { ChatOpenAI } from '@langchain/openai' import { Injectable } from '@nestjs/common' + import { BizException } from '~/common/exceptions/biz.exception' import { ErrorCodeEnum } from '~/constants/error-code.constant' + import { ConfigsService } from '../configs/configs.service' @Injectable() diff --git a/apps/core/src/modules/analyze/analyze.controller.ts b/apps/core/src/modules/analyze/analyze.controller.ts index 44844cc9..40543bf5 100644 --- a/apps/core/src/modules/analyze/analyze.controller.ts +++ b/apps/core/src/modules/analyze/analyze.controller.ts @@ -1,4 +1,5 @@ import dayjs from 'dayjs' +import type { PagerDto } from '~/shared/dto/pager.dto' import { Delete, Get, HttpCode, Query } from '@nestjs/common' @@ -12,7 +13,6 @@ import { getTodayEarly, getWeekStart } from '~/utils/time.util' import { AnalyzeDto } from './analyze.dto' import { AnalyzeService } from './analyze.service' -import type { PagerDto } from '~/shared/dto/pager.dto' @ApiController({ path: 'analyze' }) @Auth() diff --git a/apps/core/src/modules/analyze/analyze.model.ts b/apps/core/src/modules/analyze/analyze.model.ts index 435df785..6e17acc2 100644 --- a/apps/core/src/modules/analyze/analyze.model.ts +++ b/apps/core/src/modules/analyze/analyze.model.ts @@ -1,7 +1,7 @@ import { SchemaTypes } from 'mongoose' import { UAParser } from 'ua-parser-js' -import { Severity, index, modelOptions, prop } from '@typegoose/typegoose' +import { index, modelOptions, prop, Severity } from '@typegoose/typegoose' import { ANALYZE_COLLECTION_NAME } from '~/constants/db.constant' import { BaseModel } from '~/shared/model/base.model' diff --git a/apps/core/src/modules/analyze/analyze.service.ts b/apps/core/src/modules/analyze/analyze.service.ts index a712117d..9a746d7c 100644 --- a/apps/core/src/modules/analyze/analyze.service.ts +++ b/apps/core/src/modules/analyze/analyze.service.ts @@ -1,5 +1,6 @@ import dayjs from 'dayjs' import { merge } from 'lodash' +import type { PipelineStage } from 'mongoose' import { Injectable } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' @@ -11,7 +12,6 @@ import { getRedisKey } from '~/utils/redis.util' import { OptionModel } from '../configs/configs.model' import { AnalyzeModel } from './analyze.model' -import type { PipelineStage } from 'mongoose' @Injectable() export class AnalyzeService { diff --git a/apps/core/src/modules/auth/auth.controller.ts b/apps/core/src/modules/auth/auth.controller.ts index 6b816d72..2a898516 100644 --- a/apps/core/src/modules/auth/auth.controller.ts +++ b/apps/core/src/modules/auth/auth.controller.ts @@ -1,10 +1,10 @@ import { Transform } from 'class-transformer' import { IsDate, + isMongoId, IsNotEmpty, IsOptional, IsString, - isMongoId, } from 'class-validator' import { diff --git a/apps/core/src/modules/auth/auth.service.ts b/apps/core/src/modules/auth/auth.service.ts index 37887ecd..582411e7 100644 --- a/apps/core/src/modules/auth/auth.service.ts +++ b/apps/core/src/modules/auth/auth.service.ts @@ -2,10 +2,13 @@ import dayjs from 'dayjs' import jwt from 'jsonwebtoken' import { isDate, omit } from 'lodash' import { LRUCache } from 'lru-cache' +import type { ClerkClient } from '@clerk/clerk-sdk-node' +import type { TokenModel, UserModel } from '~/modules/user/user.model' +import type { TokenDto } from './auth.controller' import { createClerkClient } from '@clerk/clerk-sdk-node' import { nanoid } from '@mx-space/external' -import { Inject, Injectable, Logger, forwardRef } from '@nestjs/common' +import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' import { alphabet } from '~/constants/other.constant' @@ -14,9 +17,6 @@ import { JWTService } from '~/processors/helper/helper.jwt.service' import { InjectModel } from '~/transformers/model.transformer' import { ConfigsService } from '../configs/configs.service' -import type { TokenDto } from './auth.controller' -import type { TokenModel, UserModel } from '~/modules/user/user.model' -import type { ClerkClient } from '@clerk/clerk-sdk-node' const { customAlphabet } = nanoid diff --git a/apps/core/src/modules/authn/authn.service.ts b/apps/core/src/modules/authn/authn.service.ts index 2b9e8f6a..a0074c27 100644 --- a/apps/core/src/modules/authn/authn.service.ts +++ b/apps/core/src/modules/authn/authn.service.ts @@ -1,3 +1,14 @@ +import type { + VerifiedAuthenticationResponse, + VerifiedRegistrationResponse, +} from '@simplewebauthn/server' +import type { + AuthenticationResponseJSON, + CredentialDeviceType, + RegistrationResponseJSON, +} from '@simplewebauthn/server/script/deps' +import type { UserDocument } from '../user/user.model' + import { BadRequestException, Injectable } from '@nestjs/common' import { generateAuthenticationOptions, @@ -12,20 +23,10 @@ import { RequestContext } from '~/common/contexts/request.context' import { RedisKeys } from '~/constants/cache.constant' import { CacheService } from '~/processors/redis/cache.service' import { InjectModel } from '~/transformers/model.transformer' - import { getRedisKey } from '~/utils' + import { ConfigsService } from '../configs/configs.service' -import type { UserDocument } from '../user/user.model' import { AuthnModel } from './authn.model' -import type { - VerifiedAuthenticationResponse, - VerifiedRegistrationResponse, -} from '@simplewebauthn/server' -import type { - AuthenticationResponseJSON, - CredentialDeviceType, - RegistrationResponseJSON, -} from '@simplewebauthn/server/script/deps' // TODO Compatible with versions below node v20 if (!globalThis.crypto) { diff --git a/apps/core/src/modules/backup/backup.service.ts b/apps/core/src/modules/backup/backup.service.ts index c59c240e..621dd60e 100644 --- a/apps/core/src/modules/backup/backup.service.ts +++ b/apps/core/src/modules/backup/backup.service.ts @@ -1,5 +1,5 @@ import { existsSync, statSync } from 'node:fs' -import { readFile, readdir, rm, writeFile } from 'node:fs/promises' +import { readdir, readFile, rm, writeFile } from 'node:fs/promises' import { join, resolve } from 'node:path' import { flatten } from 'lodash' import { mkdirp } from 'mkdirp' diff --git a/apps/core/src/modules/category/category.controller.ts b/apps/core/src/modules/category/category.controller.ts index 437d5f8b..f0ea94e8 100644 --- a/apps/core/src/modules/category/category.controller.ts +++ b/apps/core/src/modules/category/category.controller.ts @@ -4,6 +4,7 @@ import { BadRequestException, Body, Delete, + forwardRef, Get, HttpCode, Inject, @@ -12,7 +13,6 @@ import { Post, Put, Query, - forwardRef, } from '@nestjs/common' import { ApiController } from '~/common/decorators/api-controller.decorator' diff --git a/apps/core/src/modules/category/category.model.ts b/apps/core/src/modules/category/category.model.ts index 5b24e05b..1c90c27c 100644 --- a/apps/core/src/modules/category/category.model.ts +++ b/apps/core/src/modules/category/category.model.ts @@ -1,11 +1,11 @@ import { IsEnum, IsNotEmpty, IsOptional, IsString } from 'class-validator' +import type { DocumentType } from '@typegoose/typegoose' import { PartialType } from '@nestjs/mapped-types' import { index, modelOptions, prop } from '@typegoose/typegoose' import { CATEGORY_COLLECTION_NAME } from '~/constants/db.constant' import { BaseModel } from '~/shared/model/base.model' -import type { DocumentType } from '@typegoose/typegoose' export type CategoryDocument = DocumentType diff --git a/apps/core/src/modules/category/category.module.ts b/apps/core/src/modules/category/category.module.ts index 7072603b..fc455c04 100644 --- a/apps/core/src/modules/category/category.module.ts +++ b/apps/core/src/modules/category/category.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { PostModule } from '../post/post.module' import { SlugTrackerModule } from '../slug-tracker/slug-tracker.module' diff --git a/apps/core/src/modules/category/category.service.ts b/apps/core/src/modules/category/category.service.ts index 714af4fd..993b9487 100644 --- a/apps/core/src/modules/category/category.service.ts +++ b/apps/core/src/modules/category/category.service.ts @@ -1,10 +1,13 @@ import { omit } from 'lodash' +import type { DocumentType } from '@typegoose/typegoose' +import type { FilterQuery } from 'mongoose' +import type { PostModel } from '../post/post.model' import { BadRequestException, + forwardRef, Inject, Injectable, - forwardRef, } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' @@ -20,9 +23,6 @@ import { scheduleManager } from '~/utils' import { PostService } from '../post/post.service' import { SlugTrackerService } from '../slug-tracker/slug-tracker.service' import { CategoryModel, CategoryType } from './category.model' -import type { PostModel } from '../post/post.model' -import type { FilterQuery } from 'mongoose' -import type { DocumentType } from '@typegoose/typegoose' @Injectable() export class CategoryService { diff --git a/apps/core/src/modules/comment/comment.controller.ts b/apps/core/src/modules/comment/comment.controller.ts index cd3a894c..c3a038ca 100644 --- a/apps/core/src/modules/comment/comment.controller.ts +++ b/apps/core/src/modules/comment/comment.controller.ts @@ -1,4 +1,7 @@ import { isUndefined } from 'lodash' +import type { DocumentType } from '@typegoose/typegoose' +import type { Document, FilterQuery } from 'mongoose' +import type { CommentModel } from './comment.model' import { Body, @@ -42,9 +45,6 @@ import { CommentReplyMailType } from './comment.enum' import { CommentFilterEmailInterceptor } from './comment.interceptor' import { CommentState } from './comment.model' import { CommentService } from './comment.service' -import type { CommentModel } from './comment.model' -import type { Document, FilterQuery } from 'mongoose' -import type { DocumentType } from '@typegoose/typegoose' const idempotenceMessage = '哦吼,这句话你已经说过啦' const NESTED_REPLY_MAX = 10 diff --git a/apps/core/src/modules/comment/comment.interceptor.ts b/apps/core/src/modules/comment/comment.interceptor.ts index dbd8e7fc..8ae4c19e 100644 --- a/apps/core/src/modules/comment/comment.interceptor.ts +++ b/apps/core/src/modules/comment/comment.interceptor.ts @@ -1,17 +1,17 @@ import { isDefined } from 'class-validator' import { cloneDeep, isArrayLike, isObjectLike } from 'lodash' import { map } from 'rxjs' - -import { Injectable } from '@nestjs/common' - -import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' -import { getAvatar } from '~/utils' import type { CallHandler, ExecutionContext, NestInterceptor, } from '@nestjs/common' +import { Injectable } from '@nestjs/common' + +import { getNestExecutionContextRequest } from '~/transformers/get-req.transformer' +import { getAvatar } from '~/utils' + @Injectable() export class CommentFilterEmailInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler) { diff --git a/apps/core/src/modules/comment/comment.model.ts b/apps/core/src/modules/comment/comment.model.ts index d834b445..d731a734 100644 --- a/apps/core/src/modules/comment/comment.model.ts +++ b/apps/core/src/modules/comment/comment.model.ts @@ -2,11 +2,11 @@ import { URL } from 'node:url' import { Types } from 'mongoose' import autopopulate from 'mongoose-autopopulate' -import { Ref, modelOptions, plugin, prop } from '@typegoose/typegoose' +import { modelOptions, plugin, prop, Ref } from '@typegoose/typegoose' import { - COMMENT_COLLECTION_NAME, CollectionRefTypes, + COMMENT_COLLECTION_NAME, } from '~/constants/db.constant' import { BaseModel } from '~/shared/model/base.model' diff --git a/apps/core/src/modules/comment/comment.module.ts b/apps/core/src/modules/comment/comment.module.ts index e00212e0..faeaf947 100644 --- a/apps/core/src/modules/comment/comment.module.ts +++ b/apps/core/src/modules/comment/comment.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { GatewayModule } from '~/processors/gateway/gateway.module' diff --git a/apps/core/src/modules/comment/comment.service.ts b/apps/core/src/modules/comment/comment.service.ts index ead67854..19be3778 100644 --- a/apps/core/src/modules/comment/comment.service.ts +++ b/apps/core/src/modules/comment/comment.service.ts @@ -1,14 +1,22 @@ import { URL } from 'node:url' import { render } from 'ejs' import { omit, pick } from 'lodash' -import { Types, isObjectIdOrHexString } from 'mongoose' +import { isObjectIdOrHexString, Types } from 'mongoose' +import type { OnModuleInit } from '@nestjs/common' +import type { ReturnModelType } from '@typegoose/typegoose/lib/types' +import type { WriteBaseModel } from '~/shared/model/write-base.model' +import type { SnippetModel } from '../snippet/snippet.model' +import type { + CommentEmailTemplateRenderProps, + CommentModelRenderProps, +} from './comment.email.default' import { BadRequestException, + forwardRef, Inject, Injectable, Logger, - forwardRef, } from '@nestjs/common' import { OnEvent } from '@nestjs/event-emitter' @@ -36,14 +44,6 @@ import { } from './comment.email.default' import { CommentReplyMailType } from './comment.enum' import { CommentModel, CommentState } from './comment.model' -import type { - CommentEmailTemplateRenderProps, - CommentModelRenderProps, -} from './comment.email.default' -import type { SnippetModel } from '../snippet/snippet.model' -import type { WriteBaseModel } from '~/shared/model/write-base.model' -import type { OnModuleInit } from '@nestjs/common' -import type { ReturnModelType } from '@typegoose/typegoose/lib/types' @Injectable() export class CommentService implements OnModuleInit { @@ -120,7 +120,7 @@ export class CommentService implements OnModuleInit { } const isBlock = commentOptions.blockIps.some((ip) => // @ts-ignore - new RegExp(ip, 'ig').test(doc.ip), + new RegExp(ip, 'gi').test(doc.ip), ) if (isBlock) { return true @@ -129,7 +129,7 @@ export class CommentService implements OnModuleInit { const customKeywords = commentOptions.spamKeywords || [] const isBlock = [...customKeywords, ...BlockedKeywords].some((keyword) => - new RegExp(keyword, 'ig').test(doc.text), + new RegExp(keyword, 'gi').test(doc.text), ) if (isBlock) { diff --git a/apps/core/src/modules/configs/configs.default.ts b/apps/core/src/modules/configs/configs.default.ts index 31ecf0a9..896f54e3 100644 --- a/apps/core/src/modules/configs/configs.default.ts +++ b/apps/core/src/modules/configs/configs.default.ts @@ -1,6 +1,7 @@ -import { DEMO_MODE } from '~/app.config' import type { IConfig } from './configs.interface' +import { DEMO_MODE } from '~/app.config' + export const generateDefaultConfig: () => IConfig = () => ({ seo: { title: '我的小世界呀', diff --git a/apps/core/src/modules/configs/configs.dto.ts b/apps/core/src/modules/configs/configs.dto.ts index 5d0e2411..e49ca333 100644 --- a/apps/core/src/modules/configs/configs.dto.ts +++ b/apps/core/src/modules/configs/configs.dto.ts @@ -12,6 +12,7 @@ import { ValidateNested, } from 'class-validator' import { JSONSchema } from 'class-validator-jsonschema' +import type { ChatModel } from 'openai/resources' import { IsAllowedUrl } from '~/decorators/dto/isAllowedUrl' @@ -27,7 +28,6 @@ import { JSONSchemaTextAreaField, JSONSchemaToggleField, } from './configs.jsonschema.decorator' -import type { ChatModel } from 'openai/resources' const SecretField = (target: object, propertyKey: string | symbol) => { Encrypt(target, propertyKey) diff --git a/apps/core/src/modules/configs/configs.interface.ts b/apps/core/src/modules/configs/configs.interface.ts index cc2e1dd5..be723a49 100644 --- a/apps/core/src/modules/configs/configs.interface.ts +++ b/apps/core/src/modules/configs/configs.interface.ts @@ -1,9 +1,15 @@ import { Type } from 'class-transformer' import { ValidateNested } from 'class-validator' import { JSONSchema } from 'class-validator-jsonschema' +import type { + ClassConstructor, + TypeHelpOptions, + TypeOptions, +} from 'class-transformer' + import { - AIDto, AdminExtraDto, + AIDto, AlgoliaSearchOptionsDto, AuthSecurityDto, BackupOptionsDto, @@ -19,11 +25,6 @@ import { ThirdPartyServiceIntegrationDto, UrlDto, } from './configs.dto' -import type { - ClassConstructor, - TypeHelpOptions, - TypeOptions, -} from 'class-transformer' export const configDtoMapping = {} as Record> const ConfigField = diff --git a/apps/core/src/modules/configs/configs.model.ts b/apps/core/src/modules/configs/configs.model.ts index ccf26a3d..410c26ff 100644 --- a/apps/core/src/modules/configs/configs.model.ts +++ b/apps/core/src/modules/configs/configs.model.ts @@ -1,6 +1,6 @@ import { Schema } from 'mongoose' -import { Severity, modelOptions, prop } from '@typegoose/typegoose' +import { modelOptions, prop, Severity } from '@typegoose/typegoose' @modelOptions({ options: { allowMixed: Severity.ALLOW, customName: 'Option' }, diff --git a/apps/core/src/modules/configs/configs.service.ts b/apps/core/src/modules/configs/configs.service.ts index a004f277..49e4c635 100644 --- a/apps/core/src/modules/configs/configs.service.ts +++ b/apps/core/src/modules/configs/configs.service.ts @@ -2,6 +2,7 @@ import cluster from 'node:cluster' import { plainToInstance } from 'class-transformer' import { validateSync } from 'class-validator' import { cloneDeep, mergeWith } from 'lodash' +import type { ClassConstructor } from 'class-transformer' import { createClerkClient } from '@clerk/clerk-sdk-node' import { @@ -27,9 +28,8 @@ import { getRedisKey } from '~/utils/redis.util' import { generateDefaultConfig } from './configs.default' import { decryptObject, encryptObject } from './configs.encrypt.util' -import { IConfig, configDtoMapping } from './configs.interface' +import { configDtoMapping, IConfig } from './configs.interface' import { OptionModel } from './configs.model' -import type { ClassConstructor } from 'class-transformer' const configsKeySet = new Set(Object.keys(configDtoMapping)) diff --git a/apps/core/src/modules/feed/feed.controller.ts b/apps/core/src/modules/feed/feed.controller.ts index d83dd6d0..d1c5d180 100644 --- a/apps/core/src/modules/feed/feed.controller.ts +++ b/apps/core/src/modules/feed/feed.controller.ts @@ -1,5 +1,6 @@ import RemoveMarkdown from 'remove-markdown' import xss from 'xss' +import type { CategoryModel } from '../category/category.model' import { CacheKey, CacheTTL } from '@nestjs/cache-manager' import { Controller, Get, Header } from '@nestjs/common' @@ -12,7 +13,6 @@ import { AggregateService } from '../aggregate/aggregate.service' import { ConfigsService } from '../configs/configs.service' import { MarkdownService } from '../markdown/markdown.service' import { UserService } from '../user/user.service' -import type { CategoryModel } from '../category/category.model' @Controller() export class FeedController { diff --git a/apps/core/src/modules/file/file.service.ts b/apps/core/src/modules/file/file.service.ts index 20c2a181..7f9b7572 100644 --- a/apps/core/src/modules/file/file.service.ts +++ b/apps/core/src/modules/file/file.service.ts @@ -1,5 +1,7 @@ import { createWriteStream } from 'node:fs' import { resolve } from 'node:path' +import type { Readable } from 'node:stream' +import type { FileType } from './file.type' import { BadRequestException, @@ -15,8 +17,6 @@ import { } from '~/constants/path.constant' import { ConfigsService } from '../configs/configs.service' -import type { FileType } from './file.type' -import type { Readable } from 'node:stream' @Injectable() export class FileService { @@ -79,8 +79,8 @@ export class FileService { async deleteFile(type: FileType, name: string) { try { const path = this.resolveFilePath(type, name) - await fs.copyFile(path, resolve(STATIC_FILE_TRASH_DIR, name)); - await fs.unlink(path); + await fs.copyFile(path, resolve(STATIC_FILE_TRASH_DIR, name)) + await fs.unlink(path) } catch (error) { this.logger.error('删除文件失败', error) diff --git a/apps/core/src/modules/health/sub-controller/log.controller.ts b/apps/core/src/modules/health/sub-controller/log.controller.ts index 1edc468e..3d140f8f 100644 --- a/apps/core/src/modules/health/sub-controller/log.controller.ts +++ b/apps/core/src/modules/health/sub-controller/log.controller.ts @@ -1,3 +1,5 @@ +import type { Readable } from 'form-data' + import { BadRequestException, Delete, @@ -17,7 +19,6 @@ import { formatByteSize } from '~/utils' import { getTodayLogFilePath } from '~/utils/path.util' import { LogQueryDto, LogTypeDto } from '../health.dto' -import type { Readable } from 'form-data' @ApiController('health/log') @Auth() diff --git a/apps/core/src/modules/init/init.guard.ts b/apps/core/src/modules/init/init.guard.ts index 18a80618..3f5d78b2 100644 --- a/apps/core/src/modules/init/init.guard.ts +++ b/apps/core/src/modules/init/init.guard.ts @@ -1,6 +1,7 @@ -import { checkInit } from '~/utils/check-init.util' import type { CanActivate } from '@nestjs/common' +import { checkInit } from '~/utils/check-init.util' + export class InitGuard implements CanActivate { async canActivate() { return !(await checkInit()) diff --git a/apps/core/src/modules/link/link.controller.ts b/apps/core/src/modules/link/link.controller.ts index 727ca60c..78d53abb 100644 --- a/apps/core/src/modules/link/link.controller.ts +++ b/apps/core/src/modules/link/link.controller.ts @@ -1,3 +1,5 @@ +import type mongoose from 'mongoose' + import { Body, ForbiddenException, @@ -24,7 +26,6 @@ import { scheduleManager } from '~/utils' import { AuditReasonDto, LinkDto } from './link.dto' import { LinkModel, LinkState } from './link.model' import { LinkService } from './link.service' -import type mongoose from 'mongoose' const paths = ['links', 'friends'] diff --git a/apps/core/src/modules/link/link.model.ts b/apps/core/src/modules/link/link.model.ts index ff574dca..5fa71abb 100644 --- a/apps/core/src/modules/link/link.model.ts +++ b/apps/core/src/modules/link/link.model.ts @@ -1,6 +1,4 @@ -import { modelOptions, prop } from '@typegoose/typegoose' import { Transform } from 'class-transformer' - import { IsEmail, IsEnum, @@ -10,6 +8,8 @@ import { MaxLength, } from 'class-validator' +import { modelOptions, prop } from '@typegoose/typegoose' + import { BaseModel } from '~/shared/model/base.model' export enum LinkType { diff --git a/apps/core/src/modules/link/link.service.ts b/apps/core/src/modules/link/link.service.ts index 3ecfbf3a..1a9207e0 100644 --- a/apps/core/src/modules/link/link.service.ts +++ b/apps/core/src/modules/link/link.service.ts @@ -7,14 +7,15 @@ import { NotFoundException, UnprocessableEntityException, } from '@nestjs/common' + import { BusinessEvents, EventScope } from '~/constants/business-event.constant' import { isDev } from '~/global/env.global' import { EmailService } from '~/processors/helper/helper.email.service' import { EventManagerService } from '~/processors/helper/helper.event.service' import { HttpService } from '~/processors/helper/helper.http.service' import { InjectModel } from '~/transformers/model.transformer' - import { scheduleManager } from '~/utils' + import { ConfigsService } from '../configs/configs.service' import { UserService } from '../user/user.service' import { LinkApplyEmailType } from './link-mail.enum' diff --git a/apps/core/src/modules/markdown/markdown.controller.ts b/apps/core/src/modules/markdown/markdown.controller.ts index 70ba8d33..3dc03e62 100644 --- a/apps/core/src/modules/markdown/markdown.controller.ts +++ b/apps/core/src/modules/markdown/markdown.controller.ts @@ -2,6 +2,8 @@ import { join } from 'node:path' import { Readable } from 'node:stream' import JSZip from 'jszip' import { omit } from 'lodash' +import type { CategoryModel } from '../category/category.model' +import type { MarkdownYAMLProperty } from './markdown.interface' import { CacheTTL } from '@nestjs/cache-manager' import { Body, Get, Header, Param, Post, Query } from '@nestjs/common' @@ -14,8 +16,6 @@ import { MongoIdDto } from '~/shared/dto/id.dto' import { DataListDto, ExportMarkdownQueryDto } from './markdown.dto' import { MarkdownService } from './markdown.service' -import type { MarkdownYAMLProperty } from './markdown.interface' -import type { CategoryModel } from '../category/category.model' @ApiController('markdown') export class MarkdownController { diff --git a/apps/core/src/modules/markdown/markdown.service.ts b/apps/core/src/modules/markdown/markdown.service.ts index ed0096bc..30d4aec8 100644 --- a/apps/core/src/modules/markdown/markdown.service.ts +++ b/apps/core/src/modules/markdown/markdown.service.ts @@ -2,6 +2,8 @@ import { dump } from 'js-yaml' import JSZip from 'jszip' import { omit } from 'lodash' import { Types } from 'mongoose' +import type { DatatypeDto } from './markdown.dto' +import type { MarkdownYAMLProperty } from './markdown.interface' import { BadRequestException, @@ -22,8 +24,6 @@ import { NoteModel } from '../note/note.model' import { PageModel } from '../page/page.model' import { PostModel } from '../post/post.model' import { markdownToHtml } from './markdown.util' -import type { MarkdownYAMLProperty } from './markdown.interface' -import type { DatatypeDto } from './markdown.dto' @Injectable() export class MarkdownService { diff --git a/apps/core/src/modules/note/note.controller.ts b/apps/core/src/modules/note/note.controller.ts index a8f30bba..20732673 100644 --- a/apps/core/src/modules/note/note.controller.ts +++ b/apps/core/src/modules/note/note.controller.ts @@ -1,3 +1,5 @@ +import type { FilterQuery } from 'mongoose' + import { Body, Delete, @@ -30,7 +32,6 @@ import { } from './note.dto' import { NoteModel, PartialNoteModel } from './note.model' import { NoteService } from './note.service' -import type { FilterQuery } from 'mongoose' @ApiController({ path: 'notes' }) export class NoteController { diff --git a/apps/core/src/modules/note/note.model.ts b/apps/core/src/modules/note/note.model.ts index 564e661f..3d1bc4d6 100644 --- a/apps/core/src/modules/note/note.model.ts +++ b/apps/core/src/modules/note/note.model.ts @@ -12,7 +12,7 @@ import mongooseAutoPopulate from 'mongoose-autopopulate' import { PartialType } from '@nestjs/mapped-types' import { AutoIncrementID } from '@typegoose/auto-increment' -import { Ref, index, modelOptions, plugin, prop } from '@typegoose/typegoose' +import { index, modelOptions, plugin, prop, Ref } from '@typegoose/typegoose' import { NOTE_COLLECTION_NAME } from '~/constants/db.constant' import { TransformEmptyNull } from '~/decorators/dto/transformEmptyNull' diff --git a/apps/core/src/modules/note/note.module.ts b/apps/core/src/modules/note/note.module.ts index dae574fd..b5a5fc5e 100644 --- a/apps/core/src/modules/note/note.module.ts +++ b/apps/core/src/modules/note/note.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { GatewayModule } from '~/processors/gateway/gateway.module' diff --git a/apps/core/src/modules/note/note.service.ts b/apps/core/src/modules/note/note.service.ts index 37655e37..23a65f0f 100644 --- a/apps/core/src/modules/note/note.service.ts +++ b/apps/core/src/modules/note/note.service.ts @@ -1,8 +1,10 @@ import { isDefined, isMongoId } from 'class-validator' import dayjs from 'dayjs' import { debounce, omit } from 'lodash' +import type { DocumentType } from '@typegoose/typegoose' +import type { FilterQuery, PaginateOptions } from 'mongoose' -import { Inject, Injectable, forwardRef } from '@nestjs/common' +import { forwardRef, Inject, Injectable } from '@nestjs/common' import { CannotFindException } from '~/common/exceptions/cant-find.exception' import { NoContentCanBeModifiedException } from '~/common/exceptions/no-content-canbe-modified.exception' @@ -18,8 +20,6 @@ import { getLessThanNow, scheduleManager } from '~/utils' import { getArticleIdFromRoomName } from '../activity/activity.util' import { CommentService } from '../comment/comment.service' import { NoteModel } from './note.model' -import type { FilterQuery, PaginateOptions } from 'mongoose' -import type { DocumentType } from '@typegoose/typegoose' @Injectable() export class NoteService { diff --git a/apps/core/src/modules/pageproxy/pageproxy.controller.ts b/apps/core/src/modules/pageproxy/pageproxy.controller.ts index e85a0e0c..70445f53 100644 --- a/apps/core/src/modules/pageproxy/pageproxy.controller.ts +++ b/apps/core/src/modules/pageproxy/pageproxy.controller.ts @@ -4,6 +4,7 @@ import { extname, join } from 'node:path' import { render } from 'ejs' import { FastifyReply, FastifyRequest } from 'fastify' import { lookup } from 'mime-types' +import type { Observable } from 'rxjs' import { Controller, Get, Query, Req, Res } from '@nestjs/common' import { SkipThrottle } from '@nestjs/throttler' @@ -14,7 +15,6 @@ import { AssetService } from '~/processors/helper/helper.asset.service' import { UpdateService } from '../update/update.service' import { PageProxyService } from './pageproxy.service' -import type { Observable } from 'rxjs' @Controller('/') @SkipThrottle() diff --git a/apps/core/src/modules/pageproxy/pageproxy.service.ts b/apps/core/src/modules/pageproxy/pageproxy.service.ts index e5974d65..c17a3735 100644 --- a/apps/core/src/modules/pageproxy/pageproxy.service.ts +++ b/apps/core/src/modules/pageproxy/pageproxy.service.ts @@ -3,11 +3,11 @@ import { parseHTML } from 'linkedom' import { Injectable, InternalServerErrorException } from '@nestjs/common' +import PKG from '~/../package.json' import { API_VERSION } from '~/app.config' import { ConfigsService } from '../configs/configs.service' import { UserService } from '../user/user.service' -import PKG from '~/../package.json' @Injectable() export class PageProxyService { diff --git a/apps/core/src/modules/post/post.controller.ts b/apps/core/src/modules/post/post.controller.ts index 90877359..07167fcc 100644 --- a/apps/core/src/modules/post/post.controller.ts +++ b/apps/core/src/modules/post/post.controller.ts @@ -1,3 +1,6 @@ +import type { PipelineStage } from 'mongoose' +import type { CategoryModel } from '../category/category.model' + import { Body, Delete, @@ -21,8 +24,6 @@ import { addYearCondition } from '~/transformers/db-query.transformer' import { CategoryAndSlugDto, PostPagerDto } from './post.dto' import { PartialPostModel, PostModel } from './post.model' import { PostService } from './post.service' -import type { CategoryModel } from '../category/category.model' -import type { PipelineStage } from 'mongoose' @ApiController('posts') export class PostController { diff --git a/apps/core/src/modules/post/post.model.ts b/apps/core/src/modules/post/post.model.ts index b020283a..665e8dce 100644 --- a/apps/core/src/modules/post/post.model.ts +++ b/apps/core/src/modules/post/post.model.ts @@ -3,27 +3,28 @@ import { ArrayUnique, IsBoolean, IsDate, + isDateString, IsInt, IsMongoId, IsNotEmpty, IsOptional, IsString, Min, - isDateString, } from 'class-validator' import { Types } from 'mongoose' import aggregatePaginate from 'mongoose-aggregate-paginate-v2' import mongooseAutoPopulate from 'mongoose-autopopulate' +import type { Paginator } from '~/shared/interface/paginator.interface' import { UnprocessableEntityException } from '@nestjs/common' import { PartialType } from '@nestjs/mapped-types' import { - Ref, - Severity, index, modelOptions, plugin, prop, + Ref, + Severity, } from '@typegoose/typegoose' import { POST_COLLECTION_NAME } from '~/constants/db.constant' @@ -32,7 +33,6 @@ import { CountModel as Count } from '~/shared/model/count.model' import { WriteBaseModel } from '~/shared/model/write-base.model' import { CategoryModel as Category } from '../category/category.model' -import type { Paginator } from '~/shared/interface/paginator.interface' @plugin(aggregatePaginate) @plugin(mongooseAutoPopulate) diff --git a/apps/core/src/modules/post/post.module.ts b/apps/core/src/modules/post/post.module.ts index 44e4df99..53a29051 100644 --- a/apps/core/src/modules/post/post.module.ts +++ b/apps/core/src/modules/post/post.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { CategoryModule } from '../category/category.module' import { SlugTrackerModule } from '../slug-tracker/slug-tracker.module' diff --git a/apps/core/src/modules/post/post.service.ts b/apps/core/src/modules/post/post.service.ts index 27f95807..ebbb30cb 100644 --- a/apps/core/src/modules/post/post.service.ts +++ b/apps/core/src/modules/post/post.service.ts @@ -1,13 +1,15 @@ import { isDefined } from 'class-validator' import { debounce, omit } from 'lodash' import slugify from 'slugify' +import type { DocumentType } from '@typegoose/typegoose' +import type { AggregatePaginateModel, Document, Types } from 'mongoose' import { BadRequestException, + forwardRef, Inject, Injectable, NotFoundException, - forwardRef, } from '@nestjs/common' import { BusinessException } from '~/common/exceptions/biz.exception' @@ -27,8 +29,6 @@ import { CategoryService } from '../category/category.service' import { CommentModel } from '../comment/comment.model' import { SlugTrackerService } from '../slug-tracker/slug-tracker.service' import { PostModel } from './post.model' -import type { AggregatePaginateModel, Document, Types } from 'mongoose' -import type { DocumentType } from '@typegoose/typegoose' @Injectable() export class PostService { diff --git a/apps/core/src/modules/recently/recently.module.ts b/apps/core/src/modules/recently/recently.module.ts index f9724afb..ba90f892 100644 --- a/apps/core/src/modules/recently/recently.module.ts +++ b/apps/core/src/modules/recently/recently.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { CommentModule } from '../comment/comment.module' import { RecentlyController } from './recently.controller' diff --git a/apps/core/src/modules/recently/recently.service.ts b/apps/core/src/modules/recently/recently.service.ts index 633eb57c..620626aa 100644 --- a/apps/core/src/modules/recently/recently.service.ts +++ b/apps/core/src/modules/recently/recently.service.ts @@ -3,10 +3,10 @@ import pluralize from 'pluralize' import { BadRequestException, + forwardRef, Inject, Injectable, UnprocessableEntityException, - forwardRef, } from '@nestjs/common' import { CannotFindException } from '~/common/exceptions/cant-find.exception' diff --git a/apps/core/src/modules/render/render.controller.ts b/apps/core/src/modules/render/render.controller.ts index 58ce7eb0..dbf5ccff 100644 --- a/apps/core/src/modules/render/render.controller.ts +++ b/apps/core/src/modules/render/render.controller.ts @@ -2,6 +2,9 @@ import dayjs from 'dayjs' import { render } from 'ejs' import { isNil } from 'lodash' import xss from 'xss' +import type { NoteModel } from '../note/note.model' +import type { PageModel } from '../page/page.model' +import type { PostModel } from '../post/post.model' import { CacheTTL } from '@nestjs/cache-manager' import { @@ -26,9 +29,6 @@ import { ConfigsService } from '../configs/configs.service' import { MarkdownPreviewDto } from '../markdown/markdown.dto' import { MarkdownService } from '../markdown/markdown.service' import { UserService } from '../user/user.service' -import type { PostModel } from '../post/post.model' -import type { PageModel } from '../page/page.model' -import type { NoteModel } from '../note/note.model' @Controller('/render') @HTTPDecorators.Bypass diff --git a/apps/core/src/modules/search/search.module.ts b/apps/core/src/modules/search/search.module.ts index ae2e4f34..65982632 100644 --- a/apps/core/src/modules/search/search.module.ts +++ b/apps/core/src/modules/search/search.module.ts @@ -1,4 +1,4 @@ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { NoteModule } from '../note/note.module' import { PageModule } from '../page/page.module' diff --git a/apps/core/src/modules/search/search.service.ts b/apps/core/src/modules/search/search.service.ts index 828716f1..82237f19 100644 --- a/apps/core/src/modules/search/search.service.ts +++ b/apps/core/src/modules/search/search.service.ts @@ -1,3 +1,11 @@ +import algoliasearch from 'algoliasearch' +import { omit } from 'lodash' +import removeMdCodeblock from 'remove-md-codeblock' +import type { SearchResponse } from '@algolia/client-search' +import type { SearchDto } from '~/modules/search/search.dto' +import type { Pagination } from '~/shared/interface/paginator.interface' +import type { SearchIndex } from 'algoliasearch' + import { BadRequestException, forwardRef, @@ -8,10 +16,6 @@ import { import { OnEvent } from '@nestjs/event-emitter' import { CronExpression } from '@nestjs/schedule' -import algoliasearch from 'algoliasearch' -import { omit } from 'lodash' -import removeMdCodeblock from 'remove-md-codeblock' - import { CronDescription } from '~/common/decorators/cron-description.decorator' import { CronOnce } from '~/common/decorators/cron-once.decorator' import { BusinessEvents } from '~/constants/business-event.constant' @@ -19,16 +23,12 @@ import { EventBusEvents } from '~/constants/event-bus.constant' import { DatabaseService } from '~/processors/database/database.service' import { transformDataToPaginate } from '~/transformers/paginate.transformer' -import type { SearchDto } from '~/modules/search/search.dto' -import type { Pagination } from '~/shared/interface/paginator.interface' import { ConfigsService } from '../configs/configs.service' import { NoteModel } from '../note/note.model' import { NoteService } from '../note/note.service' import { PageService } from '../page/page.service' import { PostModel } from '../post/post.model' import { PostService } from '../post/post.service' -import type { SearchResponse } from '@algolia/client-search' -import type { SearchIndex } from 'algoliasearch' @Injectable() export class SearchService { diff --git a/apps/core/src/modules/server-time/server-time.module.ts b/apps/core/src/modules/server-time/server-time.module.ts index 5d3689fb..e99bf8c5 100644 --- a/apps/core/src/modules/server-time/server-time.module.ts +++ b/apps/core/src/modules/server-time/server-time.module.ts @@ -1,8 +1,9 @@ +import type { MiddlewareConsumer, NestModule } from '@nestjs/common' + import { Module, RequestMethod } from '@nestjs/common' import { ServerTimeController } from './server-time.controller' import { trackResponseTimeMiddleware } from './server-time.middleware' -import type { MiddlewareConsumer, NestModule } from '@nestjs/common' @Module({ controllers: [ServerTimeController], diff --git a/apps/core/src/modules/serverless/mock-response.util.ts b/apps/core/src/modules/serverless/mock-response.util.ts index c1245bf0..4dc78a79 100644 --- a/apps/core/src/modules/serverless/mock-response.util.ts +++ b/apps/core/src/modules/serverless/mock-response.util.ts @@ -1,7 +1,8 @@ -import { HttpException } from '@nestjs/common' import type { FastifyReply } from 'fastify' import type { FunctionContextResponse } from './function.types' +import { HttpException } from '@nestjs/common' + export const createMockedContextResponse = ( reply: FastifyReply, ): FunctionContextResponse => { diff --git a/apps/core/src/modules/serverless/serverless.model.ts b/apps/core/src/modules/serverless/serverless.model.ts index 51723d81..cb828b9f 100644 --- a/apps/core/src/modules/serverless/serverless.model.ts +++ b/apps/core/src/modules/serverless/serverless.model.ts @@ -1,9 +1,9 @@ import { - Severity, index, modelOptions, mongoose, prop, + Severity, } from '@typegoose/typegoose' export const ServerlessStorageCollectionName = `serverlessstorages` diff --git a/apps/core/src/modules/serverless/serverless.service.ts b/apps/core/src/modules/serverless/serverless.service.ts index e5700e5a..1fbf9d5f 100644 --- a/apps/core/src/modules/serverless/serverless.service.ts +++ b/apps/core/src/modules/serverless/serverless.service.ts @@ -6,6 +6,12 @@ import { isPlainObject } from 'lodash' import { LRUCache } from 'lru-cache' import { mongo } from 'mongoose' import qs from 'qs' +import type { OnModuleInit } from '@nestjs/common' +import type { + BuiltInFunctionObject, + FunctionContextRequest, + FunctionContextResponse, +} from './function.types' import { parseAsync, transformAsync } from '@babel/core' import * as t from '@babel/types' @@ -44,12 +50,6 @@ import { SnippetModel, SnippetType } from '../snippet/snippet.model' import { allBuiltInSnippetPack as builtInSnippets } from './pack' import { ServerlessStorageCollectionName } from './serverless.model' import { complieTypeScriptBabelOptions, hashStable } from './serverless.util' -import type { - BuiltInFunctionObject, - FunctionContextRequest, - FunctionContextResponse, -} from './function.types' -import type { OnModuleInit } from '@nestjs/common' type ScopeContext = { req: FunctionContextRequest diff --git a/apps/core/src/modules/serverless/serverless.util.ts b/apps/core/src/modules/serverless/serverless.util.ts index 7e75d7f0..cd0110ff 100644 --- a/apps/core/src/modules/serverless/serverless.util.ts +++ b/apps/core/src/modules/serverless/serverless.util.ts @@ -1,10 +1,11 @@ /* eslint-disable import/no-duplicates */ -import BabelPluginTransformCommonJS from '@babel/plugin-transform-modules-commonjs' -import BabelPluginTransformTS from '@babel/plugin-transform-typescript' import type { TransformOptions } from '@babel/core' import type * as t from '@babel/types' import type { VariableDeclaration } from '@babel/types' +import BabelPluginTransformCommonJS from '@babel/plugin-transform-modules-commonjs' +import BabelPluginTransformTS from '@babel/plugin-transform-typescript' + export const hashStable = (str: string): string => { let hash = 5381 let i = str.length diff --git a/apps/core/src/modules/slug-tracker/slug-tracker.service.ts b/apps/core/src/modules/slug-tracker/slug-tracker.service.ts index 6fdb1718..8c5a2bf0 100644 --- a/apps/core/src/modules/slug-tracker/slug-tracker.service.ts +++ b/apps/core/src/modules/slug-tracker/slug-tracker.service.ts @@ -1,10 +1,11 @@ +import type { ArticleTypeEnum } from '~/constants/article.constant' + import { Injectable } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' import { InjectModel } from '~/transformers/model.transformer' import { SlugTrackerModel } from './slug-tracker.model' -import type { ArticleTypeEnum } from '~/constants/article.constant' @Injectable() export class SlugTrackerService { diff --git a/apps/core/src/modules/snippet/snippet.module.ts b/apps/core/src/modules/snippet/snippet.module.ts index 5cecb271..fa5be91d 100644 --- a/apps/core/src/modules/snippet/snippet.module.ts +++ b/apps/core/src/modules/snippet/snippet.module.ts @@ -1,7 +1,7 @@ /** * 数据配置区块 */ -import { Module, forwardRef } from '@nestjs/common' +import { forwardRef, Module } from '@nestjs/common' import { ServerlessModule } from '../serverless/serverless.module' import { SnippetController } from './snippet.controller' diff --git a/apps/core/src/modules/snippet/snippet.service.ts b/apps/core/src/modules/snippet/snippet.service.ts index 8937cd57..3549b4ef 100644 --- a/apps/core/src/modules/snippet/snippet.service.ts +++ b/apps/core/src/modules/snippet/snippet.service.ts @@ -1,14 +1,15 @@ import { load } from 'js-yaml' import JSON5 from 'json5' import qs from 'qs' +import type { AggregatePaginateModel, Document } from 'mongoose' import { BadRequestException, ForbiddenException, + forwardRef, Inject, Injectable, NotFoundException, - forwardRef, } from '@nestjs/common' import { EventScope } from '~/constants/business-event.constant' @@ -21,7 +22,6 @@ import { getRedisKey } from '~/utils' import { ServerlessService } from '../serverless/serverless.service' import { SnippetModel, SnippetType } from './snippet.model' -import type { AggregatePaginateModel, Document } from 'mongoose' @Injectable() export class SnippetService { diff --git a/apps/core/src/modules/subscribe/subscribe.email.default.ts b/apps/core/src/modules/subscribe/subscribe.email.default.ts index c74ac974..862f3b0f 100644 --- a/apps/core/src/modules/subscribe/subscribe.email.default.ts +++ b/apps/core/src/modules/subscribe/subscribe.email.default.ts @@ -1,6 +1,7 @@ -import { SubscribeAllBit } from './subscribe.constant' import type { UserModel, UserModelSecurityKeys } from '../user/user.model' +import { SubscribeAllBit } from './subscribe.constant' + const defaultPostProps = { text: '年纪在四十以上,二十以下的,恐怕就不易在前两派里有个地位了。他们的车破,又不敢“拉晚儿”,所以只能早早的出车,希望能从清晨转到午后三四点钟,拉出“车份儿”和自己的嚼谷①。他们的车破,跑得慢,所以得多走路,少要钱。到瓜市,果市,菜市,去拉货物,都是他们;钱少,可是无须快跑呢。', title: '骆驼祥子', diff --git a/apps/core/src/modules/subscribe/subscribe.service.ts b/apps/core/src/modules/subscribe/subscribe.service.ts index 927b84a3..72880c9b 100644 --- a/apps/core/src/modules/subscribe/subscribe.service.ts +++ b/apps/core/src/modules/subscribe/subscribe.service.ts @@ -1,6 +1,13 @@ import cluster from 'node:cluster' import { render } from 'ejs' import { LRUCache } from 'lru-cache' +import type { CoAction } from '@innei/next-async/types/interface' +import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' +import type { IEventManagerHandlerDisposer } from '~/processors/helper/helper.event.service' +import type Mail from 'nodemailer/lib/mailer' +import type { NoteModel } from '../note/note.model' +import type { PostModel } from '../post/post.model' +import type { SubscribeTemplateRenderProps } from './subscribe.email.default' import { Co } from '@innei/next-async' import { nanoid as N } from '@mx-space/external' @@ -24,13 +31,6 @@ import { } from './subscribe.constant' import { defaultSubscribeForRenderProps } from './subscribe.email.default' import { SubscribeModel } from './subscribe.model' -import type { SubscribeTemplateRenderProps } from './subscribe.email.default' -import type { PostModel } from '../post/post.model' -import type { NoteModel } from '../note/note.model' -import type Mail from 'nodemailer/lib/mailer' -import type { IEventManagerHandlerDisposer } from '~/processors/helper/helper.event.service' -import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' -import type { CoAction } from '@innei/next-async/types/interface' const { nanoid } = N diff --git a/apps/core/src/modules/sync-update/sync-update.service.ts b/apps/core/src/modules/sync-update/sync-update.service.ts index db47cbe6..97043616 100644 --- a/apps/core/src/modules/sync-update/sync-update.service.ts +++ b/apps/core/src/modules/sync-update/sync-update.service.ts @@ -1,3 +1,7 @@ +import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' +import type { SyncableCollectionName } from '../sync/sync.constant' +import type { SyncableDataInteraction } from './sync-update.type' + import { Injectable } from '@nestjs/common' import { Cron, CronExpression } from '@nestjs/schedule' import { ReturnModelType } from '@typegoose/typegoose' @@ -18,9 +22,6 @@ import { md5 } from '~/utils' import { SyncableCollectionNames } from '../sync/sync.constant' import { SyncUpdateModel } from './sync-update.model' -import type { SyncableDataInteraction } from './sync-update.type' -import type { SyncableCollectionName } from '../sync/sync.constant' -import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' @Injectable() export class SyncUpdateService implements OnModuleInit, OnModuleDestroy { diff --git a/apps/core/src/modules/sync/sync.service.ts b/apps/core/src/modules/sync/sync.service.ts index 51c537d3..6df13f97 100644 --- a/apps/core/src/modules/sync/sync.service.ts +++ b/apps/core/src/modules/sync/sync.service.ts @@ -1,8 +1,11 @@ import { Readable } from 'node:stream' -import { Inject, Injectable } from '@nestjs/common' - -import { ReturnModelType } from '@typegoose/typegoose' import { Types } from 'mongoose' +import type { Collection, Document, OptionalId } from 'mongodb' +import type { SyncableDataInteraction } from '../sync-update/sync-update.type' +import type { SyncableCollectionName } from './sync.constant' + +import { Inject, Injectable } from '@nestjs/common' +import { ReturnModelType } from '@typegoose/typegoose' import { CATEGORY_COLLECTION_NAME, @@ -22,10 +25,7 @@ import { PageService } from '../page/page.service' import { PostService } from '../post/post.service' import { SyncUpdateModel } from '../sync-update/sync-update.model' import { TopicService } from '../topic/topic.service' -import type { SyncableDataInteraction } from '../sync-update/sync-update.type' import { SyncableCollectionNames } from './sync.constant' -import type { SyncableCollectionName } from './sync.constant' -import type { Collection, Document, OptionalId } from 'mongodb' @Injectable() export class SyncService { diff --git a/apps/core/src/modules/update/update.controller.ts b/apps/core/src/modules/update/update.controller.ts index 3f9536ad..62dae2ee 100644 --- a/apps/core/src/modules/update/update.controller.ts +++ b/apps/core/src/modules/update/update.controller.ts @@ -1,9 +1,10 @@ import { isSemVer } from 'class-validator' -import { Observable, catchError, lastValueFrom } from 'rxjs' +import { catchError, lastValueFrom, Observable } from 'rxjs' import { lt, major, minor } from 'semver' import { Query, Sse } from '@nestjs/common' +import { dashboard } from '~/../package.json' import { ApiController } from '~/common/decorators/api-controller.decorator' import { Auth } from '~/common/decorators/auth.decorator' import { HTTPDecorators } from '~/common/decorators/http.decorator' @@ -11,7 +12,6 @@ import { LOCAL_ADMIN_ASSET_PATH } from '~/constants/path.constant' import { UpdateAdminDto } from './update.dto' import { UpdateService } from './update.service' -import { dashboard } from '~/../package.json' @ApiController('update') @Auth() diff --git a/apps/core/src/modules/update/update.service.ts b/apps/core/src/modules/update/update.service.ts index c6b57997..acca9b6b 100644 --- a/apps/core/src/modules/update/update.service.ts +++ b/apps/core/src/modules/update/update.service.ts @@ -1,16 +1,17 @@ import { appendFile, rm, writeFile } from 'node:fs/promises' import { inspect } from 'node:util' import axios from 'axios' -import { Observable, catchError } from 'rxjs' +import { catchError, Observable } from 'rxjs' +import type { Subscriber } from 'rxjs' import { Injectable } from '@nestjs/common' +import { dashboard } from '~/../package.json' import { LOCAL_ADMIN_ASSET_PATH } from '~/constants/path.constant' import { HttpService } from '~/processors/helper/helper.http.service' import { spawnShell } from '~/utils' + import { ConfigsService } from '../configs/configs.service' -import type { Subscriber } from 'rxjs' -import { dashboard } from '~/../package.json' const { repo } = dashboard diff --git a/apps/core/src/modules/user/user.controller.ts b/apps/core/src/modules/user/user.controller.ts index 05d4b829..255127de 100644 --- a/apps/core/src/modules/user/user.controller.ts +++ b/apps/core/src/modules/user/user.controller.ts @@ -1,7 +1,10 @@ +import type { UserModel } from './user.model' + import { BadRequestException, Body, Delete, + forwardRef, Get, HttpCode, Inject, @@ -9,7 +12,6 @@ import { Patch, Post, Put, - forwardRef, } from '@nestjs/common' import { ApiController } from '~/common/decorators/api-controller.decorator' @@ -30,7 +32,6 @@ import { ConfigsService } from '../configs/configs.service' import { LoginDto, UserDto, UserPatchDto } from './user.dto' import { UserDocument } from './user.model' import { UserService } from './user.service' -import type { UserModel } from './user.model' @ApiController(['master', 'user']) export class UserController { diff --git a/apps/core/src/modules/user/user.model.ts b/apps/core/src/modules/user/user.model.ts index 508a5aa5..17dea0fb 100644 --- a/apps/core/src/modules/user/user.model.ts +++ b/apps/core/src/modules/user/user.model.ts @@ -1,12 +1,12 @@ import { hashSync } from 'bcryptjs' import { omit } from 'lodash' import { Schema } from 'mongoose' +import type { DocumentType } from '@typegoose/typegoose' -import { Severity, modelOptions, prop } from '@typegoose/typegoose' +import { modelOptions, prop, Severity } from '@typegoose/typegoose' import { USER_COLLECTION_NAME } from '~/constants/db.constant' import { BaseModel } from '~/shared/model/base.model' -import type { DocumentType } from '@typegoose/typegoose' export type UserDocument = DocumentType diff --git a/apps/core/src/modules/user/user.module.ts b/apps/core/src/modules/user/user.module.ts index 706d83f9..bfe76275 100644 --- a/apps/core/src/modules/user/user.module.ts +++ b/apps/core/src/modules/user/user.module.ts @@ -1,4 +1,4 @@ -import { Global, Module, forwardRef } from '@nestjs/common' +import { forwardRef, Global, Module } from '@nestjs/common' import { AuthModule } from '../auth/auth.module' import { AuthnModule } from '../authn/auth.module' diff --git a/apps/core/src/modules/user/user.service.ts b/apps/core/src/modules/user/user.service.ts index 58548f23..a8dc9012 100644 --- a/apps/core/src/modules/user/user.service.ts +++ b/apps/core/src/modules/user/user.service.ts @@ -1,4 +1,5 @@ import { compareSync } from 'bcryptjs' +import type { UserDocument } from './user.model' import { BadRequestException, @@ -19,7 +20,6 @@ import { getAvatar, sleep } from '~/utils' import { AuthService } from '../auth/auth.service' import { UserModel } from './user.model' -import type { UserDocument } from './user.model' @Injectable() export class UserService { diff --git a/apps/core/src/modules/webhook/webhook-event.model.ts b/apps/core/src/modules/webhook/webhook-event.model.ts index e0387c7f..aaddbbcd 100644 --- a/apps/core/src/modules/webhook/webhook-event.model.ts +++ b/apps/core/src/modules/webhook/webhook-event.model.ts @@ -1,6 +1,6 @@ import Paginate from 'mongoose-paginate-v2' -import { Ref, modelOptions, plugin, prop } from '@typegoose/typegoose' +import { modelOptions, plugin, prop, Ref } from '@typegoose/typegoose' import { WEBHOOK_EVENT_COLLECTION_NAME } from '~/constants/db.constant' import { mongooseLeanId } from '~/shared/model/plugins/lean-id' diff --git a/apps/core/src/modules/webhook/webhook.service.ts b/apps/core/src/modules/webhook/webhook.service.ts index b43f7b28..14051c83 100644 --- a/apps/core/src/modules/webhook/webhook.service.ts +++ b/apps/core/src/modules/webhook/webhook.service.ts @@ -1,4 +1,7 @@ import { createHmac } from 'node:crypto' +import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' +import type { IEventManagerHandlerDisposer } from '~/processors/helper/helper.event.service' +import type { PagerDto } from '~/shared/dto/pager.dto' import { BadRequestException, Injectable } from '@nestjs/common' import { ReturnModelType } from '@typegoose/typegoose' @@ -10,9 +13,6 @@ import { InjectModel } from '~/transformers/model.transformer' import { WebhookEventModel } from './webhook-event.model' import { WebhookModel } from './webhook.model' -import type { PagerDto } from '~/shared/dto/pager.dto' -import type { IEventManagerHandlerDisposer } from '~/processors/helper/helper.event.service' -import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' const ACCEPT_EVENTS = new Set(Object.values(BusinessEvents)) diff --git a/apps/core/src/processors/database/database.service.ts b/apps/core/src/processors/database/database.service.ts index 74aae850..3c48ed2f 100644 --- a/apps/core/src/processors/database/database.service.ts +++ b/apps/core/src/processors/database/database.service.ts @@ -1,3 +1,6 @@ +import type { ArticleTypeEnum } from '~/constants/article.constant' +import type { WriteBaseModel } from '~/shared/model/write-base.model' + import { Inject, Injectable } from '@nestjs/common' import { mongoose, ReturnModelType } from '@typegoose/typegoose' @@ -8,8 +11,6 @@ import { PageModel } from '~/modules/page/page.model' import { PostModel } from '~/modules/post/post.model' import { RecentlyModel } from '~/modules/recently/recently.model' import { InjectModel } from '~/transformers/model.transformer' -import type { ArticleTypeEnum } from '~/constants/article.constant' -import type { WriteBaseModel } from '~/shared/model/write-base.model' @Injectable() export class DatabaseService { diff --git a/apps/core/src/processors/gateway/admin/events.gateway.ts b/apps/core/src/processors/gateway/admin/events.gateway.ts index 67f6f98b..ebd7335d 100644 --- a/apps/core/src/processors/gateway/admin/events.gateway.ts +++ b/apps/core/src/processors/gateway/admin/events.gateway.ts @@ -1,7 +1,13 @@ import { resolve } from 'node:path' import { Socket } from 'socket.io' +import type { + GatewayMetadata, + OnGatewayConnection, + OnGatewayDisconnect, +} from '@nestjs/websockets' +import type SocketIO from 'socket.io' -import { Inject, forwardRef } from '@nestjs/common' +import { forwardRef, Inject } from '@nestjs/common' import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets' import { LOG_DIR } from '~/constants/path.constant' @@ -13,12 +19,6 @@ import { getTodayLogFilePath } from '~/utils/path.util' import { BusinessEvents } from '../../../constants/business-event.constant' import { AuthService } from '../../../modules/auth/auth.service' import { createAuthGateway } from '../shared/auth.gateway' -import type SocketIO from 'socket.io' -import type { - GatewayMetadata, - OnGatewayConnection, - OnGatewayDisconnect, -} from '@nestjs/websockets' const AuthGateway = createAuthGateway({ namespace: 'admin', authway: 'jwt' }) @WebSocketGateway({ namespace: 'admin' }) diff --git a/apps/core/src/processors/gateway/base.gateway.ts b/apps/core/src/processors/gateway/base.gateway.ts index 14d94e4a..c6bfd4d9 100644 --- a/apps/core/src/processors/gateway/base.gateway.ts +++ b/apps/core/src/processors/gateway/base.gateway.ts @@ -1,6 +1,7 @@ -import { BusinessEvents } from '~/constants/business-event.constant' import type { Socket } from 'socket.io' +import { BusinessEvents } from '~/constants/business-event.constant' + export abstract class BaseGateway { public gatewayMessageFormat( type: BusinessEvents, diff --git a/apps/core/src/processors/gateway/gateway.service.ts b/apps/core/src/processors/gateway/gateway.service.ts index e694d1dd..0ef9a5af 100644 --- a/apps/core/src/processors/gateway/gateway.service.ts +++ b/apps/core/src/processors/gateway/gateway.service.ts @@ -1,15 +1,16 @@ +import type { SocketMetadata } from '~/types/socket-meta' +import type { RemoteSocket, Socket } from 'socket.io' +import type { + DecorateAcknowledgementsWithMultipleResponses, + DefaultEventsMap, +} from 'socket.io/dist/typed-events' + import { Injectable } from '@nestjs/common' import { RedisKeys } from '~/constants/cache.constant' import { getRedisKey, safeJSONParse } from '~/utils' import { CacheService } from '../redis/cache.service' -import type { - DecorateAcknowledgementsWithMultipleResponses, - DefaultEventsMap, -} from 'socket.io/dist/typed-events' -import type { RemoteSocket, Socket } from 'socket.io' -import type { SocketMetadata } from '~/types/socket-meta' export type SocketType = | Socket diff --git a/apps/core/src/processors/gateway/shared/auth.gateway.ts b/apps/core/src/processors/gateway/shared/auth.gateway.ts index 1e5dcdef..a9025e03 100644 --- a/apps/core/src/processors/gateway/shared/auth.gateway.ts +++ b/apps/core/src/processors/gateway/shared/auth.gateway.ts @@ -14,6 +14,7 @@ import { CacheService } from '~/processors/redis/cache.service' import { BusinessEvents } from '../../../constants/business-event.constant' import { BroadcastBaseGateway } from '../base.gateway' + export type AuthGatewayOptions = { namespace: string authway?: 'jwt' | 'custom-token' | 'all' diff --git a/apps/core/src/processors/gateway/shared/events.gateway.ts b/apps/core/src/processors/gateway/shared/events.gateway.ts index 85134df5..eb8cbd8e 100644 --- a/apps/core/src/processors/gateway/shared/events.gateway.ts +++ b/apps/core/src/processors/gateway/shared/events.gateway.ts @@ -1,8 +1,9 @@ +import type { BusinessEvents } from '~/constants/business-event.constant' + import { Injectable } from '@nestjs/common' import { AdminEventsGateway } from '../admin/events.gateway' import { WebEventsGateway } from '../web/events.gateway' -import type { BusinessEvents } from '~/constants/business-event.constant' @Injectable() export class SharedGateway { diff --git a/apps/core/src/processors/gateway/web/events.gateway.ts b/apps/core/src/processors/gateway/web/events.gateway.ts index 1472aafb..46375b16 100644 --- a/apps/core/src/processors/gateway/web/events.gateway.ts +++ b/apps/core/src/processors/gateway/web/events.gateway.ts @@ -1,5 +1,17 @@ import { debounce, uniqBy } from 'lodash' import SocketIO from 'socket.io' +import type { + GatewayMetadata, + OnGatewayConnection, + OnGatewayDisconnect, +} from '@nestjs/websockets' +import type { BroadcastOperator, Emitter } from '@socket.io/redis-emitter' +import type { + DecorateAcknowledgementsWithMultipleResponses, + DefaultEventsMap, +} from 'socket.io/dist/typed-events' +import type { SocketType } from '../gateway.service' +import type { EventGatewayHooks } from './hook.interface' import { ConnectedSocket, @@ -19,18 +31,6 @@ import { getShortDate } from '~/utils/time.util' import { BroadcastBaseGateway } from '../base.gateway' import { GatewayService } from '../gateway.service' import { MessageEventDto, SupportedMessageEvent } from './dtos/message' -import type { EventGatewayHooks } from './hook.interface' -import type { SocketType } from '../gateway.service' -import type { - DecorateAcknowledgementsWithMultipleResponses, - DefaultEventsMap, -} from 'socket.io/dist/typed-events' -import type { BroadcastOperator, Emitter } from '@socket.io/redis-emitter' -import type { - GatewayMetadata, - OnGatewayConnection, - OnGatewayDisconnect, -} from '@nestjs/websockets' declare module '~/types/socket-meta' { interface SocketMetadata { diff --git a/apps/core/src/processors/helper/helper.counting.service.ts b/apps/core/src/processors/helper/helper.counting.service.ts index 8c604f26..80a715d9 100644 --- a/apps/core/src/processors/helper/helper.counting.service.ts +++ b/apps/core/src/processors/helper/helper.counting.service.ts @@ -1,3 +1,5 @@ +import type { ArticleTypeEnum } from '~/constants/article.constant' + import { Injectable, Logger } from '@nestjs/common' import { RedisKeys } from '~/constants/cache.constant' @@ -5,7 +7,6 @@ import { getRedisKey } from '~/utils/redis.util' import { DatabaseService } from '../database/database.service' import { CacheService } from '../redis/cache.service' -import type { ArticleTypeEnum } from '~/constants/article.constant' @Injectable() export class CountingService { diff --git a/apps/core/src/processors/helper/helper.cron.service.ts b/apps/core/src/processors/helper/helper.cron.service.ts index fa3b66c3..e39e1828 100644 --- a/apps/core/src/processors/helper/helper.cron.service.ts +++ b/apps/core/src/processors/helper/helper.cron.service.ts @@ -2,14 +2,19 @@ import { readdir, rm } from 'node:fs/promises' import { join } from 'node:path' import dayjs from 'dayjs' import { mkdirp } from 'mkdirp' +import type { StoreJWTPayload } from './helper.jwt.service' -import { Inject, Injectable, Logger, forwardRef } from '@nestjs/common' +import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common' import { CronExpression } from '@nestjs/schedule' import { CronDescription } from '~/common/decorators/cron-description.decorator' import { CronOnce } from '~/common/decorators/cron-once.decorator' import { RedisKeys } from '~/constants/cache.constant' -import { LOG_DIR, TEMP_DIR, STATIC_FILE_TRASH_DIR } from '~/constants/path.constant' +import { + LOG_DIR, + STATIC_FILE_TRASH_DIR, + TEMP_DIR, +} from '~/constants/path.constant' import { AggregateService } from '~/modules/aggregate/aggregate.service' import { AnalyzeModel } from '~/modules/analyze/analyze.model' import { ConfigsService } from '~/modules/configs/configs.service' @@ -19,7 +24,6 @@ import { getRedisKey } from '~/utils/redis.util' import { CacheService } from '../redis/cache.service' import { HttpService } from './helper.http.service' import { JWTService } from './helper.jwt.service' -import type { StoreJWTPayload } from './helper.jwt.service' @Injectable() export class CronService { diff --git a/apps/core/src/processors/helper/helper.email.service.ts b/apps/core/src/processors/helper/helper.email.service.ts index 690abdc4..e16237b2 100644 --- a/apps/core/src/processors/helper/helper.email.service.ts +++ b/apps/core/src/processors/helper/helper.email.service.ts @@ -1,5 +1,7 @@ import cluster from 'node:cluster' import { createTransport } from 'nodemailer' +import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' +import type Mail from 'nodemailer/lib/mailer' import { Injectable, Logger } from '@nestjs/common' import { OnEvent } from '@nestjs/event-emitter' @@ -12,8 +14,6 @@ import { UserService } from '~/modules/user/user.service' import { SubPubBridgeService } from '../redis/subpub.service' import { AssetService } from './helper.asset.service' -import type Mail from 'nodemailer/lib/mailer' -import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common' @Injectable() export class EmailService implements OnModuleInit, OnModuleDestroy { diff --git a/apps/core/src/processors/helper/helper.event.service.ts b/apps/core/src/processors/helper/helper.event.service.ts index 23505f0e..e02b09ae 100644 --- a/apps/core/src/processors/helper/helper.event.service.ts +++ b/apps/core/src/processors/helper/helper.event.service.ts @@ -1,15 +1,15 @@ import { merge } from 'lodash' +import type { EventBusEvents } from '~/constants/event-bus.constant' import { Injectable, Logger } from '@nestjs/common' import { EventEmitter2 } from '@nestjs/event-emitter' +import { BusinessEvents, EventScope } from '~/constants/business-event.constant' import { scheduleManager } from '~/utils' -import { BusinessEvents, EventScope } from '~/constants/business-event.constant' import { AdminEventsGateway } from '../gateway/admin/events.gateway' import { BroadcastBaseGateway } from '../gateway/base.gateway' import { WebEventsGateway } from '../gateway/web/events.gateway' -import type { EventBusEvents } from '~/constants/event-bus.constant' interface GatewayOption { rooms?: string[] diff --git a/apps/core/src/processors/helper/helper.http.service.ts b/apps/core/src/processors/helper/helper.http.service.ts index 9bb60564..f0bcdb5a 100644 --- a/apps/core/src/processors/helper/helper.http.service.ts +++ b/apps/core/src/processors/helper/helper.http.service.ts @@ -1,6 +1,7 @@ import { inspect } from 'node:util' import axios from 'axios' import axiosRetry, { exponentialDelay } from 'axios-retry' +import type { AxiosInstance, AxiosRequestConfig } from 'axios' import { Injectable, Logger } from '@nestjs/common' @@ -10,7 +11,6 @@ import { getRedisKey } from '~/utils' import { version } from '../../../package.json' import { CacheService } from '../redis/cache.service' -import type { AxiosInstance, AxiosRequestConfig } from 'axios' const DEFAULT_UA = `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}` declare module 'axios' { diff --git a/apps/core/src/processors/helper/helper.image.service.ts b/apps/core/src/processors/helper/helper.image.service.ts index 21711e64..eaeba923 100644 --- a/apps/core/src/processors/helper/helper.image.service.ts +++ b/apps/core/src/processors/helper/helper.image.service.ts @@ -1,4 +1,5 @@ import imageSize from 'image-size' +import type { ImageModel } from '~/shared/model/image.model' import { Injectable, Logger } from '@nestjs/common' @@ -6,7 +7,6 @@ import { ConfigsService } from '~/modules/configs/configs.service' import { getAverageRGB, pickImagesFromMarkdown } from '~/utils/pic.util' import { HttpService } from './helper.http.service' -import type { ImageModel } from '~/shared/model/image.model' @Injectable() export class ImageService { diff --git a/apps/core/src/processors/helper/helper.module.ts b/apps/core/src/processors/helper/helper.module.ts index a211f429..2a64c3ad 100644 --- a/apps/core/src/processors/helper/helper.module.ts +++ b/apps/core/src/processors/helper/helper.module.ts @@ -1,14 +1,16 @@ -import { Global, Module, forwardRef } from '@nestjs/common' +import type { Provider } from '@nestjs/common' + +import { forwardRef, Global, Module } from '@nestjs/common' import { EventEmitterModule } from '@nestjs/event-emitter' import { ScheduleModule } from '@nestjs/schedule' import { ThrottlerModule } from '@nestjs/throttler' +import { THROTTLE_OPTIONS } from '~/app.config' import { AggregateModule } from '~/modules/aggregate/aggregate.module' import { NoteModule } from '~/modules/note/note.module' import { PageModule } from '~/modules/page/page.module' import { PostModule } from '~/modules/post/post.module' -import { THROTTLE_OPTIONS } from '~/app.config' import { AssetService } from './helper.asset.service' import { BarkPushService } from './helper.bark.service' import { CountingService } from './helper.counting.service' @@ -22,7 +24,6 @@ import { TextMacroService } from './helper.macro.service' import { TaskQueueService } from './helper.tq.service' import { UploadService } from './helper.upload.service' import { UrlBuilderService } from './helper.url-builder.service' -import type { Provider } from '@nestjs/common' const providers: Provider[] = [ AssetService, diff --git a/apps/core/src/processors/helper/helper.tq.service.ts b/apps/core/src/processors/helper/helper.tq.service.ts index e733a2bb..c3e46a5f 100644 --- a/apps/core/src/processors/helper/helper.tq.service.ts +++ b/apps/core/src/processors/helper/helper.tq.service.ts @@ -1,11 +1,11 @@ import { isAsyncFunction } from 'node:util/types' +import type { Redis } from 'ioredis' import { Injectable } from '@nestjs/common' import { safeJSONParse } from '~/utils' import { CacheService } from '../redis/cache.service' -import type { Redis } from 'ioredis' type ITask = RedisMap< string, diff --git a/apps/core/src/processors/helper/helper.upload.service.ts b/apps/core/src/processors/helper/helper.upload.service.ts index 4175aadf..f643fb2e 100644 --- a/apps/core/src/processors/helper/helper.upload.service.ts +++ b/apps/core/src/processors/helper/helper.upload.service.ts @@ -1,7 +1,8 @@ -import { BadRequestException, Injectable } from '@nestjs/common' import type { MultipartFile } from '@fastify/multipart' import type { FastifyRequest } from 'fastify' +import { BadRequestException, Injectable } from '@nestjs/common' + @Injectable() export class UploadService { public async getAndValidMultipartField( diff --git a/apps/core/src/processors/helper/helper.url-builder.service.ts b/apps/core/src/processors/helper/helper.url-builder.service.ts index 33f086da..e279e05c 100644 --- a/apps/core/src/processors/helper/helper.url-builder.service.ts +++ b/apps/core/src/processors/helper/helper.url-builder.service.ts @@ -1,12 +1,14 @@ import { URL } from 'node:url' import { isDefined } from 'class-validator' -import { Injectable } from '@nestjs/common' -import { ConfigsService } from '~/modules/configs/configs.service' import type { CategoryModel } from '~/modules/category/category.model' import type { NoteModel } from '~/modules/note/note.model' import type { PageModel } from '~/modules/page/page.model' import type { PostModel } from '~/modules/post/post.model' +import { Injectable } from '@nestjs/common' + +import { ConfigsService } from '~/modules/configs/configs.service' + @Injectable() export class UrlBuilderService { constructor(private readonly configsService: ConfigsService) {} diff --git a/apps/core/src/processors/redis/cache.service.ts b/apps/core/src/processors/redis/cache.service.ts index cbf50b34..f125854b 100755 --- a/apps/core/src/processors/redis/cache.service.ts +++ b/apps/core/src/processors/redis/cache.service.ts @@ -1,4 +1,5 @@ import { Cache } from 'cache-manager' +import type { Redis } from 'ioredis' import { CACHE_MANAGER } from '@nestjs/cache-manager' import { Inject, Injectable, Logger } from '@nestjs/common' @@ -7,7 +8,6 @@ import { Emitter } from '@socket.io/redis-emitter' import { RedisIoAdapterKey } from '~/common/adapters/socket.adapter' import { API_CACHE_PREFIX } from '~/constants/cache.constant' import { getRedisKey } from '~/utils/redis.util' -import type { Redis } from 'ioredis' // Cache 客户端管理器 diff --git a/apps/core/src/processors/redis/redis.config.service.ts b/apps/core/src/processors/redis/redis.config.service.ts index 68c4ea7b..c486f082 100755 --- a/apps/core/src/processors/redis/redis.config.service.ts +++ b/apps/core/src/processors/redis/redis.config.service.ts @@ -6,14 +6,16 @@ * @author Innei */ import { redisStore } from 'cache-manager-ioredis-yet' -import { Injectable } from '@nestjs/common' -import { REDIS } from '~/app.config' import type { CacheModuleOptions, CacheOptionsFactory, } from '@nestjs/cache-manager' import type { RedisOptions } from 'ioredis' +import { Injectable } from '@nestjs/common' + +import { REDIS } from '~/app.config' + @Injectable() export class RedisConfigService implements CacheOptionsFactory { // 缓存配置 diff --git a/apps/core/src/shared/model/base.model.ts b/apps/core/src/shared/model/base.model.ts index 8773cbcd..9ca46fee 100644 --- a/apps/core/src/shared/model/base.model.ts +++ b/apps/core/src/shared/model/base.model.ts @@ -1,9 +1,9 @@ +import mongooseLeanGetters from 'mongoose-lean-getters' import mongooseLeanVirtuals from 'mongoose-lean-virtuals' import Paginate from 'mongoose-paginate-v2' import { index, modelOptions, plugin } from '@typegoose/typegoose' -import mongooseLeanGetters from 'mongoose-lean-getters' import { mongooseLeanId } from './plugins/lean-id' @plugin(mongooseLeanVirtuals) diff --git a/apps/core/src/shared/model/write-base.model.ts b/apps/core/src/shared/model/write-base.model.ts index eb89a35e..dcd26ee9 100644 --- a/apps/core/src/shared/model/write-base.model.ts +++ b/apps/core/src/shared/model/write-base.model.ts @@ -8,7 +8,7 @@ import { ValidateNested, } from 'class-validator' -import { PropType, prop } from '@typegoose/typegoose' +import { prop, PropType } from '@typegoose/typegoose' import { BaseCommentIndexModel } from './base-comment.model' import { ImageModel } from './image.model' diff --git a/apps/core/src/transformers/crud-factor.transformer.ts b/apps/core/src/transformers/crud-factor.transformer.ts index 9fb48a99..6550f0ca 100644 --- a/apps/core/src/transformers/crud-factor.transformer.ts +++ b/apps/core/src/transformers/crud-factor.transformer.ts @@ -1,3 +1,8 @@ +import pluralize from 'pluralize' +import type { Type } from '@nestjs/common' +import type { AnyParamConstructor } from '@typegoose/typegoose/lib/types' +import type { BaseModel } from '~/shared/model/base.model' + import { Body, Delete, @@ -9,9 +14,7 @@ import { Put, Query, } from '@nestjs/common' - import { PartialType } from '@nestjs/mapped-types' -import pluralize from 'pluralize' import { ApiController } from '~/common/decorators/api-controller.decorator' import { Auth } from '~/common/decorators/auth.decorator' @@ -21,9 +24,6 @@ import { EventManagerService } from '~/processors/helper/helper.event.service' import { MongoIdDto } from '~/shared/dto/id.dto' import { PagerDto } from '~/shared/dto/pager.dto' import { InjectModel } from '~/transformers/model.transformer' -import type { BaseModel } from '~/shared/model/base.model' -import type { Type } from '@nestjs/common' -import type { AnyParamConstructor } from '@typegoose/typegoose/lib/types' export type BaseCrudModuleType = { _model: MongooseModel diff --git a/apps/core/src/transformers/get-req.transformer.ts b/apps/core/src/transformers/get-req.transformer.ts index 64e5c786..d56b7747 100644 --- a/apps/core/src/transformers/get-req.transformer.ts +++ b/apps/core/src/transformers/get-req.transformer.ts @@ -1,5 +1,5 @@ -import type { UserModel } from '~/modules/user/user.model' import type { ExecutionContext } from '@nestjs/common' +import type { UserModel } from '~/modules/user/user.model' import type { FastifyRequest } from 'fastify' export type FastifyBizRequest = FastifyRequest & { diff --git a/apps/core/src/transformers/model.transformer.ts b/apps/core/src/transformers/model.transformer.ts index bc10dca9..3f08440c 100644 --- a/apps/core/src/transformers/model.transformer.ts +++ b/apps/core/src/transformers/model.transformer.ts @@ -7,6 +7,9 @@ * @author Surmon */ +import type { Provider } from '@nestjs/common' +import type { Connection } from 'mongoose' + import { Inject } from '@nestjs/common' import { getModelForClass } from '@typegoose/typegoose' @@ -14,8 +17,6 @@ import { DB_CONNECTION_TOKEN, DB_MODEL_TOKEN_SUFFIX, } from '~/constants/system.constant' -import type { Provider } from '@nestjs/common' -import type { Connection } from 'mongoose' export interface TypegooseClass { new (...args: any[]) diff --git a/apps/core/src/transformers/paginate.transformer.ts b/apps/core/src/transformers/paginate.transformer.ts index 6de9e507..91581d97 100644 --- a/apps/core/src/transformers/paginate.transformer.ts +++ b/apps/core/src/transformers/paginate.transformer.ts @@ -1,5 +1,5 @@ -import type { Pagination } from '~/shared/interface/paginator.interface' import type { mongoose } from '@typegoose/typegoose' +import type { Pagination } from '~/shared/interface/paginator.interface' export function transformDataToPaginate( data: mongoose.PaginateResult, diff --git a/apps/core/src/utils/database.util.ts b/apps/core/src/utils/database.util.ts index 92145a8f..2e23be76 100644 --- a/apps/core/src/utils/database.util.ts +++ b/apps/core/src/utils/database.util.ts @@ -2,6 +2,7 @@ * @see https://github.com/surmon-china/nodepress/blob/main/src/processors/database/database.provider.ts */ import mongoose from 'mongoose' +import type { CollectionRefTypes } from '~/constants/db.constant' import { MONGO_DB } from '~/app.config' import { @@ -9,7 +10,6 @@ import { PAGE_COLLECTION_NAME, POST_COLLECTION_NAME, RECENTLY_COLLECTION_NAME, - type CollectionRefTypes, } from '~/constants/db.constant' import { logger } from '~/global/consola.global' diff --git a/apps/core/src/utils/redis-subpub.util.ts b/apps/core/src/utils/redis-subpub.util.ts index 0946f0a1..efb842bc 100644 --- a/apps/core/src/utils/redis-subpub.util.ts +++ b/apps/core/src/utils/redis-subpub.util.ts @@ -1,11 +1,11 @@ -import { Logger } from '@nestjs/common' - import IORedis from 'ioredis' +import type { Redis, RedisOptions } from 'ioredis' + +import { Logger } from '@nestjs/common' import { REDIS } from '~/app.config' import { isTest } from '../global/env.global' -import type { Redis, RedisOptions } from 'ioredis' class RedisSubPub { public pubClient: Redis diff --git a/apps/core/src/utils/redis.util.ts b/apps/core/src/utils/redis.util.ts index 434f8ae5..e34f931b 100644 --- a/apps/core/src/utils/redis.util.ts +++ b/apps/core/src/utils/redis.util.ts @@ -1,6 +1,7 @@ -import { DEMO_MODE } from '~/app.config' import type { RedisKeys } from '~/constants/cache.constant' +import { DEMO_MODE } from '~/app.config' + type Prefix = 'mx' | 'mx-demo' const prefix = DEMO_MODE ? 'mx-demo' : 'mx' diff --git a/apps/core/src/utils/tool.util.ts b/apps/core/src/utils/tool.util.ts index 67238042..bba3a5a7 100644 --- a/apps/core/src/utils/tool.util.ts +++ b/apps/core/src/utils/tool.util.ts @@ -1,6 +1,7 @@ import { createHash } from 'node:crypto' import { join } from 'node:path' import { cloneDeep } from 'lodash' + export const md5 = (text: string) => createHash('md5').update(text).digest('hex') as string diff --git a/apps/core/test/global.d.ts b/apps/core/test/global.d.ts index 1e012c53..5aeaf122 100644 --- a/apps/core/test/global.d.ts +++ b/apps/core/test/global.d.ts @@ -1,5 +1,5 @@ -import type { Document, PaginateModel } from 'mongoose' import type { WrappedConsola } from '@innei/pretty-logger-nestjs/lib/consola' +import type { Document, PaginateModel } from 'mongoose' import 'vitest/globals' import 'zx/globals' diff --git a/apps/core/test/mock/interceptors/counting.interceptor.ts b/apps/core/test/mock/interceptors/counting.interceptor.ts index ed23c2f1..7100b6ab 100644 --- a/apps/core/test/mock/interceptors/counting.interceptor.ts +++ b/apps/core/test/mock/interceptors/counting.interceptor.ts @@ -1,17 +1,16 @@ import { map } from 'rxjs' - -import { - type CallHandler, - type ExecutionContext, - Inject, - Injectable, - type NestInterceptor, +import type { + CallHandler, + ExecutionContext, + NestInterceptor, } from '@nestjs/common' +import type { Reflector } from '@nestjs/core' + +import { Inject, Injectable } from '@nestjs/common' import { HTTP_RES_UPDATE_DOC_COUNT_TYPE } from '~/constants/meta.constant' import { REFLECTOR } from '~/constants/system.constant' import { CountingService } from '~/processors/helper/helper.counting.service' -import type { Reflector } from '@nestjs/core' @Injectable() export class MockingCountingInterceptor implements NestInterceptor { diff --git a/apps/core/test/src/modules/link/link.controller.e2e-spec.ts b/apps/core/test/src/modules/link/link.controller.e2e-spec.ts index 2c72fe51..6658e39c 100644 --- a/apps/core/test/src/modules/link/link.controller.e2e-spec.ts +++ b/apps/core/test/src/modules/link/link.controller.e2e-spec.ts @@ -3,6 +3,7 @@ import { gatewayProviders } from 'test/mock/modules/gateway.mock' import { userProvider } from 'test/mock/modules/user.mock' import { emailProvider } from 'test/mock/processors/email.mock' import { eventEmitterProvider } from 'test/mock/processors/event.mock' +import type { ReturnModelType } from '@typegoose/typegoose' import { ExtendedValidationPipe } from '~/common/pipes/validation.pipe' import { VALIDATION_PIPE_INJECTION } from '~/constants/system.constant' @@ -15,7 +16,6 @@ import { import { LinkModel, LinkState } from '~/modules/link/link.model' import { LinkService } from '~/modules/link/link.service' import { HttpService } from '~/processors/helper/helper.http.service' -import type { ReturnModelType } from '@typegoose/typegoose' describe('Test LinkController(E2E)', () => { const proxy = createE2EApp({ diff --git a/eslint.config.mjs b/eslint.config.mjs index 3a244d36..ae6deb19 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -63,6 +63,7 @@ export default sxzz( // readable push syntax 'unicorn/no-array-push-push': 0, '@typescript-eslint/no-require-imports': 0, + 'perfectionist/sort-imports': 0, }, }, { diff --git a/package.json b/package.json index 90be6825..2a6113b0 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "homepage": "https://github.com/mx-space/core#readme", "issues": "https://github.com/mx-space/core/issues", "scripts": { + "format": "prettier --write \"apps/**/*.ts\" \"test/**/*.ts\" \"packages/**/*.ts\"", "prepare": "husky install && node scripts/init-project.mjs && corepack enable", "build:external": "pnpm -C \"packages/external\" run build", "build": "pnpm run build:external && pnpm -C \"apps/core\" run build", diff --git a/packages/api-client/__tests__/core/client.test.ts b/packages/api-client/__tests__/core/client.test.ts index 45adaae2..3f7a3eaa 100644 --- a/packages/api-client/__tests__/core/client.test.ts +++ b/packages/api-client/__tests__/core/client.test.ts @@ -1,19 +1,19 @@ /* eslint-disable unicorn/custom-error-definition */ import { AxiosError } from 'axios' import { vi } from 'vitest' +import type { IRequestAdapter } from '~/interfaces/adapter' +import type { ClientOptions } from '~/interfaces/client' +import type { AxiosResponse } from 'axios' import { axiosAdaptor } from '~/adaptors/axios' import { umiAdaptor } from '~/adaptors/umi-request' import { - NoteController, - PostController, allControllerNames, allControllers, + NoteController, + PostController, } from '~/controllers' -import { RequestError, createClient } from '~/core' -import type { AxiosResponse } from 'axios' -import type { ClientOptions } from '~/interfaces/client' -import type { IRequestAdapter } from '~/interfaces/adapter' +import { createClient, RequestError } from '~/core' const { spyOn } = vi diff --git a/packages/api-client/__tests__/helpers/adaptor-test.ts b/packages/api-client/__tests__/helpers/adaptor-test.ts index e7a5db95..2f0ba463 100644 --- a/packages/api-client/__tests__/helpers/adaptor-test.ts +++ b/packages/api-client/__tests__/helpers/adaptor-test.ts @@ -1,9 +1,10 @@ +import type { HTTPClient } from '~/core' +import type { IRequestAdapter } from '~/interfaces/adapter' + import { allControllers } from '~/controllers' -import { RequestError, createClient } from '~/core' +import { createClient, RequestError } from '~/core' import { createMockServer } from './e2e-mock-server' -import type { IRequestAdapter } from '~/interfaces/adapter' -import type { HTTPClient } from '~/core' export const testAdaptor = (adaptor: IRequestAdapter) => { let client: HTTPClient diff --git a/packages/api-client/__tests__/helpers/instance.ts b/packages/api-client/__tests__/helpers/instance.ts index d1fd9c2a..efb3eba3 100644 --- a/packages/api-client/__tests__/helpers/instance.ts +++ b/packages/api-client/__tests__/helpers/instance.ts @@ -1,8 +1,9 @@ -import { axiosAdaptor } from '~/adaptors/axios' -import { createClient } from '~/core' import type { HTTPClient } from '~/core' import type { IController } from '~/interfaces/controller' +import { axiosAdaptor } from '~/adaptors/axios' +import { createClient } from '~/core' + export const mockRequestInstance = ( injectController: new (client: HTTPClient) => IController, ) => { diff --git a/packages/api-client/__tests__/helpers/response.ts b/packages/api-client/__tests__/helpers/response.ts index 832c959f..59ea8a82 100644 --- a/packages/api-client/__tests__/helpers/response.ts +++ b/packages/api-client/__tests__/helpers/response.ts @@ -1,9 +1,10 @@ import { inspect } from 'node:util' import isEqual from 'lodash/isEqual' import { vi } from 'vitest' -import { axiosAdaptor } from '~/adaptors/axios' import type { URLSearchParams } from 'node:url' +import { axiosAdaptor } from '~/adaptors/axios' + const { spyOn } = vi export const buildResponseDataWrapper = (data: any) => ({ data }) diff --git a/packages/api-client/controllers/ack.ts b/packages/api-client/controllers/ack.ts index 379cb7d8..5a0bba42 100644 --- a/packages/api-client/controllers/ack.ts +++ b/packages/api-client/controllers/ack.ts @@ -1,8 +1,9 @@ -import { autoBind } from '~/utils/auto-bind' -import type { HTTPClient } from '../core' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' +import type { HTTPClient } from '../core' + +import { autoBind } from '~/utils/auto-bind' declare module '../core/client' { interface HTTPClient< diff --git a/packages/api-client/controllers/activity.ts b/packages/api-client/controllers/activity.ts index a260564b..f37feca1 100644 --- a/packages/api-client/controllers/activity.ts +++ b/packages/api-client/controllers/activity.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' @@ -10,6 +9,8 @@ import type { } from '~/models/activity' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/aggregate.ts b/packages/api-client/controllers/aggregate.ts index 10e40b92..9fa8693b 100644 --- a/packages/api-client/controllers/aggregate.ts +++ b/packages/api-client/controllers/aggregate.ts @@ -1,5 +1,3 @@ -import { sortOrderToNumber } from '~/utils' -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { SortOrder } from '~/interfaces/options' @@ -11,9 +9,11 @@ import type { TimelineData, TimelineType, } from '~/models/aggregate' - import type { HTTPClient } from '../core' +import { sortOrderToNumber } from '~/utils' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/ai.ts b/packages/api-client/controllers/ai.ts index 55c68801..41e1da6f 100644 --- a/packages/api-client/controllers/ai.ts +++ b/packages/api-client/controllers/ai.ts @@ -1,10 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { HTTPClient } from '../core' import type { AISummaryModel } from '../models/ai' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/base.ts b/packages/api-client/controllers/base.ts index f4bd4627..40796367 100644 --- a/packages/api-client/controllers/base.ts +++ b/packages/api-client/controllers/base.ts @@ -1,8 +1,9 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request' import type { PaginateResult } from '~/models/base' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + export type SortOptions = { sortBy?: string sortOrder?: 1 | -1 | 'asc' | 'desc' diff --git a/packages/api-client/controllers/category.ts b/packages/api-client/controllers/category.ts index 94214451..acd99ce3 100644 --- a/packages/api-client/controllers/category.ts +++ b/packages/api-client/controllers/category.ts @@ -1,7 +1,3 @@ -import { attachRawFromOneToAnthor, destructureData } from '~/utils' -import { autoBind } from '~/utils/auto-bind' -import { RequestError } from '../core/error' -import { CategoryType } from '../models/category' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { @@ -18,6 +14,12 @@ import type { } from '../models/category' import type { PostModel } from '../models/post' +import { attachRawFromOneToAnthor, destructureData } from '~/utils' +import { autoBind } from '~/utils/auto-bind' + +import { RequestError } from '../core/error' +import { CategoryType } from '../models/category' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/comment.ts b/packages/api-client/controllers/comment.ts index f4c08584..55270c78 100644 --- a/packages/api-client/controllers/comment.ts +++ b/packages/api-client/controllers/comment.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { PaginationParams } from '~/interfaces/params' @@ -8,6 +7,8 @@ import type { CommentModel } from '~/models/comment' import type { HTTPClient } from '../core' import type { CommentDto } from '../dtos/comment' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/link.ts b/packages/api-client/controllers/link.ts index 863bb14c..73233d83 100644 --- a/packages/api-client/controllers/link.ts +++ b/packages/api-client/controllers/link.ts @@ -1,9 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' -import { BaseCrudController } from './base' import type { IRequestAdapter } from '~/interfaces/adapter' import type { LinkModel } from '~/models/link' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + +import { BaseCrudController } from './base' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/note.ts b/packages/api-client/controllers/note.ts index 1b7f6aad..4f0a8fc5 100644 --- a/packages/api-client/controllers/note.ts +++ b/packages/api-client/controllers/note.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request' @@ -12,6 +11,8 @@ import type { import type { HTTPClient } from '../core/client' import type { SortOptions } from './base' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/page.ts b/packages/api-client/controllers/page.ts index 0791f149..f5aa279e 100644 --- a/packages/api-client/controllers/page.ts +++ b/packages/api-client/controllers/page.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' @@ -7,6 +6,8 @@ import type { PaginateResult } from '~/models/base' import type { PageModel } from '~/models/page' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/post.ts b/packages/api-client/controllers/post.ts index 53fb5842..7db69d62 100644 --- a/packages/api-client/controllers/post.ts +++ b/packages/api-client/controllers/post.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request' @@ -7,6 +6,8 @@ import type { ModelWithLiked, PaginateResult } from '~/models/base' import type { PostModel } from '~/models/post' import type { HTTPClient } from '../core/client' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/project.ts b/packages/api-client/controllers/project.ts index 7bc67f4e..7287cc2c 100644 --- a/packages/api-client/controllers/project.ts +++ b/packages/api-client/controllers/project.ts @@ -1,9 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' -import { BaseCrudController } from './base' import type { IRequestAdapter } from '~/interfaces/adapter' import type { ProjectModel } from '~/models/project' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + +import { BaseCrudController } from './base' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/recently.ts b/packages/api-client/controllers/recently.ts index 6faeefa6..45dc30d8 100644 --- a/packages/api-client/controllers/recently.ts +++ b/packages/api-client/controllers/recently.ts @@ -1,10 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { RecentlyModel } from '~/models/recently' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/say.ts b/packages/api-client/controllers/say.ts index 3193ec3e..e2fa5cb0 100644 --- a/packages/api-client/controllers/say.ts +++ b/packages/api-client/controllers/say.ts @@ -1,11 +1,13 @@ -import { autoBind } from '~/utils/auto-bind' -import { BaseCrudController } from './base' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { SayModel } from '~/models/say' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + +import { BaseCrudController } from './base' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/search.ts b/packages/api-client/controllers/search.ts index b8f855d6..0408cd44 100644 --- a/packages/api-client/controllers/search.ts +++ b/packages/api-client/controllers/search.ts @@ -1,4 +1,3 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request' @@ -8,6 +7,8 @@ import type { PostModel } from '~/models/post' import type { PageModel } from '..' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/severless.ts b/packages/api-client/controllers/severless.ts index c79cb0e2..93b78b45 100644 --- a/packages/api-client/controllers/severless.ts +++ b/packages/api-client/controllers/severless.ts @@ -1,9 +1,10 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/snippet.ts b/packages/api-client/controllers/snippet.ts index e9087f54..b36342f8 100644 --- a/packages/api-client/controllers/snippet.ts +++ b/packages/api-client/controllers/snippet.ts @@ -1,9 +1,10 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/subscribe.ts b/packages/api-client/controllers/subscribe.ts index cd554c35..f808ab01 100644 --- a/packages/api-client/controllers/subscribe.ts +++ b/packages/api-client/controllers/subscribe.ts @@ -1,10 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { SubscribeType } from '~/models/subscribe' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/topic.ts b/packages/api-client/controllers/topic.ts index 33bbb7f1..04e19728 100644 --- a/packages/api-client/controllers/topic.ts +++ b/packages/api-client/controllers/topic.ts @@ -1,11 +1,13 @@ -import { autoBind } from '~/utils/auto-bind' -import { BaseCrudController } from './base' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { TopicModel } from '~/models/topic' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + +import { BaseCrudController } from './base' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/controllers/user.ts b/packages/api-client/controllers/user.ts index 24cfe743..a71f2800 100644 --- a/packages/api-client/controllers/user.ts +++ b/packages/api-client/controllers/user.ts @@ -1,10 +1,11 @@ -import { autoBind } from '~/utils/auto-bind' import type { IRequestAdapter } from '~/interfaces/adapter' import type { IController } from '~/interfaces/controller' import type { IRequestHandler } from '~/interfaces/request' import type { TLogin, UserModel } from '~/models/user' import type { HTTPClient } from '../core' +import { autoBind } from '~/utils/auto-bind' + declare module '../core/client' { interface HTTPClient< T extends IRequestAdapter = IRequestAdapter, diff --git a/packages/api-client/core/client.ts b/packages/api-client/core/client.ts index 4334c24e..825f59f4 100644 --- a/packages/api-client/core/client.ts +++ b/packages/api-client/core/client.ts @@ -1,9 +1,3 @@ -import { isPlainObject } from '~/utils' -import { camelcaseKeys } from '~/utils/camelcase-keys' -import { resolveFullPath } from '~/utils/path' -import { allControllerNames } from '../controllers' -import { attachRequestMethod } from './attach-request' -import { RequestError } from './error' import type { IAdaptorRequestResponseType, IRequestAdapter, @@ -14,6 +8,14 @@ import type { RequestOptions } from '~/interfaces/instance' import type { IRequestHandler, Method } from '~/interfaces/request' import type { Class } from '~/interfaces/types' +import { isPlainObject } from '~/utils' +import { camelcaseKeys } from '~/utils/camelcase-keys' +import { resolveFullPath } from '~/utils/path' + +import { allControllerNames } from '../controllers' +import { attachRequestMethod } from './attach-request' +import { RequestError } from './error' + const methodPrefix = '_$' export type { HTTPClient } class HTTPClient< diff --git a/packages/api-client/models/comment.ts b/packages/api-client/models/comment.ts index 61b5a07c..6a089aa3 100644 --- a/packages/api-client/models/comment.ts +++ b/packages/api-client/models/comment.ts @@ -1,7 +1,8 @@ -import { CollectionRefTypes } from '@core/constants/db.constant' import type { BaseModel } from './base' import type { CategoryModel } from './category' +import { CollectionRefTypes } from '@core/constants/db.constant' + export { CollectionRefTypes } export interface CommentModel extends BaseModel { refType: CollectionRefTypes diff --git a/packages/webhook/src/handler.ts b/packages/webhook/src/handler.ts index a8a76ad2..b5c79bd7 100644 --- a/packages/webhook/src/handler.ts +++ b/packages/webhook/src/handler.ts @@ -1,11 +1,12 @@ import assert from 'node:assert' import { createHmac, timingSafeEqual } from 'node:crypto' import { EventEmitter } from 'node:events' -import { InvalidSignatureError } from './error' import type { IncomingMessage, ServerResponse } from 'node:http' import type { BusinessEvents } from './event.enum' import type { ExtendedEventEmitter, GenericEvent } from './types' +import { InvalidSignatureError } from './error' + interface CreateHandlerOptions { secret: string // events?: 'all' | BusinessEvents[]