From 9c5fb29259e36012aca58da4188d76630caea9b9 Mon Sep 17 00:00:00 2001 From: qcqcqc <1220204124@zust.edu.cn> Date: Sun, 4 Jan 2026 14:08:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20cos=E7=9A=84=E7=8A=B6=E6=80=81=E7=A0=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es/context/BackendRuntimeContext.js | 6 +- es/utils/cos/aliyun.js | 4 +- es/utils/cos/ctyun.js | 4 +- es/utils/cos/tencent.js | 4 +- lib/checkers/index.d.ts | 2 +- lib/context/BackendRuntimeContext.js | 6 +- lib/triggers/index.d.ts | 2 +- lib/triggers/toDo.d.ts | 2 +- lib/utils/cos/aliyun.js | 4 +- lib/utils/cos/ctyun.js | 4 +- lib/utils/cos/tencent.js | 4 +- scripts/build.js | 191 +-------------------------- src/context/BackendRuntimeContext.ts | 6 +- src/utils/cos/aliyun.ts | 4 +- src/utils/cos/ctyun.ts | 4 +- src/utils/cos/tencent.ts | 4 +- tsconfig.lib.json | 8 +- 17 files changed, 44 insertions(+), 215 deletions(-) diff --git a/es/context/BackendRuntimeContext.js b/es/context/BackendRuntimeContext.js index d057c980b..7b9e8af73 100644 --- a/es/context/BackendRuntimeContext.js +++ b/es/context/BackendRuntimeContext.js @@ -266,12 +266,15 @@ export class BackendRuntimeContext extends BRC { try { const { a: appId, t: tokenValue, rm, userId, v } = data; this.appVersion = v; - const promises = []; + const promises = []; // 这里需要并行,下面的await检查略过 if (appId) { + // @oak-ignore promises.push(this.setApplication(appId)); } if (tokenValue || userId) { + // @oak-ignore promises.push(this.setTokenValue(tokenValue, userId)); + // @oak-ignore promises.push(this.setPlatformManager(tokenValue, userId)); } if (promises.length > 0) { @@ -379,6 +382,7 @@ export class BackendRuntimeContext extends BRC { return !!this.amIReallyRoot; } async sendMessage(data) { + // @oak-ignore 这里直接return,依赖上层await,先跳过检查 return this.operate('message', { id: await generateNewIdAsync(), action: 'create', diff --git a/es/utils/cos/aliyun.js b/es/utils/cos/aliyun.js index 92e3ac8e4..2da550eb4 100644 --- a/es/utils/cos/aliyun.js +++ b/es/utils/cos/aliyun.js @@ -68,11 +68,11 @@ export default class ALiYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/es/utils/cos/ctyun.js b/es/utils/cos/ctyun.js index b6beed8d4..6a3b2c868 100644 --- a/es/utils/cos/ctyun.js +++ b/es/utils/cos/ctyun.js @@ -55,11 +55,11 @@ export default class CTYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/es/utils/cos/tencent.js b/es/utils/cos/tencent.js index 63c934d13..ffdc2017f 100644 --- a/es/utils/cos/tencent.js +++ b/es/utils/cos/tencent.js @@ -59,11 +59,11 @@ export default class TencentYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/lib/checkers/index.d.ts b/lib/checkers/index.d.ts index d5207458d..ab09d4f63 100644 --- a/lib/checkers/index.d.ts +++ b/lib/checkers/index.d.ts @@ -1,2 +1,2 @@ -declare const checkers: (import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker>)[]; +declare const checkers: (import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker> | import("oak-domain/lib/types").Checker>)[]; export default checkers; diff --git a/lib/context/BackendRuntimeContext.js b/lib/context/BackendRuntimeContext.js index 9e2e745bc..4e3d7ba95 100644 --- a/lib/context/BackendRuntimeContext.js +++ b/lib/context/BackendRuntimeContext.js @@ -269,12 +269,15 @@ class BackendRuntimeContext extends BackendRuntimeContext_1.BackendRuntimeContex try { const { a: appId, t: tokenValue, rm, userId, v } = data; this.appVersion = v; - const promises = []; + const promises = []; // 这里需要并行,下面的await检查略过 if (appId) { + // @oak-ignore promises.push(this.setApplication(appId)); } if (tokenValue || userId) { + // @oak-ignore promises.push(this.setTokenValue(tokenValue, userId)); + // @oak-ignore promises.push(this.setPlatformManager(tokenValue, userId)); } if (promises.length > 0) { @@ -382,6 +385,7 @@ class BackendRuntimeContext extends BackendRuntimeContext_1.BackendRuntimeContex return !!this.amIReallyRoot; } async sendMessage(data) { + // @oak-ignore 这里直接return,依赖上层await,先跳过检查 return this.operate('message', { id: await (0, uuid_1.generateNewIdAsync)(), action: 'create', diff --git a/lib/triggers/index.d.ts b/lib/triggers/index.d.ts index f37b9d34d..0da9f62c2 100644 --- a/lib/triggers/index.d.ts +++ b/lib/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/lib/triggers/toDo.d.ts b/lib/triggers/toDo.d.ts index 1d9bc2ce2..e5be399e1 100644 --- a/lib/triggers/toDo.d.ts +++ b/lib/triggers/toDo.d.ts @@ -14,7 +14,7 @@ export declare function createToDo; +}, userIds?: string[]): Promise<1 | 0>; /** * 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成 * 必须在entity的action的后trigger中调用 diff --git a/lib/utils/cos/aliyun.js b/lib/utils/cos/aliyun.js index 000e70805..f97e94490 100644 --- a/lib/utils/cos/aliyun.js +++ b/lib/utils/cos/aliyun.js @@ -70,11 +70,11 @@ class ALiYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/lib/utils/cos/ctyun.js b/lib/utils/cos/ctyun.js index be8e6444a..a97e27039 100644 --- a/lib/utils/cos/ctyun.js +++ b/lib/utils/cos/ctyun.js @@ -57,11 +57,11 @@ class CTYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/lib/utils/cos/tencent.js b/lib/utils/cos/tencent.js index aa72629da..744f3a536 100644 --- a/lib/utils/cos/tencent.js +++ b/lib/utils/cos/tencent.js @@ -61,11 +61,11 @@ class TencentYun { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/scripts/build.js b/scripts/build.js index 3dea1547e..9507288aa 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,190 +1 @@ -const ts = require('typescript'); -const path = require('path'); -const fs = require('fs'); -const { cwd } = require('process'); - -// 解析命令行参数 -function parseArgs() { - const args = process.argv.slice(2); - let configPath = 'tsconfig.json'; - - for (let i = 0; i < args.length; i++) { - if (args[i] === '-p' || args[i] === '--project') { - if (i + 1 < args.length) { - configPath = args[i + 1]; - break; - } else { - console.error('error: option \'-p, --project\' argument missing'); - process.exit(1); - } - } - } - - return configPath; -} - -// ANSI 颜色代码 -const colors = { - reset: '\x1b[0m', - cyan: '\x1b[36m', - red: '\x1b[91m', - yellow: '\x1b[93m', - gray: '\x1b[90m' -}; - -function compile(configPath) { - // 读取 tsconfig.json - const configFile = ts.readConfigFile(configPath, ts.sys.readFile); - - if (configFile.error) { - console.error(ts.formatDiagnostic(configFile.error, { - getCanonicalFileName: f => f, - getCurrentDirectory: process.cwd, - getNewLine: () => '\n' - })); - process.exit(1); - } - - // 解析配置 - const parsedConfig = ts.parseJsonConfigFileContent( - configFile.config, - ts.sys, - path.dirname(configPath) - ); - - if (parsedConfig.errors.length > 0) { - parsedConfig.errors.forEach(diagnostic => { - console.error(ts.formatDiagnostic(diagnostic, { - getCanonicalFileName: f => f, - getCurrentDirectory: process.cwd, - getNewLine: () => '\n' - })); - }); - process.exit(1); - } - - // 创建编译程序 - // 根据配置决定是否使用增量编译 - let program; - if (parsedConfig.options.incremental || parsedConfig.options.composite) { - // 对于增量编译,使用 createIncrementalProgram - const host = ts.createIncrementalCompilerHost(parsedConfig.options); - program = ts.createIncrementalProgram({ - rootNames: parsedConfig.fileNames, - options: parsedConfig.options, - host: host, - configFileParsingDiagnostics: ts.getConfigFileParsingDiagnostics(parsedConfig), - }); - } else { - // 普通编译 - program = ts.createProgram({ - rootNames: parsedConfig.fileNames, - options: parsedConfig.options, - }); - } - - // 执行编译 - const emitResult = program.emit(); - - // 获取诊断信息 - const allDiagnostics = ts - .getPreEmitDiagnostics(program) - .concat(emitResult.diagnostics); - - // 输出诊断信息 - allDiagnostics.forEach(diagnostic => { - if (diagnostic.file) { - const { line, character } = diagnostic.file.getLineAndCharacterOfPosition( - diagnostic.start - ); - const message = ts.flattenDiagnosticMessageText( - diagnostic.messageText, - '\n' - ); - const isError = diagnostic.category === ts.DiagnosticCategory.Error; - const category = isError ? 'error' : 'warning'; - const categoryColor = isError ? colors.red : colors.yellow; - - console.log( - `${colors.cyan}${diagnostic.file.fileName}${colors.reset}:${colors.yellow}${line + 1}${colors.reset}:${colors.yellow}${character + 1}${colors.reset} - ${categoryColor}${category}${colors.reset} ${colors.gray}TS${diagnostic.code}${colors.reset}: ${message}` - ); - } else { - const isError = diagnostic.category === ts.DiagnosticCategory.Error; - const category = isError ? 'error' : 'warning'; - const categoryColor = isError ? colors.red : colors.yellow; - - console.log( - `${categoryColor}${category}${colors.reset} ${colors.gray}TS${diagnostic.code}${colors.reset}: ${ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n')}` - ); - } - }); - - // 输出编译统计 - const errorCount = allDiagnostics.filter(d => d.category === ts.DiagnosticCategory.Error).length; - const warningCount = allDiagnostics.filter(d => d.category === ts.DiagnosticCategory.Warning).length; - - if (errorCount > 0 || warningCount > 0) { - if (allDiagnostics.length > 0) { - console.log(''); - } - - const parts = []; - if (errorCount > 0) { - parts.push(`${errorCount} error${errorCount !== 1 ? 's' : ''}`); - } - if (warningCount > 0) { - parts.push(`${warningCount} warning${warningCount !== 1 ? 's' : ''}`); - } - console.log(`Found ${parts.join(' and ')}.`); - } - - // tsc 的行为: - // 1. 默认情况下(noEmitOnError: false): - // - 即使有类型错误也会生成 .js 文件 - // - 但如果有错误,退出码是 1 - // 2. noEmitOnError: true 时: - // - 有错误时不生成文件(emitSkipped 为 true) - // - 退出码是 1 - // 3. 没有错误时: - // - 生成文件,退出码 0 - - // 无论 emitSkipped 与否,只要有错误就应该退出 1 - if (errorCount > 0) { - process.exit(1); - } - - console.log('Compilation completed successfully.'); -} - -// 执行编译 -const configPathArg = parseArgs(); -let configPath; - -// 判断参数是目录还是文件 -if (fs.existsSync(configPathArg)) { - const stat = fs.statSync(configPathArg); - if (stat.isDirectory()) { - // 如果是目录,拼接 tsconfig.json - configPath = path.resolve(configPathArg, 'tsconfig.json'); - } else { - // 如果是文件,直接使用 - configPath = path.resolve(configPathArg); - } -} else { - // 尝试作为相对路径解析 - configPath = path.resolve(cwd(), configPathArg); - if (!fs.existsSync(configPath)) { - // 如果还是不存在,尝试添加 tsconfig.json - const dirPath = path.resolve(cwd(), configPathArg); - if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) { - configPath = path.join(dirPath, 'tsconfig.json'); - } - } -} - -if (!fs.existsSync(configPath)) { - console.error(`error TS5058: The specified path does not exist: '${configPath}'.`); - process.exit(1); -} - -compile(configPath); \ No newline at end of file +require('oak-domain/lib/compiler/tscBuilder.js') \ No newline at end of file diff --git a/src/context/BackendRuntimeContext.ts b/src/context/BackendRuntimeContext.ts index 9f7ed823d..151d56fe4 100644 --- a/src/context/BackendRuntimeContext.ts +++ b/src/context/BackendRuntimeContext.ts @@ -318,12 +318,15 @@ export abstract class BackendRuntimeContext[] = []; + const promises: Promise[] = []; // 这里需要并行,下面的await检查略过 if (appId) { + // @oak-ignore promises.push(this.setApplication(appId)); } if (tokenValue || userId) { + // @oak-ignore promises.push(this.setTokenValue(tokenValue, userId)); + // @oak-ignore promises.push(this.setPlatformManager(tokenValue, userId)); } if (promises.length > 0) { @@ -443,6 +446,7 @@ export abstract class BackendRuntimeContext { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/src/utils/cos/ctyun.ts b/src/utils/cos/ctyun.ts index ca4647d70..606c806c4 100644 --- a/src/utils/cos/ctyun.ts +++ b/src/utils/cos/ctyun.ts @@ -78,10 +78,10 @@ export default class CTYun implements Cos { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/src/utils/cos/tencent.ts b/src/utils/cos/tencent.ts index 664aed5b4..1546d2a04 100644 --- a/src/utils/cos/tencent.ts +++ b/src/utils/cos/tencent.ts @@ -83,10 +83,10 @@ export default class TencentYun implements Cos { // 待测试 if (response.errMsg === 'uploadFile:ok') { const data = JSON.parse(response.data); - isSuccess = !!(data.status === 204); + isSuccess = data.status === 200 || data.status === 204; } } else { - isSuccess = !!(response.status === 204); + isSuccess = response.status === 200 || response.status === 204; } // 解析回调 if (isSuccess) { diff --git a/tsconfig.lib.json b/tsconfig.lib.json index 722dd0361..831eed305 100644 --- a/tsconfig.lib.json +++ b/tsconfig.lib.json @@ -90,5 +90,11 @@ "package-lock.json", "test", "scripts" - ] + ], + "oakBuildChecks": { + "context": { + "checkAsyncContext": true, + "targetModules": ["context/BackendRuntimeContext"] + } + } } \ No newline at end of file