@exercode/problem-utils 1.5.3 → 1.5.5
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.
- package/dist/helpers/judgeByStaticAnalysis.cjs +1 -1
- package/dist/helpers/judgeByStaticAnalysis.cjs.map +1 -1
- package/dist/helpers/judgeByStaticAnalysis.d.ts +1 -1
- package/dist/helpers/judgeByStaticAnalysis.js +1 -1
- package/dist/helpers/judgeByStaticAnalysis.js.map +1 -1
- package/dist/presets/stdio.cjs +1 -1
- package/dist/presets/stdio.cjs.map +1 -1
- package/dist/presets/stdio.js +1 -1
- package/dist/presets/stdio.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),
|
|
1
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:fs"),r=require("node:path"),a=require("../types/decisionCode.cjs"),t=require("./findLanguageDefinitionByPath.cjs"),c=require("./removeCommentsInSourceCode.cjs");function o(){return(o=e.asyncToGenerator(e.regenerator().m(function o(i,s){var u,f,d,p,l,h,b,m,k,g,I,R,v,E,C,S,_,y,O,F,w,D,j,q,P,x,N,T,B,H,M,A,L,U,G,Q,V;return e.regenerator().w(function(o){for(;;)switch(o.p=o.n){case 0:return f=new Set,d=[],U=e.createForOfIteratorHelper,o.n=1,n.promises.readdir(i,{withFileTypes:!0,recursive:!0});case 1:p=U(o.v),o.p=2,p.s();case 3:if((l=p.n()).done){o.n=9;break}if((h=l.value).isFile()){o.n=4;break}return o.a(3,8);case 4:return b=r.relative(i,r.join(h.parentPath,h.name)),f.add(b),o.n=5,n.promises.readFile(r.join(h.parentPath,h.name),"utf8");case 5:if(m=o.v,!m.includes("�")){o.n=6;break}return o.a(3,8);case 6:if(k=t.findLanguageDefinitionByPath(h.name)){o.n=7;break}return o.a(3,8);case 7:d.push({path:h.name,data:k.grammer?c.removeCommentsInSourceCode(k.grammer,m):m});case 8:o.n=3;break;case 9:o.n=11;break;case 10:o.p=10,G=o.v,p.e(G);case 11:return o.p=11,p.f(),o.f(11);case 12:if(!s.requiredSubmissionFilePaths){o.n=13;break}if(g=s.requiredSubmissionFilePaths.filter(function(e){return!f.has(e)}).toSorted(),!(g.length>0)){o.n=13;break}return o.a(2,{decisionCode:a.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:"ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n".concat(g.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 13:I=[],R=0,v=d;case 14:if(!(R<v.length)){o.n=24;break}S=v[R],_=e.createForOfIteratorHelper(null!=(E=s.forbiddenRegExpsInCode)?E:[]);try{for(_.s();!(y=_.n()).done;){O=y.value,F=new RegExp(O,"g"),w=S.data.matchAll(F),D=e.createForOfIteratorHelper(w);try{for(D.s();!(j=D.n()).done;)q=j.value,I.push({pattern:F.toString(),path:S.path,match:q[0]})}catch(e){D.e(e)}finally{D.f()}}}catch(e){_.e(e)}finally{_.f()}P=e.createForOfIteratorHelper(null!=(C=s.forbiddenTextsInCode)?C:[]),o.p=15,P.s();case 16:if((x=P.n()).done){o.n=20;break}N=x.value,T=0;case 17:if(!(T<S.data.length)){o.n=19;break}if(-1!==(B=S.data.indexOf(N,T))){o.n=18;break}return o.a(3,19);case 18:I.push({pattern:N,path:S.path,match:N}),T=B+N.length,o.n=17;break;case 19:o.n=16;break;case 20:o.n=22;break;case 21:o.p=21,Q=o.v,P.e(Q);case 22:return o.p=22,P.f(),o.f(22);case 23:R++,o.n=14;break;case 24:if(!(I.length>0)){o.n=25;break}return o.a(2,{decisionCode:a.DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n".concat(I.map(function(e){return"| `".concat(e.path,"` | `").concat(e.pattern,"` | `").concat(e.match,"` |")}).join("\n"),"\n")});case 25:H=[],M=e.createForOfIteratorHelper(null!=(u=s.requiredRegExpsInCode)?u:[]),o.p=26,L=e.regenerator().m(function n(){var r,a;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:r=A.value,a=new RegExp(r),d.some(function(e){return a.test(e.data)})||H.push(a.toString());case 1:return e.a(2)}},n)}),M.s();case 27:if((A=M.n()).done){o.n=29;break}return o.d(e.regeneratorValues(L()),28);case 28:o.n=27;break;case 29:o.n=31;break;case 30:o.p=30,V=o.v,M.e(V);case 31:return o.p=31,M.f(),o.f(31);case 32:if(!(H.length>0)){o.n=33;break}return o.a(2,{decisionCode:a.DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n".concat(H.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 33:return o.a(2)}},o,null,[[26,30,31,32],[15,21,22,23],[2,10,11,12]])}))).apply(this,arguments)}exports.judgeByStaticAnalysis=function(e,n){return o.apply(this,arguments)};
|
|
2
2
|
//# sourceMappingURL=judgeByStaticAnalysis.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judgeByStaticAnalysis.cjs","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["_judgeByStaticAnalysis","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","text","languageDefinition","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","readFile","path","join","parentPath","name","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","length","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","decisionCode","DecisionCode","FORBIDDEN_PATTERNS_IN_CODE_ERROR","feedbackMarkdown","concat","map","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR","apply","this","arguments","_x","_x2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"judgeByStaticAnalysis.cjs","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["_judgeByStaticAnalysis","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","filePathSet","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","relativePath","text","languageDefinition","missingFilePaths","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","Set","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","path","relative","join","parentPath","name","add","readFile","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","requiredSubmissionFilePaths","filter","has","toSorted","length","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","feedbackMarkdown","concat","map","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","FORBIDDEN_PATTERNS_IN_CODE_ERROR","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR","apply","this","arguments","_x","_x2"],"mappings":"yPA4GC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAlGM,SAAAC,EACLC,EACAC,GAGC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAzC,gBAAA0C,EAAA,SAAAC,GAAA,cAAAA,EAAAX,EAAAW,EAAAC,GAAA,KAAA,EAGyE,OADpEtC,EAAc,IAAIuC,IAClBtC,EAAkE,GAAE+B,EAAAQ,EAAAA,0BAAAH,EAAAC,EAAA,EAE/CG,EAAGC,SAASC,QAAQ9C,EAAK,CAAE+C,eAAe,EAAMC,WAAW,IAAO,KAAA,EAAA3C,EAAA8B,EAAAK,EAAAS,GAAAT,EAAAX,EAAA,EAAAxB,EAAA6C,IAAA,KAAA,EAAA,IAAA5C,EAAAD,EAAAoC,KAAAU,KAAA,CAAAX,EAAAC,EAAA,EAAA,KAAA,CAA5E,IAANlC,EAAMD,EAAA8C,OACHC,SAAQ,CAAAb,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAGU,OADxB9C,EAAe+C,EAAKC,SAASxD,EAAKuD,EAAKE,KAAKlD,EAAOmD,WAAYnD,EAAOoD,OAC5ExD,EAAYyD,IAAIpD,GAAcgC,EAAAC,EAAA,EAEXG,EAAGC,SAASgB,SAASN,EAAKE,KAAKlD,EAAOmD,WAAYnD,EAAOoD,MAAO,QAAO,KAAA,EAClD,GADlClD,EAAI+B,EAAAS,GACOxC,EAAKqD,SAAS,KACnB,CAAAtB,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAEwD,GAA9D5C,EAAqBqD,EAAAA,6BAA6BxD,EAAOoD,MACxC,CAAAnB,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,GAAA,KAAA,EAEvBlD,EAA8B4D,KAAK,CACjCT,KAAMhD,EAAOoD,KACbM,KAAMvD,EAAmBwD,QAAUC,EAAAA,2BAA2BzD,EAAmBwD,QAASzD,GAAQA,IACjG,KAAA,EAAA+B,EAAAC,EAAA,EAAA,MAAA,KAAA,EAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAO,EAAAI,EAAAS,EAAA5C,EAAA+D,EAAAhC,GAAA,KAAA,GAAA,OAAAI,EAAAX,EAAA,GAAAxB,EAAAgE,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAA,IAGDpE,EAA+BqE,4BAA2B,CAAA9B,EAAAC,EAAA,GAAA,KAAA,CAG/C,GAFP9B,EAAmBV,EAA+BqE,4BACrDC,OAAO,SAAC1C,GAAC,OAAM1B,EAAYqE,IAAI3C,EAAE,GACjC4C,aAEC9D,EAAiB+D,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EACtB,CACLqB,aAAcC,EAAAA,aAAaC,uCAC3BC,iBAAgB,8CAAAC,OAGtBpE,EAAiBqE,IAAI,SAACnD,GAAC,MAAA,MAAAkD,OAAYlD,EAAC,IAAA,GAAM4B,KAAK,MAAK,QAE/C,KAAA,GAIC7C,EAAsE,GAAEC,EAAA,EAAAC,EAE3DV,EAA6B,KAAA,GAAA,KAAAS,EAAAC,EAAA4D,QAAA,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAArCxB,EAAIH,EAAAD,GAAAK,EAAAyB,EAAAA,0BAC8D,OAD9D5B,EACSd,EAA+BgF,wBAAsBlE,EAAI,IAAE,IAAjF,IAAAG,EAAAgC,MAAA/B,EAAAD,EAAAuB,KAAAU,MAAmF,CAAxE/B,EAAOD,EAAAiC,MACV/B,EAAK,IAAI6D,OAAO9D,EAAS,KACzBE,EAAUL,EAAKgD,KAAKkB,SAAS9D,GAAGE,EAAAoB,EAAAA,0BAClBrB,GAAO,IAA3B,IAAAC,EAAA2B,MAAA1B,EAAAD,EAAAkB,KAAAU,MAAW1B,EAAKD,EAAA4B,MAAaxC,EAAgBoD,KAAK,CAAE5C,QAASC,EAAG+D,WAAY7B,KAAMtC,EAAKsC,KAAM9B,MAAOA,EAAM,IAAM,CAAA,MAAA4D,GAAA9D,EAAA6C,EAAAiB,EAAA,CAAA,QAAA9D,EAAA8C,GAAA,CAClH,CAAC,CAAA,MAAAgB,GAAAnE,EAAAkD,EAAAiB,EAAA,CAAA,QAAAnE,EAAAmD,GAAA,CAAA3C,EAAAiB,EAAAA,0BACwE,OADxE3B,EACqBf,EAA+BqF,sBAAoBtE,EAAI,IAAEwB,EAAAX,EAAA,GAAAH,EAAAwB,IAAA,KAAA,GAAA,IAAAvB,EAAAD,EAAAe,KAAAU,KAAA,CAAAX,EAAAC,EAAA,GAAA,KAAA,CAApErB,EAAOO,EAAAyB,MACZvB,EAAI,EAAC,KAAA,GAAA,KACFA,EAAIZ,EAAKgD,KAAKS,QAAM,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CACkB,IAC7B,KADRX,EAAQb,EAAKgD,KAAKsB,QAAQnE,EAASS,IACzB,CAAAW,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAAA,IAAA,KAAA,GAChB1C,EAAgBoD,KAAK,CAAE5C,QAAAA,EAASmC,KAAMtC,EAAKsC,KAAM9B,MAAOL,IACxDS,EAAIC,EAAQV,EAAQsD,OAAOlC,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAQ,EAAAG,EAAAS,EAAAvB,EAAA0C,EAAA/B,GAAA,KAAA,GAAA,OAAAG,EAAAX,EAAA,GAAAH,EAAA2C,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAAxD,IAAA2B,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAA,KAK7B7B,EAAgB8D,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EACrB,CACLqB,aAAcC,EAAAA,aAAaY,iCAC3BV,iBAAgB,yHAAAC,OAKpBnE,EAAgBoE,IAAI,SAACX,GAAC,MAAA,MAAAU,OAAYV,EAAEd,cAAIwB,OAAUV,EAAEjD,QAAO,SAAA2D,OAAUV,EAAE5C,MAAK,MAAA,GAAQgC,KAAK,MAAK,QAE3F,KAAA,GAGG1B,EAAoC,GAAEC,EAAAW,EAAAA,0BAE8B,OAF9BzC,EAEtBD,EAA+BwF,uBAAqBvF,EAAI,IAAEsC,EAAAX,EAAA,GAAAK,EAAArC,EAAAA,cAAAC,WAAAoC,IAAA,IAAAd,EAAAC,EAAA,OAAAxB,gBAAA0C,EAAA,SAAAmD,GAAA,cAAAA,EAAAjD,GAAA,KAAA,EAArErB,EAAOa,EAAAmB,MACV/B,EAAK,IAAI6D,OAAO9D,GACNhB,EAA8BuF,KAAK,SAACtB,GAAC,OAAKhD,EAAGuE,KAAKvB,EAAEJ,KAAK,IAC3DlC,EAAwBiC,KAAK3C,EAAG+D,YAAY,KAAA,EAAA,OAAAM,EAAApC,EAAA,GAAA,EAAApB,EAAA,GAAAF,EAAAkB,IAAA,KAAA,GAAA,IAAAjB,EAAAD,EAAAS,KAAAU,KAAA,CAAAX,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAqD,EAAAC,EAAAA,kBAAA5D,KAAA,IAAA,KAAA,GAAAM,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAC,EAAA,GAAA,MAAA,KAAA,GAAAD,EAAAX,EAAA,GAAAS,EAAAE,EAAAS,EAAAjB,EAAAoC,EAAA9B,GAAA,KAAA,GAAA,OAAAE,EAAAX,EAAA,GAAAG,EAAAqC,IAAA7B,EAAA6B,EAAA,IAAA,KAAA,GAAA,KAGxDtC,EAAwB2C,OAAS,GAAC,CAAAlC,EAAAC,EAAA,GAAA,KAAA,CAAA,OAAAD,EAAAc,EAAA,EAC7B,CACLqB,aAAcC,EAAAA,aAAamB,gCAC3BjB,iBAAgB,yDAAAC,OAGpBhD,EAAwBiD,IAAI,SAACnD,GAAC,MAAA,MAAAkD,OAAYlD,EAAC,IAAA,GAAM4B,KAAK,MAAK,QAExD,KAAA,GAAA,OAAAjB,EAAAc,EAAA,GAAA,EAAAvD,EAAA,KAAA,CAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,KAAA,KAIJiG,MAAAC,KAAAC,UAAA,+BAlGD,SAA2CC,EAAAC,GAAA,OAAAzG,EAAAqG,MAAAC,KAAAC,UAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ProblemMarkdownFrontMatter } from '../types/problem.js';
|
|
2
2
|
import type { TestCaseResult } from '../types/testCaseResult.js';
|
|
3
|
-
export declare function judgeByStaticAnalysis(cwd: string, problemMarkdownFrontMatterLike: Pick<ProblemMarkdownFrontMatter, 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode'>): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined>;
|
|
3
|
+
export declare function judgeByStaticAnalysis(cwd: string, problemMarkdownFrontMatterLike: Pick<ProblemMarkdownFrontMatter, 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'>): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asyncToGenerator as e,regenerator as n,regeneratorValues as a,createForOfIteratorHelper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import
|
|
1
|
+
import{asyncToGenerator as e,regenerator as n,regeneratorValues as a,createForOfIteratorHelper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import o from"node:path";import{DecisionCode as s}from"../types/decisionCode.js";import{findLanguageDefinitionByPath as c}from"./findLanguageDefinitionByPath.js";import{removeCommentsInSourceCode as i}from"./removeCommentsInSourceCode.js";function u(e,n){return f.apply(this,arguments)}function f(){return(f=e(n().m(function e(u,f){var p,d,l,m,h,b,k,g,R,E,v,I,S,_,w,C,y,j,O,F,P,x,D,N,T,M,B,q,A,U,G,H,L,Q,V,z,J;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return d=new Set,l=[],Q=r,e.n=1,t.promises.readdir(u,{withFileTypes:!0,recursive:!0});case 1:m=Q(e.v),e.p=2,m.s();case 3:if((h=m.n()).done){e.n=9;break}if((b=h.value).isFile()){e.n=4;break}return e.a(3,8);case 4:return k=o.relative(u,o.join(b.parentPath,b.name)),d.add(k),e.n=5,t.promises.readFile(o.join(b.parentPath,b.name),"utf8");case 5:if(g=e.v,!g.includes("�")){e.n=6;break}return e.a(3,8);case 6:if(R=c(b.name)){e.n=7;break}return e.a(3,8);case 7:l.push({path:b.name,data:R.grammer?i(R.grammer,g):g});case 8:e.n=3;break;case 9:e.n=11;break;case 10:e.p=10,V=e.v,m.e(V);case 11:return e.p=11,m.f(),e.f(11);case 12:if(!f.requiredSubmissionFilePaths){e.n=13;break}if(E=f.requiredSubmissionFilePaths.filter(function(e){return!d.has(e)}).toSorted(),!(E.length>0)){e.n=13;break}return e.a(2,{decisionCode:s.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:"ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n".concat(E.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 13:v=[],I=0,S=l;case 14:if(!(I<S.length)){e.n=24;break}C=S[I],y=r(null!=(_=f.forbiddenRegExpsInCode)?_:[]);try{for(y.s();!(j=y.n()).done;){O=j.value,F=new RegExp(O,"g"),P=C.data.matchAll(F),x=r(P);try{for(x.s();!(D=x.n()).done;)N=D.value,v.push({pattern:F.toString(),path:C.path,match:N[0]})}catch(e){x.e(e)}finally{x.f()}}}catch(e){y.e(e)}finally{y.f()}T=r(null!=(w=f.forbiddenTextsInCode)?w:[]),e.p=15,T.s();case 16:if((M=T.n()).done){e.n=20;break}B=M.value,q=0;case 17:if(!(q<C.data.length)){e.n=19;break}if(-1!==(A=C.data.indexOf(B,q))){e.n=18;break}return e.a(3,19);case 18:v.push({pattern:B,path:C.path,match:B}),q=A+B.length,e.n=17;break;case 19:e.n=16;break;case 20:e.n=22;break;case 21:e.p=21,z=e.v,T.e(z);case 22:return e.p=22,T.f(),e.f(22);case 23:I++,e.n=14;break;case 24:if(!(v.length>0)){e.n=25;break}return e.a(2,{decisionCode:s.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n".concat(v.map(function(e){return"| `".concat(e.path,"` | `").concat(e.pattern,"` | `").concat(e.match,"` |")}).join("\n"),"\n")});case 25:U=[],G=r(null!=(p=f.requiredRegExpsInCode)?p:[]),e.p=26,L=n().m(function e(){var a,r;return n().w(function(e){for(;;)switch(e.n){case 0:a=H.value,r=new RegExp(a),l.some(function(e){return r.test(e.data)})||U.push(r.toString());case 1:return e.a(2)}},e)}),G.s();case 27:if((H=G.n()).done){e.n=29;break}return e.d(a(L()),28);case 28:e.n=27;break;case 29:e.n=31;break;case 30:e.p=30,J=e.v,G.e(J);case 31:return e.p=31,G.f(),e.f(31);case 32:if(!(U.length>0)){e.n=33;break}return e.a(2,{decisionCode:s.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:"ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n".concat(U.map(function(e){return"- `".concat(e,"`")}).join("\n"),"\n")});case 33:return e.a(2)}},e,null,[[26,30,31,32],[15,21,22,23],[2,10,11,12]])}))).apply(this,arguments)}export{u as judgeByStaticAnalysis};
|
|
2
2
|
//# sourceMappingURL=judgeByStaticAnalysis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judgeByStaticAnalysis.js","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["judgeByStaticAnalysis","_x","_x2","_judgeByStaticAnalysis","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","text","languageDefinition","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","readFile","path","join","parentPath","name","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","length","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","decisionCode","DecisionCode","FORBIDDEN_PATTERNS_IN_CODE_ERROR","feedbackMarkdown","concat","map","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"judgeByStaticAnalysis.js","sources":["../../src/helpers/judgeByStaticAnalysis.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { findLanguageDefinitionByPath } from './findLanguageDefinitionByPath.js';\nimport { removeCommentsInSourceCode } from './removeCommentsInSourceCode.js';\n\nexport async function judgeByStaticAnalysis(\n cwd: string,\n problemMarkdownFrontMatterLike: Pick<\n ProblemMarkdownFrontMatter,\n 'forbiddenRegExpsInCode' | 'forbiddenTextsInCode' | 'requiredRegExpsInCode' | 'requiredSubmissionFilePaths'\n >\n): Promise<Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown'> | undefined> {\n const filePathSet = new Set<string>();\n const sourceCodeWithoutCommentFiles: { path: string; data: string }[] = [];\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true, recursive: true })) {\n if (!dirent.isFile()) continue;\n\n const relativePath = path.relative(cwd, path.join(dirent.parentPath, dirent.name));\n filePathSet.add(relativePath);\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n const isBinary = text.includes('\\uFFFD');\n if (isBinary) continue;\n\n const languageDefinition = findLanguageDefinitionByPath(dirent.name);\n if (!languageDefinition) continue;\n\n sourceCodeWithoutCommentFiles.push({\n path: dirent.name,\n data: languageDefinition.grammer ? removeCommentsInSourceCode(languageDefinition.grammer, text) : text,\n });\n }\n\n if (problemMarkdownFrontMatterLike.requiredSubmissionFilePaths) {\n const missingFilePaths = problemMarkdownFrontMatterLike.requiredSubmissionFilePaths\n .filter((p) => !filePathSet.has(p))\n .toSorted();\n\n if (missingFilePaths.length > 0) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n feedbackMarkdown: `ファイルが不足しています。\n次のファイルを追加してから再度提出してください。\n\n${missingFilePaths.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n }\n\n const forbiddenFounds: { pattern: string; path: string; match: string }[] = [];\n\n for (const file of sourceCodeWithoutCommentFiles) {\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenRegExpsInCode ?? []) {\n const re = new RegExp(pattern, 'g');\n const mathces = file.data.matchAll(re);\n for (const match of mathces) forbiddenFounds.push({ pattern: re.toString(), path: file.path, match: match[0] });\n }\n for (const pattern of problemMarkdownFrontMatterLike.forbiddenTextsInCode ?? []) {\n let p = 0;\n while (p < file.data.length) {\n const index = file.data.indexOf(pattern, p);\n if (index === -1) break;\n forbiddenFounds.push({ pattern, path: file.path, match: pattern });\n p = index + pattern.length;\n }\n }\n }\n\n if (forbiddenFounds.length > 0) {\n return {\n decisionCode: DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に禁止された文字列が含まれています。\nソースコードを修正してから再度提出してください。\n\n| ファイル | 禁止パターン | 文字列 |\n| -------- | ------------ | ------ |\n${forbiddenFounds.map((f) => `| \\`${f.path}\\` | \\`${f.pattern}\\` | \\`${f.match}\\` |`).join('\\n')}\n`,\n };\n }\n\n const missingRequiredPatterns: string[] = [];\n\n for (const pattern of problemMarkdownFrontMatterLike.requiredRegExpsInCode ?? []) {\n const re = new RegExp(pattern);\n const isFound = sourceCodeWithoutCommentFiles.some((f) => re.test(f.data));\n if (!isFound) missingRequiredPatterns.push(re.toString());\n }\n\n if (missingRequiredPatterns.length > 0) {\n return {\n decisionCode: DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,\n feedbackMarkdown: `ソースコード中に必要な文字列が含まれていません。\nソースコードを修正してから再度提出してください。\n\n${missingRequiredPatterns.map((p) => `- \\`${p}\\``).join('\\n')}\n`,\n };\n }\n\n return;\n}\n"],"names":["judgeByStaticAnalysis","_x","_x2","_judgeByStaticAnalysis","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","problemMarkdownFrontMatterLike","_problemMarkdownFront3","filePathSet","sourceCodeWithoutCommentFiles","_iterator","_step","dirent","relativePath","text","languageDefinition","missingFilePaths","forbiddenFounds","_i","_sourceCodeWithoutCom","_problemMarkdownFront","_problemMarkdownFront2","file","_iterator2","_step2","pattern","re","mathces","_iterator4","_step4","match","_iterator3","_step3","_pattern","p","index","missingRequiredPatterns","_iterator5","_step5","_loop","_t","_t2","_t3","_t4","w","_context2","n","Set","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","recursive","v","s","done","value","isFile","a","path","relative","join","parentPath","name","add","readFile","includes","findLanguageDefinitionByPath","push","data","grammer","removeCommentsInSourceCode","e","f","requiredSubmissionFilePaths","filter","has","toSorted","length","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","feedbackMarkdown","concat","map","forbiddenRegExpsInCode","RegExp","matchAll","toString","err","forbiddenTextsInCode","indexOf","FORBIDDEN_PATTERNS_IN_CODE_ERROR","requiredRegExpsInCode","_context","some","test","d","_regeneratorValues","REQUIRED_PATTERNS_IN_CODE_ERROR"],"mappings":"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"}
|
package/dist/presets/stdio.cjs
CHANGED
|
@@ -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,P,M,w,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:return R=c.parseArgs(process.argv),f=g.parse(R.params),s.n=1,C.readProblemMarkdownFrontMatter(b);case 1:return T=s.v,s.n=2,E.readTestCases(t.join(b,"test_cases"));case 2:return _=s.v,s.n=3,u.judgeByStaticAnalysis(R.cwd,T);case 3:if(!(S=s.v)){s.n=4;break}return l.printTestCaseResult(e.objectSpread2({testCaseId:null!=(h=null==(v=_[0])?void 0:v.id)?h:"prebuild"},S)),s.a(2);case 4:return s.n=5,o.findEntryPointFile(R.cwd,f.language);case 5:if(y=s.v){s.n=6;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 6:if(P=d.findLanguageDefinitionByPath(y)){s.n=7;break}return l.printTestCaseResult({testCaseId:null!=(M=null==(w=_[0])?void 0:w.id)?M:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),s.a(2);case 7:if(F=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!P.prebuild){s.n=12;break}return s.p=8,s.n=9,P.prebuild(R.cwd);case 9:return s.n=10,o.findEntryPointFile(R.cwd,f.language);case 10:L=s.v,s.n=12;break;case 11:return s.p=11,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 12:if(j=null!=L?L:y,!P.buildCommand){s.n=16;break}if(s.p=13,N=P.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=14;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 14:s.n=16;break;case 15:return s.p=15,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 16:return s.n=17,n.snapshotWorkingDirectory(R.cwd);case 17:Q=s.v,Y=e.createForOfIteratorHelper(_),s.p=18,Y.s();case 19:if((Z=Y.n()).done){s.n=44;break}if(te=Z.value,null==(H=_.shared)||!H.fileInputPath){s.n=20;break}return s.n=20,a.copyTestCaseFileInput(_.shared.fileInputPath,R.cwd);case 20:if(!te.fileInputPath){s.n=21;break}return s.n=21,a.copyTestCaseFileInput(te.fileInputPath,R.cwd);case 21:return se="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,ne=P.command(j),ie=I.spawnSyncWithTimeout(ne[0],ne.slice(1),{cwd:R.cwd,encoding:"utf8",input:te.input,env:F},se),s.n=22,p.readOutputFiles(R.cwd,null!=(V=T.requiredOutputFilePaths)?V:[]);case 22:if(ae=s.v,oe=m.DecisionCode.ACCEPTED,0===ie.status){s.n=23;break}oe=m.DecisionCode.RUNTIME_ERROR,s.n=41;break;case 23:if(!(ie.timeSeconds>se)){s.n=24;break}oe=m.DecisionCode.TIME_LIMIT_EXCEEDED,s.n=41;break;case 24:if(!(ie.memoryBytes>(null!=(J=T.memoryLimitByte)?J:Number.POSITIVE_INFINITY))){s.n=25;break}oe=m.DecisionCode.MEMORY_LIMIT_EXCEEDED,s.n=41;break;case 25:if(!(ie.stdout.length>D||ie.stderr.length>D)){s.n=26;break}oe=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,s.n=41;break;case 26:if(!(ae.length<(null!=(K=null==($=T.requiredOutputFilePaths)?void 0:$.length)?K:0))){s.n=27;break}oe=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,s.n=41;break;case 27:if(i.compareStdoutAsSpaceSeparatedTokens(ie.stdout,null!=(ee=te.output)?ee:"")){s.n=28;break}oe=m.DecisionCode.WRONG_ANSWER,s.n=41;break;case 28:if(!te.fileOutputPath){s.n=41;break}return s.n=29,r.promises.readdir(te.fileOutputPath,{withFileTypes:!0,recursive:!0});case 29:de=s.v,ue=e.createForOfIteratorHelper(de),s.p=30,ue.s();case 31:if((ce=ue.n()).done){s.n=38;break}if((le=ce.value).isFile()){s.n=32;break}return s.a(3,37);case 32:return pe=t.relative(te.fileOutputPath,le.parentPath),s.n=33,r.promises.readFile(t.join(le.parentPath,le.name));case 33:return Ce=s.v,s.p=34,s.n=35,r.promises.readFile(t.join(R.cwd,pe,le.name));case 35:0!==s.v.compare(Ce)&&(oe=m.DecisionCode.WRONG_ANSWER),s.n=37;break;case 36:s.p=36,me=s.v,console.error(me),oe=m.DecisionCode.WRONG_ANSWER;case 37:s.n=31;break;case 38:s.n=40;break;case 39:s.p=39,De=s.v,ue.e(De);case 40:return s.p=40,ue.f(),s.f(40);case 41: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=42,n.cleanWorkingDirectory(R.cwd,Q);case 42:if(oe===m.DecisionCode.ACCEPTED){s.n=43;break}return s.a(3,44);case 43:s.n=19;break;case 44:s.n=46;break;case 45:s.p=45,ge=s.v,Y.e(ge);case 46:return s.p=46,Y.f(),s.f(46);case 47:return s.a(2)}},s,null,[[34,36],[30,39,40,41],[18,45,46,47],[13,15],[8,11]])}))).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,P,M,w,F,L,B,U,j;return e.regenerator().w(function(r){for(;;)switch(r.p=r.n){case 0:return s=c.parseArgs(process.argv),n=b.parse(s.params),r.n=1,C.readProblemMarkdownFrontMatter(t);case 1:return i=r.v,r.n=2,o.findEntryPointFile(s.cwd,n.language);case 2:if(a=r.v){r.n=3;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 3:if(u=d.findLanguageDefinitionByPath(a)){r.n=4;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),r.a(2);case 4:if(E=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!u.prebuild){r.n=9;break}return r.p=5,r.n=6,u.prebuild(s.cwd);case 6:return r.n=7,o.findEntryPointFile(s.cwd,n.language);case 7:g=r.v,r.n=9;break;case 8:return r.p=8,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 9:if(R=null!=g?g:a,!u.buildCommand){r.n=13;break}if(r.p=10,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=11;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 11:r.n=13;break;case 12:return r.p=12,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 13:return M=Math.max(10,(null!=(h=i.timeLimitMs)?h:0)/1e3),w=u.command(R),F=I.spawnSyncWithTimeout(w[0],w.slice(1),{cwd:s.cwd,encoding:"utf8",input:n.stdin,env:E},M),r.n=14,p.readOutputFiles(s.cwd,null!=(v=i.requiredOutputFilePaths)?v:[]);case 14:L=r.v,B=m.DecisionCode.ACCEPTED,0!==F.status?B=m.DecisionCode.RUNTIME_ERROR:F.timeSeconds>M?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!=(P=F.status)?P: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 15:return r.a(2)}},r,null,[[10,12],[5,8]])}))).apply(this,arguments)}exports.stdioDebugPreset=function(e){return f.apply(this,arguments)},exports.stdioJudgePreset=function(e){return R.apply(this,arguments)};
|
|
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,P,M,w,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:return R=c.parseArgs(process.argv),f=g.parse(R.params),s.n=1,C.readProblemMarkdownFrontMatter(b);case 1:return T=s.v,s.n=2,E.readTestCases(t.join(b,"test_cases"));case 2:return _=s.v,s.n=3,u.judgeByStaticAnalysis(R.cwd,T);case 3:if(!(S=s.v)){s.n=4;break}return l.printTestCaseResult(e.objectSpread2({testCaseId:null!=(h=null==(v=_[0])?void 0:v.id)?h:"prebuild"},S)),s.a(2);case 4:return s.n=5,o.findEntryPointFile(R.cwd,f.language);case 5:if(y=s.v){s.n=6;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 6:if(P=d.findLanguageDefinitionByPath(y)){s.n=7;break}return l.printTestCaseResult({testCaseId:null!=(M=null==(w=_[0])?void 0:w.id)?M:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),s.a(2);case 7:if(F=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!P.prebuild){s.n=12;break}return s.p=8,s.n=9,P.prebuild(R.cwd);case 9:return s.n=10,o.findEntryPointFile(R.cwd,f.language);case 10:L=s.v,s.n=12;break;case 11:return s.p=11,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 12:if(j=null!=L?L:y,!P.buildCommand){s.n=16;break}if(s.p=13,N=P.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=14;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 14:s.n=16;break;case 15:return s.p=15,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 16:return s.n=17,n.snapshotWorkingDirectory(R.cwd);case 17:Q=s.v,0===_.length&&l.printTestCaseResult({testCaseId:"default",decisionCode:m.DecisionCode.ACCEPTED}),Y=e.createForOfIteratorHelper(_),s.p=18,Y.s();case 19:if((Z=Y.n()).done){s.n=44;break}if(te=Z.value,null==(H=_.shared)||!H.fileInputPath){s.n=20;break}return s.n=20,a.copyTestCaseFileInput(_.shared.fileInputPath,R.cwd);case 20:if(!te.fileInputPath){s.n=21;break}return s.n=21,a.copyTestCaseFileInput(te.fileInputPath,R.cwd);case 21:return se="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,ne=P.command(j),ie=I.spawnSyncWithTimeout(ne[0],ne.slice(1),{cwd:R.cwd,encoding:"utf8",input:te.input,env:F},se),s.n=22,p.readOutputFiles(R.cwd,null!=(V=T.requiredOutputFilePaths)?V:[]);case 22:if(ae=s.v,oe=m.DecisionCode.ACCEPTED,0===ie.status){s.n=23;break}oe=m.DecisionCode.RUNTIME_ERROR,s.n=41;break;case 23:if(!(ie.timeSeconds>se)){s.n=24;break}oe=m.DecisionCode.TIME_LIMIT_EXCEEDED,s.n=41;break;case 24:if(!(ie.memoryBytes>(null!=(J=T.memoryLimitByte)?J:Number.POSITIVE_INFINITY))){s.n=25;break}oe=m.DecisionCode.MEMORY_LIMIT_EXCEEDED,s.n=41;break;case 25:if(!(ie.stdout.length>D||ie.stderr.length>D)){s.n=26;break}oe=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,s.n=41;break;case 26:if(!(ae.length<(null!=(K=null==($=T.requiredOutputFilePaths)?void 0:$.length)?K:0))){s.n=27;break}oe=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,s.n=41;break;case 27:if(i.compareStdoutAsSpaceSeparatedTokens(ie.stdout,null!=(ee=te.output)?ee:"")){s.n=28;break}oe=m.DecisionCode.WRONG_ANSWER,s.n=41;break;case 28:if(!te.fileOutputPath){s.n=41;break}return s.n=29,r.promises.readdir(te.fileOutputPath,{withFileTypes:!0,recursive:!0});case 29:de=s.v,ue=e.createForOfIteratorHelper(de),s.p=30,ue.s();case 31:if((ce=ue.n()).done){s.n=38;break}if((le=ce.value).isFile()){s.n=32;break}return s.a(3,37);case 32:return pe=t.relative(te.fileOutputPath,le.parentPath),s.n=33,r.promises.readFile(t.join(le.parentPath,le.name));case 33:return Ce=s.v,s.p=34,s.n=35,r.promises.readFile(t.join(R.cwd,pe,le.name));case 35:0!==s.v.compare(Ce)&&(oe=m.DecisionCode.WRONG_ANSWER),s.n=37;break;case 36:s.p=36,me=s.v,console.error(me),oe=m.DecisionCode.WRONG_ANSWER;case 37:s.n=31;break;case 38:s.n=40;break;case 39:s.p=39,De=s.v,ue.e(De);case 40:return s.p=40,ue.f(),s.f(40);case 41: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=42,n.cleanWorkingDirectory(R.cwd,Q);case 42:if(oe===m.DecisionCode.ACCEPTED){s.n=43;break}return s.a(3,44);case 43:s.n=19;break;case 44:s.n=46;break;case 45:s.p=45,ge=s.v,Y.e(ge);case 46:return s.p=46,Y.f(),s.f(46);case 47:return s.a(2)}},s,null,[[34,36],[30,39,40,41],[18,45,46,47],[13,15],[8,11]])}))).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,P,M,w,F,L,B,U,j;return e.regenerator().w(function(r){for(;;)switch(r.p=r.n){case 0:return s=c.parseArgs(process.argv),n=b.parse(s.params),r.n=1,C.readProblemMarkdownFrontMatter(t);case 1:return i=r.v,r.n=2,o.findEntryPointFile(s.cwd,n.language);case 2:if(a=r.v){r.n=3;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 3:if(u=d.findLanguageDefinitionByPath(a)){r.n=4;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),r.a(2);case 4:if(E=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!u.prebuild){r.n=9;break}return r.p=5,r.n=6,u.prebuild(s.cwd);case 6:return r.n=7,o.findEntryPointFile(s.cwd,n.language);case 7:g=r.v,r.n=9;break;case 8:return r.p=8,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 9:if(R=null!=g?g:a,!u.buildCommand){r.n=13;break}if(r.p=10,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=11;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 11:r.n=13;break;case 12:return r.p=12,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 13:return M=Math.max(10,(null!=(h=i.timeLimitMs)?h:0)/1e3),w=u.command(R),F=I.spawnSyncWithTimeout(w[0],w.slice(1),{cwd:s.cwd,encoding:"utf8",input:n.stdin,env:E},M),r.n=14,p.readOutputFiles(s.cwd,null!=(v=i.requiredOutputFilePaths)?v:[]);case 14:L=r.v,B=m.DecisionCode.ACCEPTED,0!==F.status?B=m.DecisionCode.RUNTIME_ERROR:F.timeSeconds>M?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!=(P=F.status)?P: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 15:return r.a(2)}},r,null,[[10,12],[5,8]])}))).apply(this,arguments)}exports.stdioDebugPreset=function(e){return f.apply(this,arguments)},exports.stdioJudgePreset=function(e){return R.apply(this,arguments)};
|
|
2
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 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 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 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","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","cwd","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","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","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 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 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","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","cwd","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","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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"}
|
package/dist/presets/stdio.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asyncToGenerator as e,regenerator as r,createForOfIteratorHelper as t,objectSpread2 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
|
|
1
|
+
import{asyncToGenerator as e,regenerator as r,createForOfIteratorHelper as t,objectSpread2 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 C}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as g}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,D,O,k,y,P,L,M,U,w,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,Ce,ge,_e,Re;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:return h=E(process.argv),S=v.parse(h.params),e.n=1,b(i);case 1:return T=e.v,e.n=2,C(a.join(i,"test_cases"));case 2:return D=e.v,e.n=3,m(h.cwd,T);case 3:if(!(O=e.v)){e.n=4;break}return I(n({testCaseId:null!=(k=null==(y=D[0])?void 0:y.id)?k:"prebuild"},O)),e.a(2);case 4:return e.n=5,c(h.cwd,S.language);case 5:if(P=e.v){e.n=6;break}return I({testCaseId:null!=(L=null==(M=D[0])?void 0:M.id)?L:"prebuild",decisionCode:_.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(S.language?": language: ".concat(S.language):"")}),e.a(2);case 6:if(U=p(P)){e.n=7;break}return I({testCaseId:null!=(w=null==(B=D[0])?void 0:B.id)?w:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 7:if(N=n(n({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!U.prebuild){e.n=12;break}return e.p=8,e.n=9,U.prebuild(h.cwd);case 9:return e.n=10,c(h.cwd,S.language);case 10:F=e.v,e.n=12;break;case 11:return e.p=11,be=e.v,console.error("prebuild error",be),I({testCaseId:null!=(j=null==(A=D[0])?void 0:A.id)?j:"prebuild",decisionCode:_.BUILD_ERROR,stderr:be instanceof Error?be.message:String(be)}),e.a(2);case 12:if(W=null!=F?F:P,!U.buildCommand){e.n=16;break}if(e.p=13,G=U.buildCommand(W),X=g(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=14;break}return I({testCaseId:null!=(q=null==(Q=D[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 14:e.n=16;break;case 15:return e.p=15,Ce=e.v,console.error("build error",Ce),I({testCaseId:null!=(Z=null==(H=D[0])?void 0:H.id)?Z:"build",decisionCode:_.BUILD_ERROR,stderr:Ce instanceof Error?Ce.message:String(Ce)}),e.a(2);case 16:return e.n=17,d(h.cwd);case 17:V=e.v,0===D.length&&I({testCaseId:"default",decisionCode:_.ACCEPTED}),z=t(D),e.p=18,z.s();case 19:if((J=z.n()).done){e.n=44;break}if(ae=J.value,null==(K=D.shared)||!K.fileInputPath){e.n=20;break}return e.n=20,l(D.shared.fileInputPath,h.cwd);case 20:if(!ae.fileInputPath){e.n=21;break}return e.n=21,l(ae.fileInputPath,h.cwd);case 21:return ie="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,oe=U.command(W),de=g(oe[0],oe.slice(1),{cwd:h.cwd,encoding:"utf8",input:ae.input,env:N},ie),e.n=22,f(h.cwd,null!=($=T.requiredOutputFilePaths)?$:[]);case 22:if(ue=e.v,le=_.ACCEPTED,0===de.status){e.n=23;break}le=_.RUNTIME_ERROR,e.n=41;break;case 23:if(!(de.timeSeconds>ie)){e.n=24;break}le=_.TIME_LIMIT_EXCEEDED,e.n=41;break;case 24:if(!(de.memoryBytes>(null!=(ee=T.memoryLimitByte)?ee:Number.POSITIVE_INFINITY))){e.n=25;break}le=_.MEMORY_LIMIT_EXCEEDED,e.n=41;break;case 25:if(!(de.stdout.length>R||de.stderr.length>R)){e.n=26;break}le=_.OUTPUT_SIZE_LIMIT_EXCEEDED,e.n=41;break;case 26:if(!(ue.length<(null!=(re=null==(te=T.requiredOutputFilePaths)?void 0:te.length)?re:0))){e.n=27;break}le=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR,e.n=41;break;case 27:if(u(de.stdout,null!=(ne=ae.output)?ne:"")){e.n=28;break}le=_.WRONG_ANSWER,e.n=41;break;case 28:if(!ae.fileOutputPath){e.n=41;break}return e.n=29,s.promises.readdir(ae.fileOutputPath,{withFileTypes:!0,recursive:!0});case 29:ce=e.v,pe=t(ce),e.p=30,pe.s();case 31:if((me=pe.n()).done){e.n=38;break}if((Ee=me.value).isFile()){e.n=32;break}return e.a(3,37);case 32:return Ie=a.relative(ae.fileOutputPath,Ee.parentPath),e.n=33,s.promises.readFile(a.join(Ee.parentPath,Ee.name));case 33:return fe=e.v,e.p=34,e.n=35,s.promises.readFile(a.join(h.cwd,Ie,Ee.name));case 35:0!==e.v.compare(fe)&&(le=_.WRONG_ANSWER),e.n=37;break;case 36:e.p=36,ge=e.v,console.error(ge),le=_.WRONG_ANSWER;case 37:e.n=31;break;case 38:e.n=40;break;case 39:e.p=39,_e=e.v,pe.e(_e);case 40:return e.p=40,pe.f(),e.f(40);case 41: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=42,o(h.cwd,V);case 42:if(le===_.ACCEPTED){e.n=43;break}return e.a(3,44);case 43:e.n=19;break;case 44:e.n=46;break;case 45:e.p=45,Re=e.v,z.e(Re);case 46:return e.p=46,z.f(),e.f(46);case 47:return e.a(2)}},e,null,[[34,36],[30,39,40,41],[18,45,46,47],[13,15],[8,11]])}))).apply(this,arguments)}function D(e){return O.apply(this,arguments)}function O(){return(O=e(r().m(function e(t){var s,a,i,o,d,u,l,m,C,v,S,T,D,O,k,y,P,L,M,U,w,B,N,F,j;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:return s=E(process.argv),a=h.parse(s.params),e.n=1,b(t);case 1:return i=e.v,e.n=2,c(s.cwd,a.language);case 2:if(o=e.v){e.n=3;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 3:if(d=p(o)){e.n=4;break}return I({testCaseId:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 4:if(u=n(n({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!d.prebuild){e.n=9;break}return e.p=5,e.n=6,d.prebuild(s.cwd);case 6:return e.n=7,c(s.cwd,a.language);case 7:l=e.v,e.n=9;break;case 8:return e.p=8,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 9:if(m=null!=l?l:o,!d.buildCommand){e.n=13;break}if(e.p=10,C=d.buildCommand(m),v=g(C[0],C.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=11;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 11:e.n=13;break;case 12:return e.p=12,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 13:return M=Math.max(10,(null!=(D=i.timeLimitMs)?D:0)/1e3),U=d.command(m),w=g(U[0],U.slice(1),{cwd:s.cwd,encoding:"utf8",input:a.stdin,env:u},M),e.n=14,f(s.cwd,null!=(O=i.requiredOutputFilePaths)?O:[]);case 14:B=e.v,N=_.ACCEPTED,0!==w.status?N=_.RUNTIME_ERROR:w.timeSeconds>M?N=_.TIME_LIMIT_EXCEEDED:w.memoryBytes>(null!=(k=i.memoryLimitByte)?k:Number.POSITIVE_INFINITY)?N=_.MEMORY_LIMIT_EXCEEDED:w.stdout.length>R||w.stderr.length>R?N=_.OUTPUT_SIZE_LIMIT_EXCEEDED:B.length<(null!=(y=null==(P=i.requiredOutputFilePaths)?void 0:P.length)?y:0)&&(N=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR),I({testCaseId:"debug",decisionCode:N,exitStatus:null!=(L=w.status)?L:void 0,stdin:a.stdin,stdout:w.stdout.slice(0,R)||void 0,stderr:w.stderr.slice(0,R)||void 0,timeSeconds:w.timeSeconds,memoryBytes:w.memoryBytes,outputFiles:B.length>0?B:void 0});case 15:return e.a(2)}},e,null,[[10,12],[5,8]])}))).apply(this,arguments)}export{D as stdioDebugPreset,S as stdioJudgePreset};
|
|
2
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 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 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 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","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","cwd","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","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":"yrCAmBA,IAIMA,EAAoB,IAEpBC,EAAoBC,EAAEC,OAAO,CACjCC,SAAUF,EAAEG,MAAM,CAACH,EAAEI,SAAUJ,EAAEK,MAAML,EAAEI,YAAYE,aAGjDC,EAAoBR,EAAkBS,OAAO,CACjDC,MAAOT,EAAEI,SAASE,aAwBpB,SAAsBI,EAAgBC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAkLtC,SAAAH,IAFC,OAEDA,EAAAI,EAAAC,IAAAC,EAlLO,SAAAC,EAAgCC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA,OAAAxD,IAAAyD,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAEJ,OAD7CxD,EAAOyD,EAAUC,QAAQC,MACzB1D,EAASvB,EAAkBkF,MAAM5D,EAAKC,QAAOqD,EAAAE,EAAA,EAEVK,EAA+B9D,GAAW,KAAA,EAAnD,OAA1BG,EAA0BoD,EAAAQ,EAAAR,EAAAE,EAAA,EACRO,EAAcC,EAAKC,KAAKlE,EAAY,eAAc,KAAA,EAA3D,OAATI,EAASmD,EAAAQ,EAAAR,EAAAE,EAAA,EAE4BU,EAAsBlE,EAAKmE,IAAKjE,GAA2B,KAAA,EAApE,KAA5BE,EAA4BkD,EAAAQ,GACF,CAAAR,EAAAE,EAAA,EAAA,KAAA,CACuE,OAArGY,EAAmBC,EAAA,CAAGC,WAA4B,OAAlBjE,SAAAC,EAAEH,EAAU,WAAVG,EAAciE,IAAElE,EAAI,YAAeD,IAAgCkD,EAAAkB,EAAA,GAAA,KAAA,EAAA,OAAAlB,EAAAE,EAAA,EAIpEiB,EAAmBzE,EAAKmE,IAAKlE,EAAOpB,UAAS,KAAA,EAAtD,GAApB0B,EAAoB+C,EAAAQ,EACD,CAAAR,EAAAE,EAAA,EAAA,KAAA,CAKpB,OAJHY,EAAoB,CAClBE,WAA4B,OAAlB9D,EAAc,OAAdC,EAAEN,EAAU,SAAE,EAAZM,EAAc8D,IAAE/D,EAAI,WAChCY,aAAcsD,EAAaC,uCAC3BC,OAAM,sBAAAC,OAAwB5E,EAAOpB,SAAQ,eAAAgG,OAAkB5E,EAAOpB,UAAa,MAClFyE,EAAAkB,EAAA,GAAA,KAAA,EAIwE,GAAvE9D,EAAqBoE,EAA6BvE,GACjC,CAAA+C,EAAAE,EAAA,EAAA,KAAA,CAKlB,OAJHY,EAAoB,CAClBE,WAA4B,OAAlB3D,EAAc,OAAdC,EAAET,EAAU,SAAE,EAAZS,EAAc2D,IAAE5D,EAAI,WAChCS,aAAcsD,EAAaK,aAC3BH,OAAQ,yBACPtB,EAAAkB,EAAA,GAAA,KAAA,EAKiD,GAAhD3D,EAAGwD,EAAAA,EAAA,CAAA,EAAQX,QAAQ7C,KAAG,GAAA,CAAEmE,GAAI,GAAIC,YAAa,OAI/CvE,EAAmBwE,SAAQ,CAAA5B,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAErB9C,EAAmBwE,SAASlF,EAAKmE,KAAI,KAAA,EAAA,OAAAb,EAAAE,EAAA,GACdiB,EAAmBzE,EAAKmE,IAAKlE,EAAOpB,UAAS,KAAA,GAA1EiC,EAAoBwC,EAAAQ,EAAAR,EAAAE,EAAA,GAAA,MAAA,KAAA,GAQjB,OARiBF,EAAAC,EAAA,GAAAP,GAAAM,EAAAQ,EAEpBqB,QAAQC,MAAM,iBAAgBpC,IAE9BoB,EAAoB,CAClBE,WAA4B,OAAlBvD,EAAc,OAAdC,EAAEb,EAAU,SAAE,EAAZa,EAAcuD,IAAExD,EAAI,WAChCK,aAAcsD,EAAaW,YAC3BT,OAAQ5B,cAAiBsC,MAAQtC,GAAMuC,QAAUC,OAAMxC,MACtDM,EAAAkB,EAAA,GAAA,KAAA,GAK0D,GAA3DvD,EAAmC,MAApBH,EAAAA,EAAwBP,GAEzCG,EAAmBQ,aAAY,CAAAoC,EAAAE,EAAA,GAAA,KAAA,CAsB9B,GAtB8BF,EAAAC,EAAA,GAEzBrC,EAAeR,EAAmBQ,aAAaD,GAE/CE,EAAmBsE,EACvBvE,EAAa,GACbA,EAAawE,MAAM,GACnB,CAAEvB,IAAKnE,EAAKmE,IAAKwB,SAAU,OAAQ9E,IAAAA,GAlGb,IAsGpBO,EAA6BsD,EAAakB,SAEd,IAA5BzE,EAAiB0E,OACnBzE,EAAesD,EAAaW,YACnBlE,EAAiB2E,YA1GJ,GA2GtB1E,EAAesD,EAAaqB,2BAE5B5E,EAAiB6E,OAAOC,OAASxH,GACjC0C,EAAiByD,OAAOqB,OAASxH,KAEjC2C,EAAesD,EAAawB,kCAG1B9E,IAAiBsD,EAAakB,SAAQ,CAAAtC,EAAAE,EAAA,GAAA,KAAA,CASrC,OARHY,EAAoB,CAClBE,WAA4B,OAAlBjD,EAAc,OAAdC,EAAEnB,EAAU,SAAE,EAAZmB,EAAciD,IAAElD,EAAI,QAChCD,aAAAA,EACA+E,WAAmC,OAAzB5E,EAAEJ,EAAiB0E,QAAMtE,OAAI6E,EACvCJ,OAAQ7E,EAAiB6E,OAAON,MAAM,EAAGjH,SAAsB2H,EAC/DxB,OAAQzD,EAAiByD,OAAOc,MAAM,EAAGjH,SAAsB2H,EAC/DN,YAAa3E,EAAiB2E,YAC9BO,YAAalF,EAAiBkF,cAC7B/C,EAAAkB,EAAA,GAAA,KAAA,GAAAlB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAUF,OAVEF,EAAAC,EAAA,GAAAN,GAAAK,EAAAQ,EAILqB,QAAQC,MAAM,cAAanC,IAE3BmB,EAAoB,CAClBE,WAA4B,OAAlB9C,EAAc,OAAdC,EAAEtB,EAAU,SAAE,EAAZsB,EAAc8C,IAAE/C,EAAI,QAChCJ,aAAcsD,EAAaW,YAC3BT,OAAQ3B,cAAiBqC,MAAQrC,GAAMsC,QAAUC,OAAMvC,MACtDK,EAAAkB,EAAA,GAAA,KAAA,GAAA,OAAAlB,EAAAE,EAAA,GAKmB8C,EAAyBtG,EAAKmE,KAAI,KAAA,GAAtDzC,EAAW4B,EAAAQ,EAAAnC,EAAA4E,EAEMpG,GAASmD,EAAAC,EAAA,GAAA5B,EAAA6E,IAAA,KAAA,GAAA,IAAA5E,EAAAD,EAAA6B,KAAAiD,KAAA,CAAAnD,EAAAE,EAAA,GAAA,KAAA,CAAb,GAARpB,GAAQR,EAAA8E,MAEG,OAFH7E,EAEb1B,EAAUwG,UAAV9E,EAAkB+E,cAAa,CAAAtD,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GAAQqD,EAAsB1G,EAAUwG,OAAOC,cAAe5G,EAAKmE,KAAI,KAAA,GAAA,IACtG/B,GAASwE,cAAa,CAAAtD,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GAAQqD,EAAsBzE,GAASwE,cAAe5G,EAAKmE,KAAI,KAAA,GAexF,OAZK9B,GAC8C,iBAA3CnC,EAA2B4G,YAC9B5G,EAA2B4G,YAAc,IApJb,EAuJ5BxE,GAAU5B,EAAmB4B,QAAQrB,GAErCsB,GAAckD,EAClBnD,GAAQ,GACRA,GAAQoD,MAAM,GACd,CAAEvB,IAAKnE,EAAKmE,IAAKwB,SAAU,OAAQoB,MAAO3E,GAAS2E,MAAOlG,IAAAA,GAC1DwB,IACDiB,EAAAE,EAAA,GAEyBwD,EAAgBhH,EAAKmE,IAAuD,OAApDrC,EAAE5B,EAA2B+G,yBAAuBnF,EAAI,IAAG,KAAA,GAGvD,GAHhDU,GAAWc,EAAAQ,EAGb1C,GAA6BsD,EAAakB,SAEnB,IAAvBrD,GAAYsD,OAAY,CAAAvC,EAAAE,EAAA,GAAA,KAAA,CAC1BpC,GAAesD,EAAawC,cAAc5D,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,KACjCjB,GAAYuD,YAAczD,IAAc,CAAAiB,EAAAE,EAAA,GAAA,KAAA,CACjDpC,GAAesD,EAAayC,oBAAoB7D,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,KACvCjB,GAAY8D,oBAAWtE,GAAI7B,EAA2BkH,iBAAerF,GAAIsF,OAAOC,oBAAkB,CAAAhE,EAAAE,EAAA,GAAA,KAAA,CAC3GpC,GAAesD,EAAa6C,sBAAsBjE,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,KACzCjB,GAAYyD,OAAOC,OAASxH,GAAqB8D,GAAYqC,OAAOqB,OAASxH,GAAiB,CAAA6E,EAAAE,EAAA,GAAA,KAAA,CACvGpC,GAAesD,EAAa8C,2BAA2BlE,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,KAC9ChB,GAAYyD,eAAMjE,GAAsD,OAAtDC,GAAI/B,EAA2B+G,8BAAuB,EAAlDhF,GAAoDgE,QAAMjE,GAAI,IAAE,CAAAsB,EAAAE,EAAA,GAAA,KAAA,CAC/FpC,GAAesD,EAAa+C,mCAAmCnE,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,GACrDkE,EAAoCnF,GAAYyD,OAAuB,OAAjB9D,GAAEE,GAASuF,QAAMzF,GAAI,IAAG,CAAAoB,EAAAE,EAAA,GAAA,KAAA,CACxFpC,GAAesD,EAAaK,aAAazB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,IAChCpB,GAASwF,eAAc,CAAAtE,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GACVqE,EAAGC,SAASC,QAAQ3F,GAASwF,eAAgB,CAAEI,eAAe,EAAMC,WAAW,IAAO,KAAA,GAAtGvF,GAAOY,EAAAQ,EAAAnB,GAAA4D,EACQ7D,IAAOY,EAAAC,EAAA,GAAAZ,GAAA6D,IAAA,KAAA,GAAA,IAAA5D,GAAAD,GAAAa,KAAAiD,KAAA,CAAAnD,EAAAE,EAAA,GAAA,KAAA,CAAX,IAANX,GAAMD,GAAA8D,OACHwB,SAAQ,CAAA5E,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,EAAA,EAAA,IAAA,KAAA,GACgE,OAA9E1B,GAAqBkB,EAAKmE,SAAS/F,GAASwF,eAAgB/E,GAAOuF,YAAW9E,EAAAE,EAAA,GAC7DqE,EAAGC,SAASO,SAASrE,EAAKC,KAAKpB,GAAOuF,WAAYvF,GAAOyF,OAAM,KAAA,GAAxE,OAARvF,GAAQO,EAAAQ,EAAAR,EAAAC,EAAA,GAAAD,EAAAE,EAAA,GAEWqE,EAAGC,SAASO,SAASrE,EAAKC,KAAKjE,EAAKmE,IAAKrB,GAAoBD,GAAOyF,OAAM,KAAA,GAC9D,IADrBhF,EAAAQ,EACDyE,QAAQxF,MAAiB3B,GAAesD,EAAaK,cAAazB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,EAAA,GAAAL,GAAAI,EAAAQ,EAE/EqB,QAAQC,MAAKlC,IACb9B,GAAesD,EAAaK,aAAa,KAAA,GAAAzB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,EAAA,GAAAJ,GAAAG,EAAAQ,EAAAnB,GAAA6F,EAAArF,IAAA,KAAA,GAAA,OAAAG,EAAAC,EAAA,GAAAZ,GAAA8F,IAAAnF,EAAAmF,EAAA,IAAA,KAAA,GAiB/C,OAZArE,EAAoB,CAClBE,WAAYlC,GAASmC,GACrBnD,aAAAA,GACA+E,WAA8B,OAApBhE,GAAEI,GAAYsD,QAAM1D,QAAIiE,EAClChH,MAAOgD,GAAS2E,MAChBf,OAAQzD,GAAYyD,OAAON,MAAM,EAAGjH,SAAsB2H,EAC1DxB,OAAQrC,GAAYqC,OAAOc,MAAM,EAAGjH,SAAsB2H,EAC1DN,YAAavD,GAAYuD,YACzBO,YAAa9D,GAAY8D,YACzB7D,YAAaA,GAAYyD,OAAS,EAAIzD,QAAc4D,IAGtD9C,EAAAE,EAAA,GACMkF,EAAsB1I,EAAKmE,IAAKzC,GAAY,KAAA,GAAA,GAE9CN,KAAiBsD,EAAakB,SAAQ,CAAAtC,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,EAAA,EAAA,IAAA,KAAA,GAAAlB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,EAAA,GAAAH,GAAAE,EAAAQ,EAAAnC,EAAA6G,EAAApF,IAAA,KAAA,GAAA,OAAAE,EAAAC,EAAA,GAAA5B,EAAA8G,IAAAnF,EAAAmF,EAAA,IAAA,KAAA,GAAA,OAAAnF,EAAAkB,EAAA,GAAA,EAAA1E,EAAA,KAAA,CAAA,CAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA,EAAA,KAAA,KAE7CN,MAAAC,KAAAC,UAAA,CAkBD,SAAsBiJ,EAAgBC,GAAA,OAAAC,EAAArJ,MAAAC,KAAAC,UAAA,CA4IrC,SAAAmJ,IAAA,OAAAA,EAAAlJ,EAAAC,IAAAC,EA5IM,SAAAiJ,EAAgC/I,GAAkB,IAAAC,EAAAC,EAAAC,EAAAK,EAAAG,EAAAG,EAAAC,EAAAG,EAAAC,EAAAC,EAAAC,EAAA2H,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAhH,EAAAC,EAAAC,EAAAC,EAAA8G,EAAAC,EAAAC,EAAA,OAAA5J,IAAAyD,EAAA,SAAAoG,GAAA,cAAAA,EAAAlG,EAAAkG,EAAAjG,GAAA,KAAA,EAEJ,OAD7CxD,EAAOyD,EAAUC,QAAQC,MACzB1D,EAASf,EAAkB0E,MAAM5D,EAAKC,QAAOwJ,EAAAjG,EAAA,EAEVK,EAA+B9D,GAAW,KAAA,EAAnD,OAA1BG,EAA0BuJ,EAAA3F,EAAA2F,EAAAjG,EAAA,EAEGiB,EAAmBzE,EAAKmE,IAAKlE,EAAOpB,UAAS,KAAA,EAAtD,GAApB0B,EAAoBkJ,EAAA3F,EACD,CAAA2F,EAAAjG,EAAA,EAAA,KAAA,CAKpB,OAJHY,EAAoB,CAClBE,WAAY,WACZlD,aAAcsD,EAAaC,uCAC3BC,OAAM,sBAAAC,OAAwB5E,EAAOpB,SAAQ,eAAAgG,OAAkB5E,EAAOpB,UAAa,MAClF4K,EAAAjF,EAAA,GAAA,KAAA,EAIwE,GAAvE9D,EAAqBoE,EAA6BvE,GACjC,CAAAkJ,EAAAjG,EAAA,EAAA,KAAA,CAKlB,OAJHY,EAAoB,CAClBE,WAAY,WACZlD,aAAcsD,EAAaK,aAC3BH,OAAQ,yBACP6E,EAAAjF,EAAA,GAAA,KAAA,EAKiD,GAAhD3D,EAAGwD,EAAAA,EAAA,CAAA,EAAQX,QAAQ7C,KAAG,GAAA,CAAEmE,GAAI,GAAIC,YAAa,OAI/CvE,EAAmBwE,SAAQ,CAAAuE,EAAAjG,EAAA,EAAA,KAAA,CAAA,OAAAiG,EAAAlG,EAAA,EAAAkG,EAAAjG,EAAA,EAErB9C,EAAmBwE,SAASlF,EAAKmE,KAAI,KAAA,EAAA,OAAAsF,EAAAjG,EAAA,EACdiB,EAAmBzE,EAAKmE,IAAKlE,EAAOpB,UAAS,KAAA,EAA1EiC,EAAoB2I,EAAA3F,EAAA2F,EAAAjG,EAAA,EAAA,MAAA,KAAA,EAQjB,OARiBiG,EAAAlG,EAAA,EAAAgG,EAAAE,EAAA3F,EAEpBqB,QAAQC,MAAM,iBAAgBmE,GAE9BnF,EAAoB,CAClBE,WAAY,WACZlD,aAAcsD,EAAaW,YAC3BT,OAAQ2E,aAAiBjE,MAAQiE,EAAMhE,QAAUC,OAAM+D,KACtDE,EAAAjF,EAAA,GAAA,KAAA,EAK0D,GAA3DvD,EAAmC,MAApBH,EAAAA,EAAwBP,GAEzCG,EAAmBQ,aAAY,CAAAuI,EAAAjG,EAAA,GAAA,KAAA,CAsB9B,GAtB8BiG,EAAAlG,EAAA,GAEzBrC,EAAeR,EAAmBQ,aAAaD,GAE/CE,EAAmBsE,EACvBvE,EAAa,GACbA,EAAawE,MAAM,GACnB,CAAEvB,IAAKnE,EAAKmE,IAAKwB,SAAU,OAAQ9E,IAAAA,GA7Rb,IAiSpBO,EAA6BsD,EAAakB,SAEd,IAA5BzE,EAAiB0E,OACnBzE,EAAesD,EAAaW,YACnBlE,EAAiB2E,YArSJ,GAsStB1E,EAAesD,EAAaqB,2BAE5B5E,EAAiB6E,OAAOC,OAASxH,GACjC0C,EAAiByD,OAAOqB,OAASxH,KAEjC2C,EAAesD,EAAawB,kCAG1B9E,IAAiBsD,EAAakB,SAAQ,CAAA6D,EAAAjG,EAAA,GAAA,KAAA,CASrC,OARHY,EAAoB,CAClBE,WAAY,QACZlD,aAAAA,EACA+E,WAAmC,OAAzB4C,EAAE5H,EAAiB0E,QAAMkD,OAAI3C,EACvCJ,OAAQ7E,EAAiB6E,OAAON,MAAM,EAAGjH,SAAsB2H,EAC/DxB,OAAQzD,EAAiByD,OAAOc,MAAM,EAAGjH,SAAsB2H,EAC/DN,YAAa3E,EAAiB2E,YAC9BO,YAAalF,EAAiBkF,cAC7BoD,EAAAjF,EAAA,GAAA,KAAA,GAAAiF,EAAAjG,EAAA,GAAA,MAAA,KAAA,GAUF,OAVEiG,EAAAlG,EAAA,GAAAiG,EAAAC,EAAA3F,EAILqB,QAAQC,MAAM,cAAaoE,GAE3BpF,EAAoB,CAClBE,WAAY,QACZlD,aAAcsD,EAAaW,YAC3BT,OAAQ4E,aAAiBlE,MAAQkE,EAAMjE,QAAUC,OAAMgE,KACtDC,EAAAjF,EAAA,GAAA,KAAA,GAkBJ,OAZKnC,EAAiBqH,KAAKC,IArUM,IAuUO,OAAvCX,EAAC9I,EAA2B4G,aAAWkC,EAAI,GAAK,KAG5C1G,EAAU5B,EAAmB4B,QAAQrB,GAErCsB,EAAckD,EAClBnD,EAAQ,GACRA,EAAQoD,MAAM,GACd,CAAEvB,IAAKnE,EAAKmE,IAAKwB,SAAU,OAAQoB,MAAO9G,EAAOb,MAAOyB,IAAAA,GACxDwB,GACDoH,EAAAjG,EAAA,GAEyBwD,EAAgBhH,EAAKmE,IAAuD,OAApD8E,EAAE/I,EAA2B+G,yBAAuBgC,EAAI,IAAG,KAAA,GAAvGzG,EAAWiH,EAAA3F,EAEb1C,EAA6BsD,EAAakB,SAEnB,IAAvBrD,EAAYsD,OACdzE,EAAesD,EAAawC,cACnB3E,EAAYuD,YAAczD,EACnCjB,EAAesD,EAAayC,oBACnB5E,EAAY8D,oBAAW6C,EAAIhJ,EAA2BkH,iBAAe8B,EAAI7B,OAAOC,mBACzFlG,EAAesD,EAAa6C,sBACnBhF,EAAYyD,OAAOC,OAASxH,GAAqB8D,EAAYqC,OAAOqB,OAASxH,EACtF2C,EAAesD,EAAa8C,2BACnBhF,EAAYyD,eAAMkD,EAAsD,OAAtDC,EAAIlJ,EAA2B+G,8BAAuB,EAAlDmC,EAAoDnD,QAAMkD,EAAI,KAC7F/H,EAAesD,EAAa+C,oCAG9BrD,EAAoB,CAClBE,WAAY,QACZlD,aAAAA,EACA+E,WAA8B,OAApBkD,EAAE9G,EAAYsD,QAAMwD,OAAIjD,EAClChH,MAAOa,EAAOb,MACd4G,OAAQzD,EAAYyD,OAAON,MAAM,EAAGjH,SAAsB2H,EAC1DxB,OAAQrC,EAAYqC,OAAOc,MAAM,EAAGjH,SAAsB2H,EAC1DN,YAAavD,EAAYuD,YACzBO,YAAa9D,EAAY8D,YACzB7D,YAAaA,EAAYyD,OAAS,EAAIzD,OAAc4D,IACnD,KAAA,GAAA,OAAAqD,EAAAjF,EAAA,GAAA,EAAAsE,EAAA,KAAA,CAAA,CAAA,GAAA,IAAA,CAAA,EAAA,IAAA,KAENtJ,MAAAC,KAAAC,UAAA"}
|
|
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 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 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","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","cwd","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","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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"}
|