@exercode/problem-utils
Advanced tools
| "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),t=require("node:path"),s=require("zod"),n=require("../helpers/cleanWorkingDirectory.cjs"),r=require("../helpers/copyTestCaseFileInput.cjs"),i=require("../helpers/findEntryPointFile.cjs"),u=require("../helpers/findLanguageDefinitionByPath.cjs"),o=require("../helpers/judgeByStaticAnalysis.cjs"),a=require("../helpers/parseArgs.cjs"),d=require("../helpers/printTestCaseResult.cjs"),c=require("../helpers/readOutputFiles.cjs"),l=require("../helpers/readProblemMarkdownFrontMatter.cjs"),m=require("../helpers/readTestCases.cjs"),p=require("../helpers/spawnSyncWithTimeout.cjs"),C=require("../types/decisionCode.cjs"),g=s.z.object({language:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional()});function I(){return(I=e.asyncToGenerator(e.regenerator().m(function t(s,m){var p,I,y,S,T,b,D,L,O,w,k,_,M,P,F,x,B,j,q,U,N,A,W,z,G,X,H,Q,Y,Z,J,V,K,$,ee,te,se,ne,re,ie,ue,oe,ae,de,ce,le,me,pe,Ce;return e.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:return k=a.parseArgs(process.argv),_=g.parse(k.params),t.n=1,l.readProblemMarkdownFrontMatter(s);case 1:return M=t.v,t.n=2,(null!=(p=m.readTestCases)?p:E)(s);case 2:return P=t.v,F=null!=(I=null==(y=P[0])?void 0:y.id)?I:"prebuild",x={buildTimeoutSeconds:null!=(S=null==(T=m.limits)?void 0:T.buildTimeoutSeconds)?S:10,maxOutputLength:null!=(b=null==(D=m.limits)?void 0:D.maxOutputLength)?b:5e4},B=null!=(L=m.runTimeoutSeconds)?L:2,t.n=3,o.judgeByStaticAnalysis(k.cwd,M);case 3:if(!(j=t.v)){t.n=4;break}return d.printTestCaseResult(e.objectSpread2({testCaseId:F},j)),t.a(2);case 4:return t.n=5,i.findEntryPointFile(k.cwd,_.language);case 5:if(q=t.v){t.n=6;break}return d.printTestCaseResult({testCaseId:F,decisionCode:C.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(_.language?": language: ".concat(_.language):"")}),t.a(2);case 6:if(U=u.findLanguageDefinitionByPath(q)){t.n=7;break}return d.printTestCaseResult({testCaseId:F,decisionCode:C.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),t.a(2);case 7:if(N=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),A=q,!U.prebuild){t.n=12;break}return t.p=8,t.n=9,U.prebuild(k.cwd);case 9:return t.n=10,i.findEntryPointFile(k.cwd,_.language);case 10:(W=t.v)&&(A=W),t.n=12;break;case 11:return t.p=11,ce=t.v,d.printTestCaseResult({testCaseId:F,decisionCode:C.DecisionCode.BUILD_ERROR,stderr:ce instanceof Error?ce.message:String(ce)}),t.a(2);case 12:if(!(z=null==(O=U.buildCommand)?void 0:O.call(U,A))){t.n=13;break}if(!(G=h(z,{cwd:k.cwd,env:N,testCaseId:F,limits:x}))){t.n=13;break}return d.printTestCaseResult(G),t.a(2);case 13:return t.n=14,n.snapshotWorkingDirectory(k.cwd);case 14:if(X=t.v,0!==P.length){t.n=15;break}return d.printTestCaseResult({testCaseId:"default",decisionCode:C.DecisionCode.ACCEPTED}),t.a(2);case 15:H=null==(w=P.shared)?void 0:w.fileInputPath,Q=e.createForOfIteratorHelper(P),t.p=16,Q.s();case 17:if((Y=Q.n()).done){t.n=36;break}if(K=Y.value,!H){t.n=18;break}return t.n=18,r.copyTestCaseFileInput(H,k.cwd);case 18:if(!K.fileInputPath){t.n=19;break}return t.n=19,r.copyTestCaseFileInput(K.fileInputPath,k.cwd);case 19:if($="number"==typeof M.timeLimitMs?M.timeLimitMs/1e3:B,ee=U.command(A),te=null!=(Z=K.input)?Z:"",se=void 0,t.p=20,!m.resolveInput){t.n=22;break}return t.n=21,m.resolveInput({testCase:K,cwd:k.cwd,env:N});case 21:te=t.v;case 22:if(!m.runCommand){t.n=24;break}return t.n=23,m.runCommand({testCase:K,command:ee,stdin:te,cwd:k.cwd,env:N,timeLimitSeconds:$});case 23:le=t.v,t.n=25;break;case 24:le=R(ee,{stdin:te,cwd:k.cwd,env:N,timeLimitSeconds:$});case 25:se=le,t.n=28;break;case 26:return t.p=26,me=t.v,d.printTestCaseResult({testCaseId:K.id,decisionCode:C.DecisionCode.RUNTIME_ERROR,stdin:te,stderr:f(me)}),t.n=27,n.cleanWorkingDirectory(k.cwd,X);case 27:return t.a(2);case 28:return t.n=29,c.readOutputFiles(k.cwd,null!=(J=M.requiredOutputFilePaths)?J:[]);case 29:if(ne=t.v,re={timeLimitSeconds:$,outputLimitLength:x.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:M.memoryLimitByte,requiredOutputFilePaths:M.requiredOutputFilePaths}},ie=v({runResult:se,outputFiles:ne,context:re}),ue=ie,ie.decisionCode!==C.DecisionCode.ACCEPTED){t.n=33;break}return t.p=30,t.n=31,null==(oe=m.test)?void 0:oe.call(m,{testCase:K,runResult:se,outputFiles:ne,context:re});case 31:(ae=t.v)&&(ue={decisionCode:null!=(de=ae.decisionCode)?de:ie.decisionCode,feedbackMarkdown:ae.feedbackMarkdown,stderr:ae.stderr}),t.n=33;break;case 32:t.p=32,pe=t.v,ue={decisionCode:C.DecisionCode.RUNTIME_ERROR,stderr:f(pe)};case 33:return d.printTestCaseResult(e.objectSpread2(e.objectSpread2({testCaseId:K.id},ue),{},{exitStatus:se.status,stdin:se.stdin,stdout:se.stdout.slice(0,x.maxOutputLength)||void 0,stderr:(null!=(V=ue.stderr)?V:se.stderr).slice(0,x.maxOutputLength)||void 0,timeSeconds:se.timeSeconds,memoryBytes:se.memoryBytes,outputFiles:ne.length>0?ne:void 0})),t.n=34,n.cleanWorkingDirectory(k.cwd,X);case 34:if(ue.decisionCode===C.DecisionCode.ACCEPTED){t.n=35;break}return t.a(2);case 35:t.n=17;break;case 36:t.n=38;break;case 37:t.p=37,Ce=t.v,Q.e(Ce);case 38:return t.p=38,Q.f(),t.f(38);case 39:return t.a(2)}},t,null,[[30,32],[20,26],[16,37,38,39],[8,11]])}))).apply(this,arguments)}function h(e,t){var s,n=p.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",env:t.env},t.limits.buildTimeoutSeconds),r=null!=(s=n.status)?s:void 0;return 0!==n.status?{testCaseId:t.testCaseId,decisionCode:C.DecisionCode.BUILD_ERROR,exitStatus:r,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:n.timeSeconds>t.limits.buildTimeoutSeconds?{testCaseId:t.testCaseId,decisionCode:C.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:r,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:n.stdout.length>t.limits.maxOutputLength||n.stderr.length>t.limits.maxOutputLength?{testCaseId:t.testCaseId,decisionCode:C.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:r,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:void 0}function f(e){return e instanceof Error?e.message:String(e)}function E(e){return y.apply(this,arguments)}function y(){return(y=e.asyncToGenerator(e.regenerator().m(function s(n){var r,i,u;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,m.readTestCases(t.join(n,"test_cases"));case 1:if(i=e.v,u=i.map(function(e){return{id:(t=e).id,input:t.input,fileInputPath:t.fileInputPath};var t}),null==(r=i.shared)||!r.fileInputPath){e.n=2;break}return e.a(2,Object.assign(u,{shared:{fileInputPath:i.shared.fileInputPath}}));case 2:return e.a(2,u)}},s)}))).apply(this,arguments)}function R(e,t){var s,n=p.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:n.stdout,stderr:n.stderr,status:null!=(s=n.status)?s:void 0,timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}}function v(e){var t,s,n;if(0!==e.runResult.status)return{decisionCode:C.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:C.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(t=e.context.problemMarkdownFrontMatter.memoryLimitByte)?t:Number.POSITIVE_INFINITY))return{decisionCode:C.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:C.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var r=null!=(s=null==(n=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:n.length)?s:0;return e.outputFiles.length<r?{decisionCode:C.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:C.DecisionCode.ACCEPTED}}exports.commandJudgePreset=function(e,t){return I.apply(this,arguments)}; | ||
| //# sourceMappingURL=command.cjs.map |
| {"version":3,"file":"command.cjs","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<CommandRunResult> | CommandRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n */\nexport async function commandJudgePreset<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string,\n options: CommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd: args.cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return;\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: CommandRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd: args.cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env,\n timeLimitSeconds,\n })\n : runCommand(command, {\n stdin,\n cwd: args.cwd,\n env,\n timeLimitSeconds,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return;\n }\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"names":["judgeParamsSchema","z","object","language","union","string","array","optional","_commandJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$limits$build","_options$limits","_options$limits$maxOu","_options$limits2","_options$runTimeoutSe","_languageDefinition$b","_shared","args","params","problemMarkdownFrontMatter","testCases","prebuildTestCaseId","limits","runTimeoutSeconds","staticAnalysisResult","originalMainFilePath","languageDefinition","env","mainFilePath","prebuiltMainFilePath","buildCommand","buildResult","cwdSnapshot","sharedFileInputPath","_iterator","_step","_testCase$input","_problemMarkdownFront","_judgeResult$stderr","testCase","timeLimitSeconds","command","stdin","runResult","outputFiles","judgeContext","baseJudgeResult","judgeResult","_options$test","extendedJudgeResult","_extendedJudgeResult$","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","parse","readProblemMarkdownFrontMatter","v","readTestCases","readCommandTestCases","id","buildTimeoutSeconds","maxOutputLength","judgeByStaticAnalysis","cwd","printTestCaseResult","_objectSpread","testCaseId","a","findEntryPointFile","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","BUILD_ERROR","Error","message","String","call","runBuild","snapshotWorkingDirectory","length","ACCEPTED","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","input","resolveInput","runCommand","RUNTIME_ERROR","errorToMessage","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","outputLimitLength","memoryLimitByte","evaluateByLimits","context","test","feedbackMarkdown","exitStatus","status","stdout","slice","undefined","timeSeconds","memoryBytes","e","f","apply","this","arguments","_spawnResult$status","spawnResult","spawnSyncWithTimeout","encoding","BUILD_TIME_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","error","_x3","_readCommandTestCases","_callee2","_fileTestCases$shared","fileTestCases","commandTestCases","_context2","readFileTestCases","path","join","map","Object","assign","_spawnResult$status2","_context$context$prob","_context$context$prob2","_context$context$prob3","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","requiredOutputFileCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x","_x2"],"mappings":"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"} |
| import type { ProblemMarkdownFrontMatter } from '../types/problem.js'; | ||
| import type { TestCaseResult } from '../types/testCaseResult.js'; | ||
| interface BaseCommandTestCase { | ||
| id: string; | ||
| input?: string; | ||
| fileInputPath?: string; | ||
| } | ||
| type CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>; | ||
| export interface CommandRunResult { | ||
| stdin: string; | ||
| stdout: string; | ||
| stderr: string; | ||
| status: number | undefined; | ||
| timeSeconds: number; | ||
| memoryBytes: number; | ||
| } | ||
| interface CommandJudgeContext { | ||
| timeLimitSeconds: number; | ||
| outputLimitLength: number; | ||
| problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>; | ||
| } | ||
| export interface CommandJudgeLimits { | ||
| buildTimeoutSeconds: number; | ||
| maxOutputLength: number; | ||
| } | ||
| export interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> { | ||
| limits?: CommandJudgeLimits; | ||
| runTimeoutSeconds?: number; | ||
| readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>; | ||
| resolveInput?: (context: { | ||
| testCase: TTestCase; | ||
| cwd: string; | ||
| env: NodeJS.ProcessEnv; | ||
| }) => Promise<string> | string; | ||
| runCommand?: (context: { | ||
| testCase: TTestCase; | ||
| command: readonly [string, ...string[]]; | ||
| stdin: string; | ||
| cwd: string; | ||
| env: NodeJS.ProcessEnv; | ||
| timeLimitSeconds: number; | ||
| }) => Promise<CommandRunResult> | CommandRunResult; | ||
| test?: (context: { | ||
| testCase: TTestCase; | ||
| runResult: CommandRunResult; | ||
| outputFiles: NonNullable<TestCaseResult['outputFiles']>; | ||
| context: CommandJudgeContext; | ||
| }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined; | ||
| } | ||
| /** | ||
| * A preset function for judging by executable command. | ||
| * | ||
| * Keep problem-specific logic in `resolveInput` and `test`. | ||
| * | ||
| * @example | ||
| * Create `judge.ts`: | ||
| * ```ts | ||
| * import { commandJudgePreset } from '@exercode/problem-utils/presets/command'; | ||
| * import { DecisionCode } from '@exercode/problem-utils'; | ||
| * | ||
| * await commandJudgePreset(import.meta.dirname, { | ||
| * readTestCases: async () => [ | ||
| * { id: '01', input: '1 2' }, | ||
| * ], | ||
| * test: ({ runResult }) => { | ||
| * return runResult.stdout.trim() === '3' | ||
| * ? { decisionCode: DecisionCode.ACCEPTED } | ||
| * : { decisionCode: DecisionCode.WRONG_ANSWER }; | ||
| * }, | ||
| * }); | ||
| * ``` | ||
| * | ||
| * Run with the required parameters: | ||
| * ```bash | ||
| * bun judge.ts model_answers/python '{ "language": "python" }' | ||
| * ``` | ||
| */ | ||
| export declare function commandJudgePreset<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(problemDir: string, options: CommandJudgePresetOptions<TTestCase>): Promise<void>; | ||
| export {}; |
| import{asyncToGenerator as e,regenerator as t,objectSpread2 as r,createForOfIteratorHelper as s}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:path";import{z as i}from"zod";import{cleanWorkingDirectory as u,snapshotWorkingDirectory as o}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as a}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as d}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as c}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as l}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as m}from"../helpers/parseArgs.js";import{printTestCaseResult as p}from"../helpers/printTestCaseResult.js";import{readOutputFiles as f}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as I}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as C}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as h}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as g}from"../types/decisionCode.js";var E=i.object({language:i.union([i.string(),i.array(i.string())]).optional()});function v(e,t){return R.apply(this,arguments)}function R(){return(R=e(t().m(function e(n,i){var C,h,v,R,b,T,_,k,M,x,P,B,D,F,j,U,N,A,X,q,G,W,H,Q,Y,Z,z,V,J,K,$,ee,te,re,se,ne,ie,ue,oe,ae,de,ce,le,me,pe,fe,Ie,Ce,he;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return P=m(process.argv),B=E.parse(P.params),e.n=1,I(n);case 1:return D=e.v,e.n=2,(null!=(C=i.readTestCases)?C:S)(n);case 2:return F=e.v,j=null!=(h=null==(v=F[0])?void 0:v.id)?h:"prebuild",U={buildTimeoutSeconds:null!=(R=null==(b=i.limits)?void 0:b.buildTimeoutSeconds)?R:10,maxOutputLength:null!=(T=null==(_=i.limits)?void 0:_.maxOutputLength)?T:5e4},N=null!=(k=i.runTimeoutSeconds)?k:2,e.n=3,l(P.cwd,D);case 3:if(!(A=e.v)){e.n=4;break}return p(r({testCaseId:j},A)),e.a(2);case 4:return e.n=5,d(P.cwd,B.language);case 5:if(X=e.v){e.n=6;break}return p({testCaseId:j,decisionCode:g.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(B.language?": language: ".concat(B.language):"")}),e.a(2);case 6:if(q=c(X)){e.n=7;break}return p({testCaseId:j,decisionCode:g.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 7:if(G=r(r({},process.env),{},{CI:"",FORCE_COLOR:"0"}),W=X,!q.prebuild){e.n=12;break}return e.p=8,e.n=9,q.prebuild(P.cwd);case 9:return e.n=10,d(P.cwd,B.language);case 10:(H=e.v)&&(W=H),e.n=12;break;case 11:return e.p=11,pe=e.v,p({testCaseId:j,decisionCode:g.BUILD_ERROR,stderr:pe instanceof Error?pe.message:String(pe)}),e.a(2);case 12:if(!(Q=null==(M=q.buildCommand)?void 0:M.call(q,W))){e.n=13;break}if(!(Y=y(Q,{cwd:P.cwd,env:G,testCaseId:j,limits:U}))){e.n=13;break}return p(Y),e.a(2);case 13:return e.n=14,o(P.cwd);case 14:if(Z=e.v,0!==F.length){e.n=15;break}return p({testCaseId:"default",decisionCode:g.ACCEPTED}),e.a(2);case 15:z=null==(x=F.shared)?void 0:x.fileInputPath,V=s(F),e.p=16,V.s();case 17:if((J=V.n()).done){e.n=36;break}if(te=J.value,!z){e.n=18;break}return e.n=18,a(z,P.cwd);case 18:if(!te.fileInputPath){e.n=19;break}return e.n=19,a(te.fileInputPath,P.cwd);case 19:if(re="number"==typeof D.timeLimitMs?D.timeLimitMs/1e3:N,se=q.command(W),ne=null!=(K=te.input)?K:"",ie=void 0,e.p=20,!i.resolveInput){e.n=22;break}return e.n=21,i.resolveInput({testCase:te,cwd:P.cwd,env:G});case 21:ne=e.v;case 22:if(!i.runCommand){e.n=24;break}return e.n=23,i.runCommand({testCase:te,command:se,stdin:ne,cwd:P.cwd,env:G,timeLimitSeconds:re});case 23:fe=e.v,e.n=25;break;case 24:fe=O(se,{stdin:ne,cwd:P.cwd,env:G,timeLimitSeconds:re});case 25:ie=fe,e.n=28;break;case 26:return e.p=26,Ie=e.v,p({testCaseId:te.id,decisionCode:g.RUNTIME_ERROR,stdin:ne,stderr:L(Ie)}),e.n=27,u(P.cwd,Z);case 27:return e.a(2);case 28:return e.n=29,f(P.cwd,null!=($=D.requiredOutputFilePaths)?$:[]);case 29:if(ue=e.v,oe={timeLimitSeconds:re,outputLimitLength:U.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:D.memoryLimitByte,requiredOutputFilePaths:D.requiredOutputFilePaths}},ae=w({runResult:ie,outputFiles:ue,context:oe}),de=ae,ae.decisionCode!==g.ACCEPTED){e.n=33;break}return e.p=30,e.n=31,null==(ce=i.test)?void 0:ce.call(i,{testCase:te,runResult:ie,outputFiles:ue,context:oe});case 31:(le=e.v)&&(de={decisionCode:null!=(me=le.decisionCode)?me:ae.decisionCode,feedbackMarkdown:le.feedbackMarkdown,stderr:le.stderr}),e.n=33;break;case 32:e.p=32,Ce=e.v,de={decisionCode:g.RUNTIME_ERROR,stderr:L(Ce)};case 33:return p(r(r({testCaseId:te.id},de),{},{exitStatus:ie.status,stdin:ie.stdin,stdout:ie.stdout.slice(0,U.maxOutputLength)||void 0,stderr:(null!=(ee=de.stderr)?ee:ie.stderr).slice(0,U.maxOutputLength)||void 0,timeSeconds:ie.timeSeconds,memoryBytes:ie.memoryBytes,outputFiles:ue.length>0?ue:void 0})),e.n=34,u(P.cwd,Z);case 34:if(de.decisionCode===g.ACCEPTED){e.n=35;break}return e.a(2);case 35:e.n=17;break;case 36:e.n=38;break;case 37:e.p=37,he=e.v,V.e(he);case 38:return e.p=38,V.f(),e.f(38);case 39:return e.a(2)}},e,null,[[30,32],[20,26],[16,37,38,39],[8,11]])}))).apply(this,arguments)}function y(e,t){var r,s=h(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",env:t.env},t.limits.buildTimeoutSeconds),n=null!=(r=s.status)?r:void 0;return 0!==s.status?{testCaseId:t.testCaseId,decisionCode:g.BUILD_ERROR,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:s.timeSeconds>t.limits.buildTimeoutSeconds?{testCaseId:t.testCaseId,decisionCode:g.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:s.stdout.length>t.limits.maxOutputLength||s.stderr.length>t.limits.maxOutputLength?{testCaseId:t.testCaseId,decisionCode:g.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:void 0}function L(e){return e instanceof Error?e.message:String(e)}function S(e){return b.apply(this,arguments)}function b(){return(b=e(t().m(function e(r){var s,i,u;return t().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,C(n.join(r,"test_cases"));case 1:if(i=e.v,u=i.map(function(e){return{id:(t=e).id,input:t.input,fileInputPath:t.fileInputPath};var t}),null==(s=i.shared)||!s.fileInputPath){e.n=2;break}return e.a(2,Object.assign(u,{shared:{fileInputPath:i.shared.fileInputPath}}));case 2:return e.a(2,u)}},e)}))).apply(this,arguments)}function O(e,t){var r,s=h(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:s.stdout,stderr:s.stderr,status:null!=(r=s.status)?r:void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}}function w(e){var t,r,s;if(0!==e.runResult.status)return{decisionCode:g.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:g.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(t=e.context.problemMarkdownFrontMatter.memoryLimitByte)?t:Number.POSITIVE_INFINITY))return{decisionCode:g.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:g.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var n=null!=(r=null==(s=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:s.length)?r:0;return e.outputFiles.length<n?{decisionCode:g.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:g.ACCEPTED}}export{v as commandJudgePreset}; | ||
| //# sourceMappingURL=command.js.map |
| {"version":3,"file":"command.js","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<CommandRunResult> | CommandRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n */\nexport async function commandJudgePreset<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string,\n options: CommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd: args.cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return;\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: CommandRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd: args.cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env,\n timeLimitSeconds,\n })\n : runCommand(command, {\n stdin,\n cwd: args.cwd,\n env,\n timeLimitSeconds,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return;\n }\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"names":["judgeParamsSchema","z","object","language","union","string","array","optional","commandJudgePreset","_x","_x2","_commandJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$limits$build","_options$limits","_options$limits$maxOu","_options$limits2","_options$runTimeoutSe","_languageDefinition$b","_shared","args","params","problemMarkdownFrontMatter","testCases","prebuildTestCaseId","limits","runTimeoutSeconds","staticAnalysisResult","originalMainFilePath","languageDefinition","env","mainFilePath","prebuiltMainFilePath","buildCommand","buildResult","cwdSnapshot","sharedFileInputPath","_iterator","_step","_testCase$input","_problemMarkdownFront","_judgeResult$stderr","testCase","timeLimitSeconds","command","stdin","runResult","outputFiles","judgeContext","baseJudgeResult","judgeResult","_options$test","extendedJudgeResult","_extendedJudgeResult$","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","parse","readProblemMarkdownFrontMatter","v","readTestCases","readCommandTestCases","id","buildTimeoutSeconds","maxOutputLength","judgeByStaticAnalysis","cwd","printTestCaseResult","_objectSpread","testCaseId","a","findEntryPointFile","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","BUILD_ERROR","Error","message","String","call","runBuild","snapshotWorkingDirectory","length","ACCEPTED","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","input","resolveInput","runCommand","RUNTIME_ERROR","errorToMessage","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","outputLimitLength","memoryLimitByte","evaluateByLimits","context","test","feedbackMarkdown","exitStatus","status","stdout","slice","undefined","timeSeconds","memoryBytes","e","f","_spawnResult$status","spawnResult","spawnSyncWithTimeout","encoding","BUILD_TIME_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","error","_x3","_readCommandTestCases","_callee2","_fileTestCases$shared","fileTestCases","commandTestCases","_context2","readFileTestCases","path","join","map","Object","assign","_spawnResult$status2","_context$context$prob","_context$context$prob2","_context$context$prob3","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","requiredOutputFileCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "@exercode/problem-utils", | ||
| "version": "1.7.14", | ||
| "version": "1.8.0", | ||
| "description": ":100: A set of utilities for judging programs on Exercode (https://exercode.willbooster.com/).", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
376219
23.45%117
4.46%757
23.29%37
5.71%8
33.33%