From 78e9d1d5c58a03101710bea519078e5f8ae016f7 Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 17:35:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=BF=81=E7=A7=BB=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E4=B8=8E=E8=BF=81=E7=A7=BB=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/backend/README.md | 8 ++++---- apps/backend/package.json | 12 ++++++------ apps/backend/src/db/{migrate.js => migrate.ts} | 0 apps/backend/src/{index.js => index.ts} | 2 +- apps/backend/src/utils/logger.ts | 10 +++++----- docs/backend-typescript-migration-plan.md | 14 ++++++++++++-- 6 files changed, 28 insertions(+), 18 deletions(-) rename apps/backend/src/db/{migrate.js => migrate.ts} (100%) rename apps/backend/src/{index.js => index.ts} (99%) diff --git a/apps/backend/README.md b/apps/backend/README.md index 38264d93..05ea489c 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -106,13 +106,13 @@ npm test ## 目录 -- `src/index.js` +- `src/index.ts` Express 入口 -- `src/routes/tencent.js` +- `src/routes/tencent.ts` 接口路由 -- `src/services/session.js` +- `src/services/session/session.ts` 会话编排与浏览器生命周期 -- `src/services/session-*.js` +- `src/services/session/*.ts` 登录、兑换、OCR、凭证产物等模块 - `subservices/ocr-worker` 内嵌 OCR 子服务 diff --git a/apps/backend/package.json b/apps/backend/package.json index 61f2c02a..2841895f 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -6,16 +6,16 @@ "scripts": { "browser:install": "playwright install chromium", "browser:install:linux": "playwright install --with-deps chromium", - "agiso:auto-delivery:test": "node scripts/test-agiso-auto-delivery.js", - "cleanup:dev-data": "node scripts/cleanup-dev-data.js", - "seed:dev-data": "node scripts/seed-dev-data.js", + "agiso:auto-delivery:test": "tsx scripts/test-agiso-auto-delivery.js", + "cleanup:dev-data": "tsx scripts/cleanup-dev-data.js", + "seed:dev-data": "tsx scripts/seed-dev-data.js", "build": "tsc -p tsconfig.build.json && rm -rf dist/db/migrations && mkdir -p dist/db && cp -R src/db/migrations dist/db/migrations", - "db:migrate": "tsx src/db/migrate.js", - "dev": "tsx watch --clear-screen=false --include config src/index.js", + "db:migrate": "tsx src/db/migrate.ts", + "dev": "tsx watch --clear-screen=false --include config src/index.ts", "test": "node --import tsx --test $(find src -name '*.test.js' -print)", "typecheck": "tsc -p tsconfig.json --noEmit", "start": "node dist/index.js", - "start:src": "tsx src/index.js" + "start:src": "tsx src/index.ts" }, "dependencies": { "express": "^5.1.0", diff --git a/apps/backend/src/db/migrate.js b/apps/backend/src/db/migrate.ts similarity index 100% rename from apps/backend/src/db/migrate.js rename to apps/backend/src/db/migrate.ts diff --git a/apps/backend/src/index.js b/apps/backend/src/index.ts similarity index 99% rename from apps/backend/src/index.js rename to apps/backend/src/index.ts index 48f58d7b..c215d67f 100644 --- a/apps/backend/src/index.js +++ b/apps/backend/src/index.ts @@ -378,7 +378,7 @@ async function shutdown(signal) { return } - await new Promise((resolve) => { + await new Promise((resolve) => { server.close((error) => { if (error) { logError('[shutdown]', 'failed to close HTTP server', error) diff --git a/apps/backend/src/utils/logger.ts b/apps/backend/src/utils/logger.ts index e87f8879..566663c9 100644 --- a/apps/backend/src/utils/logger.ts +++ b/apps/backend/src/utils/logger.ts @@ -44,23 +44,23 @@ export function createRequestId(prefix = 'req') { return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}` } -export function logDebug(scope, message, detail) { +export function logDebug(scope, message, detail = undefined) { return writeLog('debug', scope, message, detail) } -export function logInfo(scope, message, detail) { +export function logInfo(scope, message, detail = undefined) { return writeLog('info', scope, message, detail) } -export function logWarn(scope, message, detail) { +export function logWarn(scope, message, detail = undefined) { return writeLog('warn', scope, message, detail) } -export function logError(scope, message, detail) { +export function logError(scope, message, detail = undefined) { return writeLog('error', scope, message, detail) } -export function logWebhook(scope, message, detail, { level = 'info' } = {}) { +export function logWebhook(scope, message, detail = undefined, { level = 'info' } = {}) { return writeLog(level, scope, message, detail, { channel: 'webhook' }) } diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 37b328d0..c65ba97a 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -199,9 +199,9 @@ 1. 新增 `tsconfig.build.json` 2. `npm run build` 输出 `dist`,并复制数据库 migration SQL -3. `npm run dev` 改为 `tsx watch --clear-screen=false --include config src/index.js` +3. `npm run dev` 改为 `tsx watch --clear-screen=false --include config src/index.ts` 4. `npm test` 改为 `node --import tsx --test ...` -5. `npm run db:migrate` 改为 `tsx src/db/migrate.js` +5. `npm run db:migrate` 改为 `tsx src/db/migrate.ts` 6. `npm run start` 改为 `node dist/index.js` 7. 生产 Dockerfile 改为 builder 阶段编译,runtime 阶段复制 `dist` 8. 新增 `tsx` 和 `@types/pg` @@ -863,6 +863,16 @@ - `npm run build` - `npm test` 共 139 个用例通过 228. `src/routes` 目录下非测试 `.js` 路由文件已全部迁移为 `.ts` +229. 后端入口与数据库迁移脚本迁移到 `.ts`: + - `src/index.ts` + - `src/db/migrate.ts` +230. `package.json` 源码运行脚本切到 `.ts` 入口:`dev`、`start:src` 和 `db:migrate`;依赖源码 TS 的开发脚本 `seed:dev-data`、`cleanup:dev-data`、`agiso:auto-delivery:test` 改由 `tsx` 执行,避免 plain node 直接加载源码 TS 失败 +231. 入口启动、健康检查、核心 bootstrap、browser / OCR 预热、优雅关闭、进程异常记录和 migration CLI 已进入 TS 编译链路;logger 的 detail 参数补齐可省略签名,HTTP server close promise 补齐 `Promise` +232. Docker 内验证通过: + - `npm run typecheck` + - `npm run build` + - `npm test` 共 139 个用例通过 +233. `apps/backend/src` 目录下非测试 `.js` 文件已全部迁移为 `.ts` ## 下一步建议