From 99fb6e864ee8ae6f87416dcebbf886b0c37cdce5 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Wed, 23 Apr 2025 17:10:38 +0900 Subject: [PATCH 1/2] wip --- package.json | 1 + packages/backend/package.json | 1 + packages/backend/scripts/cli.mjs | 0 packages/backend/src/boot/cli.ts | 43 ++++++++++++++++++++++ packages/backend/src/cli/CommandModule.ts | 23 ++++++++++++ packages/backend/src/cli/CommandService.ts | 26 +++++++++++++ 6 files changed, 94 insertions(+) create mode 100644 packages/backend/scripts/cli.mjs create mode 100644 packages/backend/src/boot/cli.ts create mode 100644 packages/backend/src/cli/CommandModule.ts create mode 100644 packages/backend/src/cli/CommandService.ts diff --git a/package.json b/package.json index 175ee9d2d8..380d11057f 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api", "start": "pnpm check:connect && cd packages/backend && node ./built/boot/entry.js", "start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./built/boot/entry.js", + "cli": "cd packages/backend && pnpm cli", "init": "pnpm migrate", "migrate": "cd packages/backend && pnpm migrate", "revert": "cd packages/backend && pnpm revert", diff --git a/packages/backend/package.json b/packages/backend/package.json index 5ae856f67a..9833f83eeb 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -11,6 +11,7 @@ "start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js", "migrate": "pnpm typeorm migration:run -d ormconfig.js", "revert": "pnpm typeorm migration:revert -d ormconfig.js", + "cli": "node ./built/boot/cli.js", "check:connect": "node ./scripts/check_connect.js", "build": "swc src -d built -D --strip-leading-paths", "build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths", diff --git a/packages/backend/scripts/cli.mjs b/packages/backend/scripts/cli.mjs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/backend/src/boot/cli.ts b/packages/backend/src/boot/cli.ts new file mode 100644 index 0000000000..d06378b79d --- /dev/null +++ b/packages/backend/src/boot/cli.ts @@ -0,0 +1,43 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import 'reflect-metadata'; +import { EventEmitter } from 'node:events'; +import { NestFactory } from '@nestjs/core'; +import Logger from '@/logger.js'; +import { CommandModule } from '@/cli/CommandModule.js'; +import { NestLogger } from '@/NestLogger.js'; +import { CommandService } from '@/cli/CommandService.js'; +import { envOption } from '../env.js'; + +process.title = 'Misskey Cli'; + +Error.stackTraceLimit = Infinity; +EventEmitter.defaultMaxListeners = 128; + +const logger = new Logger('core', 'cyan'); + +//#region Events + +// Display detail of unhandled promise rejection +if (!envOption.quiet) { + process.on('unhandledRejection', console.dir); +} + +// Display detail of uncaught exception +process.on('uncaughtException', err => { + try { + logger.error(err); + console.trace(err); + } catch { } +}); +//#endregion + +const app = await NestFactory.createApplicationContext(CommandModule, { + logger: new NestLogger(), +}); + +const commandService = app.get(CommandService); +commandService.ping(); diff --git a/packages/backend/src/cli/CommandModule.ts b/packages/backend/src/cli/CommandModule.ts new file mode 100644 index 0000000000..f4b1d25c18 --- /dev/null +++ b/packages/backend/src/cli/CommandModule.ts @@ -0,0 +1,23 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Module } from '@nestjs/common'; +import { CoreModule } from '@/core/CoreModule.js'; +import { GlobalModule } from '@/GlobalModule.js'; +import { CommandService } from './CommandService.js'; + +@Module({ + imports: [ + GlobalModule, + CoreModule, + ], + providers: [ + CommandService, + ], + exports: [ + CommandService, + ], +}) +export class CommandModule {} diff --git a/packages/backend/src/cli/CommandService.ts b/packages/backend/src/cli/CommandService.ts new file mode 100644 index 0000000000..848a8d2080 --- /dev/null +++ b/packages/backend/src/cli/CommandService.ts @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import type { Config } from '@/config.js'; +import { DI } from '@/di-symbols.js'; +import type Logger from '@/logger.js'; +import { bindThis } from '@/decorators.js'; + +@Injectable() +export class CommandService { + private logger: Logger; + + constructor( + @Inject(DI.config) + private config: Config, + ) { + } + + @bindThis + public async ping() { + console.log('pong'); + } +} From 31186262fa3745f0f79cf1fe8db80f3414241bc6 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Wed, 23 Apr 2025 17:13:09 +0900 Subject: [PATCH 2/2] Update cli.ts --- packages/backend/src/boot/cli.ts | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/packages/backend/src/boot/cli.ts b/packages/backend/src/boot/cli.ts index d06378b79d..516a082db2 100644 --- a/packages/backend/src/boot/cli.ts +++ b/packages/backend/src/boot/cli.ts @@ -6,35 +6,15 @@ import 'reflect-metadata'; import { EventEmitter } from 'node:events'; import { NestFactory } from '@nestjs/core'; -import Logger from '@/logger.js'; import { CommandModule } from '@/cli/CommandModule.js'; import { NestLogger } from '@/NestLogger.js'; import { CommandService } from '@/cli/CommandService.js'; -import { envOption } from '../env.js'; process.title = 'Misskey Cli'; Error.stackTraceLimit = Infinity; EventEmitter.defaultMaxListeners = 128; -const logger = new Logger('core', 'cyan'); - -//#region Events - -// Display detail of unhandled promise rejection -if (!envOption.quiet) { - process.on('unhandledRejection', console.dir); -} - -// Display detail of uncaught exception -process.on('uncaughtException', err => { - try { - logger.error(err); - console.trace(err); - } catch { } -}); -//#endregion - const app = await NestFactory.createApplicationContext(CommandModule, { logger: new NestLogger(), });