@exercode/problem-utils 1.16.5 → 1.16.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  2. package/dist/helpers/checkProblemDirIsolation.cjs +2 -2
  3. package/dist/helpers/checkProblemDirIsolation.cjs.map +1 -1
  4. package/dist/helpers/checkProblemDirIsolation.js +2 -2
  5. package/dist/helpers/checkProblemDirIsolation.js.map +1 -1
  6. package/dist/helpers/cleanWorkingDirectory.cjs +2 -2
  7. package/dist/helpers/cleanWorkingDirectory.cjs.map +1 -1
  8. package/dist/helpers/cleanWorkingDirectory.js +2 -2
  9. package/dist/helpers/cleanWorkingDirectory.js.map +1 -1
  10. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.cjs +2 -2
  11. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.cjs.map +1 -1
  12. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.js +2 -2
  13. package/dist/helpers/compareStdoutAsSpaceSeparatedTokens.js.map +1 -1
  14. package/dist/helpers/copyTestCaseFileInput.cjs +2 -2
  15. package/dist/helpers/copyTestCaseFileInput.cjs.map +1 -1
  16. package/dist/helpers/copyTestCaseFileInput.js +2 -2
  17. package/dist/helpers/copyTestCaseFileInput.js.map +1 -1
  18. package/dist/helpers/findEntryPointFile.cjs +2 -2
  19. package/dist/helpers/findEntryPointFile.cjs.map +1 -1
  20. package/dist/helpers/findEntryPointFile.js +2 -2
  21. package/dist/helpers/findEntryPointFile.js.map +1 -1
  22. package/dist/helpers/findLanguageDefinitionByPath.cjs +2 -2
  23. package/dist/helpers/findLanguageDefinitionByPath.cjs.map +1 -1
  24. package/dist/helpers/findLanguageDefinitionByPath.js +2 -2
  25. package/dist/helpers/findLanguageDefinitionByPath.js.map +1 -1
  26. package/dist/helpers/findModelAnswerDirs.cjs +2 -2
  27. package/dist/helpers/findModelAnswerDirs.cjs.map +1 -1
  28. package/dist/helpers/findModelAnswerDirs.js +2 -2
  29. package/dist/helpers/findModelAnswerDirs.js.map +1 -1
  30. package/dist/helpers/judgeByStaticAnalysis.cjs +19 -2
  31. package/dist/helpers/judgeByStaticAnalysis.cjs.map +1 -1
  32. package/dist/helpers/judgeByStaticAnalysis.js +19 -2
  33. package/dist/helpers/judgeByStaticAnalysis.js.map +1 -1
  34. package/dist/helpers/parseArgs.cjs +2 -2
  35. package/dist/helpers/parseArgs.cjs.map +1 -1
  36. package/dist/helpers/parseArgs.js +2 -2
  37. package/dist/helpers/parseArgs.js.map +1 -1
  38. package/dist/helpers/printDebugBanner.cjs +3 -2
  39. package/dist/helpers/printDebugBanner.cjs.map +1 -1
  40. package/dist/helpers/printDebugBanner.js +3 -2
  41. package/dist/helpers/printDebugBanner.js.map +1 -1
  42. package/dist/helpers/printTestCaseResult.cjs +2 -2
  43. package/dist/helpers/printTestCaseResult.cjs.map +1 -1
  44. package/dist/helpers/printTestCaseResult.js +2 -2
  45. package/dist/helpers/printTestCaseResult.js.map +1 -1
  46. package/dist/helpers/readOutputFiles.cjs +2 -2
  47. package/dist/helpers/readOutputFiles.cjs.map +1 -1
  48. package/dist/helpers/readOutputFiles.js +2 -2
  49. package/dist/helpers/readOutputFiles.js.map +1 -1
  50. package/dist/helpers/readProblemMarkdownFrontMatter.cjs +2 -2
  51. package/dist/helpers/readProblemMarkdownFrontMatter.cjs.map +1 -1
  52. package/dist/helpers/readProblemMarkdownFrontMatter.js +2 -2
  53. package/dist/helpers/readProblemMarkdownFrontMatter.js.map +1 -1
  54. package/dist/helpers/readTestCases.cjs +2 -2
  55. package/dist/helpers/readTestCases.cjs.map +1 -1
  56. package/dist/helpers/readTestCases.js +2 -2
  57. package/dist/helpers/readTestCases.js.map +1 -1
  58. package/dist/helpers/removeCommentsInSourceCode.cjs +6 -2
  59. package/dist/helpers/removeCommentsInSourceCode.cjs.map +1 -1
  60. package/dist/helpers/removeCommentsInSourceCode.js +6 -2
  61. package/dist/helpers/removeCommentsInSourceCode.js.map +1 -1
  62. package/dist/helpers/resolveCwds.cjs +2 -2
  63. package/dist/helpers/resolveCwds.cjs.map +1 -1
  64. package/dist/helpers/resolveCwds.js +2 -2
  65. package/dist/helpers/resolveCwds.js.map +1 -1
  66. package/dist/helpers/runCommandInTemporaryPackageManagerProject.cjs +2 -2
  67. package/dist/helpers/runCommandInTemporaryPackageManagerProject.cjs.map +1 -1
  68. package/dist/helpers/runCommandInTemporaryPackageManagerProject.js +2 -2
  69. package/dist/helpers/runCommandInTemporaryPackageManagerProject.js.map +1 -1
  70. package/dist/helpers/runPythonInTemporaryUvProject.cjs +2 -2
  71. package/dist/helpers/runPythonInTemporaryUvProject.cjs.map +1 -1
  72. package/dist/helpers/runPythonInTemporaryUvProject.js +2 -2
  73. package/dist/helpers/runPythonInTemporaryUvProject.js.map +1 -1
  74. package/dist/helpers/sourceCodeGrammars.cjs +2 -2
  75. package/dist/helpers/sourceCodeGrammars.cjs.map +1 -1
  76. package/dist/helpers/sourceCodeGrammars.js +2 -2
  77. package/dist/helpers/sourceCodeGrammars.js.map +1 -1
  78. package/dist/helpers/spawnSyncWithTimeout.cjs +2 -2
  79. package/dist/helpers/spawnSyncWithTimeout.cjs.map +1 -1
  80. package/dist/helpers/spawnSyncWithTimeout.js +2 -2
  81. package/dist/helpers/spawnSyncWithTimeout.js.map +1 -1
  82. package/dist/helpers/startHttpServer.cjs +2 -2
  83. package/dist/helpers/startHttpServer.cjs.map +1 -1
  84. package/dist/helpers/startHttpServer.js +2 -2
  85. package/dist/helpers/startHttpServer.js.map +1 -1
  86. package/dist/index.cjs +1 -2
  87. package/dist/index.js +1 -2
  88. package/dist/presets/command.cjs +2 -2
  89. package/dist/presets/command.cjs.map +1 -1
  90. package/dist/presets/command.js +2 -2
  91. package/dist/presets/command.js.map +1 -1
  92. package/dist/presets/guiCommand.cjs +4 -2
  93. package/dist/presets/guiCommand.cjs.map +1 -1
  94. package/dist/presets/guiCommand.js +4 -2
  95. package/dist/presets/guiCommand.js.map +1 -1
  96. package/dist/presets/llm.cjs +2 -2
  97. package/dist/presets/llm.cjs.map +1 -1
  98. package/dist/presets/llm.js +2 -2
  99. package/dist/presets/llm.js.map +1 -1
  100. package/dist/presets/stdio.cjs +2 -2
  101. package/dist/presets/stdio.cjs.map +1 -1
  102. package/dist/presets/stdio.js +2 -2
  103. package/dist/presets/stdio.js.map +1 -1
  104. package/dist/types/decisionCode.cjs +2 -2
  105. package/dist/types/decisionCode.cjs.map +1 -1
  106. package/dist/types/decisionCode.js +2 -2
  107. package/dist/types/decisionCode.js.map +1 -1
  108. package/dist/types/language.cjs +11 -2
  109. package/dist/types/language.cjs.map +1 -1
  110. package/dist/types/language.js +11 -2
  111. package/dist/types/language.js.map +1 -1
  112. package/dist/types/problem.cjs +2 -2
  113. package/dist/types/problem.cjs.map +1 -1
  114. package/dist/types/problem.js +2 -2
  115. package/dist/types/problem.js.map +1 -1
  116. package/dist/types/testCaseResult.cjs +2 -2
  117. package/dist/types/testCaseResult.cjs.map +1 -1
  118. package/dist/types/testCaseResult.js +2 -2
  119. package/dist/types/testCaseResult.js.map +1 -1
  120. package/package.json +14 -14
  121. package/dist/_virtual/_rollupPluginBabelHelpers.cjs +0 -4
  122. package/dist/_virtual/_rollupPluginBabelHelpers.cjs.map +0 -1
  123. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -4
  124. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  125. package/dist/index.cjs.map +0 -1
  126. package/dist/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"names":["providerByName","bedrock","google","openai","xai","judgeParamsSchema","z","object","model","string","min","llmJudgePreset","_x","_x2","_llmJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","args","params","testCases","prompt","_iterator","_step","testCase","startTimeMilliseconds","_options$buildPrompt","_options$buildPrompt2","_testCase$input","_yield$generateText","text","stopTimeMilliseconds","testCaseResult","_stopTimeMilliseconds","_t","_t2","_t3","_t4","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readTestCases","path","join","v","fs","promises","readFile","_createForOfIteratorHelper","s","done","value","Date","now","generateText","toLanguageModel","buildPrompt","call","replaceAll","input","_objectSpread","testCaseId","id","decisionCode","DecisionCode","ACCEPTED","stdin","stdout","timeSeconds","test","result","output","printTestCaseResult","a","RUNTIME_ERROR","stderr","message","String","e","f","_providerByName$provi","_model$split","split","_model$split2","_slicedToArray","providerId","modelId","concat","languageModel"],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","names":[],"sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"mappings":"6fAiBA,MAEM,EAA8F,CAElG,UAEA,SAEA,SAEA,KACF,EAEM,EAAoB,EAAE,OAAO,CACjC,MAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CACzB,CAAC,EAkCD,eAAsB,EAAe,EAAoB,EAA+C,CACtG,IAAM,EAAO,EAAU,QAAQ,IAAI,EACnC,GAAI,CAAC,EAAK,IAAK,MAAU,MAAM,uBAAuB,EACtD,IAAM,EAAS,EAAkB,MAAM,EAAK,MAAM,EAE5C,EAAY,MAAM,EAAc,EAAK,KAAK,EAAY,YAAY,CAAC,EAEnE,EAAS,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAK,IAAK,YAAe,EAAG,MAAM,EAEtF,IAAK,IAAM,KAAY,EAAW,CAChC,IAAM,EAAwB,KAAK,IAAI,EACvC,GAAI,CACF,GAAM,CAAE,QAAS,MAAM,EAAa,CAClC,MAAO,EAAgB,EAAO,KAAK,EACnC,OAAQ,EAAQ,cAAc,CAAE,SAAQ,UAAS,CAAC,GAAK,EAAO,WAAW,UAAW,EAAS,OAAS,EAAE,CAC1G,CAAC,EAEK,EAAuB,KAAK,IAAI,EAEhC,EAAiB,CACrB,WAAY,EAAS,GACrB,aAAc,EAAa,SAC3B,MAAO,EAAS,MAChB,OAAQ,EACR,aAAc,EAAuB,GAAyB,IAC9D,GAAI,MAAM,EAAQ,KAAK,CAAE,WAAU,OAAQ,CAAE,OAAQ,CAAK,CAAE,CAAC,CAC/D,EAIA,GAFA,EAAoB,CAAc,EAE9B,EAAe,eAAiB,EAAa,SAAU,KAC7D,OAAS,EAAO,CACd,IAAM,EAAuB,KAAK,IAAI,EAEtC,EAAoB,CAClB,WAAY,EAAS,GACrB,aAAc,EAAa,cAC3B,MAAO,EAAS,MAChB,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAC7D,aAAc,EAAuB,GAAyB,GAChE,CAAC,EAED,KACF,CACF,CACF,CAEA,SAAS,EAAgB,EAA8B,CACrD,GAAM,CAAC,EAAY,GAAW,EAAM,MAAM,GAAG,EAC7C,GAAI,CAAC,GAAc,CAAC,EAAS,MAAU,MAAM,cAAc,GAAO,EAClE,IAAM,EAAgB,EAAe,EAAW,GAAG,CAAO,EAC1D,GAAI,CAAC,EAAe,MAAU,MAAM,oBAAoB,GAAO,EAC/D,OAAO,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),t=require("node:path"),s=require("zod"),n=require("../helpers/cleanWorkingDirectory.cjs"),i=require("../helpers/compareStdoutAsSpaceSeparatedTokens.cjs"),a=require("../helpers/copyTestCaseFileInput.cjs"),o=require("../helpers/findEntryPointFile.cjs"),d=require("../helpers/findLanguageDefinitionByPath.cjs"),u=require("../helpers/judgeByStaticAnalysis.cjs"),c=require("../helpers/parseArgs.cjs"),l=require("../helpers/printTestCaseResult.cjs"),p=require("../helpers/readOutputFiles.cjs"),C=require("../helpers/readProblemMarkdownFrontMatter.cjs"),E=require("../helpers/readTestCases.cjs"),I=require("../helpers/spawnSyncWithTimeout.cjs"),m=require("../types/decisionCode.cjs"),D=5e4,g=s.z.object({language:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional()}),b=g.extend({stdin:s.z.string().optional()});function R(){return(R=e.asyncToGenerator(e.regenerator().m(function s(b){var R,f,T,_,S,h,v,y,k,O,w,P,M,F,L,B,U,j,N,q,A,W,G,X,x,z,Q,Y,Z,H,V,J,K,$,ee,re,te,se,ne,ie,ae,oe,de,ue,ce,le,pe,Ce,Ee,Ie,me,De,ge;return e.regenerator().w(function(s){for(;;)switch(s.p=s.n){case 0:if((R=c.parseArgs(process.argv)).cwd){s.n=1;break}throw new Error("cwd argument required");case 1:return f=g.parse(R.params),s.n=2,C.readProblemMarkdownFrontMatter(b);case 2:return T=s.v,s.n=3,E.readTestCases(t.join(b,"test_cases"));case 3:return _=s.v,s.n=4,u.judgeByStaticAnalysis(R.cwd,T);case 4:if(!(S=s.v)){s.n=5;break}return l.printTestCaseResult(e.objectSpread2({testCaseId:null!=(h=null==(v=_[0])?void 0:v.id)?h:"prebuild"},S)),s.a(2);case 5:return s.n=6,o.findEntryPointFile(R.cwd,f.language);case 6:if(y=s.v){s.n=7;break}return l.printTestCaseResult({testCaseId:null!=(k=null==(O=_[0])?void 0:O.id)?k:"prebuild",decisionCode:m.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(f.language?": language: ".concat(f.language):"")}),s.a(2);case 7:if(w=d.findLanguageDefinitionByPath(y)){s.n=8;break}return l.printTestCaseResult({testCaseId:null!=(P=null==(M=_[0])?void 0:M.id)?P:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),s.a(2);case 8:if(F=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!w.prebuild){s.n=13;break}return s.p=9,s.n=10,w.prebuild(R.cwd);case 10:return s.n=11,o.findEntryPointFile(R.cwd,f.language);case 11:L=s.v,s.n=13;break;case 12:return s.p=12,Ee=s.v,console.error("prebuild error",Ee),l.printTestCaseResult({testCaseId:null!=(B=null==(U=_[0])?void 0:U.id)?B:"prebuild",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:Ee instanceof Error?Ee.message:String(Ee)}),s.a(2);case 13:if(j=null!=L?L:y,!w.buildCommand){s.n=17;break}if(s.p=14,N=w.buildCommand(j),q=I.spawnSyncWithTimeout(N[0],N.slice(1),{cwd:R.cwd,encoding:"utf8",env:F},10),A=m.DecisionCode.ACCEPTED,0!==q.status?A=m.DecisionCode.BUILD_ERROR:q.timeSeconds>10?A=m.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(q.stdout.length>D||q.stderr.length>D)&&(A=m.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),A===m.DecisionCode.ACCEPTED){s.n=15;break}return l.printTestCaseResult({testCaseId:null!=(W=null==(G=_[0])?void 0:G.id)?W:"build",decisionCode:A,exitStatus:null!=(X=q.status)?X:void 0,stdout:q.stdout.slice(0,D)||void 0,stderr:q.stderr.slice(0,D)||void 0,timeSeconds:q.timeSeconds,memoryBytes:q.memoryBytes}),s.a(2);case 15:s.n=17;break;case 16:return s.p=16,Ie=s.v,console.error("build error",Ie),l.printTestCaseResult({testCaseId:null!=(x=null==(z=_[0])?void 0:z.id)?x:"build",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:Ie instanceof Error?Ie.message:String(Ie)}),s.a(2);case 17:return s.n=18,n.snapshotWorkingDirectory(R.cwd);case 18:Q=s.v,0===_.length&&l.printTestCaseResult({testCaseId:"default",decisionCode:m.DecisionCode.ACCEPTED}),Y=e.createForOfIteratorHelper(_),s.p=19,Y.s();case 20:if((Z=Y.n()).done){s.n=45;break}if(te=Z.value,null==(H=_.shared)||!H.fileInputPath){s.n=21;break}return s.n=21,a.copyTestCaseFileInput(_.shared.fileInputPath,R.cwd);case 21:if(!te.fileInputPath){s.n=22;break}return s.n=22,a.copyTestCaseFileInput(te.fileInputPath,R.cwd);case 22:return se="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,ne=w.command(j),ie=I.spawnSyncWithTimeout(ne[0],ne.slice(1),{cwd:R.cwd,encoding:"utf8",input:te.input,env:F},se),s.n=23,p.readOutputFiles(R.cwd,null!=(V=T.requiredOutputFilePaths)?V:[]);case 23:if(ae=s.v,oe=m.DecisionCode.ACCEPTED,0===ie.status){s.n=24;break}oe=m.DecisionCode.RUNTIME_ERROR,s.n=42;break;case 24:if(!(ie.timeSeconds>se)){s.n=25;break}oe=m.DecisionCode.TIME_LIMIT_EXCEEDED,s.n=42;break;case 25:if(!(ie.memoryBytes>(null!=(J=T.memoryLimitByte)?J:Number.POSITIVE_INFINITY))){s.n=26;break}oe=m.DecisionCode.MEMORY_LIMIT_EXCEEDED,s.n=42;break;case 26:if(!(ie.stdout.length>D||ie.stderr.length>D)){s.n=27;break}oe=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,s.n=42;break;case 27:if(!(ae.length<(null!=(K=null==($=T.requiredOutputFilePaths)?void 0:$.length)?K:0))){s.n=28;break}oe=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,s.n=42;break;case 28:if(i.compareStdoutAsSpaceSeparatedTokens(ie.stdout,null!=(ee=te.output)?ee:"")){s.n=29;break}oe=m.DecisionCode.WRONG_ANSWER,s.n=42;break;case 29:if(!te.fileOutputPath){s.n=42;break}return s.n=30,r.promises.readdir(te.fileOutputPath,{withFileTypes:!0,recursive:!0});case 30:de=s.v,ue=e.createForOfIteratorHelper(de),s.p=31,ue.s();case 32:if((ce=ue.n()).done){s.n=39;break}if((le=ce.value).isFile()){s.n=33;break}return s.a(3,38);case 33:return pe=t.relative(te.fileOutputPath,le.parentPath),s.n=34,r.promises.readFile(t.join(le.parentPath,le.name));case 34:return Ce=s.v,s.p=35,s.n=36,r.promises.readFile(t.join(R.cwd,pe,le.name));case 36:0!==s.v.compare(Ce)&&(oe=m.DecisionCode.WRONG_ANSWER),s.n=38;break;case 37:s.p=37,me=s.v,console.error(me),oe=m.DecisionCode.WRONG_ANSWER;case 38:s.n=32;break;case 39:s.n=41;break;case 40:s.p=40,De=s.v,ue.e(De);case 41:return s.p=41,ue.f(),s.f(41);case 42:return l.printTestCaseResult({testCaseId:te.id,decisionCode:oe,exitStatus:null!=(re=ie.status)?re:void 0,stdin:te.input,stdout:ie.stdout.slice(0,D)||void 0,stderr:ie.stderr.slice(0,D)||void 0,timeSeconds:ie.timeSeconds,memoryBytes:ie.memoryBytes,outputFiles:ae.length>0?ae:void 0}),s.n=43,n.cleanWorkingDirectory(R.cwd,Q);case 43:if(oe===m.DecisionCode.ACCEPTED){s.n=44;break}return s.a(3,45);case 44:s.n=20;break;case 45:s.n=47;break;case 46:s.p=46,ge=s.v,Y.e(ge);case 47:return s.p=47,Y.f(),s.f(47);case 48:return s.a(2)}},s,null,[[35,37],[31,40,41,42],[19,46,47,48],[14,16],[9,12]])}))).apply(this,arguments)}function f(){return(f=e.asyncToGenerator(e.regenerator().m(function r(t){var s,n,i,a,u,E,g,R,f,T,_,S,h,v,y,k,O,w,P,M,F,L,B,U,j;return e.regenerator().w(function(r){for(;;)switch(r.p=r.n){case 0:if((s=c.parseArgs(process.argv)).cwd){r.n=1;break}throw new Error("cwd argument required");case 1:return n=b.parse(s.params),r.n=2,C.readProblemMarkdownFrontMatter(t);case 2:return i=r.v,r.n=3,o.findEntryPointFile(s.cwd,n.language);case 3:if(a=r.v){r.n=4;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(n.language?": language: ".concat(n.language):"")}),r.a(2);case 4:if(u=d.findLanguageDefinitionByPath(a)){r.n=5;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),r.a(2);case 5:if(E=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!u.prebuild){r.n=10;break}return r.p=6,r.n=7,u.prebuild(s.cwd);case 7:return r.n=8,o.findEntryPointFile(s.cwd,n.language);case 8:g=r.v,r.n=10;break;case 9:return r.p=9,U=r.v,console.error("prebuild error",U),l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:U instanceof Error?U.message:String(U)}),r.a(2);case 10:if(R=null!=g?g:a,!u.buildCommand){r.n=14;break}if(r.p=11,f=u.buildCommand(R),T=I.spawnSyncWithTimeout(f[0],f.slice(1),{cwd:s.cwd,encoding:"utf8",env:E},10),_=m.DecisionCode.ACCEPTED,0!==T.status?_=m.DecisionCode.BUILD_ERROR:T.timeSeconds>10?_=m.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(T.stdout.length>D||T.stderr.length>D)&&(_=m.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),_===m.DecisionCode.ACCEPTED){r.n=12;break}return l.printTestCaseResult({testCaseId:"build",decisionCode:_,exitStatus:null!=(S=T.status)?S:void 0,stdout:T.stdout.slice(0,D)||void 0,stderr:T.stderr.slice(0,D)||void 0,timeSeconds:T.timeSeconds,memoryBytes:T.memoryBytes}),r.a(2);case 12:r.n=14;break;case 13:return r.p=13,j=r.v,console.error("build error",j),l.printTestCaseResult({testCaseId:"build",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:j instanceof Error?j.message:String(j)}),r.a(2);case 14:return P=Math.max(10,(null!=(h=i.timeLimitMs)?h:0)/1e3),M=u.command(R),F=I.spawnSyncWithTimeout(M[0],M.slice(1),{cwd:s.cwd,encoding:"utf8",input:n.stdin,env:E},P),r.n=15,p.readOutputFiles(s.cwd,null!=(v=i.requiredOutputFilePaths)?v:[]);case 15:L=r.v,B=m.DecisionCode.ACCEPTED,0!==F.status?B=m.DecisionCode.RUNTIME_ERROR:F.timeSeconds>P?B=m.DecisionCode.TIME_LIMIT_EXCEEDED:F.memoryBytes>(null!=(y=i.memoryLimitByte)?y:Number.POSITIVE_INFINITY)?B=m.DecisionCode.MEMORY_LIMIT_EXCEEDED:F.stdout.length>D||F.stderr.length>D?B=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED:L.length<(null!=(k=null==(O=i.requiredOutputFilePaths)?void 0:O.length)?k:0)&&(B=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR),l.printTestCaseResult({testCaseId:"debug",decisionCode:B,exitStatus:null!=(w=F.status)?w:void 0,stdin:n.stdin,stdout:F.stdout.slice(0,D)||void 0,stderr:F.stderr.slice(0,D)||void 0,timeSeconds:F.timeSeconds,memoryBytes:F.memoryBytes,outputFiles:L.length>0?L:void 0});case 16:return r.a(2)}},r,null,[[11,13],[6,9]])}))).apply(this,arguments)}exports.stdioDebugPreset=function(e){return f.apply(this,arguments)},exports.stdioJudgePreset=function(e){return R.apply(this,arguments)};
2
- //# sourceMappingURL=stdio.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/parseArgs.cjs"),n=require("../helpers/printTestCaseResult.cjs"),r=require("../types/decisionCode.cjs"),i=require("../helpers/cleanWorkingDirectory.cjs"),a=require("../helpers/copyTestCaseFileInput.cjs"),o=require("../helpers/findEntryPointFile.cjs"),s=require("../helpers/findLanguageDefinitionByPath.cjs"),c=require("../helpers/judgeByStaticAnalysis.cjs"),l=require("../helpers/readOutputFiles.cjs"),u=require("../helpers/readProblemMarkdownFrontMatter.cjs"),d=require("../helpers/readTestCases.cjs"),f=require("../helpers/spawnSyncWithTimeout.cjs"),p=require("../helpers/compareStdoutAsSpaceSeparatedTokens.cjs");let m=require("zod"),h=require("node:path");h=e.__toESM(h,1);let g=require("node:fs");g=e.__toESM(g,1);const _=5e4,v=m.z.object({language:m.z.union([m.z.string(),m.z.array(m.z.string())]).optional()}),y=v.extend({stdin:m.z.string().optional()});async function b(e){let m=t.parseArgs(process.argv);if(!m.cwd)throw Error(`cwd argument required`);let y=v.parse(m.params),b=await u.readProblemMarkdownFrontMatter(e),x=await d.readTestCases(h.default.join(e,`test_cases`)),S=await c.judgeByStaticAnalysis(m.cwd,b);if(S){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,...S});return}let C=await o.findEntryPointFile(m.cwd,y.language);if(!C){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${y.language?`: language: ${y.language}`:``}`});return}let w=s.findLanguageDefinitionByPath(C);if(!w){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`});return}let T={...process.env,CI:``,FORCE_COLOR:`0`},E;if(w.prebuild)try{await w.prebuild(m.cwd),E=await o.findEntryPointFile(m.cwd,y.language)}catch(e){console.error(`prebuild error`,e),n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let D=E??C;if(w.buildCommand)try{let e=w.buildCommand(D),t=f.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:m.cwd,encoding:`utf8`,env:T},10),i=r.DecisionCode.ACCEPTED;if(t.status===0?t.timeSeconds>10?i=r.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(t.stdout.length>_||t.stderr.length>_)&&(i=r.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):i=r.DecisionCode.BUILD_ERROR,i!==r.DecisionCode.ACCEPTED){n.printTestCaseResult({testCaseId:x[0]?.id??`build`,decisionCode:i,exitStatus:t.status??void 0,stdout:t.stdout.slice(0,_)||void 0,stderr:t.stderr.slice(0,_)||void 0,timeSeconds:t.timeSeconds,memoryBytes:t.memoryBytes});return}}catch(e){console.error(`build error`,e),n.printTestCaseResult({testCaseId:x[0]?.id??`build`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let O=await i.snapshotWorkingDirectory(m.cwd);x.length===0&&n.printTestCaseResult({testCaseId:`default`,decisionCode:r.DecisionCode.ACCEPTED});for(let e of x){x.shared?.fileInputPath&&await a.copyTestCaseFileInput(x.shared.fileInputPath,m.cwd),e.fileInputPath&&await a.copyTestCaseFileInput(e.fileInputPath,m.cwd);let t=typeof b.timeLimitMs==`number`?b.timeLimitMs/1e3:2,o=w.command(D),s=f.spawnSyncWithTimeout(o[0],o.slice(1),{cwd:m.cwd,encoding:`utf8`,input:e.input,env:T},t),c=await l.readOutputFiles(m.cwd,b.requiredOutputFilePaths??[]),u=r.DecisionCode.ACCEPTED;if(s.status!==0)u=r.DecisionCode.RUNTIME_ERROR;else if(s.timeSeconds>t)u=r.DecisionCode.TIME_LIMIT_EXCEEDED;else if(s.memoryBytes>(b.memoryLimitByte??1/0))u=r.DecisionCode.MEMORY_LIMIT_EXCEEDED;else if(s.stdout.length>_||s.stderr.length>_)u=r.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;else if(c.length<(b.requiredOutputFilePaths?.length??0))u=r.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;else if(!p.compareStdoutAsSpaceSeparatedTokens(s.stdout,e.output??``))u=r.DecisionCode.WRONG_ANSWER;else if(e.fileOutputPath){let t=await g.default.promises.readdir(e.fileOutputPath,{withFileTypes:!0,recursive:!0});for(let n of t){if(!n.isFile())continue;let t=h.default.relative(e.fileOutputPath,n.parentPath),i=await g.default.promises.readFile(h.default.join(n.parentPath,n.name));try{(await g.default.promises.readFile(h.default.join(m.cwd,t,n.name))).compare(i)!==0&&(u=r.DecisionCode.WRONG_ANSWER)}catch(e){console.error(e),u=r.DecisionCode.WRONG_ANSWER}}}if(n.printTestCaseResult({testCaseId:e.id,decisionCode:u,exitStatus:s.status??void 0,stdin:e.input,stdout:s.stdout.slice(0,_)||void 0,stderr:s.stderr.slice(0,_)||void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes,outputFiles:c.length>0?c:void 0}),await i.cleanWorkingDirectory(m.cwd,O),u!==r.DecisionCode.ACCEPTED)break}}async function x(e){let i=t.parseArgs(process.argv);if(!i.cwd)throw Error(`cwd argument required`);let a=y.parse(i.params),c=await u.readProblemMarkdownFrontMatter(e),d=await o.findEntryPointFile(i.cwd,a.language);if(!d){n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${a.language?`: language: ${a.language}`:``}`});return}let p=s.findLanguageDefinitionByPath(d);if(!p){n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`});return}let m={...process.env,CI:``,FORCE_COLOR:`0`},h;if(p.prebuild)try{await p.prebuild(i.cwd),h=await o.findEntryPointFile(i.cwd,a.language)}catch(e){console.error(`prebuild error`,e),n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let g=h??d;if(p.buildCommand)try{let e=p.buildCommand(g),t=f.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:i.cwd,encoding:`utf8`,env:m},10),a=r.DecisionCode.ACCEPTED;if(t.status===0?t.timeSeconds>10?a=r.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(t.stdout.length>_||t.stderr.length>_)&&(a=r.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):a=r.DecisionCode.BUILD_ERROR,a!==r.DecisionCode.ACCEPTED){n.printTestCaseResult({testCaseId:`build`,decisionCode:a,exitStatus:t.status??void 0,stdout:t.stdout.slice(0,_)||void 0,stderr:t.stderr.slice(0,_)||void 0,timeSeconds:t.timeSeconds,memoryBytes:t.memoryBytes});return}}catch(e){console.error(`build error`,e),n.printTestCaseResult({testCaseId:`build`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}{let e=Math.max(10,(c.timeLimitMs??0)/1e3),t=p.command(g),o=f.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:i.cwd,encoding:`utf8`,input:a.stdin,env:m},e),s=await l.readOutputFiles(i.cwd,c.requiredOutputFilePaths??[]),u=r.DecisionCode.ACCEPTED;o.status===0?o.timeSeconds>e?u=r.DecisionCode.TIME_LIMIT_EXCEEDED:o.memoryBytes>(c.memoryLimitByte??1/0)?u=r.DecisionCode.MEMORY_LIMIT_EXCEEDED:o.stdout.length>_||o.stderr.length>_?u=r.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED:s.length<(c.requiredOutputFilePaths?.length??0)&&(u=r.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR):u=r.DecisionCode.RUNTIME_ERROR,n.printTestCaseResult({testCaseId:`debug`,decisionCode:u,exitStatus:o.status??void 0,stdin:a.stdin,stdout:o.stdout.slice(0,_)||void 0,stderr:o.stderr.slice(0,_)||void 0,timeSeconds:o.timeSeconds,memoryBytes:o.memoryBytes,outputFiles:s.length>0?s:void 0})}}exports.stdioDebugPreset=x,exports.stdioJudgePreset=b;
2
+ //# sourceMappingURL=stdio.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.cjs","sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.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 } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\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: testCases[0]?.id ?? 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\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 }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\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: 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"names":["MAX_STDOUT_LENGTH","judgeParamsSchema","z","object","language","union","string","array","optional","debugParamsSchema","extend","stdin","_stdioJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","args","params","problemMarkdownFrontMatter","testCases","staticAnalysisTestCaseResult","_testCases$0$id","_testCases$","originalMainFilePath","_testCases$0$id2","_testCases$2","languageDefinition","_testCases$0$id3","_testCases$3","env","prebuiltMainFilePath","_testCases$0$id4","_testCases$4","mainFilePath","buildCommand","buildSpawnResult","decisionCode","_testCases$0$id5","_testCases$5","_buildSpawnResult$sta","_testCases$0$id6","_testCases$6","cwdSnapshot","_iterator","_step","_testCases$shared","_problemMarkdownFront","_problemMarkdownFront2","_problemMarkdownFront3","_problemMarkdownFront4","_testCase$output","_spawnResult$status","testCase","timeoutSeconds","command","spawnResult","outputFiles","_decisionCode","dirents","_iterator2","_step2","dirent","direntRelativePath","expected","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","id","a","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","console","error","BUILD_ERROR","message","String","spawnSyncWithTimeout","slice","encoding","ACCEPTED","status","timeSeconds","BUILD_TIME_LIMIT_EXCEEDED","stdout","length","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","exitStatus","undefined","memoryBytes","snapshotWorkingDirectory","_createForOfIteratorHelper","s","done","value","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","readOutputFiles","requiredOutputFilePaths","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","memoryLimitByte","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_OUTPUT_FILE_ERROR","compareStdoutAsSpaceSeparatedTokens","output","fileOutputPath","fs","promises","readdir","withFileTypes","recursive","isFile","relative","parentPath","readFile","name","compare","e","f","cleanWorkingDirectory","apply","this","arguments","_stdioDebugPreset","_callee2","_buildSpawnResult$sta2","_problemMarkdownFront5","_problemMarkdownFront6","_problemMarkdownFront7","_problemMarkdownFront8","_problemMarkdownFront9","_spawnResult$status2","_decisionCode2","_t6","_t7","_context2","Math","max","_x2","_x"],"mappings":"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"}
1
+ {"version":3,"file":"stdio.cjs","names":["z","parseArgs","readProblemMarkdownFrontMatter","readTestCases","path","judgeByStaticAnalysis","findEntryPointFile","DecisionCode","findLanguageDefinitionByPath","spawnSyncWithTimeout","snapshotWorkingDirectory","copyTestCaseFileInput","readOutputFiles","compareStdoutAsSpaceSeparatedTokens","fs","cleanWorkingDirectory"],"sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.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 } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\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: testCases[0]?.id ?? 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\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 }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\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: 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as e,regenerator as r,objectSpread2 as t,createForOfIteratorHelper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"node:fs";import a from"node:path";import{z as i}from"zod";import{cleanWorkingDirectory as o,snapshotWorkingDirectory as d}from"../helpers/cleanWorkingDirectory.js";import{compareStdoutAsSpaceSeparatedTokens as u}from"../helpers/compareStdoutAsSpaceSeparatedTokens.js";import{copyTestCaseFileInput as l}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as c}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as p}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as m}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as E}from"../helpers/parseArgs.js";import{printTestCaseResult as I}from"../helpers/printTestCaseResult.js";import{readOutputFiles as f}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as b}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as g}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as C}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as _}from"../types/decisionCode.js";var R=5e4,v=i.object({language:i.union([i.string(),i.array(i.string())]).optional()}),h=v.extend({stdin:i.string().optional()});function S(e){return T.apply(this,arguments)}function T(){return(T=e(r().m(function e(i){var h,S,T,k,D,O,y,w,P,L,M,U,B,N,F,j,A,W,G,X,x,q,Q,Y,Z,H,V,z,J,K,$,ee,re,te,ne,se,ae,ie,oe,de,ue,le,ce,pe,me,Ee,Ie,fe,be,ge,Ce,_e,Re;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:if((h=E(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return S=v.parse(h.params),e.n=2,b(i);case 2:return T=e.v,e.n=3,g(a.join(i,"test_cases"));case 3:return k=e.v,e.n=4,m(h.cwd,T);case 4:if(!(D=e.v)){e.n=5;break}return I(t({testCaseId:null!=(O=null==(y=k[0])?void 0:y.id)?O:"prebuild"},D)),e.a(2);case 5:return e.n=6,c(h.cwd,S.language);case 6:if(w=e.v){e.n=7;break}return I({testCaseId:null!=(P=null==(L=k[0])?void 0:L.id)?P:"prebuild",decisionCode:_.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(S.language?": language: ".concat(S.language):"")}),e.a(2);case 7:if(M=p(w)){e.n=8;break}return I({testCaseId:null!=(U=null==(B=k[0])?void 0:B.id)?U:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 8:if(N=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!M.prebuild){e.n=13;break}return e.p=9,e.n=10,M.prebuild(h.cwd);case 10:return e.n=11,c(h.cwd,S.language);case 11:F=e.v,e.n=13;break;case 12:return e.p=12,be=e.v,console.error("prebuild error",be),I({testCaseId:null!=(j=null==(A=k[0])?void 0:A.id)?j:"prebuild",decisionCode:_.BUILD_ERROR,stderr:be instanceof Error?be.message:String(be)}),e.a(2);case 13:if(W=null!=F?F:w,!M.buildCommand){e.n=17;break}if(e.p=14,G=M.buildCommand(W),X=C(G[0],G.slice(1),{cwd:h.cwd,encoding:"utf8",env:N},10),x=_.ACCEPTED,0!==X.status?x=_.BUILD_ERROR:X.timeSeconds>10?x=_.BUILD_TIME_LIMIT_EXCEEDED:(X.stdout.length>R||X.stderr.length>R)&&(x=_.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),x===_.ACCEPTED){e.n=15;break}return I({testCaseId:null!=(q=null==(Q=k[0])?void 0:Q.id)?q:"build",decisionCode:x,exitStatus:null!=(Y=X.status)?Y:void 0,stdout:X.stdout.slice(0,R)||void 0,stderr:X.stderr.slice(0,R)||void 0,timeSeconds:X.timeSeconds,memoryBytes:X.memoryBytes}),e.a(2);case 15:e.n=17;break;case 16:return e.p=16,ge=e.v,console.error("build error",ge),I({testCaseId:null!=(Z=null==(H=k[0])?void 0:H.id)?Z:"build",decisionCode:_.BUILD_ERROR,stderr:ge instanceof Error?ge.message:String(ge)}),e.a(2);case 17:return e.n=18,d(h.cwd);case 18:V=e.v,0===k.length&&I({testCaseId:"default",decisionCode:_.ACCEPTED}),z=n(k),e.p=19,z.s();case 20:if((J=z.n()).done){e.n=45;break}if(ae=J.value,null==(K=k.shared)||!K.fileInputPath){e.n=21;break}return e.n=21,l(k.shared.fileInputPath,h.cwd);case 21:if(!ae.fileInputPath){e.n=22;break}return e.n=22,l(ae.fileInputPath,h.cwd);case 22:return ie="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,oe=M.command(W),de=C(oe[0],oe.slice(1),{cwd:h.cwd,encoding:"utf8",input:ae.input,env:N},ie),e.n=23,f(h.cwd,null!=($=T.requiredOutputFilePaths)?$:[]);case 23:if(ue=e.v,le=_.ACCEPTED,0===de.status){e.n=24;break}le=_.RUNTIME_ERROR,e.n=42;break;case 24:if(!(de.timeSeconds>ie)){e.n=25;break}le=_.TIME_LIMIT_EXCEEDED,e.n=42;break;case 25:if(!(de.memoryBytes>(null!=(ee=T.memoryLimitByte)?ee:Number.POSITIVE_INFINITY))){e.n=26;break}le=_.MEMORY_LIMIT_EXCEEDED,e.n=42;break;case 26:if(!(de.stdout.length>R||de.stderr.length>R)){e.n=27;break}le=_.OUTPUT_SIZE_LIMIT_EXCEEDED,e.n=42;break;case 27:if(!(ue.length<(null!=(re=null==(te=T.requiredOutputFilePaths)?void 0:te.length)?re:0))){e.n=28;break}le=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR,e.n=42;break;case 28:if(u(de.stdout,null!=(ne=ae.output)?ne:"")){e.n=29;break}le=_.WRONG_ANSWER,e.n=42;break;case 29:if(!ae.fileOutputPath){e.n=42;break}return e.n=30,s.promises.readdir(ae.fileOutputPath,{withFileTypes:!0,recursive:!0});case 30:ce=e.v,pe=n(ce),e.p=31,pe.s();case 32:if((me=pe.n()).done){e.n=39;break}if((Ee=me.value).isFile()){e.n=33;break}return e.a(3,38);case 33:return Ie=a.relative(ae.fileOutputPath,Ee.parentPath),e.n=34,s.promises.readFile(a.join(Ee.parentPath,Ee.name));case 34:return fe=e.v,e.p=35,e.n=36,s.promises.readFile(a.join(h.cwd,Ie,Ee.name));case 36:0!==e.v.compare(fe)&&(le=_.WRONG_ANSWER),e.n=38;break;case 37:e.p=37,Ce=e.v,console.error(Ce),le=_.WRONG_ANSWER;case 38:e.n=32;break;case 39:e.n=41;break;case 40:e.p=40,_e=e.v,pe.e(_e);case 41:return e.p=41,pe.f(),e.f(41);case 42:return I({testCaseId:ae.id,decisionCode:le,exitStatus:null!=(se=de.status)?se:void 0,stdin:ae.input,stdout:de.stdout.slice(0,R)||void 0,stderr:de.stderr.slice(0,R)||void 0,timeSeconds:de.timeSeconds,memoryBytes:de.memoryBytes,outputFiles:ue.length>0?ue:void 0}),e.n=43,o(h.cwd,V);case 43:if(le===_.ACCEPTED){e.n=44;break}return e.a(3,45);case 44:e.n=20;break;case 45:e.n=47;break;case 46:e.p=46,Re=e.v,z.e(Re);case 47:return e.p=47,z.f(),e.f(47);case 48:return e.a(2)}},e,null,[[35,37],[31,40,41,42],[19,46,47,48],[14,16],[9,12]])}))).apply(this,arguments)}function k(e){return D.apply(this,arguments)}function D(){return(D=e(r().m(function e(n){var s,a,i,o,d,u,l,m,g,v,S,T,k,D,O,y,w,P,L,M,U,B,N,F,j;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:if((s=E(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return a=h.parse(s.params),e.n=2,b(n);case 2:return i=e.v,e.n=3,c(s.cwd,a.language);case 3:if(o=e.v){e.n=4;break}return I({testCaseId:"prebuild",decisionCode:_.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(a.language?": language: ".concat(a.language):"")}),e.a(2);case 4:if(d=p(o)){e.n=5;break}return I({testCaseId:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 5:if(u=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!d.prebuild){e.n=10;break}return e.p=6,e.n=7,d.prebuild(s.cwd);case 7:return e.n=8,c(s.cwd,a.language);case 8:l=e.v,e.n=10;break;case 9:return e.p=9,F=e.v,console.error("prebuild error",F),I({testCaseId:"prebuild",decisionCode:_.BUILD_ERROR,stderr:F instanceof Error?F.message:String(F)}),e.a(2);case 10:if(m=null!=l?l:o,!d.buildCommand){e.n=14;break}if(e.p=11,g=d.buildCommand(m),v=C(g[0],g.slice(1),{cwd:s.cwd,encoding:"utf8",env:u},10),S=_.ACCEPTED,0!==v.status?S=_.BUILD_ERROR:v.timeSeconds>10?S=_.BUILD_TIME_LIMIT_EXCEEDED:(v.stdout.length>R||v.stderr.length>R)&&(S=_.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),S===_.ACCEPTED){e.n=12;break}return I({testCaseId:"build",decisionCode:S,exitStatus:null!=(T=v.status)?T:void 0,stdout:v.stdout.slice(0,R)||void 0,stderr:v.stderr.slice(0,R)||void 0,timeSeconds:v.timeSeconds,memoryBytes:v.memoryBytes}),e.a(2);case 12:e.n=14;break;case 13:return e.p=13,j=e.v,console.error("build error",j),I({testCaseId:"build",decisionCode:_.BUILD_ERROR,stderr:j instanceof Error?j.message:String(j)}),e.a(2);case 14:return L=Math.max(10,(null!=(k=i.timeLimitMs)?k:0)/1e3),M=d.command(m),U=C(M[0],M.slice(1),{cwd:s.cwd,encoding:"utf8",input:a.stdin,env:u},L),e.n=15,f(s.cwd,null!=(D=i.requiredOutputFilePaths)?D:[]);case 15:B=e.v,N=_.ACCEPTED,0!==U.status?N=_.RUNTIME_ERROR:U.timeSeconds>L?N=_.TIME_LIMIT_EXCEEDED:U.memoryBytes>(null!=(O=i.memoryLimitByte)?O:Number.POSITIVE_INFINITY)?N=_.MEMORY_LIMIT_EXCEEDED:U.stdout.length>R||U.stderr.length>R?N=_.OUTPUT_SIZE_LIMIT_EXCEEDED:B.length<(null!=(y=null==(w=i.requiredOutputFilePaths)?void 0:w.length)?y:0)&&(N=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR),I({testCaseId:"debug",decisionCode:N,exitStatus:null!=(P=U.status)?P:void 0,stdin:a.stdin,stdout:U.stdout.slice(0,R)||void 0,stderr:U.stderr.slice(0,R)||void 0,timeSeconds:U.timeSeconds,memoryBytes:U.memoryBytes,outputFiles:B.length>0?B:void 0});case 16:return e.a(2)}},e,null,[[11,13],[6,9]])}))).apply(this,arguments)}export{k as stdioDebugPreset,S as stdioJudgePreset};
2
- //# sourceMappingURL=stdio.js.map
1
+ import{parseArgs as e}from"../helpers/parseArgs.js";import{printTestCaseResult as t}from"../helpers/printTestCaseResult.js";import{DecisionCode as n}from"../types/decisionCode.js";import{cleanWorkingDirectory as r,snapshotWorkingDirectory as i}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as a}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as o}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as s}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as c}from"../helpers/judgeByStaticAnalysis.js";import{readOutputFiles as l}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as u}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as d}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as f}from"../helpers/spawnSyncWithTimeout.js";import{compareStdoutAsSpaceSeparatedTokens as p}from"../helpers/compareStdoutAsSpaceSeparatedTokens.js";import{z as m}from"zod";import h from"node:path";import g from"node:fs";const _=5e4,v=m.object({language:m.union([m.string(),m.array(m.string())]).optional()}),y=v.extend({stdin:m.string().optional()});async function b(m){let y=e(process.argv);if(!y.cwd)throw Error(`cwd argument required`);let b=v.parse(y.params),x=await u(m),S=await d(h.join(m,`test_cases`)),C=await c(y.cwd,x);if(C){t({testCaseId:S[0]?.id??`prebuild`,...C});return}let w=await o(y.cwd,b.language);if(!w){t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${b.language?`: language: ${b.language}`:``}`});return}let T=s(w);if(!T){t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.WRONG_ANSWER,stderr:`unsupported language`});return}let E={...process.env,CI:``,FORCE_COLOR:`0`},D;if(T.prebuild)try{await T.prebuild(y.cwd),D=await o(y.cwd,b.language)}catch(e){console.error(`prebuild error`,e),t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let O=D??w;if(T.buildCommand)try{let e=T.buildCommand(O),r=f(e[0],e.slice(1),{cwd:y.cwd,encoding:`utf8`,env:E},10),i=n.ACCEPTED;if(r.status===0?r.timeSeconds>10?i=n.BUILD_TIME_LIMIT_EXCEEDED:(r.stdout.length>_||r.stderr.length>_)&&(i=n.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):i=n.BUILD_ERROR,i!==n.ACCEPTED){t({testCaseId:S[0]?.id??`build`,decisionCode:i,exitStatus:r.status??void 0,stdout:r.stdout.slice(0,_)||void 0,stderr:r.stderr.slice(0,_)||void 0,timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes});return}}catch(e){console.error(`build error`,e),t({testCaseId:S[0]?.id??`build`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let k=await i(y.cwd);S.length===0&&t({testCaseId:`default`,decisionCode:n.ACCEPTED});for(let e of S){S.shared?.fileInputPath&&await a(S.shared.fileInputPath,y.cwd),e.fileInputPath&&await a(e.fileInputPath,y.cwd);let i=typeof x.timeLimitMs==`number`?x.timeLimitMs/1e3:2,o=T.command(O),s=f(o[0],o.slice(1),{cwd:y.cwd,encoding:`utf8`,input:e.input,env:E},i),c=await l(y.cwd,x.requiredOutputFilePaths??[]),u=n.ACCEPTED;if(s.status!==0)u=n.RUNTIME_ERROR;else if(s.timeSeconds>i)u=n.TIME_LIMIT_EXCEEDED;else if(s.memoryBytes>(x.memoryLimitByte??1/0))u=n.MEMORY_LIMIT_EXCEEDED;else if(s.stdout.length>_||s.stderr.length>_)u=n.OUTPUT_SIZE_LIMIT_EXCEEDED;else if(c.length<(x.requiredOutputFilePaths?.length??0))u=n.MISSING_REQUIRED_OUTPUT_FILE_ERROR;else if(!p(s.stdout,e.output??``))u=n.WRONG_ANSWER;else if(e.fileOutputPath){let t=await g.promises.readdir(e.fileOutputPath,{withFileTypes:!0,recursive:!0});for(let r of t){if(!r.isFile())continue;let t=h.relative(e.fileOutputPath,r.parentPath),i=await g.promises.readFile(h.join(r.parentPath,r.name));try{(await g.promises.readFile(h.join(y.cwd,t,r.name))).compare(i)!==0&&(u=n.WRONG_ANSWER)}catch(e){console.error(e),u=n.WRONG_ANSWER}}}if(t({testCaseId:e.id,decisionCode:u,exitStatus:s.status??void 0,stdin:e.input,stdout:s.stdout.slice(0,_)||void 0,stderr:s.stderr.slice(0,_)||void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes,outputFiles:c.length>0?c:void 0}),await r(y.cwd,k),u!==n.ACCEPTED)break}}async function x(r){let i=e(process.argv);if(!i.cwd)throw Error(`cwd argument required`);let a=y.parse(i.params),c=await u(r),d=await o(i.cwd,a.language);if(!d){t({testCaseId:`prebuild`,decisionCode:n.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${a.language?`: language: ${a.language}`:``}`});return}let p=s(d);if(!p){t({testCaseId:`prebuild`,decisionCode:n.WRONG_ANSWER,stderr:`unsupported language`});return}let m={...process.env,CI:``,FORCE_COLOR:`0`},h;if(p.prebuild)try{await p.prebuild(i.cwd),h=await o(i.cwd,a.language)}catch(e){console.error(`prebuild error`,e),t({testCaseId:`prebuild`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let g=h??d;if(p.buildCommand)try{let e=p.buildCommand(g),r=f(e[0],e.slice(1),{cwd:i.cwd,encoding:`utf8`,env:m},10),a=n.ACCEPTED;if(r.status===0?r.timeSeconds>10?a=n.BUILD_TIME_LIMIT_EXCEEDED:(r.stdout.length>_||r.stderr.length>_)&&(a=n.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):a=n.BUILD_ERROR,a!==n.ACCEPTED){t({testCaseId:`build`,decisionCode:a,exitStatus:r.status??void 0,stdout:r.stdout.slice(0,_)||void 0,stderr:r.stderr.slice(0,_)||void 0,timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes});return}}catch(e){console.error(`build error`,e),t({testCaseId:`build`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}{let e=Math.max(10,(c.timeLimitMs??0)/1e3),r=p.command(g),o=f(r[0],r.slice(1),{cwd:i.cwd,encoding:`utf8`,input:a.stdin,env:m},e),s=await l(i.cwd,c.requiredOutputFilePaths??[]),u=n.ACCEPTED;o.status===0?o.timeSeconds>e?u=n.TIME_LIMIT_EXCEEDED:o.memoryBytes>(c.memoryLimitByte??1/0)?u=n.MEMORY_LIMIT_EXCEEDED:o.stdout.length>_||o.stderr.length>_?u=n.OUTPUT_SIZE_LIMIT_EXCEEDED:s.length<(c.requiredOutputFilePaths?.length??0)&&(u=n.MISSING_REQUIRED_OUTPUT_FILE_ERROR):u=n.RUNTIME_ERROR,t({testCaseId:`debug`,decisionCode:u,exitStatus:o.status??void 0,stdin:a.stdin,stdout:o.stdout.slice(0,_)||void 0,stderr:o.stderr.slice(0,_)||void 0,timeSeconds:o.timeSeconds,memoryBytes:o.memoryBytes,outputFiles:s.length>0?s:void 0})}}export{x as stdioDebugPreset,b as stdioJudgePreset};
2
+ //# sourceMappingURL=stdio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.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 } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\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: testCases[0]?.id ?? 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\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 }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\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: 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"names":["MAX_STDOUT_LENGTH","judgeParamsSchema","z","object","language","union","string","array","optional","debugParamsSchema","extend","stdin","stdioJudgePreset","_x","_stdioJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","args","params","problemMarkdownFrontMatter","testCases","staticAnalysisTestCaseResult","_testCases$0$id","_testCases$","originalMainFilePath","_testCases$0$id2","_testCases$2","languageDefinition","_testCases$0$id3","_testCases$3","env","prebuiltMainFilePath","_testCases$0$id4","_testCases$4","mainFilePath","buildCommand","buildSpawnResult","decisionCode","_testCases$0$id5","_testCases$5","_buildSpawnResult$sta","_testCases$0$id6","_testCases$6","cwdSnapshot","_iterator","_step","_testCases$shared","_problemMarkdownFront","_problemMarkdownFront2","_problemMarkdownFront3","_problemMarkdownFront4","_testCase$output","_spawnResult$status","testCase","timeoutSeconds","command","spawnResult","outputFiles","_decisionCode","dirents","_iterator2","_step2","dirent","direntRelativePath","expected","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","id","a","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","console","error","BUILD_ERROR","message","String","spawnSyncWithTimeout","slice","encoding","ACCEPTED","status","timeSeconds","BUILD_TIME_LIMIT_EXCEEDED","stdout","length","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","exitStatus","undefined","memoryBytes","snapshotWorkingDirectory","_createForOfIteratorHelper","s","done","value","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","readOutputFiles","requiredOutputFilePaths","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","memoryLimitByte","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_OUTPUT_FILE_ERROR","compareStdoutAsSpaceSeparatedTokens","output","fileOutputPath","fs","promises","readdir","withFileTypes","recursive","isFile","relative","parentPath","readFile","name","compare","e","f","cleanWorkingDirectory","stdioDebugPreset","_x2","_stdioDebugPreset","_callee2","_buildSpawnResult$sta2","_problemMarkdownFront5","_problemMarkdownFront6","_problemMarkdownFront7","_problemMarkdownFront8","_problemMarkdownFront9","_spawnResult$status2","_decisionCode2","_t6","_t7","_context2","Math","max"],"mappings":"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"}
1
+ {"version":3,"file":"stdio.js","names":[],"sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.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 } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\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: testCases[0]?.id ?? 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\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 }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\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: 'prebuild',\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 prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"mappings":"0iCAmBA,MAIM,EAAoB,IAEpB,EAAoB,EAAE,OAAO,CACjC,SAAU,EAAE,MAAM,CAAC,EAAE,OAAO,EAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC,EAEK,EAAoB,EAAkB,OAAO,CACjD,MAAO,EAAE,OAAO,CAAC,CAAC,SAAS,CAC7B,CAAC,EAuBD,eAAsB,EAAiB,EAAmC,CACxE,IAAM,EAAO,EAAU,QAAQ,IAAI,EACnC,GAAI,CAAC,EAAK,IAAK,MAAU,MAAM,uBAAuB,EACtD,IAAM,EAAS,EAAkB,MAAM,EAAK,MAAM,EAE5C,EAA6B,MAAM,EAA+B,CAAU,EAC5E,EAAY,MAAM,EAAc,EAAK,KAAK,EAAY,YAAY,CAAC,EAEnE,EAA+B,MAAM,EAAsB,EAAK,IAAK,CAA0B,EACrG,GAAI,EAA8B,CAChC,EAAoB,CAAE,WAAY,EAAU,EAAE,EAAE,IAAM,WAAY,GAAG,CAA6B,CAAC,EACnG,MACF,CAEA,IAAM,EAAuB,MAAM,EAAmB,EAAK,IAAK,EAAO,QAAQ,EAC/E,GAAI,CAAC,EAAsB,CACzB,EAAoB,CAClB,WAAY,EAAU,EAAE,EAAE,IAAM,WAChC,aAAc,EAAa,uCAC3B,OAAQ,sBAAsB,EAAO,SAAW,eAAe,EAAO,WAAa,IACrF,CAAC,EACD,MACF,CAEA,IAAM,EAAqB,EAA6B,CAAoB,EAC5E,GAAI,CAAC,EAAoB,CACvB,EAAoB,CAClB,WAAY,EAAU,EAAE,EAAE,IAAM,WAChC,aAAc,EAAa,aAC3B,OAAQ,sBACV,CAAC,EACD,MACF,CAGA,IAAM,EAAM,CAAE,GAAG,QAAQ,IAAK,GAAI,GAAI,YAAa,GAAI,EAEnD,EAEJ,GAAI,EAAmB,SACrB,GAAI,CACF,MAAM,EAAmB,SAAS,EAAK,GAAG,EAC1C,EAAuB,MAAM,EAAmB,EAAK,IAAK,EAAO,QAAQ,CAC3E,OAAS,EAAO,CACd,QAAQ,MAAM,iBAAkB,CAAK,EAErC,EAAoB,CAClB,WAAY,EAAU,EAAE,EAAE,IAAM,WAChC,aAAc,EAAa,YAC3B,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC/D,CAAC,EACD,MACF,CAGF,IAAM,EAAe,GAAwB,EAE7C,GAAI,EAAmB,aACrB,GAAI,CACF,IAAM,EAAe,EAAmB,aAAa,CAAY,EAE3D,EAAmB,EACvB,EAAa,GACb,EAAa,MAAM,CAAC,EACpB,CAAE,IAAK,EAAK,IAAK,SAAU,OAAQ,KAAI,EACvC,EACF,EAEI,EAA6B,EAAa,SAa9C,GAXI,EAAiB,SAAW,EAErB,EAAiB,YAAc,GACxC,EAAe,EAAa,2BAE5B,EAAiB,OAAO,OAAS,GACjC,EAAiB,OAAO,OAAS,KAEjC,EAAe,EAAa,kCAP5B,EAAe,EAAa,YAU1B,IAAiB,EAAa,SAAU,CAC1C,EAAoB,CAClB,WAAY,EAAU,EAAE,EAAE,IAAM,QAChC,eACA,WAAY,EAAiB,QAAU,IAAA,GACvC,OAAQ,EAAiB,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC/D,OAAQ,EAAiB,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC/D,YAAa,EAAiB,YAC9B,YAAa,EAAiB,WAChC,CAAC,EACD,MACF,CACF,OAAS,EAAO,CACd,QAAQ,MAAM,cAAe,CAAK,EAElC,EAAoB,CAClB,WAAY,EAAU,EAAE,EAAE,IAAM,QAChC,aAAc,EAAa,YAC3B,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC/D,CAAC,EACD,MACF,CAGF,IAAM,EAAc,MAAM,EAAyB,EAAK,GAAG,EAEvD,EAAU,SAAW,GACvB,EAAoB,CAAE,WAAY,UAAW,aAAc,EAAa,QAAS,CAAC,EAGpF,IAAK,IAAM,KAAY,EAAW,CAE5B,EAAU,QAAQ,eAAe,MAAM,EAAsB,EAAU,OAAO,cAAe,EAAK,GAAG,EACrG,EAAS,eAAe,MAAM,EAAsB,EAAS,cAAe,EAAK,GAAG,EAGxF,IAAM,EACJ,OAAO,EAA2B,aAAgB,SAC9C,EAA2B,YAAc,IACzC,EAEA,EAAU,EAAmB,QAAQ,CAAY,EAEjD,EAAc,EAClB,EAAQ,GACR,EAAQ,MAAM,CAAC,EACf,CAAE,IAAK,EAAK,IAAK,SAAU,OAAQ,MAAO,EAAS,MAAO,KAAI,EAC9D,CACF,EAEM,EAAc,MAAM,EAAgB,EAAK,IAAK,EAA2B,yBAA2B,CAAC,CAAC,EAGxG,EAA6B,EAAa,SAE9C,GAAI,EAAY,SAAW,EACzB,EAAe,EAAa,mBACvB,GAAI,EAAY,YAAc,EACnC,EAAe,EAAa,yBACvB,GAAI,EAAY,aAAe,EAA2B,iBAAmB,KAClF,EAAe,EAAa,2BACvB,GAAI,EAAY,OAAO,OAAS,GAAqB,EAAY,OAAO,OAAS,EACtF,EAAe,EAAa,gCACvB,GAAI,EAAY,QAAU,EAA2B,yBAAyB,QAAU,GAC7F,EAAe,EAAa,wCACvB,GAAI,CAAC,EAAoC,EAAY,OAAQ,EAAS,QAAU,EAAE,EACvF,EAAe,EAAa,kBACvB,GAAI,EAAS,eAAgB,CAClC,IAAM,EAAU,MAAM,EAAG,SAAS,QAAQ,EAAS,eAAgB,CAAE,cAAe,GAAM,UAAW,EAAK,CAAC,EAC3G,IAAK,IAAM,KAAU,EAAS,CAC5B,GAAI,CAAC,EAAO,OAAO,EAAG,SACtB,IAAM,EAAqB,EAAK,SAAS,EAAS,eAAgB,EAAO,UAAU,EAC7E,EAAW,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACrF,GAAI,EAEE,MADmB,EAAG,SAAS,SAAS,EAAK,KAAK,EAAK,IAAK,EAAoB,EAAO,IAAI,CAAC,EAAA,CACnF,QAAQ,CAAQ,IAAM,IAAG,EAAe,EAAa,aACpE,OAAS,EAAO,CACd,QAAQ,MAAM,CAAK,EACnB,EAAe,EAAa,YAC9B,CACF,CACF,CAiBA,GAfA,EAAoB,CAClB,WAAY,EAAS,GACrB,eACA,WAAY,EAAY,QAAU,IAAA,GAClC,MAAO,EAAS,MAChB,OAAQ,EAAY,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC1D,OAAQ,EAAY,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC1D,YAAa,EAAY,YACzB,YAAa,EAAY,YACzB,YAAa,EAAY,OAAS,EAAI,EAAc,IAAA,EACtD,CAAC,EAGD,MAAM,EAAsB,EAAK,IAAK,CAAW,EAE7C,IAAiB,EAAa,SAAU,KAC9C,CACF,CAkBA,eAAsB,EAAiB,EAAmC,CACxE,IAAM,EAAO,EAAU,QAAQ,IAAI,EACnC,GAAI,CAAC,EAAK,IAAK,MAAU,MAAM,uBAAuB,EACtD,IAAM,EAAS,EAAkB,MAAM,EAAK,MAAM,EAE5C,EAA6B,MAAM,EAA+B,CAAU,EAE5E,EAAuB,MAAM,EAAmB,EAAK,IAAK,EAAO,QAAQ,EAC/E,GAAI,CAAC,EAAsB,CACzB,EAAoB,CAClB,WAAY,WACZ,aAAc,EAAa,uCAC3B,OAAQ,sBAAsB,EAAO,SAAW,eAAe,EAAO,WAAa,IACrF,CAAC,EACD,MACF,CAEA,IAAM,EAAqB,EAA6B,CAAoB,EAC5E,GAAI,CAAC,EAAoB,CACvB,EAAoB,CAClB,WAAY,WACZ,aAAc,EAAa,aAC3B,OAAQ,sBACV,CAAC,EACD,MACF,CAGA,IAAM,EAAM,CAAE,GAAG,QAAQ,IAAK,GAAI,GAAI,YAAa,GAAI,EAEnD,EAEJ,GAAI,EAAmB,SACrB,GAAI,CACF,MAAM,EAAmB,SAAS,EAAK,GAAG,EAC1C,EAAuB,MAAM,EAAmB,EAAK,IAAK,EAAO,QAAQ,CAC3E,OAAS,EAAO,CACd,QAAQ,MAAM,iBAAkB,CAAK,EAErC,EAAoB,CAClB,WAAY,WACZ,aAAc,EAAa,YAC3B,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC/D,CAAC,EACD,MACF,CAGF,IAAM,EAAe,GAAwB,EAE7C,GAAI,EAAmB,aACrB,GAAI,CACF,IAAM,EAAe,EAAmB,aAAa,CAAY,EAE3D,EAAmB,EACvB,EAAa,GACb,EAAa,MAAM,CAAC,EACpB,CAAE,IAAK,EAAK,IAAK,SAAU,OAAQ,KAAI,EACvC,EACF,EAEI,EAA6B,EAAa,SAa9C,GAXI,EAAiB,SAAW,EAErB,EAAiB,YAAc,GACxC,EAAe,EAAa,2BAE5B,EAAiB,OAAO,OAAS,GACjC,EAAiB,OAAO,OAAS,KAEjC,EAAe,EAAa,kCAP5B,EAAe,EAAa,YAU1B,IAAiB,EAAa,SAAU,CAC1C,EAAoB,CAClB,WAAY,QACZ,eACA,WAAY,EAAiB,QAAU,IAAA,GACvC,OAAQ,EAAiB,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC/D,OAAQ,EAAiB,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC/D,YAAa,EAAiB,YAC9B,YAAa,EAAiB,WAChC,CAAC,EACD,MACF,CACF,OAAS,EAAO,CACd,QAAQ,MAAM,cAAe,CAAK,EAElC,EAAoB,CAClB,WAAY,QACZ,aAAc,EAAa,YAC3B,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC/D,CAAC,EACD,MACF,CAGF,CACE,IAAM,EAAiB,KAAK,IAC1B,IACC,EAA2B,aAAe,GAAK,GAClD,EAEM,EAAU,EAAmB,QAAQ,CAAY,EAEjD,EAAc,EAClB,EAAQ,GACR,EAAQ,MAAM,CAAC,EACf,CAAE,IAAK,EAAK,IAAK,SAAU,OAAQ,MAAO,EAAO,MAAO,KAAI,EAC5D,CACF,EAEM,EAAc,MAAM,EAAgB,EAAK,IAAK,EAA2B,yBAA2B,CAAC,CAAC,EAExG,EAA6B,EAAa,SAE1C,EAAY,SAAW,EAEhB,EAAY,YAAc,EACnC,EAAe,EAAa,oBACnB,EAAY,aAAe,EAA2B,iBAAmB,KAClF,EAAe,EAAa,sBACnB,EAAY,OAAO,OAAS,GAAqB,EAAY,OAAO,OAAS,EACtF,EAAe,EAAa,2BACnB,EAAY,QAAU,EAA2B,yBAAyB,QAAU,KAC7F,EAAe,EAAa,oCAR5B,EAAe,EAAa,cAW9B,EAAoB,CAClB,WAAY,QACZ,eACA,WAAY,EAAY,QAAU,IAAA,GAClC,MAAO,EAAO,MACd,OAAQ,EAAY,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC1D,OAAQ,EAAY,OAAO,MAAM,EAAG,CAAiB,GAAK,IAAA,GAC1D,YAAa,EAAY,YACzB,YAAa,EAAY,YACzB,YAAa,EAAY,OAAS,EAAI,EAAc,IAAA,EACtD,CAAC,CACH,CACF"}
@@ -1,2 +1,2 @@
1
- "use strict";exports.DecisionCode={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};
2
- //# sourceMappingURL=decisionCode.cjs.map
1
+ "use strict";const e={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};exports.DecisionCode=e;
2
+ //# sourceMappingURL=decisionCode.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"decisionCode.cjs","sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"names":["WAITING_JUDGE","JUDGE_NOT_AVAILABLE","WRONG_ANSWER","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","PRESENTATION_ERROR","FORBIDDEN_PATTERNS_IN_CODE_ERROR","REQUIRED_PATTERNS_IN_CODE_ERROR","BUILD_ERROR","BUILD_TIME_LIMIT_EXCEEDED","BUILD_MEMORY_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","MISSING_REQUIRED_OUTPUT_FILE_ERROR","ACCEPTED"],"mappings":"kCAA4B,CAE1BA,cAAe,EAGfC,oBAAqB,EAGrBC,aAAc,IAGdC,cAAe,KAGfC,oBAAqB,KAGrBC,sBAAuB,KAGvBC,2BAA4B,KAG5BC,mBAAoB,KAGpBC,iCAAkC,KAGlCC,gCAAiC,KAGjCC,YAAa,KAGbC,0BAA2B,KAG3BC,4BAA6B,KAG7BC,iCAAkC,KAGlCC,uCAAwC,KAGxCC,mCAAoC,KAOpCC,SAAU"}
1
+ {"version":3,"file":"decisionCode.cjs","names":[],"sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"mappings":"aAAA,MAAa,EAAe,CAE1B,cAAe,EAGf,oBAAqB,EAGrB,aAAc,IAGd,cAAe,KAGf,oBAAqB,KAGrB,sBAAuB,KAGvB,2BAA4B,KAG5B,mBAAoB,KAGpB,iCAAkC,KAGlC,gCAAiC,KAGjC,YAAa,KAGb,0BAA2B,KAG3B,4BAA6B,KAG7B,iCAAkC,KAGlC,uCAAwC,KAGxC,mCAAoC,KAOpC,SAAU,GACZ"}
@@ -1,2 +1,2 @@
1
- var E={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};export{E as DecisionCode};
2
- //# sourceMappingURL=decisionCode.js.map
1
+ const e={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};export{e as DecisionCode};
2
+ //# sourceMappingURL=decisionCode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decisionCode.js","sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"names":["DecisionCode","WAITING_JUDGE","JUDGE_NOT_AVAILABLE","WRONG_ANSWER","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","PRESENTATION_ERROR","FORBIDDEN_PATTERNS_IN_CODE_ERROR","REQUIRED_PATTERNS_IN_CODE_ERROR","BUILD_ERROR","BUILD_TIME_LIMIT_EXCEEDED","BUILD_MEMORY_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","MISSING_REQUIRED_OUTPUT_FILE_ERROR","ACCEPTED"],"mappings":"AAAO,IAAMA,EAAe,CAE1BC,cAAe,EAGfC,oBAAqB,EAGrBC,aAAc,IAGdC,cAAe,KAGfC,oBAAqB,KAGrBC,sBAAuB,KAGvBC,2BAA4B,KAG5BC,mBAAoB,KAGpBC,iCAAkC,KAGlCC,gCAAiC,KAGjCC,YAAa,KAGbC,0BAA2B,KAG3BC,4BAA6B,KAG7BC,iCAAkC,KAGlCC,uCAAwC,KAGxCC,mCAAoC,KAOpCC,SAAU"}
1
+ {"version":3,"file":"decisionCode.js","names":[],"sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"mappings":"AAAA,MAAa,EAAe,CAE1B,cAAe,EAGf,oBAAqB,EAGrB,aAAc,IAGd,cAAe,KAGf,oBAAqB,KAGrB,sBAAuB,KAGvB,2BAA4B,KAG5B,mBAAoB,KAGpB,iCAAkC,KAGlC,gCAAiC,KAGjC,YAAa,KAGb,0BAA2B,KAG3B,4BAA6B,KAG7B,iCAAkC,KAGlC,uCAAwC,KAGxC,mCAAoC,KAOpC,SAAU,GACZ"}
@@ -1,2 +1,11 @@
1
- "use strict";var n,e,o=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),t=require("node:path"),s=require("../helpers/removeCommentsInSourceCode.cjs"),i={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},c={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},a={c:{fileExtensions:[".c"],buildCommand:function(n){return["gcc","--std=c17","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:i},cpp:{fileExtensions:[".cpp"],buildCommand:function(n){return["g++","--std=c++20","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:i},csharp:{fileExtensions:[".cs"],prebuild:(e=o.asyncToGenerator(o.regenerator().m(function n(e){return o.regenerator().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,r.promises.writeFile(t.join(e,"Main.csproj"),'<Project Sdk="Microsoft.NET.Sdk">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>');case 1:return n.a(2)}},n)})),function(n){return e.apply(this,arguments)}),buildCommand:function(){return["dotnet","build","Main.csproj","--configuration","Release","--verbosity","quiet"]},command:function(){return["dotnet","bin/Release/net8.0/Main.dll"]},grammer:i},css:{fileExtensions:[".css"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[".dart"],buildCommand:function(n){return["dart","compile","exe",n,"-o","main"]},command:function(){return["./main"]},grammer:i},java:{fileExtensions:[".java"],prebuild:(n=o.asyncToGenerator(o.regenerator().m(function n(e){var c,a,m,u,l,p,f,d,g,b,x;return o.regenerator().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=/\bpublic\s+class\s+(\w+)\b/,b=o.createForOfIteratorHelper,n.n=1,r.promises.readdir(e,{withFileTypes:!0});case 1:a=b(n.v),n.p=2,a.s();case 3:if((m=a.n()).done){n.n=7;break}if((l=m.value).isFile()&&l.name.endsWith(".java")){n.n=4;break}return n.a(3,6);case 4:return n.n=5,r.promises.readFile(t.join(e,l.name),"utf8");case 5:if(p=n.v,f=null!=(u=c.exec(s.removeCommentsInSourceCode(i,p)))?u:[],d=o.slicedToArray(f,2),!(g=d[1])){n.n=6;break}return n.n=6,r.promises.rename(t.join(e,l.name),t.join(e,"".concat(g,".java")));case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,x=n.v,a.e(x);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])})),function(e){return n.apply(this,arguments)}),buildCommand:function(n){return["javac",n]},command:function(n){return["java","-Xmx1024m",n.replace(/\.java$/,"")]},grammer:i},javascript:{fileExtensions:[".js",".cjs",".mjs"],command:function(n){return["bun",n]},grammer:c},jsp:{fileExtensions:[".jsp"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[".hs"],buildCommand:function(n){return["ghc","-o","main",n]},command:function(){return["./main"]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[".html"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[".php"],command:function(n){return["php",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[".py"],command:function(n){return["python3",n]},grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[".rb"],buildCommand:function(n){return["ruby","-c",n]},command:function(n){return["ruby","--jit",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[".rs"],buildCommand:function(n){return["rustc",n,"-o","main"]},command:function(){return["./main"]},grammer:i},zig:{fileExtensions:[".zig"],buildCommand:function(n){return["zig","build-exe",n]},command:function(n){return["./"+n.replace(/\.zig$/,"")]},grammer:i},typescript:{fileExtensions:[".ts",".cts",".mts"],command:function(n){return["bun",n]},grammer:c},text:{fileExtensions:[".txt"],command:function(n){return["cat",n]}}};exports.languageIdToDefinition=a;
2
- //# sourceMappingURL=language.cjs.map
1
+ "use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/removeCommentsInSourceCode.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);const i={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},a={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},o={c:{fileExtensions:[`.c`],buildCommand:e=>[`gcc`,`--std=c17`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},cpp:{fileExtensions:[`.cpp`],buildCommand:e=>[`g++`,`--std=c++20`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},csharp:{fileExtensions:[`.cs`],prebuild:async e=>{await r.default.promises.writeFile(n.default.join(e,`Main.csproj`),`<Project Sdk="Microsoft.NET.Sdk">
2
+ <PropertyGroup>
3
+ <OutputType>Exe</OutputType>
4
+ <TargetFramework>net8.0</TargetFramework>
5
+ <ImplicitUsings>enable</ImplicitUsings>
6
+ <Nullable>enable</Nullable>
7
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
8
+ <AssemblyName>Main</AssemblyName>
9
+ </PropertyGroup>
10
+ </Project>`)},buildCommand:()=>[`dotnet`,`build`,`Main.csproj`,`--configuration`,`Release`,`--verbosity`,`quiet`],command:()=>[`dotnet`,`bin/Release/net8.0/Main.dll`],grammer:i},css:{fileExtensions:[`.css`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[`.dart`],buildCommand:e=>[`dart`,`compile`,`exe`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},java:{fileExtensions:[`.java`],prebuild:async e=>{let a=/\bpublic\s+class\s+(\w+)\b/;for(let o of await r.default.promises.readdir(e,{withFileTypes:!0})){if(!o.isFile()||!o.name.endsWith(`.java`))continue;let s=await r.default.promises.readFile(n.default.join(e,o.name),`utf8`),[,c]=a.exec(t.removeCommentsInSourceCode(i,s))??[];c&&await r.default.promises.rename(n.default.join(e,o.name),n.default.join(e,`${c}.java`))}},buildCommand:e=>[`javac`,e],command:e=>[`java`,`-Xmx1024m`,e.replace(/\.java$/,``)],grammer:i},javascript:{fileExtensions:[`.js`,`.cjs`,`.mjs`],command:e=>[`bun`,e],grammer:a},jsp:{fileExtensions:[`.jsp`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[`.hs`],buildCommand:e=>[`ghc`,`-o`,`main`,e],command:()=>[`./main`],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[`.html`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[`.php`],command:e=>[`php`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[`.py`],command:e=>[`python3`,e],grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[`.rb`],buildCommand:e=>[`ruby`,`-c`,e],command:e=>[`ruby`,`--jit`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[`.rs`],buildCommand:e=>[`rustc`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},zig:{fileExtensions:[`.zig`],buildCommand:e=>[`zig`,`build-exe`,e],command:e=>[`./`+e.replace(/\.zig$/,``)],grammer:i},typescript:{fileExtensions:[`.ts`,`.cts`,`.mts`],command:e=>[`bun`,e],grammer:a},text:{fileExtensions:[`.txt`],command:e=>[`cat`,e]}};exports.languageIdToDefinition=o;
11
+ //# sourceMappingURL=language.cjs.map