🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@exercode/problem-utils

Package Overview
Dependencies
Maintainers
1
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@exercode/problem-utils - npm Package Compare versions

Comparing version
1.16.6
to
1.16.7
+1
dist/_virtual/_rolldown/runtime.cjs
"use strict";var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));exports.__toESM=s;
+2
-2

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:child_process"),t=require("node:fs"),n=require("node:os"),s=require("node:path"),o=require("../types/decisionCode.cjs"),i=require("../types/testCaseResult.cjs"),a=require("./printDebugBanner.cjs");function c(){return(c=e.asyncToGenerator(e.regenerator().m(function o(i,c,m){var v,b,g,k,E,D,j,C,S,w,_,T,B,A,q,P,x,G;return e.regenerator().w(function(o){for(;;)switch(o.p=o.n){case 0:return o.p=0,o.n=1,t.promises.mkdtemp(s.join(n.tmpdir(),"problem-utils-isolation_"));case 1:return v=o.v,C=s.resolve(i),S=s.join(v,f(C)),o.n=2,t.promises.mkdir(s.dirname(S),{recursive:!0});case 2:return o.n=3,t.promises.cp(C,S,{recursive:!0,filter:u});case 3:return o.n=4,d(v,C);case 4:if(w=s.relative(C,s.resolve(c.cwd)),_=s.join(S,w),!(T=h(C)).startsWith("..")&&!s.isAbsolute(T)){o.n=5;break}return a.printDebugBanner(["[DEBUG MODE] isolated problem directory check skipped","","The invoked judge script is located outside the problem directory.","Script path: ".concat(T)]),o.a(2,{passed:!0});case 5:if(B=process.execArgv.filter(l),A=JSON.stringify(p(m)?m:{}),q=r.spawnSync(process.execPath,[].concat(e.toConsumableArray(B),[T,_,A]),{cwd:S,encoding:"utf8",env:process.env,timeout:3e4}),P=null!=(b=q.stdout)?b:"",x=null!=(g=q.stderr)?g:"",0!==q.status||!y(P)){o.n=6;break}return a.printDebugBanner(["[DEBUG MODE] isolated problem directory check passed","","Copied problem dir : ".concat(S),"Checked cwd : ".concat(w)]),o.a(2,{passed:!0});case 6:return a.printDebugBanner(["[DEBUG MODE] isolated problem directory check failed","","The judge did not complete successfully after copying only the problem directory to a temporary location.","Make sure judge.ts imports only files included in the problem directory.","","Copied problem dir : ".concat(S),"Checked cwd : ".concat(w),"Exit status : ".concat(null!=(k=null!=(E=q.status)?E:q.signal)?k:"unknown"),"Spawn error : ".concat(null!=(D=null==(j=q.error)?void 0:j.message)?D:"<none>"),"","stdout:",P.trimEnd()||"<empty>","","stderr:",x.trimEnd()||"<empty>"]),o.a(2,{passed:!1});case 7:return o.p=7,G=o.v,a.printDebugBanner(["[DEBUG MODE] isolated problem directory check failed due to an unexpected error","",G instanceof Error?G.message:String(G)]),o.a(2,{passed:!1});case 8:if(o.p=8,!v){o.n=12;break}return o.p=9,o.n=10,t.promises.rm(v,{recursive:!0,force:!0});case 10:o.n=12;break;case 11:o.p=11,o.v;case 12:return o.f(8);case 13:return o.a(2)}},o,null,[[9,11],[0,7,8,13]])}))).apply(this,arguments)}function u(e){var r=s.basename(e);return"node_modules"!==r&&".git"!==r}function l(e){return!e.startsWith("--inspect")&&!e.startsWith("--watch")&&!e.startsWith("--hot")}function p(r){return null!=r&&"object"===e.typeof(r)&&!Array.isArray(r)}function d(e,r){return m.apply(this,arguments)}function m(){return(m=e.asyncToGenerator(e.regenerator().m(function r(n,o){var i,a,c,u;return e.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:i=s.resolve(o);case 1:if(a=s.join(i,"node_modules"),!t.existsSync(a)){e.n=5;break}return c=s.join(n,f(i),"node_modules"),e.p=2,e.n=3,t.promises.symlink(a,c,"win32"===process.platform?"junction":"dir");case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:if((u=s.dirname(i))!==i){e.n=6;break}return e.a(3,7);case 6:i=u,e.n=1;break;case 7:return e.a(2)}},r,null,[[2,4]])}))).apply(this,arguments)}function f(e){var r=s.parse(e).root;return s.relative(r,e)}function h(e){var r=process.argv[1];if(!r)return".".concat(s.sep,"judge.ts");var t=s.relative(e,s.resolve(r));return s.isAbsolute(t)||t.startsWith(".")?t:".".concat(s.sep).concat(t)}function y(e){var r=e.split(/\r?\n/).filter(function(e){return e.startsWith(i.TEST_CASE_RESULT_PREFIX)});return 0!==r.length&&r.every(function(e){try{var r=i.testCaseResultSchema.safeParse(JSON.parse(e.slice(i.TEST_CASE_RESULT_PREFIX.length)));return r.success&&r.data.decisionCode===o.DecisionCode.ACCEPTED}catch(e){return!1}})}exports.checkProblemDirIsolation=function(e,r,t){return c.apply(this,arguments)};
//# sourceMappingURL=checkProblemDirIsolation.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../types/testCaseResult.cjs"),n=require("../types/decisionCode.cjs"),r=require("./printDebugBanner.cjs");let i=require("node:child_process");i=e.__toESM(i,1);let a=require("node:os");a=e.__toESM(a,1);let o=require("node:path");o=e.__toESM(o,1);let s=require("node:fs");s=e.__toESM(s,1);async function c(e,t,n){let c;try{c=await s.default.promises.mkdtemp(o.default.join(a.default.tmpdir(),`problem-utils-isolation_`));let g=o.default.resolve(e),_=o.default.join(c,p(g));await s.default.promises.mkdir(o.default.dirname(_),{recursive:!0}),await s.default.promises.cp(g,_,{recursive:!0,filter:l}),await f(c,g);let v=o.default.relative(g,o.default.resolve(t.cwd)),y=o.default.join(_,v),b=m(g);if(b.startsWith(`..`)||o.default.isAbsolute(b))return r.printDebugBanner([`[DEBUG MODE] isolated problem directory check skipped`,``,`The invoked judge script is located outside the problem directory.`,`Script path: ${b}`]),{passed:!0};let x=process.execArgv.filter(u),S=JSON.stringify(d(n)?n:{}),C=i.default.spawnSync(process.execPath,[...x,b,y,S],{cwd:_,encoding:`utf8`,env:process.env,timeout:3e4}),w=C.stdout??``,T=C.stderr??``;return C.status===0&&h(w)?(r.printDebugBanner([`[DEBUG MODE] isolated problem directory check passed`,``,`Copied problem dir : ${_}`,`Checked cwd : ${v}`]),{passed:!0}):(r.printDebugBanner([`[DEBUG MODE] isolated problem directory check failed`,``,`The judge did not complete successfully after copying only the problem directory to a temporary location.`,`Make sure judge.ts imports only files included in the problem directory.`,``,`Copied problem dir : ${_}`,`Checked cwd : ${v}`,`Exit status : ${C.status??C.signal??`unknown`}`,`Spawn error : ${C.error?.message??`<none>`}`,``,`stdout:`,w.trimEnd()||`<empty>`,``,`stderr:`,T.trimEnd()||`<empty>`]),{passed:!1})}catch(e){return r.printDebugBanner([`[DEBUG MODE] isolated problem directory check failed due to an unexpected error`,``,e instanceof Error?e.message:String(e)]),{passed:!1}}finally{if(c)try{await s.default.promises.rm(c,{recursive:!0,force:!0})}catch{}}}function l(e){let t=o.default.basename(e);return t!==`node_modules`&&t!==`.git`}function u(e){return!e.startsWith(`--inspect`)&&!e.startsWith(`--watch`)&&!e.startsWith(`--hot`)}function d(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function f(e,t){let n=o.default.resolve(t);for(;;){let t=o.default.join(n,`node_modules`);if(s.default.existsSync(t)){let r=o.default.join(e,p(n),`node_modules`);try{await s.default.promises.symlink(t,r,process.platform===`win32`?`junction`:`dir`)}catch{}}let r=o.default.dirname(n);if(r===n)break;n=r}}function p(e){let{root:t}=o.default.parse(e);return o.default.relative(t,e)}function m(e){let t=process.argv[1];if(!t)return`.${o.default.sep}judge.ts`;let n=o.default.relative(e,o.default.resolve(t));return o.default.isAbsolute(n)||n.startsWith(`.`)?n:`.${o.default.sep}${n}`}function h(e){let r=e.split(/\r?\n/).filter(e=>e.startsWith(t.TEST_CASE_RESULT_PREFIX));return r.length===0?!1:r.every(e=>{try{let r=t.testCaseResultSchema.safeParse(JSON.parse(e.slice(t.TEST_CASE_RESULT_PREFIX.length)));return r.success&&r.data.decisionCode===n.DecisionCode.ACCEPTED}catch{return!1}})}exports.checkProblemDirIsolation=c;
//# sourceMappingURL=checkProblemDirIsolation.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"checkProblemDirIsolation.cjs","sources":["../../src/helpers/checkProblemDirIsolation.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { TEST_CASE_RESULT_PREFIX, testCaseResultSchema } from '../types/testCaseResult.js';\n\nimport { printDebugBanner } from './printDebugBanner.js';\nimport type { ResolvedCwd } from './resolveCwds.js';\n\nconst ISOLATION_CHECK_TIMEOUT_MS = 30_000;\n\nexport interface ProblemDirIsolationCheckResult {\n passed: boolean;\n}\n\n/**\n * Check that a judge can run after only the problem directory is copied elsewhere.\n */\nexport async function checkProblemDirIsolation(\n problemDir: string,\n resolvedCwd: ResolvedCwd,\n params: unknown\n): Promise<ProblemDirIsolationCheckResult> {\n let tempRoot: string | undefined;\n try {\n tempRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'problem-utils-isolation_'));\n const absoluteProblemDir = path.resolve(problemDir);\n const copiedProblemDir = path.join(tempRoot, toTempRelativePath(absoluteProblemDir));\n await fs.promises.mkdir(path.dirname(copiedProblemDir), { recursive: true });\n await fs.promises.cp(absoluteProblemDir, copiedProblemDir, {\n recursive: true,\n filter: isCopiedProblemPath,\n });\n await symlinkAllAncestorNodeModules(tempRoot, absoluteProblemDir);\n\n const relativeCwd = path.relative(absoluteProblemDir, path.resolve(resolvedCwd.cwd));\n const copiedCwd = path.join(copiedProblemDir, relativeCwd);\n const scriptPath = getInvokedScriptPath(absoluteProblemDir);\n if (scriptPath.startsWith('..') || path.isAbsolute(scriptPath)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'The invoked judge script is located outside the problem directory.',\n `Script path: ${scriptPath}`,\n ]);\n return { passed: true };\n }\n const execArgv = process.execArgv.filter(isIsolationExecArg);\n const paramsJson = JSON.stringify(isJudgeParamsObject(params) ? params : {});\n const spawnResult = child_process.spawnSync(process.execPath, [...execArgv, scriptPath, copiedCwd, paramsJson], {\n cwd: copiedProblemDir,\n encoding: 'utf8',\n env: process.env,\n timeout: ISOLATION_CHECK_TIMEOUT_MS,\n });\n const stdout = spawnResult.stdout ?? '';\n const stderr = spawnResult.stderr ?? '';\n\n if (spawnResult.status === 0 && isAcceptedJudgeOutput(stdout)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check passed',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n ]);\n return { passed: true };\n }\n\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed',\n '',\n 'The judge did not complete successfully after copying only the problem directory to a temporary location.',\n 'Make sure judge.ts imports only files included in the problem directory.',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n `Exit status : ${spawnResult.status ?? spawnResult.signal ?? 'unknown'}`,\n `Spawn error : ${spawnResult.error?.message ?? '<none>'}`,\n '',\n 'stdout:',\n stdout.trimEnd() || '<empty>',\n '',\n 'stderr:',\n stderr.trimEnd() || '<empty>',\n ]);\n return { passed: false };\n } catch (error) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed due to an unexpected error',\n '',\n error instanceof Error ? error.message : String(error),\n ]);\n return { passed: false };\n } finally {\n if (tempRoot) {\n try {\n await fs.promises.rm(tempRoot, { recursive: true, force: true });\n } catch {\n // Cleanup errors should not mask the primary isolation check result.\n }\n }\n }\n}\n\nfunction isCopiedProblemPath(src: string): boolean {\n const name = path.basename(src);\n return name !== 'node_modules' && name !== '.git';\n}\n\nfunction isIsolationExecArg(arg: string): boolean {\n return !arg.startsWith('--inspect') && !arg.startsWith('--watch') && !arg.startsWith('--hot');\n}\n\nfunction isJudgeParamsObject(params: unknown): params is object {\n return params !== undefined && params !== null && typeof params === 'object' && !Array.isArray(params);\n}\n\nasync function symlinkAllAncestorNodeModules(tempRoot: string, problemDir: string): Promise<void> {\n let currentDir = path.resolve(problemDir);\n while (true) {\n const nodeModulesPath = path.join(currentDir, 'node_modules');\n if (fs.existsSync(nodeModulesPath)) {\n const targetSymlinkPath = path.join(tempRoot, toTempRelativePath(currentDir), 'node_modules');\n try {\n await fs.promises.symlink(\n nodeModulesPath,\n targetSymlinkPath,\n process.platform === 'win32' ? 'junction' : 'dir'\n );\n } catch {\n // Package resolution is best-effort; the isolation check still reports a clear spawn failure if imports break.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n}\n\nfunction toTempRelativePath(absolutePath: string): string {\n const { root } = path.parse(absolutePath);\n return path.relative(root, absolutePath);\n}\n\nfunction getInvokedScriptPath(problemDir: string): string {\n const scriptPath = process.argv[1];\n if (!scriptPath) return `.${path.sep}judge.ts`;\n const relativeScriptPath = path.relative(problemDir, path.resolve(scriptPath));\n if (path.isAbsolute(relativeScriptPath)) return relativeScriptPath;\n return relativeScriptPath.startsWith('.') ? relativeScriptPath : `.${path.sep}${relativeScriptPath}`;\n}\n\nfunction isAcceptedJudgeOutput(stdout: string): boolean {\n const resultLines = stdout.split(/\\r?\\n/).filter((line) => line.startsWith(TEST_CASE_RESULT_PREFIX));\n if (resultLines.length === 0) return false;\n\n return resultLines.every((line) => {\n try {\n const parsedResult = testCaseResultSchema.safeParse(JSON.parse(line.slice(TEST_CASE_RESULT_PREFIX.length)));\n return parsedResult.success && parsedResult.data.decisionCode === DecisionCode.ACCEPTED;\n } catch {\n return false;\n }\n });\n}\n"],"names":["_checkProblemDirIsolation","_asyncToGenerator","_regenerator","m","_callee","problemDir","resolvedCwd","params","tempRoot","_spawnResult$stdout","_spawnResult$stderr","_ref","_spawnResult$status","_spawnResult$error$me","_spawnResult$error","absoluteProblemDir","copiedProblemDir","relativeCwd","copiedCwd","scriptPath","execArgv","paramsJson","spawnResult","stdout","stderr","_t","w","_context","p","n","fs","promises","mkdtemp","path","join","os","tmpdir","v","resolve","toTempRelativePath","mkdir","dirname","recursive","cp","filter","isCopiedProblemPath","symlinkAllAncestorNodeModules","relative","cwd","getInvokedScriptPath","startsWith","isAbsolute","printDebugBanner","concat","a","passed","process","isIsolationExecArg","JSON","stringify","isJudgeParamsObject","child_process","spawnSync","execPath","_toConsumableArray","encoding","env","timeout","status","isAcceptedJudgeOutput","signal","error","message","trimEnd","Error","String","rm","force","f","apply","this","arguments","src","name","basename","arg","_typeof","Array","isArray","_x4","_x5","_symlinkAllAncestorNodeModules","_callee2","currentDir","nodeModulesPath","targetSymlinkPath","parentDir","_context2","existsSync","symlink","platform","absolutePath","root","parse","argv","sep","relativeScriptPath","resultLines","split","line","TEST_CASE_RESULT_PREFIX","length","every","parsedResult","testCaseResultSchema","safeParse","slice","success","data","decisionCode","DecisionCode","ACCEPTED","_unused","_x","_x2","_x3"],"mappings":"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"}
{"version":3,"file":"checkProblemDirIsolation.cjs","names":["fs","path","os","child_process","TEST_CASE_RESULT_PREFIX","testCaseResultSchema","DecisionCode"],"sources":["../../src/helpers/checkProblemDirIsolation.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { TEST_CASE_RESULT_PREFIX, testCaseResultSchema } from '../types/testCaseResult.js';\n\nimport { printDebugBanner } from './printDebugBanner.js';\nimport type { ResolvedCwd } from './resolveCwds.js';\n\nconst ISOLATION_CHECK_TIMEOUT_MS = 30_000;\n\nexport interface ProblemDirIsolationCheckResult {\n passed: boolean;\n}\n\n/**\n * Check that a judge can run after only the problem directory is copied elsewhere.\n */\nexport async function checkProblemDirIsolation(\n problemDir: string,\n resolvedCwd: ResolvedCwd,\n params: unknown\n): Promise<ProblemDirIsolationCheckResult> {\n let tempRoot: string | undefined;\n try {\n tempRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'problem-utils-isolation_'));\n const absoluteProblemDir = path.resolve(problemDir);\n const copiedProblemDir = path.join(tempRoot, toTempRelativePath(absoluteProblemDir));\n await fs.promises.mkdir(path.dirname(copiedProblemDir), { recursive: true });\n await fs.promises.cp(absoluteProblemDir, copiedProblemDir, {\n recursive: true,\n filter: isCopiedProblemPath,\n });\n await symlinkAllAncestorNodeModules(tempRoot, absoluteProblemDir);\n\n const relativeCwd = path.relative(absoluteProblemDir, path.resolve(resolvedCwd.cwd));\n const copiedCwd = path.join(copiedProblemDir, relativeCwd);\n const scriptPath = getInvokedScriptPath(absoluteProblemDir);\n if (scriptPath.startsWith('..') || path.isAbsolute(scriptPath)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'The invoked judge script is located outside the problem directory.',\n `Script path: ${scriptPath}`,\n ]);\n return { passed: true };\n }\n const execArgv = process.execArgv.filter(isIsolationExecArg);\n const paramsJson = JSON.stringify(isJudgeParamsObject(params) ? params : {});\n const spawnResult = child_process.spawnSync(process.execPath, [...execArgv, scriptPath, copiedCwd, paramsJson], {\n cwd: copiedProblemDir,\n encoding: 'utf8',\n env: process.env,\n timeout: ISOLATION_CHECK_TIMEOUT_MS,\n });\n const stdout = spawnResult.stdout ?? '';\n const stderr = spawnResult.stderr ?? '';\n\n if (spawnResult.status === 0 && isAcceptedJudgeOutput(stdout)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check passed',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n ]);\n return { passed: true };\n }\n\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed',\n '',\n 'The judge did not complete successfully after copying only the problem directory to a temporary location.',\n 'Make sure judge.ts imports only files included in the problem directory.',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n `Exit status : ${spawnResult.status ?? spawnResult.signal ?? 'unknown'}`,\n `Spawn error : ${spawnResult.error?.message ?? '<none>'}`,\n '',\n 'stdout:',\n stdout.trimEnd() || '<empty>',\n '',\n 'stderr:',\n stderr.trimEnd() || '<empty>',\n ]);\n return { passed: false };\n } catch (error) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed due to an unexpected error',\n '',\n error instanceof Error ? error.message : String(error),\n ]);\n return { passed: false };\n } finally {\n if (tempRoot) {\n try {\n await fs.promises.rm(tempRoot, { recursive: true, force: true });\n } catch {\n // Cleanup errors should not mask the primary isolation check result.\n }\n }\n }\n}\n\nfunction isCopiedProblemPath(src: string): boolean {\n const name = path.basename(src);\n return name !== 'node_modules' && name !== '.git';\n}\n\nfunction isIsolationExecArg(arg: string): boolean {\n return !arg.startsWith('--inspect') && !arg.startsWith('--watch') && !arg.startsWith('--hot');\n}\n\nfunction isJudgeParamsObject(params: unknown): params is object {\n return params !== undefined && params !== null && typeof params === 'object' && !Array.isArray(params);\n}\n\nasync function symlinkAllAncestorNodeModules(tempRoot: string, problemDir: string): Promise<void> {\n let currentDir = path.resolve(problemDir);\n while (true) {\n const nodeModulesPath = path.join(currentDir, 'node_modules');\n if (fs.existsSync(nodeModulesPath)) {\n const targetSymlinkPath = path.join(tempRoot, toTempRelativePath(currentDir), 'node_modules');\n try {\n await fs.promises.symlink(\n nodeModulesPath,\n targetSymlinkPath,\n process.platform === 'win32' ? 'junction' : 'dir'\n );\n } catch {\n // Package resolution is best-effort; the isolation check still reports a clear spawn failure if imports break.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n}\n\nfunction toTempRelativePath(absolutePath: string): string {\n const { root } = path.parse(absolutePath);\n return path.relative(root, absolutePath);\n}\n\nfunction getInvokedScriptPath(problemDir: string): string {\n const scriptPath = process.argv[1];\n if (!scriptPath) return `.${path.sep}judge.ts`;\n const relativeScriptPath = path.relative(problemDir, path.resolve(scriptPath));\n if (path.isAbsolute(relativeScriptPath)) return relativeScriptPath;\n return relativeScriptPath.startsWith('.') ? relativeScriptPath : `.${path.sep}${relativeScriptPath}`;\n}\n\nfunction isAcceptedJudgeOutput(stdout: string): boolean {\n const resultLines = stdout.split(/\\r?\\n/).filter((line) => line.startsWith(TEST_CASE_RESULT_PREFIX));\n if (resultLines.length === 0) return false;\n\n return resultLines.every((line) => {\n try {\n const parsedResult = testCaseResultSchema.safeParse(JSON.parse(line.slice(TEST_CASE_RESULT_PREFIX.length)));\n return parsedResult.success && parsedResult.data.decisionCode === DecisionCode.ACCEPTED;\n } catch {\n return false;\n }\n });\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as r,toConsumableArray as t,typeof as n}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"node:child_process";import o from"node:fs";import i from"node:os";import a from"node:path";import{DecisionCode as c}from"../types/decisionCode.js";import{TEST_CASE_RESULT_PREFIX as u,testCaseResultSchema as p}from"../types/testCaseResult.js";import{printDebugBanner as l}from"./printDebugBanner.js";function d(e,r,t){return m.apply(this,arguments)}function m(){return(m=e(r().m(function e(n,c,u){var p,d,m,b,E,w,C,D,A,S,_,x,B,O,W,G,M,P;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,o.promises.mkdtemp(a.join(i.tmpdir(),"problem-utils-isolation_"));case 1:return p=e.v,D=a.resolve(n),A=a.join(p,k(D)),e.n=2,o.promises.mkdir(a.dirname(A),{recursive:!0});case 2:return e.n=3,o.promises.cp(D,A,{recursive:!0,filter:f});case 3:return e.n=4,v(p,D);case 4:if(S=a.relative(D,a.resolve(c.cwd)),_=a.join(A,S),!(x=g(D)).startsWith("..")&&!a.isAbsolute(x)){e.n=5;break}return l(["[DEBUG MODE] isolated problem directory check skipped","","The invoked judge script is located outside the problem directory.","Script path: ".concat(x)]),e.a(2,{passed:!0});case 5:if(B=process.execArgv.filter(h),O=JSON.stringify(y(u)?u:{}),W=s.spawnSync(process.execPath,[].concat(t(B),[x,_,O]),{cwd:A,encoding:"utf8",env:process.env,timeout:3e4}),G=null!=(d=W.stdout)?d:"",M=null!=(m=W.stderr)?m:"",0!==W.status||!j(G)){e.n=6;break}return l(["[DEBUG MODE] isolated problem directory check passed","","Copied problem dir : ".concat(A),"Checked cwd : ".concat(S)]),e.a(2,{passed:!0});case 6:return l(["[DEBUG MODE] isolated problem directory check failed","","The judge did not complete successfully after copying only the problem directory to a temporary location.","Make sure judge.ts imports only files included in the problem directory.","","Copied problem dir : ".concat(A),"Checked cwd : ".concat(S),"Exit status : ".concat(null!=(b=null!=(E=W.status)?E:W.signal)?b:"unknown"),"Spawn error : ".concat(null!=(w=null==(C=W.error)?void 0:C.message)?w:"<none>"),"","stdout:",G.trimEnd()||"<empty>","","stderr:",M.trimEnd()||"<empty>"]),e.a(2,{passed:!1});case 7:return e.p=7,P=e.v,l(["[DEBUG MODE] isolated problem directory check failed due to an unexpected error","",P instanceof Error?P.message:String(P)]),e.a(2,{passed:!1});case 8:if(e.p=8,!p){e.n=12;break}return e.p=9,e.n=10,o.promises.rm(p,{recursive:!0,force:!0});case 10:e.n=12;break;case 11:e.p=11,e.v;case 12:return e.f(8);case 13:return e.a(2)}},e,null,[[9,11],[0,7,8,13]])}))).apply(this,arguments)}function f(e){var r=a.basename(e);return"node_modules"!==r&&".git"!==r}function h(e){return!e.startsWith("--inspect")&&!e.startsWith("--watch")&&!e.startsWith("--hot")}function y(e){return null!=e&&"object"===n(e)&&!Array.isArray(e)}function v(e,r){return b.apply(this,arguments)}function b(){return(b=e(r().m(function e(t,n){var s,i,c,u;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:s=a.resolve(n);case 1:if(i=a.join(s,"node_modules"),!o.existsSync(i)){e.n=5;break}return c=a.join(t,k(s),"node_modules"),e.p=2,e.n=3,o.promises.symlink(i,c,"win32"===process.platform?"junction":"dir");case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:if((u=a.dirname(s))!==s){e.n=6;break}return e.a(3,7);case 6:s=u,e.n=1;break;case 7:return e.a(2)}},e,null,[[2,4]])}))).apply(this,arguments)}function k(e){var r=a.parse(e).root;return a.relative(r,e)}function g(e){var r=process.argv[1];if(!r)return".".concat(a.sep,"judge.ts");var t=a.relative(e,a.resolve(r));return a.isAbsolute(t)||t.startsWith(".")?t:".".concat(a.sep).concat(t)}function j(e){var r=e.split(/\r?\n/).filter(function(e){return e.startsWith(u)});return 0!==r.length&&r.every(function(e){try{var r=p.safeParse(JSON.parse(e.slice(u.length)));return r.success&&r.data.decisionCode===c.ACCEPTED}catch(e){return!1}})}export{d as checkProblemDirIsolation};
//# sourceMappingURL=checkProblemDirIsolation.js.map
import{TEST_CASE_RESULT_PREFIX as e,testCaseResultSchema as t}from"../types/testCaseResult.js";import{DecisionCode as n}from"../types/decisionCode.js";import{printDebugBanner as r}from"./printDebugBanner.js";import i from"node:child_process";import a from"node:os";import o from"node:path";import s from"node:fs";async function c(e,t,n){let c;try{c=await s.promises.mkdtemp(o.join(a.tmpdir(),`problem-utils-isolation_`));let g=o.resolve(e),_=o.join(c,p(g));await s.promises.mkdir(o.dirname(_),{recursive:!0}),await s.promises.cp(g,_,{recursive:!0,filter:l}),await f(c,g);let v=o.relative(g,o.resolve(t.cwd)),y=o.join(_,v),b=m(g);if(b.startsWith(`..`)||o.isAbsolute(b))return r([`[DEBUG MODE] isolated problem directory check skipped`,``,`The invoked judge script is located outside the problem directory.`,`Script path: ${b}`]),{passed:!0};let x=process.execArgv.filter(u),S=JSON.stringify(d(n)?n:{}),C=i.spawnSync(process.execPath,[...x,b,y,S],{cwd:_,encoding:`utf8`,env:process.env,timeout:3e4}),w=C.stdout??``,T=C.stderr??``;return C.status===0&&h(w)?(r([`[DEBUG MODE] isolated problem directory check passed`,``,`Copied problem dir : ${_}`,`Checked cwd : ${v}`]),{passed:!0}):(r([`[DEBUG MODE] isolated problem directory check failed`,``,`The judge did not complete successfully after copying only the problem directory to a temporary location.`,`Make sure judge.ts imports only files included in the problem directory.`,``,`Copied problem dir : ${_}`,`Checked cwd : ${v}`,`Exit status : ${C.status??C.signal??`unknown`}`,`Spawn error : ${C.error?.message??`<none>`}`,``,`stdout:`,w.trimEnd()||`<empty>`,``,`stderr:`,T.trimEnd()||`<empty>`]),{passed:!1})}catch(e){return r([`[DEBUG MODE] isolated problem directory check failed due to an unexpected error`,``,e instanceof Error?e.message:String(e)]),{passed:!1}}finally{if(c)try{await s.promises.rm(c,{recursive:!0,force:!0})}catch{}}}function l(e){let t=o.basename(e);return t!==`node_modules`&&t!==`.git`}function u(e){return!e.startsWith(`--inspect`)&&!e.startsWith(`--watch`)&&!e.startsWith(`--hot`)}function d(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function f(e,t){let n=o.resolve(t);for(;;){let t=o.join(n,`node_modules`);if(s.existsSync(t)){let r=o.join(e,p(n),`node_modules`);try{await s.promises.symlink(t,r,process.platform===`win32`?`junction`:`dir`)}catch{}}let r=o.dirname(n);if(r===n)break;n=r}}function p(e){let{root:t}=o.parse(e);return o.relative(t,e)}function m(e){let t=process.argv[1];if(!t)return`.${o.sep}judge.ts`;let n=o.relative(e,o.resolve(t));return o.isAbsolute(n)||n.startsWith(`.`)?n:`.${o.sep}${n}`}function h(r){let i=r.split(/\r?\n/).filter(t=>t.startsWith(e));return i.length===0?!1:i.every(r=>{try{let i=t.safeParse(JSON.parse(r.slice(e.length)));return i.success&&i.data.decisionCode===n.ACCEPTED}catch{return!1}})}export{c as checkProblemDirIsolation};
//# sourceMappingURL=checkProblemDirIsolation.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"checkProblemDirIsolation.js","sources":["../../src/helpers/checkProblemDirIsolation.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { TEST_CASE_RESULT_PREFIX, testCaseResultSchema } from '../types/testCaseResult.js';\n\nimport { printDebugBanner } from './printDebugBanner.js';\nimport type { ResolvedCwd } from './resolveCwds.js';\n\nconst ISOLATION_CHECK_TIMEOUT_MS = 30_000;\n\nexport interface ProblemDirIsolationCheckResult {\n passed: boolean;\n}\n\n/**\n * Check that a judge can run after only the problem directory is copied elsewhere.\n */\nexport async function checkProblemDirIsolation(\n problemDir: string,\n resolvedCwd: ResolvedCwd,\n params: unknown\n): Promise<ProblemDirIsolationCheckResult> {\n let tempRoot: string | undefined;\n try {\n tempRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'problem-utils-isolation_'));\n const absoluteProblemDir = path.resolve(problemDir);\n const copiedProblemDir = path.join(tempRoot, toTempRelativePath(absoluteProblemDir));\n await fs.promises.mkdir(path.dirname(copiedProblemDir), { recursive: true });\n await fs.promises.cp(absoluteProblemDir, copiedProblemDir, {\n recursive: true,\n filter: isCopiedProblemPath,\n });\n await symlinkAllAncestorNodeModules(tempRoot, absoluteProblemDir);\n\n const relativeCwd = path.relative(absoluteProblemDir, path.resolve(resolvedCwd.cwd));\n const copiedCwd = path.join(copiedProblemDir, relativeCwd);\n const scriptPath = getInvokedScriptPath(absoluteProblemDir);\n if (scriptPath.startsWith('..') || path.isAbsolute(scriptPath)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'The invoked judge script is located outside the problem directory.',\n `Script path: ${scriptPath}`,\n ]);\n return { passed: true };\n }\n const execArgv = process.execArgv.filter(isIsolationExecArg);\n const paramsJson = JSON.stringify(isJudgeParamsObject(params) ? params : {});\n const spawnResult = child_process.spawnSync(process.execPath, [...execArgv, scriptPath, copiedCwd, paramsJson], {\n cwd: copiedProblemDir,\n encoding: 'utf8',\n env: process.env,\n timeout: ISOLATION_CHECK_TIMEOUT_MS,\n });\n const stdout = spawnResult.stdout ?? '';\n const stderr = spawnResult.stderr ?? '';\n\n if (spawnResult.status === 0 && isAcceptedJudgeOutput(stdout)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check passed',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n ]);\n return { passed: true };\n }\n\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed',\n '',\n 'The judge did not complete successfully after copying only the problem directory to a temporary location.',\n 'Make sure judge.ts imports only files included in the problem directory.',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n `Exit status : ${spawnResult.status ?? spawnResult.signal ?? 'unknown'}`,\n `Spawn error : ${spawnResult.error?.message ?? '<none>'}`,\n '',\n 'stdout:',\n stdout.trimEnd() || '<empty>',\n '',\n 'stderr:',\n stderr.trimEnd() || '<empty>',\n ]);\n return { passed: false };\n } catch (error) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed due to an unexpected error',\n '',\n error instanceof Error ? error.message : String(error),\n ]);\n return { passed: false };\n } finally {\n if (tempRoot) {\n try {\n await fs.promises.rm(tempRoot, { recursive: true, force: true });\n } catch {\n // Cleanup errors should not mask the primary isolation check result.\n }\n }\n }\n}\n\nfunction isCopiedProblemPath(src: string): boolean {\n const name = path.basename(src);\n return name !== 'node_modules' && name !== '.git';\n}\n\nfunction isIsolationExecArg(arg: string): boolean {\n return !arg.startsWith('--inspect') && !arg.startsWith('--watch') && !arg.startsWith('--hot');\n}\n\nfunction isJudgeParamsObject(params: unknown): params is object {\n return params !== undefined && params !== null && typeof params === 'object' && !Array.isArray(params);\n}\n\nasync function symlinkAllAncestorNodeModules(tempRoot: string, problemDir: string): Promise<void> {\n let currentDir = path.resolve(problemDir);\n while (true) {\n const nodeModulesPath = path.join(currentDir, 'node_modules');\n if (fs.existsSync(nodeModulesPath)) {\n const targetSymlinkPath = path.join(tempRoot, toTempRelativePath(currentDir), 'node_modules');\n try {\n await fs.promises.symlink(\n nodeModulesPath,\n targetSymlinkPath,\n process.platform === 'win32' ? 'junction' : 'dir'\n );\n } catch {\n // Package resolution is best-effort; the isolation check still reports a clear spawn failure if imports break.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n}\n\nfunction toTempRelativePath(absolutePath: string): string {\n const { root } = path.parse(absolutePath);\n return path.relative(root, absolutePath);\n}\n\nfunction getInvokedScriptPath(problemDir: string): string {\n const scriptPath = process.argv[1];\n if (!scriptPath) return `.${path.sep}judge.ts`;\n const relativeScriptPath = path.relative(problemDir, path.resolve(scriptPath));\n if (path.isAbsolute(relativeScriptPath)) return relativeScriptPath;\n return relativeScriptPath.startsWith('.') ? relativeScriptPath : `.${path.sep}${relativeScriptPath}`;\n}\n\nfunction isAcceptedJudgeOutput(stdout: string): boolean {\n const resultLines = stdout.split(/\\r?\\n/).filter((line) => line.startsWith(TEST_CASE_RESULT_PREFIX));\n if (resultLines.length === 0) return false;\n\n return resultLines.every((line) => {\n try {\n const parsedResult = testCaseResultSchema.safeParse(JSON.parse(line.slice(TEST_CASE_RESULT_PREFIX.length)));\n return parsedResult.success && parsedResult.data.decisionCode === DecisionCode.ACCEPTED;\n } catch {\n return false;\n }\n });\n}\n"],"names":["checkProblemDirIsolation","_x","_x2","_x3","_checkProblemDirIsolation","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","resolvedCwd","params","tempRoot","_spawnResult$stdout","_spawnResult$stderr","_ref","_spawnResult$status","_spawnResult$error$me","_spawnResult$error","absoluteProblemDir","copiedProblemDir","relativeCwd","copiedCwd","scriptPath","execArgv","paramsJson","spawnResult","stdout","stderr","_t","w","_context","p","n","fs","promises","mkdtemp","path","join","os","tmpdir","v","resolve","toTempRelativePath","mkdir","dirname","recursive","cp","filter","isCopiedProblemPath","symlinkAllAncestorNodeModules","relative","cwd","getInvokedScriptPath","startsWith","isAbsolute","printDebugBanner","concat","a","passed","process","isIsolationExecArg","JSON","stringify","isJudgeParamsObject","child_process","spawnSync","execPath","_toConsumableArray","encoding","env","timeout","status","isAcceptedJudgeOutput","signal","error","message","trimEnd","Error","String","rm","force","f","src","name","basename","arg","_typeof","Array","isArray","_x4","_x5","_symlinkAllAncestorNodeModules","_callee2","currentDir","nodeModulesPath","targetSymlinkPath","parentDir","_context2","existsSync","symlink","platform","absolutePath","root","parse","argv","sep","relativeScriptPath","resultLines","split","line","TEST_CASE_RESULT_PREFIX","length","every","parsedResult","testCaseResultSchema","safeParse","slice","success","data","decisionCode","DecisionCode","ACCEPTED","_unused"],"mappings":"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"}
{"version":3,"file":"checkProblemDirIsolation.js","names":["child_process"],"sources":["../../src/helpers/checkProblemDirIsolation.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { TEST_CASE_RESULT_PREFIX, testCaseResultSchema } from '../types/testCaseResult.js';\n\nimport { printDebugBanner } from './printDebugBanner.js';\nimport type { ResolvedCwd } from './resolveCwds.js';\n\nconst ISOLATION_CHECK_TIMEOUT_MS = 30_000;\n\nexport interface ProblemDirIsolationCheckResult {\n passed: boolean;\n}\n\n/**\n * Check that a judge can run after only the problem directory is copied elsewhere.\n */\nexport async function checkProblemDirIsolation(\n problemDir: string,\n resolvedCwd: ResolvedCwd,\n params: unknown\n): Promise<ProblemDirIsolationCheckResult> {\n let tempRoot: string | undefined;\n try {\n tempRoot = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'problem-utils-isolation_'));\n const absoluteProblemDir = path.resolve(problemDir);\n const copiedProblemDir = path.join(tempRoot, toTempRelativePath(absoluteProblemDir));\n await fs.promises.mkdir(path.dirname(copiedProblemDir), { recursive: true });\n await fs.promises.cp(absoluteProblemDir, copiedProblemDir, {\n recursive: true,\n filter: isCopiedProblemPath,\n });\n await symlinkAllAncestorNodeModules(tempRoot, absoluteProblemDir);\n\n const relativeCwd = path.relative(absoluteProblemDir, path.resolve(resolvedCwd.cwd));\n const copiedCwd = path.join(copiedProblemDir, relativeCwd);\n const scriptPath = getInvokedScriptPath(absoluteProblemDir);\n if (scriptPath.startsWith('..') || path.isAbsolute(scriptPath)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'The invoked judge script is located outside the problem directory.',\n `Script path: ${scriptPath}`,\n ]);\n return { passed: true };\n }\n const execArgv = process.execArgv.filter(isIsolationExecArg);\n const paramsJson = JSON.stringify(isJudgeParamsObject(params) ? params : {});\n const spawnResult = child_process.spawnSync(process.execPath, [...execArgv, scriptPath, copiedCwd, paramsJson], {\n cwd: copiedProblemDir,\n encoding: 'utf8',\n env: process.env,\n timeout: ISOLATION_CHECK_TIMEOUT_MS,\n });\n const stdout = spawnResult.stdout ?? '';\n const stderr = spawnResult.stderr ?? '';\n\n if (spawnResult.status === 0 && isAcceptedJudgeOutput(stdout)) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check passed',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n ]);\n return { passed: true };\n }\n\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed',\n '',\n 'The judge did not complete successfully after copying only the problem directory to a temporary location.',\n 'Make sure judge.ts imports only files included in the problem directory.',\n '',\n `Copied problem dir : ${copiedProblemDir}`,\n `Checked cwd : ${relativeCwd}`,\n `Exit status : ${spawnResult.status ?? spawnResult.signal ?? 'unknown'}`,\n `Spawn error : ${spawnResult.error?.message ?? '<none>'}`,\n '',\n 'stdout:',\n stdout.trimEnd() || '<empty>',\n '',\n 'stderr:',\n stderr.trimEnd() || '<empty>',\n ]);\n return { passed: false };\n } catch (error) {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check failed due to an unexpected error',\n '',\n error instanceof Error ? error.message : String(error),\n ]);\n return { passed: false };\n } finally {\n if (tempRoot) {\n try {\n await fs.promises.rm(tempRoot, { recursive: true, force: true });\n } catch {\n // Cleanup errors should not mask the primary isolation check result.\n }\n }\n }\n}\n\nfunction isCopiedProblemPath(src: string): boolean {\n const name = path.basename(src);\n return name !== 'node_modules' && name !== '.git';\n}\n\nfunction isIsolationExecArg(arg: string): boolean {\n return !arg.startsWith('--inspect') && !arg.startsWith('--watch') && !arg.startsWith('--hot');\n}\n\nfunction isJudgeParamsObject(params: unknown): params is object {\n return params !== undefined && params !== null && typeof params === 'object' && !Array.isArray(params);\n}\n\nasync function symlinkAllAncestorNodeModules(tempRoot: string, problemDir: string): Promise<void> {\n let currentDir = path.resolve(problemDir);\n while (true) {\n const nodeModulesPath = path.join(currentDir, 'node_modules');\n if (fs.existsSync(nodeModulesPath)) {\n const targetSymlinkPath = path.join(tempRoot, toTempRelativePath(currentDir), 'node_modules');\n try {\n await fs.promises.symlink(\n nodeModulesPath,\n targetSymlinkPath,\n process.platform === 'win32' ? 'junction' : 'dir'\n );\n } catch {\n // Package resolution is best-effort; the isolation check still reports a clear spawn failure if imports break.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n}\n\nfunction toTempRelativePath(absolutePath: string): string {\n const { root } = path.parse(absolutePath);\n return path.relative(root, absolutePath);\n}\n\nfunction getInvokedScriptPath(problemDir: string): string {\n const scriptPath = process.argv[1];\n if (!scriptPath) return `.${path.sep}judge.ts`;\n const relativeScriptPath = path.relative(problemDir, path.resolve(scriptPath));\n if (path.isAbsolute(relativeScriptPath)) return relativeScriptPath;\n return relativeScriptPath.startsWith('.') ? relativeScriptPath : `.${path.sep}${relativeScriptPath}`;\n}\n\nfunction isAcceptedJudgeOutput(stdout: string): boolean {\n const resultLines = stdout.split(/\\r?\\n/).filter((line) => line.startsWith(TEST_CASE_RESULT_PREFIX));\n if (resultLines.length === 0) return false;\n\n return resultLines.every((line) => {\n try {\n const parsedResult = testCaseResultSchema.safeParse(JSON.parse(line.slice(TEST_CASE_RESULT_PREFIX.length)));\n return parsedResult.success && parsedResult.data.decisionCode === DecisionCode.ACCEPTED;\n } catch {\n return false;\n }\n });\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";var r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),e=require("node:fs"),n=require("node:path");function t(){return(t=r.asyncToGenerator(r.regenerator().m(function n(t){var a;return r.regenerator().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,e.promises.readdir(t,{recursive:!0});case 1:return a=r.v,r.a(2,new Set(a))}},n)}))).apply(this,arguments)}function a(){return(a=r.asyncToGenerator(r.regenerator().m(function t(a,s){var o,i,c,u,p;return r.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:return u=r.createForOfIteratorHelper,t.n=1,e.promises.readdir(a,{recursive:!0});case 1:o=u(t.v),t.p=2,o.s();case 3:if((i=o.n()).done){t.n=6;break}if(c=i.value,!s.has(c)){t.n=4;break}return t.a(3,5);case 4:return t.n=5,e.promises.rm(n.join(a,c),{force:!0,recursive:!0});case 5:t.n=3;break;case 6:t.n=8;break;case 7:t.p=7,p=t.v,o.e(p);case 8:return t.p=8,o.f(),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}))).apply(this,arguments)}exports.cleanWorkingDirectory=function(r,e){return a.apply(this,arguments)},exports.snapshotWorkingDirectory=function(r){return t.apply(this,arguments)};
//# sourceMappingURL=cleanWorkingDirectory.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs");n=e.__toESM(n,1);async function r(e){let t=await n.default.promises.readdir(e,{recursive:!0});return new Set(t)}async function i(e,r){for(let i of await n.default.promises.readdir(e,{recursive:!0}))r.has(i)||await n.default.promises.rm(t.default.join(e,i),{force:!0,recursive:!0})}exports.cleanWorkingDirectory=i,exports.snapshotWorkingDirectory=r;
//# sourceMappingURL=cleanWorkingDirectory.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cleanWorkingDirectory.cjs","sources":["../../src/helpers/cleanWorkingDirectory.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\n// Currently, it does not support changing file contents and deleting files.\nexport async function snapshotWorkingDirectory(cwd: string): Promise<ReadonlySet<string>> {\n const paths = await fs.promises.readdir(cwd, { recursive: true });\n return new Set(paths);\n}\n\nexport async function cleanWorkingDirectory(cwd: string, snapshot: ReadonlySet<string>): Promise<void> {\n for (const p of await fs.promises.readdir(cwd, { recursive: true })) {\n if (snapshot.has(p)) continue;\n await fs.promises.rm(path.join(cwd, p), { force: true, recursive: true });\n }\n}\n"],"names":["_snapshotWorkingDirectory","_asyncToGenerator","_regenerator","m","_callee","cwd","paths","w","_context","n","fs","promises","readdir","recursive","v","a","Set","apply","this","arguments","_cleanWorkingDirectory","_callee2","snapshot","_iterator","_step","p","_t","_t2","_context2","_createForOfIteratorHelper","s","done","value","has","rm","path","join","force","e","f","_x2","_x3","_x"],"mappings":"oHAOC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,EAAAA,cAAAC,EAHM,SAAAC,EAAwCC,GAAW,IAAAC,EAAA,OAAAJ,gBAAAK,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACpCC,EAAGC,SAASC,QAAQP,EAAK,CAAEQ,WAAW,IAAO,KAAA,EAAtD,OAALP,EAAKE,EAAAM,EAAAN,EAAAO,EAAA,EACJ,IAAIC,IAAIV,IAAM,EAAAF,EAAA,KACtBa,MAAAC,KAAAC,UAAA,CAOA,SAAAC,IAAA,OAAAA,EAAAnB,EAAAA,iBAAAC,gBAAAC,EALM,SAAAkB,EAAqChB,EAAaiB,GAA6B,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAzB,gBAAAK,EAAA,SAAAqB,GAAA,cAAAA,EAAAH,EAAAG,EAAAnB,GAAA,KAAA,EAAA,OAAAiB,EAAAG,EAAAA,0BAAAD,EAAAnB,EAAA,EAC9DC,EAAGC,SAASC,QAAQP,EAAK,CAAEQ,WAAW,IAAO,KAAA,EAAAU,EAAAG,EAAAE,EAAAd,GAAAc,EAAAH,EAAA,EAAAF,EAAAO,IAAA,KAAA,EAAA,IAAAN,EAAAD,EAAAd,KAAAsB,KAAA,CAAAH,EAAAnB,EAAA,EAAA,KAAA,CAAvD,GAADgB,EAACD,EAAAQ,OACNV,EAASW,IAAIR,GAAE,CAAAG,EAAAnB,EAAA,EAAA,KAAA,CAAA,OAAAmB,EAAAb,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAa,EAAAnB,EAAA,EACbC,EAAGC,SAASuB,GAAGC,EAAKC,KAAK/B,EAAKoB,GAAI,CAAEY,OAAO,EAAMxB,WAAW,IAAO,KAAA,EAAAe,EAAAnB,EAAA,EAAA,MAAA,KAAA,EAAAmB,EAAAnB,EAAA,EAAA,MAAA,KAAA,EAAAmB,EAAAH,EAAA,EAAAE,EAAAC,EAAAd,EAAAS,EAAAe,EAAAX,GAAA,KAAA,EAAA,OAAAC,EAAAH,EAAA,EAAAF,EAAAgB,IAAAX,EAAAW,EAAA,GAAA,KAAA,EAAA,OAAAX,EAAAb,EAAA,GAAA,EAAAM,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KAE5EJ,MAAAC,KAAAC,UAAA,+BALD,SAA2CqB,EAAAC,GAAA,OAAArB,EAAAH,MAAAC,KAAAC,UAAA,mCAL3C,SAA8CuB,GAAA,OAAA1C,EAAAiB,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"cleanWorkingDirectory.cjs","names":["fs","path"],"sources":["../../src/helpers/cleanWorkingDirectory.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\n// Currently, it does not support changing file contents and deleting files.\nexport async function snapshotWorkingDirectory(cwd: string): Promise<ReadonlySet<string>> {\n const paths = await fs.promises.readdir(cwd, { recursive: true });\n return new Set(paths);\n}\n\nexport async function cleanWorkingDirectory(cwd: string, snapshot: ReadonlySet<string>): Promise<void> {\n for (const p of await fs.promises.readdir(cwd, { recursive: true })) {\n if (snapshot.has(p)) continue;\n await fs.promises.rm(path.join(cwd, p), { force: true, recursive: true });\n }\n}\n"],"mappings":"wJAIA,eAAsB,EAAyB,EAA2C,CACxF,IAAM,EAAQ,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAK,CAAE,UAAW,EAAK,CAAC,EAChE,OAAO,IAAI,IAAI,CAAK,CACtB,CAEA,eAAsB,EAAsB,EAAa,EAA8C,CACrG,IAAK,IAAM,KAAK,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAK,CAAE,UAAW,EAAK,CAAC,EAC5D,EAAS,IAAI,CAAC,GAClB,MAAMA,EAAAA,QAAG,SAAS,GAAGC,EAAAA,QAAK,KAAK,EAAK,CAAC,EAAG,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CAE5E"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as r,regenerator as e,createForOfIteratorHelper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"node:fs";import t from"node:path";function s(r){return o.apply(this,arguments)}function o(){return(o=r(e().m(function r(n){var t;return e().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,a.promises.readdir(n,{recursive:!0});case 1:return t=r.v,r.a(2,new Set(t))}},r)}))).apply(this,arguments)}function i(r,e){return u.apply(this,arguments)}function u(){return(u=r(e().m(function r(s,o){var i,u,c,p,f;return e().w(function(r){for(;;)switch(r.p=r.n){case 0:return p=n,r.n=1,a.promises.readdir(s,{recursive:!0});case 1:i=p(r.v),r.p=2,i.s();case 3:if((u=i.n()).done){r.n=6;break}if(c=u.value,!o.has(c)){r.n=4;break}return r.a(3,5);case 4:return r.n=5,a.promises.rm(t.join(s,c),{force:!0,recursive:!0});case 5:r.n=3;break;case 6:r.n=8;break;case 7:r.p=7,f=r.v,i.e(f);case 8:return r.p=8,i.f(),r.f(8);case 9:return r.a(2)}},r,null,[[2,7,8,9]])}))).apply(this,arguments)}export{i as cleanWorkingDirectory,s as snapshotWorkingDirectory};
//# sourceMappingURL=cleanWorkingDirectory.js.map
import e from"node:path";import t from"node:fs";async function n(e){let n=await t.promises.readdir(e,{recursive:!0});return new Set(n)}async function r(n,r){for(let i of await t.promises.readdir(n,{recursive:!0}))r.has(i)||await t.promises.rm(e.join(n,i),{force:!0,recursive:!0})}export{r as cleanWorkingDirectory,n as snapshotWorkingDirectory};
//# sourceMappingURL=cleanWorkingDirectory.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cleanWorkingDirectory.js","sources":["../../src/helpers/cleanWorkingDirectory.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\n// Currently, it does not support changing file contents and deleting files.\nexport async function snapshotWorkingDirectory(cwd: string): Promise<ReadonlySet<string>> {\n const paths = await fs.promises.readdir(cwd, { recursive: true });\n return new Set(paths);\n}\n\nexport async function cleanWorkingDirectory(cwd: string, snapshot: ReadonlySet<string>): Promise<void> {\n for (const p of await fs.promises.readdir(cwd, { recursive: true })) {\n if (snapshot.has(p)) continue;\n await fs.promises.rm(path.join(cwd, p), { force: true, recursive: true });\n }\n}\n"],"names":["snapshotWorkingDirectory","_x","_snapshotWorkingDirectory","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","paths","w","_context","n","fs","promises","readdir","recursive","v","a","Set","cleanWorkingDirectory","_x2","_x3","_cleanWorkingDirectory","_callee2","snapshot","_iterator","_step","p","_t","_t2","_context2","_createForOfIteratorHelper","s","done","value","has","rm","path","join","force","e","f"],"mappings":"4KAIA,SAAsBA,EAAwBC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAG7C,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAHM,SAAAC,EAAwCC,GAAW,IAAAC,EAAA,OAAAJ,IAAAK,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACpCC,EAAGC,SAASC,QAAQP,EAAK,CAAEQ,WAAW,IAAO,KAAA,EAAtD,OAALP,EAAKE,EAAAM,EAAAN,EAAAO,EAAA,EACJ,IAAIC,IAAIV,IAAM,EAAAF,EAAA,KACtBN,MAAAC,KAAAC,UAAA,CAED,SAAsBiB,EAAqBC,EAAAC,GAAA,OAAAC,EAAAtB,MAAAC,KAAAC,UAAA,CAK1C,SAAAoB,IAAA,OAAAA,EAAAnB,EAAAC,IAAAC,EALM,SAAAkB,EAAqChB,EAAaiB,GAA6B,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAzB,IAAAK,EAAA,SAAAqB,GAAA,cAAAA,EAAAH,EAAAG,EAAAnB,GAAA,KAAA,EAAA,OAAAiB,EAAAG,EAAAD,EAAAnB,EAAA,EAC9DC,EAAGC,SAASC,QAAQP,EAAK,CAAEQ,WAAW,IAAO,KAAA,EAAAU,EAAAG,EAAAE,EAAAd,GAAAc,EAAAH,EAAA,EAAAF,EAAAO,IAAA,KAAA,EAAA,IAAAN,EAAAD,EAAAd,KAAAsB,KAAA,CAAAH,EAAAnB,EAAA,EAAA,KAAA,CAAvD,GAADgB,EAACD,EAAAQ,OACNV,EAASW,IAAIR,GAAE,CAAAG,EAAAnB,EAAA,EAAA,KAAA,CAAA,OAAAmB,EAAAb,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAa,EAAAnB,EAAA,EACbC,EAAGC,SAASuB,GAAGC,EAAKC,KAAK/B,EAAKoB,GAAI,CAAEY,OAAO,EAAMxB,WAAW,IAAO,KAAA,EAAAe,EAAAnB,EAAA,EAAA,MAAA,KAAA,EAAAmB,EAAAnB,EAAA,EAAA,MAAA,KAAA,EAAAmB,EAAAH,EAAA,EAAAE,EAAAC,EAAAd,EAAAS,EAAAe,EAAAX,GAAA,KAAA,EAAA,OAAAC,EAAAH,EAAA,EAAAF,EAAAgB,IAAAX,EAAAW,EAAA,GAAA,KAAA,EAAA,OAAAX,EAAAb,EAAA,GAAA,EAAAM,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KAE5EvB,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"cleanWorkingDirectory.js","names":[],"sources":["../../src/helpers/cleanWorkingDirectory.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\n// Currently, it does not support changing file contents and deleting files.\nexport async function snapshotWorkingDirectory(cwd: string): Promise<ReadonlySet<string>> {\n const paths = await fs.promises.readdir(cwd, { recursive: true });\n return new Set(paths);\n}\n\nexport async function cleanWorkingDirectory(cwd: string, snapshot: ReadonlySet<string>): Promise<void> {\n for (const p of await fs.promises.readdir(cwd, { recursive: true })) {\n if (snapshot.has(p)) continue;\n await fs.promises.rm(path.join(cwd, p), { force: true, recursive: true });\n }\n}\n"],"mappings":"gDAIA,eAAsB,EAAyB,EAA2C,CACxF,IAAM,EAAQ,MAAM,EAAG,SAAS,QAAQ,EAAK,CAAE,UAAW,EAAK,CAAC,EAChE,OAAO,IAAI,IAAI,CAAK,CACtB,CAEA,eAAsB,EAAsB,EAAa,EAA8C,CACrG,IAAK,IAAM,KAAK,MAAM,EAAG,SAAS,QAAQ,EAAK,CAAE,UAAW,EAAK,CAAC,EAC5D,EAAS,IAAI,CAAC,GAClB,MAAM,EAAG,SAAS,GAAG,EAAK,KAAK,EAAK,CAAC,EAAG,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CAE5E"}

@@ -1,2 +0,2 @@

"use strict";var r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),e=1e-6;exports.compareStdoutAsSpaceSeparatedTokens=function(t,a){var i=t.trim().split(/\s+/),s=a.trim().split(/\s+/);if(i.length!==s.length)return!1;var n,u=r.createForOfIteratorHelper(s.entries());try{for(u.s();!(n=u.n()).done;){var l=r.slicedToArray(n.value,2),o=l[0],N=l[1],c=i[o];if(!Number.isNaN(Number(N))&&N.includes(".")){var f=Number(c),b=Number(N);if(Number.isNaN(b))throw new TypeError("invalid token in test case: ".concat(N));if(Number.isNaN(f))return!1;var m=Math.abs(f-b),p=0===b?Number.POSITIVE_INFINITY:Math.abs(m/b);if(m>e&&p>e)return!1}else if(c!==N)return!1}}catch(r){u.e(r)}finally{u.f()}return!0};
//# sourceMappingURL=compareStdoutAsSpaceSeparatedTokens.cjs.map
"use strict";const e=1e-6;function t(t,n){let r=t.trim().split(/\s+/),i=n.trim().split(/\s+/);if(r.length!==i.length)return!1;for(let[t,n]of i.entries()){let i=r[t];if(!Number.isNaN(Number(n))&&n.includes(`.`)){let t=Number(i),r=Number(n);if(Number.isNaN(r))throw TypeError(`invalid token in test case: ${n}`);if(Number.isNaN(t))return!1;let a=Math.abs(t-r),o=r===0?1/0:Math.abs(a/r);if(a>e&&o>e)return!1}else if(i!==n)return!1}return!0}exports.compareStdoutAsSpaceSeparatedTokens=t;
//# sourceMappingURL=compareStdoutAsSpaceSeparatedTokens.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"compareStdoutAsSpaceSeparatedTokens.cjs","sources":["../../src/helpers/compareStdoutAsSpaceSeparatedTokens.ts"],"sourcesContent":["const ACCEPTABLE_FLOAT_ERROR = 1e-6;\n\nexport function compareStdoutAsSpaceSeparatedTokens(received: string, expected: string): boolean {\n // Consecutive white spaces (including tabs, page breaks, and line breaks) are treated as one space character.\n const receivedTokens = received.trim().split(/\\s+/);\n const expectedTokens = expected.trim().split(/\\s+/);\n\n if (receivedTokens.length !== expectedTokens.length) return false;\n\n for (const [i, expectedToken] of expectedTokens.entries()) {\n const receivedToken = receivedTokens[i];\n\n const isDecimal = !Number.isNaN(Number(expectedToken)) && expectedToken.includes('.');\n if (isDecimal) {\n const receivedNumber = Number(receivedToken);\n const expectedNumber = Number(expectedToken);\n\n if (Number.isNaN(expectedNumber)) throw new TypeError(`invalid token in test case: ${expectedToken}`);\n if (Number.isNaN(receivedNumber)) return false;\n\n const absoluteError = Math.abs(receivedNumber - expectedNumber);\n const relativeError = expectedNumber === 0 ? Number.POSITIVE_INFINITY : Math.abs(absoluteError / expectedNumber);\n if (absoluteError > ACCEPTABLE_FLOAT_ERROR && relativeError > ACCEPTABLE_FLOAT_ERROR) return false;\n } else {\n if (receivedToken !== expectedToken) return false;\n }\n }\n\n return true;\n}\n"],"names":["ACCEPTABLE_FLOAT_ERROR","received","expected","receivedTokens","trim","split","expectedTokens","length","_step","_iterator","_createForOfIteratorHelper","entries","s","n","done","_step$value","_slicedToArray","value","i","expectedToken","receivedToken","Number","isNaN","includes","receivedNumber","expectedNumber","TypeError","concat","absoluteError","Math","abs","relativeError","POSITIVE_INFINITY","err","e","f"],"mappings":"wEAAMA,EAAyB,iDAExB,SAA6CC,EAAkBC,GAEpE,IAAMC,EAAiBF,EAASG,OAAOC,MAAM,OACvCC,EAAiBJ,EAASE,OAAOC,MAAM,OAE7C,GAAIF,EAAeI,SAAWD,EAAeC,OAAQ,OAAO,EAAM,IAETC,EAFSC,EAAAC,EAAAA,0BAEjCJ,EAAeK,WAAS,IAAzD,IAAAF,EAAAG,MAAAJ,EAAAC,EAAAI,KAAAC,MAA2D,CAAA,IAAAC,EAAAC,EAAAA,cAAAR,EAAAS,MAAA,GAA/CC,EAACH,EAAA,GAAEI,EAAaJ,EAAA,GACpBK,EAAgBjB,EAAee,GAGrC,IADmBG,OAAOC,MAAMD,OAAOF,KAAmBA,EAAcI,SAAS,KAClE,CACb,IAAMC,EAAiBH,OAAOD,GACxBK,EAAiBJ,OAAOF,GAE9B,GAAIE,OAAOC,MAAMG,GAAiB,MAAM,IAAIC,UAAS,+BAAAC,OAAgCR,IACrF,GAAIE,OAAOC,MAAME,GAAiB,OAAO,EAEzC,IAAMI,EAAgBC,KAAKC,IAAIN,EAAiBC,GAC1CM,EAAmC,IAAnBN,EAAuBJ,OAAOW,kBAAoBH,KAAKC,IAAIF,EAAgBH,GACjG,GAAIG,EAAgB5B,GAA0B+B,EAAgB/B,EAAwB,OAAO,CAC/F,MACE,GAAIoB,IAAkBD,EAAe,OAAO,CAEhD,CAAC,CAAA,MAAAc,GAAAxB,EAAAyB,EAAAD,EAAA,CAAA,QAAAxB,EAAA0B,GAAA,CAED,OAAO,CACT"}
{"version":3,"file":"compareStdoutAsSpaceSeparatedTokens.cjs","names":[],"sources":["../../src/helpers/compareStdoutAsSpaceSeparatedTokens.ts"],"sourcesContent":["const ACCEPTABLE_FLOAT_ERROR = 1e-6;\n\nexport function compareStdoutAsSpaceSeparatedTokens(received: string, expected: string): boolean {\n // Consecutive white spaces (including tabs, page breaks, and line breaks) are treated as one space character.\n const receivedTokens = received.trim().split(/\\s+/);\n const expectedTokens = expected.trim().split(/\\s+/);\n\n if (receivedTokens.length !== expectedTokens.length) return false;\n\n for (const [i, expectedToken] of expectedTokens.entries()) {\n const receivedToken = receivedTokens[i];\n\n const isDecimal = !Number.isNaN(Number(expectedToken)) && expectedToken.includes('.');\n if (isDecimal) {\n const receivedNumber = Number(receivedToken);\n const expectedNumber = Number(expectedToken);\n\n if (Number.isNaN(expectedNumber)) throw new TypeError(`invalid token in test case: ${expectedToken}`);\n if (Number.isNaN(receivedNumber)) return false;\n\n const absoluteError = Math.abs(receivedNumber - expectedNumber);\n const relativeError = expectedNumber === 0 ? Number.POSITIVE_INFINITY : Math.abs(absoluteError / expectedNumber);\n if (absoluteError > ACCEPTABLE_FLOAT_ERROR && relativeError > ACCEPTABLE_FLOAT_ERROR) return false;\n } else {\n if (receivedToken !== expectedToken) return false;\n }\n }\n\n return true;\n}\n"],"mappings":"aAAA,MAAM,EAAyB,KAE/B,SAAgB,EAAoC,EAAkB,EAA2B,CAE/F,IAAM,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAC5C,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAElD,GAAI,EAAe,SAAW,EAAe,OAAQ,MAAO,GAE5D,IAAK,GAAM,CAAC,EAAG,KAAkB,EAAe,QAAQ,EAAG,CACzD,IAAM,EAAgB,EAAe,GAGrC,GADkB,CAAC,OAAO,MAAM,OAAO,CAAa,CAAC,GAAK,EAAc,SAAS,GAAG,EACrE,CACb,IAAM,EAAiB,OAAO,CAAa,EACrC,EAAiB,OAAO,CAAa,EAE3C,GAAI,OAAO,MAAM,CAAc,EAAG,MAAU,UAAU,+BAA+B,GAAe,EACpG,GAAI,OAAO,MAAM,CAAc,EAAG,MAAO,GAEzC,IAAM,EAAgB,KAAK,IAAI,EAAiB,CAAc,EACxD,EAAgB,IAAmB,EAAI,IAA2B,KAAK,IAAI,EAAgB,CAAc,EAC/G,GAAI,EAAgB,GAA0B,EAAgB,EAAwB,MAAO,EAC/F,MACE,GAAI,IAAkB,EAAe,MAAO,EAEhD,CAEA,MAAO,EACT"}

@@ -1,2 +0,2 @@

import{createForOfIteratorHelper as r,slicedToArray as e}from"../_virtual/_rollupPluginBabelHelpers.js";var t=1e-6;function a(a,i){var n=a.trim().split(/\s+/),s=i.trim().split(/\s+/);if(n.length!==s.length)return!1;var l,u=r(s.entries());try{for(u.s();!(l=u.n()).done;){var N=e(l.value,2),o=N[0],f=N[1],m=n[o];if(!Number.isNaN(Number(f))&&f.includes(".")){var b=Number(m),c=Number(f);if(Number.isNaN(c))throw new TypeError("invalid token in test case: ".concat(f));if(Number.isNaN(b))return!1;var v=Math.abs(b-c),p=0===c?Number.POSITIVE_INFINITY:Math.abs(v/c);if(v>t&&p>t)return!1}else if(m!==f)return!1}}catch(r){u.e(r)}finally{u.f()}return!0}export{a as compareStdoutAsSpaceSeparatedTokens};
//# sourceMappingURL=compareStdoutAsSpaceSeparatedTokens.js.map
const e=1e-6;function t(t,n){let r=t.trim().split(/\s+/),i=n.trim().split(/\s+/);if(r.length!==i.length)return!1;for(let[t,n]of i.entries()){let i=r[t];if(!Number.isNaN(Number(n))&&n.includes(`.`)){let t=Number(i),r=Number(n);if(Number.isNaN(r))throw TypeError(`invalid token in test case: ${n}`);if(Number.isNaN(t))return!1;let a=Math.abs(t-r),o=r===0?1/0:Math.abs(a/r);if(a>e&&o>e)return!1}else if(i!==n)return!1}return!0}export{t as compareStdoutAsSpaceSeparatedTokens};
//# sourceMappingURL=compareStdoutAsSpaceSeparatedTokens.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"compareStdoutAsSpaceSeparatedTokens.js","sources":["../../src/helpers/compareStdoutAsSpaceSeparatedTokens.ts"],"sourcesContent":["const ACCEPTABLE_FLOAT_ERROR = 1e-6;\n\nexport function compareStdoutAsSpaceSeparatedTokens(received: string, expected: string): boolean {\n // Consecutive white spaces (including tabs, page breaks, and line breaks) are treated as one space character.\n const receivedTokens = received.trim().split(/\\s+/);\n const expectedTokens = expected.trim().split(/\\s+/);\n\n if (receivedTokens.length !== expectedTokens.length) return false;\n\n for (const [i, expectedToken] of expectedTokens.entries()) {\n const receivedToken = receivedTokens[i];\n\n const isDecimal = !Number.isNaN(Number(expectedToken)) && expectedToken.includes('.');\n if (isDecimal) {\n const receivedNumber = Number(receivedToken);\n const expectedNumber = Number(expectedToken);\n\n if (Number.isNaN(expectedNumber)) throw new TypeError(`invalid token in test case: ${expectedToken}`);\n if (Number.isNaN(receivedNumber)) return false;\n\n const absoluteError = Math.abs(receivedNumber - expectedNumber);\n const relativeError = expectedNumber === 0 ? Number.POSITIVE_INFINITY : Math.abs(absoluteError / expectedNumber);\n if (absoluteError > ACCEPTABLE_FLOAT_ERROR && relativeError > ACCEPTABLE_FLOAT_ERROR) return false;\n } else {\n if (receivedToken !== expectedToken) return false;\n }\n }\n\n return true;\n}\n"],"names":["ACCEPTABLE_FLOAT_ERROR","compareStdoutAsSpaceSeparatedTokens","received","expected","receivedTokens","trim","split","expectedTokens","length","_step","_iterator","_createForOfIteratorHelper","entries","s","n","done","_step$value","_slicedToArray","value","i","expectedToken","receivedToken","Number","isNaN","includes","receivedNumber","expectedNumber","TypeError","concat","absoluteError","Math","abs","relativeError","POSITIVE_INFINITY","err","e","f"],"mappings":"wGAAA,IAAMA,EAAyB,KAExB,SAASC,EAAoCC,EAAkBC,GAEpE,IAAMC,EAAiBF,EAASG,OAAOC,MAAM,OACvCC,EAAiBJ,EAASE,OAAOC,MAAM,OAE7C,GAAIF,EAAeI,SAAWD,EAAeC,OAAQ,OAAO,EAAM,IAETC,EAFSC,EAAAC,EAEjCJ,EAAeK,WAAS,IAAzD,IAAAF,EAAAG,MAAAJ,EAAAC,EAAAI,KAAAC,MAA2D,CAAA,IAAAC,EAAAC,EAAAR,EAAAS,MAAA,GAA/CC,EAACH,EAAA,GAAEI,EAAaJ,EAAA,GACpBK,EAAgBjB,EAAee,GAGrC,IADmBG,OAAOC,MAAMD,OAAOF,KAAmBA,EAAcI,SAAS,KAClE,CACb,IAAMC,EAAiBH,OAAOD,GACxBK,EAAiBJ,OAAOF,GAE9B,GAAIE,OAAOC,MAAMG,GAAiB,MAAM,IAAIC,UAAS,+BAAAC,OAAgCR,IACrF,GAAIE,OAAOC,MAAME,GAAiB,OAAO,EAEzC,IAAMI,EAAgBC,KAAKC,IAAIN,EAAiBC,GAC1CM,EAAmC,IAAnBN,EAAuBJ,OAAOW,kBAAoBH,KAAKC,IAAIF,EAAgBH,GACjG,GAAIG,EAAgB7B,GAA0BgC,EAAgBhC,EAAwB,OAAO,CAC/F,MACE,GAAIqB,IAAkBD,EAAe,OAAO,CAEhD,CAAC,CAAA,MAAAc,GAAAxB,EAAAyB,EAAAD,EAAA,CAAA,QAAAxB,EAAA0B,GAAA,CAED,OAAO,CACT"}
{"version":3,"file":"compareStdoutAsSpaceSeparatedTokens.js","names":[],"sources":["../../src/helpers/compareStdoutAsSpaceSeparatedTokens.ts"],"sourcesContent":["const ACCEPTABLE_FLOAT_ERROR = 1e-6;\n\nexport function compareStdoutAsSpaceSeparatedTokens(received: string, expected: string): boolean {\n // Consecutive white spaces (including tabs, page breaks, and line breaks) are treated as one space character.\n const receivedTokens = received.trim().split(/\\s+/);\n const expectedTokens = expected.trim().split(/\\s+/);\n\n if (receivedTokens.length !== expectedTokens.length) return false;\n\n for (const [i, expectedToken] of expectedTokens.entries()) {\n const receivedToken = receivedTokens[i];\n\n const isDecimal = !Number.isNaN(Number(expectedToken)) && expectedToken.includes('.');\n if (isDecimal) {\n const receivedNumber = Number(receivedToken);\n const expectedNumber = Number(expectedToken);\n\n if (Number.isNaN(expectedNumber)) throw new TypeError(`invalid token in test case: ${expectedToken}`);\n if (Number.isNaN(receivedNumber)) return false;\n\n const absoluteError = Math.abs(receivedNumber - expectedNumber);\n const relativeError = expectedNumber === 0 ? Number.POSITIVE_INFINITY : Math.abs(absoluteError / expectedNumber);\n if (absoluteError > ACCEPTABLE_FLOAT_ERROR && relativeError > ACCEPTABLE_FLOAT_ERROR) return false;\n } else {\n if (receivedToken !== expectedToken) return false;\n }\n }\n\n return true;\n}\n"],"mappings":"AAAA,MAAM,EAAyB,KAE/B,SAAgB,EAAoC,EAAkB,EAA2B,CAE/F,IAAM,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAC5C,EAAiB,EAAS,KAAK,CAAC,CAAC,MAAM,KAAK,EAElD,GAAI,EAAe,SAAW,EAAe,OAAQ,MAAO,GAE5D,IAAK,GAAM,CAAC,EAAG,KAAkB,EAAe,QAAQ,EAAG,CACzD,IAAM,EAAgB,EAAe,GAGrC,GADkB,CAAC,OAAO,MAAM,OAAO,CAAa,CAAC,GAAK,EAAc,SAAS,GAAG,EACrE,CACb,IAAM,EAAiB,OAAO,CAAa,EACrC,EAAiB,OAAO,CAAa,EAE3C,GAAI,OAAO,MAAM,CAAc,EAAG,MAAU,UAAU,+BAA+B,GAAe,EACpG,GAAI,OAAO,MAAM,CAAc,EAAG,MAAO,GAEzC,IAAM,EAAgB,KAAK,IAAI,EAAiB,CAAc,EACxD,EAAgB,IAAmB,EAAI,IAA2B,KAAK,IAAI,EAAgB,CAAc,EAC/G,GAAI,EAAgB,GAA0B,EAAgB,EAAwB,MAAO,EAC/F,MACE,GAAI,IAAkB,EAAe,MAAO,EAEhD,CAEA,MAAO,EACT"}

@@ -1,2 +0,2 @@

"use strict";var r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),e=require("node:fs");function n(){return(n=r.asyncToGenerator(r.regenerator().m(function n(t,s){return r.regenerator().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,e.promises.cp(t,s,{force:!0,recursive:!0});case 1:return r.a(2)}},n)}))).apply(this,arguments)}exports.copyTestCaseFileInput=function(r,e){return n.apply(this,arguments)};
//# sourceMappingURL=copyTestCaseFileInput.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:fs");t=e.__toESM(t,1);async function n(e,n){await t.default.promises.cp(e,n,{force:!0,recursive:!0})}exports.copyTestCaseFileInput=n;
//# sourceMappingURL=copyTestCaseFileInput.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"copyTestCaseFileInput.cjs","sources":["../../src/helpers/copyTestCaseFileInput.ts"],"sourcesContent":["import fs from 'node:fs';\n\nexport async function copyTestCaseFileInput(fileInputPath: string, cwd: string): Promise<void> {\n await fs.promises.cp(fileInputPath, cwd, { force: true, recursive: true });\n}\n"],"names":["_copyTestCaseFileInput","_asyncToGenerator","_regenerator","m","_callee","fileInputPath","cwd","w","_context","n","fs","promises","cp","force","recursive","a","apply","this","arguments","_x","_x2"],"mappings":"6FAIC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAFM,SAAAC,EAAqCC,EAAuBC,GAAW,OAAAJ,gBAAAK,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACtEC,EAAGC,SAASC,GAAGP,EAAeC,EAAK,CAAEO,OAAO,EAAMC,WAAW,IAAO,KAAA,EAAA,OAAAN,EAAAO,EAAA,GAAA,EAAAX,EAAA,KAC3EY,MAAAC,KAAAC,UAAA,+BAFD,SAA2CC,EAAAC,GAAA,OAAApB,EAAAgB,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"copyTestCaseFileInput.cjs","names":["fs"],"sources":["../../src/helpers/copyTestCaseFileInput.ts"],"sourcesContent":["import fs from 'node:fs';\n\nexport async function copyTestCaseFileInput(fileInputPath: string, cwd: string): Promise<void> {\n await fs.promises.cp(fileInputPath, cwd, { force: true, recursive: true });\n}\n"],"mappings":"4GAEA,eAAsB,EAAsB,EAAuB,EAA4B,CAC7F,MAAMA,EAAAA,QAAG,SAAS,GAAG,EAAe,EAAK,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CAC3E"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as r,regenerator as e}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:fs";function t(r,e){return o.apply(this,arguments)}function o(){return(o=r(e().m(function r(t,o){return e().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,n.promises.cp(t,o,{force:!0,recursive:!0});case 1:return r.a(2)}},r)}))).apply(this,arguments)}export{t as copyTestCaseFileInput};
//# sourceMappingURL=copyTestCaseFileInput.js.map
import e from"node:fs";async function t(t,n){await e.promises.cp(t,n,{force:!0,recursive:!0})}export{t as copyTestCaseFileInput};
//# sourceMappingURL=copyTestCaseFileInput.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"copyTestCaseFileInput.js","sources":["../../src/helpers/copyTestCaseFileInput.ts"],"sourcesContent":["import fs from 'node:fs';\n\nexport async function copyTestCaseFileInput(fileInputPath: string, cwd: string): Promise<void> {\n await fs.promises.cp(fileInputPath, cwd, { force: true, recursive: true });\n}\n"],"names":["copyTestCaseFileInput","_x","_x2","_copyTestCaseFileInput","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","fileInputPath","cwd","w","_context","n","fs","promises","cp","force","recursive","a"],"mappings":"oHAEA,SAAsBA,EAAqBC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAE1C,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAFM,SAAAC,EAAqCC,EAAuBC,GAAW,OAAAJ,IAAAK,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACtEC,EAAGC,SAASC,GAAGP,EAAeC,EAAK,CAAEO,OAAO,EAAMC,WAAW,IAAO,KAAA,EAAA,OAAAN,EAAAO,EAAA,GAAA,EAAAX,EAAA,KAC3EN,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"copyTestCaseFileInput.js","names":[],"sources":["../../src/helpers/copyTestCaseFileInput.ts"],"sourcesContent":["import fs from 'node:fs';\n\nexport async function copyTestCaseFileInput(fileInputPath: string, cwd: string): Promise<void> {\n await fs.promises.cp(fileInputPath, cwd, { force: true, recursive: true });\n}\n"],"mappings":"uBAEA,eAAsB,EAAsB,EAAuB,EAA4B,CAC7F,MAAM,EAAG,SAAS,GAAG,EAAe,EAAK,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,CAC3E"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),n=require("../types/language.cjs"),a=["index","main"],t=[".DS_Store",".class"];function i(){return(i=e.asyncToGenerator(e.regenerator().m(function i(s,u){var o,c,l,f,p,d,m,g;return e.regenerator().w(function(i){for(;;)switch(i.p=i.n){case 0:return o=u&&[u].flat().flatMap(function(e){var r,a;return null!=(r=null==(a=n.languageIdToDefinition[e])?void 0:a.fileExtensions)?r:[]}),l=-1,m=e.createForOfIteratorHelper,i.n=1,r.promises.readdir(s,{withFileTypes:!0});case 1:f=m(i.v),i.p=2,d=e.regenerator().m(function r(){var n,i;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if((n=p.value).isFile()){e.n=1;break}return e.a(2,0);case 1:if(!t.some(function(e){return n.name.endsWith(e)})){e.n=2;break}return e.a(2,0);case 2:if(!o||o.some(function(e){return n.name.endsWith(e)})){e.n=3;break}return e.a(2,0);case 3:i=a.findLastIndex(function(e){return n.name.toLowerCase().startsWith("".concat(e,"."))}),c&&!(i===l?n.name.localeCompare(c)<0:i>l)||(c=n.name,l=i);case 4:return e.a(2)}},r)}),f.s();case 3:if((p=f.n()).done){i.n=6;break}return i.d(e.regeneratorValues(d()),4);case 4:if(0!==i.v){i.n=5;break}return i.a(3,5);case 5:i.n=3;break;case 6:i.n=8;break;case 7:i.p=7,g=i.v,f.e(g);case 8:return i.p=8,f.f(),i.f(8);case 9:return i.a(2,c)}},i,null,[[2,7,8,9]])}))).apply(this,arguments)}exports.findEntryPointFile=function(e,r){return i.apply(this,arguments)};
//# sourceMappingURL=findEntryPointFile.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../types/language.cjs");let n=require("node:fs");n=e.__toESM(n,1);const r=[`index`,`main`],i=[`.DS_Store`,`.class`];async function a(e,a){let o=a&&[a].flat().flatMap(e=>t.languageIdToDefinition[e]?.fileExtensions??[]),s,c=-1;for(let t of await n.default.promises.readdir(e,{withFileTypes:!0})){if(!t.isFile()||i.some(e=>t.name.endsWith(e))||o&&!o.some(e=>t.name.endsWith(e)))continue;let e=r.findLastIndex(e=>t.name.toLowerCase().startsWith(`${e}.`));(!s||(e===c?t.name.localeCompare(s)<0:e>c))&&(s=t.name,c=e)}return s}exports.findEntryPointFile=a;
//# sourceMappingURL=findEntryPointFile.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findEntryPointFile.cjs","sources":["../../src/helpers/findEntryPointFile.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { languageIdToDefinition } from '../types/language.js';\n\n// The last is most prioritized.\nconst PRIOTIZED_FILE_NAMES = ['index', 'main'] as const;\n\nconst IGNORED_FILE_EXTENSIONS = ['.DS_Store', '.class'] as const;\n\nexport async function findEntryPointFile(\n cwd: string,\n language?: string | readonly string[]\n): Promise<string | undefined> {\n const fileExtensions =\n language && [language].flat().flatMap((language) => languageIdToDefinition[language]?.fileExtensions ?? []);\n\n let mainFileName: string | undefined;\n let mainFilePrioryty = -1;\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (IGNORED_FILE_EXTENSIONS.some((ext) => dirent.name.endsWith(ext))) continue;\n if (fileExtensions && !fileExtensions.some((ext) => dirent.name.endsWith(ext))) continue;\n\n const direntPrioryty = PRIOTIZED_FILE_NAMES.findLastIndex((name) =>\n dirent.name.toLowerCase().startsWith(`${name}.`)\n );\n\n if (\n !mainFileName ||\n (direntPrioryty === mainFilePrioryty\n ? dirent.name.localeCompare(mainFileName) < 0\n : direntPrioryty > mainFilePrioryty)\n ) {\n mainFileName = dirent.name;\n mainFilePrioryty = direntPrioryty;\n }\n }\n\n return mainFileName;\n}\n"],"names":["PRIOTIZED_FILE_NAMES","IGNORED_FILE_EXTENSIONS","_findEntryPointFile","_asyncToGenerator","_regenerator","m","_callee","cwd","language","fileExtensions","mainFileName","mainFilePrioryty","_iterator","_step","_loop","_t","_t2","w","_context2","p","n","flat","flatMap","_languageIdToDefiniti","_languageIdToDefiniti2","languageIdToDefinition","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","dirent","direntPrioryty","_context","value","isFile","a","some","ext","name","endsWith","findLastIndex","toLowerCase","startsWith","concat","localeCompare","s","done","d","_regeneratorValues","e","f","apply","this","arguments","_x","_x2"],"mappings":"gIAKMA,EAAuB,CAAC,QAAS,QAEjCC,EAA0B,CAAC,YAAa,UAiC7C,SAAAC,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EA/BM,SAAAC,EACLC,EACAC,GAAqC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAZ,gBAAAa,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAMZ,OAJnBX,EACJD,GAAY,CAACA,GAAUa,OAAOC,QAAQ,SAACd,GAAQ,IAAAe,EAAAC,EAAA,OAAqD,OAArDD,EAAqC,OAArCC,EAAKC,EAAAA,uBAAuBjB,SAAS,EAAhCgB,EAAkCf,gBAAcc,EAAI,EAAE,GAGxGZ,GAAmB,EAAEI,EAAAW,EAAAA,0BAAAR,EAAAE,EAAA,EAEEO,EAAGC,SAASC,QAAQtB,EAAK,CAAEuB,eAAe,IAAO,KAAA,EAAAlB,EAAAG,EAAAG,EAAAa,GAAAb,EAAAC,EAAA,EAAAL,EAAAV,EAAAA,cAAAC,WAAAS,IAAA,IAAAkB,EAAAC,EAAA,OAAA7B,gBAAAa,EAAA,SAAAiB,GAAA,cAAAA,EAAAd,GAAA,KAAA,EAA3D,IAANY,EAAMnB,EAAAsB,OACHC,SAAQ,CAAAF,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAAA,IAChBpC,EAAwBqC,KAAK,SAACC,GAAG,OAAKP,EAAOQ,KAAKC,SAASF,EAAI,GAAC,CAAAL,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAAA,IAChE5B,GAAmBA,EAAe6B,KAAK,SAACC,GAAG,OAAKP,EAAOQ,KAAKC,SAASF,EAAI,GAAC,CAAAL,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAExEJ,EAAiBjC,EAAqB0C,cAAc,SAACF,GAAI,OAC7DR,EAAOQ,KAAKG,cAAcC,WAAU,GAAAC,OAAIL,OAAQ,GAI/C9B,KACAuB,IAAmBtB,EAChBqB,EAAOQ,KAAKM,cAAcpC,GAAgB,EAC1CuB,EAAiBtB,KAErBD,EAAesB,EAAOQ,KACtB7B,EAAmBsB,GACpB,KAAA,EAAA,OAAAC,EAAAG,EAAA,GAAA,EAAAvB,EAAA,GAAAF,EAAAmC,IAAA,KAAA,EAAA,IAAAlC,EAAAD,EAAAQ,KAAA4B,KAAA,CAAA9B,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAA+B,EAAAC,EAAAA,kBAAApC,KAAA,GAAA,KAAA,EAAA,GAAA,IAAAI,EAAAa,EAAA,CAAAb,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAmB,EAAA,EAAA,GAAA,KAAA,EAAAnB,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAa,EAAAnB,EAAAuC,EAAAnC,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAwC,IAAAlC,EAAAkC,EAAA,GAAA,KAAA,EAAA,OAAAlC,EAAAmB,EAAA,EAGI3B,GAAY,EAAAJ,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KACpB+C,MAAAC,KAAAC,UAAA,4BA/BD,SAAwCC,EAAAC,GAAA,OAAAvD,EAAAmD,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"findEntryPointFile.cjs","names":["languageIdToDefinition","fs"],"sources":["../../src/helpers/findEntryPointFile.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { languageIdToDefinition } from '../types/language.js';\n\n// The last is most prioritized.\nconst PRIOTIZED_FILE_NAMES = ['index', 'main'] as const;\n\nconst IGNORED_FILE_EXTENSIONS = ['.DS_Store', '.class'] as const;\n\nexport async function findEntryPointFile(\n cwd: string,\n language?: string | readonly string[]\n): Promise<string | undefined> {\n const fileExtensions =\n language && [language].flat().flatMap((language) => languageIdToDefinition[language]?.fileExtensions ?? []);\n\n let mainFileName: string | undefined;\n let mainFilePrioryty = -1;\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (IGNORED_FILE_EXTENSIONS.some((ext) => dirent.name.endsWith(ext))) continue;\n if (fileExtensions && !fileExtensions.some((ext) => dirent.name.endsWith(ext))) continue;\n\n const direntPrioryty = PRIOTIZED_FILE_NAMES.findLastIndex((name) =>\n dirent.name.toLowerCase().startsWith(`${name}.`)\n );\n\n if (\n !mainFileName ||\n (direntPrioryty === mainFilePrioryty\n ? dirent.name.localeCompare(mainFileName) < 0\n : direntPrioryty > mainFilePrioryty)\n ) {\n mainFileName = dirent.name;\n mainFilePrioryty = direntPrioryty;\n }\n }\n\n return mainFileName;\n}\n"],"mappings":"+IAKA,MAAM,EAAuB,CAAC,QAAS,MAAM,EAEvC,EAA0B,CAAC,YAAa,QAAQ,EAEtD,eAAsB,EACpB,EACA,EAC6B,CAC7B,IAAM,EACJ,GAAY,CAAC,CAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAS,GAAaA,EAAAA,uBAAuB,EAAS,EAAE,gBAAkB,CAAC,CAAC,EAExG,EACA,EAAmB,GAEvB,IAAK,IAAM,KAAU,MAAMC,EAAAA,QAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,EAAK,CAAC,EAAG,CAG5E,GAFI,CAAC,EAAO,OAAO,GACf,EAAwB,KAAM,GAAQ,EAAO,KAAK,SAAS,CAAG,CAAC,GAC/D,GAAkB,CAAC,EAAe,KAAM,GAAQ,EAAO,KAAK,SAAS,CAAG,CAAC,EAAG,SAEhF,IAAM,EAAiB,EAAqB,cAAe,GACzD,EAAO,KAAK,YAAY,CAAC,CAAC,WAAW,GAAG,EAAK,EAAE,CACjD,GAGE,CAAC,IACA,IAAmB,EAChB,EAAO,KAAK,cAAc,CAAY,EAAI,EAC1C,EAAiB,MAErB,EAAe,EAAO,KACtB,EAAmB,EAEvB,CAEA,OAAO,CACT"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as r,regeneratorValues as n,createForOfIteratorHelper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import{languageIdToDefinition as s}from"../types/language.js";var i=["index","main"],o=[".DS_Store",".class"];function u(e,r){return c.apply(this,arguments)}function c(){return(c=e(r().m(function e(u,c){var f,l,p,m,d,v,b,h;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:return f=c&&[c].flat().flatMap(function(e){var r,n;return null!=(r=null==(n=s[e])?void 0:n.fileExtensions)?r:[]}),p=-1,b=a,e.n=1,t.promises.readdir(u,{withFileTypes:!0});case 1:m=b(e.v),e.p=2,v=r().m(function e(){var n,a;return r().w(function(e){for(;;)switch(e.n){case 0:if((n=d.value).isFile()){e.n=1;break}return e.a(2,0);case 1:if(!o.some(function(e){return n.name.endsWith(e)})){e.n=2;break}return e.a(2,0);case 2:if(!f||f.some(function(e){return n.name.endsWith(e)})){e.n=3;break}return e.a(2,0);case 3:a=i.findLastIndex(function(e){return n.name.toLowerCase().startsWith("".concat(e,"."))}),l&&!(a===p?n.name.localeCompare(l)<0:a>p)||(l=n.name,p=a);case 4:return e.a(2)}},e)}),m.s();case 3:if((d=m.n()).done){e.n=6;break}return e.d(n(v()),4);case 4:if(0!==e.v){e.n=5;break}return e.a(3,5);case 5:e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,h=e.v,m.e(h);case 8:return e.p=8,m.f(),e.f(8);case 9:return e.a(2,l)}},e,null,[[2,7,8,9]])}))).apply(this,arguments)}export{u as findEntryPointFile};
//# sourceMappingURL=findEntryPointFile.js.map
import{languageIdToDefinition as e}from"../types/language.js";import t from"node:fs";const n=[`index`,`main`],r=[`.DS_Store`,`.class`];async function i(i,a){let o=a&&[a].flat().flatMap(t=>e[t]?.fileExtensions??[]),s,c=-1;for(let e of await t.promises.readdir(i,{withFileTypes:!0})){if(!e.isFile()||r.some(t=>e.name.endsWith(t))||o&&!o.some(t=>e.name.endsWith(t)))continue;let t=n.findLastIndex(t=>e.name.toLowerCase().startsWith(`${t}.`));(!s||(t===c?e.name.localeCompare(s)<0:t>c))&&(s=e.name,c=t)}return s}export{i as findEntryPointFile};
//# sourceMappingURL=findEntryPointFile.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findEntryPointFile.js","sources":["../../src/helpers/findEntryPointFile.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { languageIdToDefinition } from '../types/language.js';\n\n// The last is most prioritized.\nconst PRIOTIZED_FILE_NAMES = ['index', 'main'] as const;\n\nconst IGNORED_FILE_EXTENSIONS = ['.DS_Store', '.class'] as const;\n\nexport async function findEntryPointFile(\n cwd: string,\n language?: string | readonly string[]\n): Promise<string | undefined> {\n const fileExtensions =\n language && [language].flat().flatMap((language) => languageIdToDefinition[language]?.fileExtensions ?? []);\n\n let mainFileName: string | undefined;\n let mainFilePrioryty = -1;\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (IGNORED_FILE_EXTENSIONS.some((ext) => dirent.name.endsWith(ext))) continue;\n if (fileExtensions && !fileExtensions.some((ext) => dirent.name.endsWith(ext))) continue;\n\n const direntPrioryty = PRIOTIZED_FILE_NAMES.findLastIndex((name) =>\n dirent.name.toLowerCase().startsWith(`${name}.`)\n );\n\n if (\n !mainFileName ||\n (direntPrioryty === mainFilePrioryty\n ? dirent.name.localeCompare(mainFileName) < 0\n : direntPrioryty > mainFilePrioryty)\n ) {\n mainFileName = dirent.name;\n mainFilePrioryty = direntPrioryty;\n }\n }\n\n return mainFileName;\n}\n"],"names":["PRIOTIZED_FILE_NAMES","IGNORED_FILE_EXTENSIONS","findEntryPointFile","_x","_x2","_findEntryPointFile","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","language","fileExtensions","mainFileName","mainFilePrioryty","_iterator","_step","_loop","_t","_t2","w","_context2","p","n","flat","flatMap","_languageIdToDefiniti","_languageIdToDefiniti2","languageIdToDefinition","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","dirent","direntPrioryty","_context","value","isFile","a","some","ext","name","endsWith","findLastIndex","toLowerCase","startsWith","concat","localeCompare","s","done","d","_regeneratorValues","e","f"],"mappings":"wOAKA,IAAMA,EAAuB,CAAC,QAAS,QAEjCC,EAA0B,CAAC,YAAa,UAE9C,SAAsBC,EAAkBC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CA+BvC,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EA/BM,SAAAC,EACLC,EACAC,GAAqC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAZ,IAAAa,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAMZ,OAJnBX,EACJD,GAAY,CAACA,GAAUa,OAAOC,QAAQ,SAACd,GAAQ,IAAAe,EAAAC,EAAA,OAAqD,OAArDD,EAAqC,OAArCC,EAAKC,EAAuBjB,SAAS,EAAhCgB,EAAkCf,gBAAcc,EAAI,EAAE,GAGxGZ,GAAmB,EAAEI,EAAAW,EAAAR,EAAAE,EAAA,EAEEO,EAAGC,SAASC,QAAQtB,EAAK,CAAEuB,eAAe,IAAO,KAAA,EAAAlB,EAAAG,EAAAG,EAAAa,GAAAb,EAAAC,EAAA,EAAAL,EAAAV,IAAAC,WAAAS,IAAA,IAAAkB,EAAAC,EAAA,OAAA7B,IAAAa,EAAA,SAAAiB,GAAA,cAAAA,EAAAd,GAAA,KAAA,EAA3D,IAANY,EAAMnB,EAAAsB,OACHC,SAAQ,CAAAF,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAAA,IAChB1C,EAAwB2C,KAAK,SAACC,GAAG,OAAKP,EAAOQ,KAAKC,SAASF,EAAI,GAAC,CAAAL,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAAA,IAChE5B,GAAmBA,EAAe6B,KAAK,SAACC,GAAG,OAAKP,EAAOQ,KAAKC,SAASF,EAAI,GAAC,CAAAL,EAAAd,EAAA,EAAA,KAAA,CAAA,OAAAc,EAAAG,EAAA,EAAA,GAAA,KAAA,EAExEJ,EAAiBvC,EAAqBgD,cAAc,SAACF,GAAI,OAC7DR,EAAOQ,KAAKG,cAAcC,WAAU,GAAAC,OAAIL,OAAQ,GAI/C9B,KACAuB,IAAmBtB,EAChBqB,EAAOQ,KAAKM,cAAcpC,GAAgB,EAC1CuB,EAAiBtB,KAErBD,EAAesB,EAAOQ,KACtB7B,EAAmBsB,GACpB,KAAA,EAAA,OAAAC,EAAAG,EAAA,GAAA,EAAAvB,EAAA,GAAAF,EAAAmC,IAAA,KAAA,EAAA,IAAAlC,EAAAD,EAAAQ,KAAA4B,KAAA,CAAA9B,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAA+B,EAAAC,EAAApC,KAAA,GAAA,KAAA,EAAA,GAAA,IAAAI,EAAAa,EAAA,CAAAb,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAmB,EAAA,EAAA,GAAA,KAAA,EAAAnB,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAa,EAAAnB,EAAAuC,EAAAnC,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAwC,IAAAlC,EAAAkC,EAAA,GAAA,KAAA,EAAA,OAAAlC,EAAAmB,EAAA,EAGI3B,GAAY,EAAAJ,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KACpBN,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"findEntryPointFile.js","names":[],"sources":["../../src/helpers/findEntryPointFile.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport { languageIdToDefinition } from '../types/language.js';\n\n// The last is most prioritized.\nconst PRIOTIZED_FILE_NAMES = ['index', 'main'] as const;\n\nconst IGNORED_FILE_EXTENSIONS = ['.DS_Store', '.class'] as const;\n\nexport async function findEntryPointFile(\n cwd: string,\n language?: string | readonly string[]\n): Promise<string | undefined> {\n const fileExtensions =\n language && [language].flat().flatMap((language) => languageIdToDefinition[language]?.fileExtensions ?? []);\n\n let mainFileName: string | undefined;\n let mainFilePrioryty = -1;\n\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (IGNORED_FILE_EXTENSIONS.some((ext) => dirent.name.endsWith(ext))) continue;\n if (fileExtensions && !fileExtensions.some((ext) => dirent.name.endsWith(ext))) continue;\n\n const direntPrioryty = PRIOTIZED_FILE_NAMES.findLastIndex((name) =>\n dirent.name.toLowerCase().startsWith(`${name}.`)\n );\n\n if (\n !mainFileName ||\n (direntPrioryty === mainFilePrioryty\n ? dirent.name.localeCompare(mainFileName) < 0\n : direntPrioryty > mainFilePrioryty)\n ) {\n mainFileName = dirent.name;\n mainFilePrioryty = direntPrioryty;\n }\n }\n\n return mainFileName;\n}\n"],"mappings":"qFAKA,MAAM,EAAuB,CAAC,QAAS,MAAM,EAEvC,EAA0B,CAAC,YAAa,QAAQ,EAEtD,eAAsB,EACpB,EACA,EAC6B,CAC7B,IAAM,EACJ,GAAY,CAAC,CAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,QAAS,GAAa,EAAuB,EAAS,EAAE,gBAAkB,CAAC,CAAC,EAExG,EACA,EAAmB,GAEvB,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,EAAK,CAAC,EAAG,CAG5E,GAFI,CAAC,EAAO,OAAO,GACf,EAAwB,KAAM,GAAQ,EAAO,KAAK,SAAS,CAAG,CAAC,GAC/D,GAAkB,CAAC,EAAe,KAAM,GAAQ,EAAO,KAAK,SAAS,CAAG,CAAC,EAAG,SAEhF,IAAM,EAAiB,EAAqB,cAAe,GACzD,EAAO,KAAK,YAAY,CAAC,CAAC,WAAW,GAAG,EAAK,EAAE,CACjD,GAGE,CAAC,IACA,IAAmB,EAChB,EAAO,KAAK,cAAc,CAAY,EAAI,EAC1C,EAAiB,MAErB,EAAe,EAAO,KACtB,EAAmB,EAEvB,CAEA,OAAO,CACT"}

@@ -1,2 +0,2 @@

"use strict";var n=require("../types/language.cjs");exports.findLanguageDefinitionByPath=function(e){return Object.values(n.languageIdToDefinition).find(function(n){return n.fileExtensions.some(function(n){return e.endsWith(n)})})};
//# sourceMappingURL=findLanguageDefinitionByPath.cjs.map
"use strict";const e=require("../types/language.cjs");function t(t){return Object.values(e.languageIdToDefinition).find(e=>e.fileExtensions.some(e=>t.endsWith(e)))}exports.findLanguageDefinitionByPath=t;
//# sourceMappingURL=findLanguageDefinitionByPath.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findLanguageDefinitionByPath.cjs","sources":["../../src/helpers/findLanguageDefinitionByPath.ts"],"sourcesContent":["import { languageIdToDefinition } from '../types/language.js';\nimport type { LanguageDefinition } from '../types/language.js';\n\nexport function findLanguageDefinitionByPath(path: string): LanguageDefinition | undefined {\n return Object.values(languageIdToDefinition).find((definition) =>\n definition.fileExtensions.some((ext) => path.endsWith(ext))\n );\n}\n"],"names":["path","Object","values","languageIdToDefinition","find","definition","fileExtensions","some","ext","endsWith"],"mappings":"yFAGO,SAAsCA,GAC3C,OAAOC,OAAOC,OAAOC,EAAAA,wBAAwBC,KAAK,SAACC,GAAU,OAC3DA,EAAWC,eAAeC,KAAK,SAACC,GAAG,OAAKR,EAAKS,SAASD,EAAI,EAAC,EAE/D"}
{"version":3,"file":"findLanguageDefinitionByPath.cjs","names":["languageIdToDefinition"],"sources":["../../src/helpers/findLanguageDefinitionByPath.ts"],"sourcesContent":["import { languageIdToDefinition } from '../types/language.js';\nimport type { LanguageDefinition } from '../types/language.js';\n\nexport function findLanguageDefinitionByPath(path: string): LanguageDefinition | undefined {\n return Object.values(languageIdToDefinition).find((definition) =>\n definition.fileExtensions.some((ext) => path.endsWith(ext))\n );\n}\n"],"mappings":"sDAGA,SAAgB,EAA6B,EAA8C,CACzF,OAAO,OAAO,OAAOA,EAAAA,sBAAsB,CAAC,CAAC,KAAM,GACjD,EAAW,eAAe,KAAM,GAAQ,EAAK,SAAS,CAAG,CAAC,CAC5D,CACF"}

@@ -1,2 +0,2 @@

import{languageIdToDefinition as n}from"../types/language.js";function e(e){return Object.values(n).find(function(n){return n.fileExtensions.some(function(n){return e.endsWith(n)})})}export{e as findLanguageDefinitionByPath};
//# sourceMappingURL=findLanguageDefinitionByPath.js.map
import{languageIdToDefinition as e}from"../types/language.js";function t(t){return Object.values(e).find(e=>e.fileExtensions.some(e=>t.endsWith(e)))}export{t as findLanguageDefinitionByPath};
//# sourceMappingURL=findLanguageDefinitionByPath.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findLanguageDefinitionByPath.js","sources":["../../src/helpers/findLanguageDefinitionByPath.ts"],"sourcesContent":["import { languageIdToDefinition } from '../types/language.js';\nimport type { LanguageDefinition } from '../types/language.js';\n\nexport function findLanguageDefinitionByPath(path: string): LanguageDefinition | undefined {\n return Object.values(languageIdToDefinition).find((definition) =>\n definition.fileExtensions.some((ext) => path.endsWith(ext))\n );\n}\n"],"names":["findLanguageDefinitionByPath","path","Object","values","languageIdToDefinition","find","definition","fileExtensions","some","ext","endsWith"],"mappings":"8DAGO,SAASA,EAA6BC,GAC3C,OAAOC,OAAOC,OAAOC,GAAwBC,KAAK,SAACC,GAAU,OAC3DA,EAAWC,eAAeC,KAAK,SAACC,GAAG,OAAKR,EAAKS,SAASD,EAAI,EAAC,EAE/D"}
{"version":3,"file":"findLanguageDefinitionByPath.js","names":[],"sources":["../../src/helpers/findLanguageDefinitionByPath.ts"],"sourcesContent":["import { languageIdToDefinition } from '../types/language.js';\nimport type { LanguageDefinition } from '../types/language.js';\n\nexport function findLanguageDefinitionByPath(path: string): LanguageDefinition | undefined {\n return Object.values(languageIdToDefinition).find((definition) =>\n definition.fileExtensions.some((ext) => path.endsWith(ext))\n );\n}\n"],"mappings":"8DAGA,SAAgB,EAA6B,EAA8C,CACzF,OAAO,OAAO,OAAO,CAAsB,CAAC,CAAC,KAAM,GACjD,EAAW,eAAe,KAAM,GAAQ,EAAK,SAAS,CAAG,CAAC,CAC5D,CACF"}

@@ -1,2 +0,2 @@

"use strict";var r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),e=require("node:fs/promises"),n=require("node:path"),t="model_answers",o="model_answers.fails";function i(){return(i=r.asyncToGenerator(r.regenerator().m(function e(n){return r.regenerator().w(function(r){for(;;)if(0===r.n)return r.a(2,u(n,t))},e)}))).apply(this,arguments)}function a(){return(a=r.asyncToGenerator(r.regenerator().m(function e(n){return r.regenerator().w(function(r){for(;;)if(0===r.n)return r.a(2,u(n,o))},e)}))).apply(this,arguments)}function u(r,e){return s.apply(this,arguments)}function s(){return(s=r.asyncToGenerator(r.regenerator().m(function t(o,i){var a,u,s;return r.regenerator().w(function(r){for(;;)switch(r.p=r.n){case 0:return a=n.join(o,i),r.p=1,r.n=2,e.readdir(a,{withFileTypes:!0});case 2:u=r.v,r.n=5;break;case 3:if(r.p=3,"ENOENT"!==(s=r.v).code){r.n=4;break}return r.a(2,[]);case 4:throw s;case 5:return r.a(2,u.filter(function(r){return r.isDirectory()}).map(function(r){return n.join(a,r.name)}).toSorted())}},t,null,[[1,3]])}))).apply(this,arguments)}exports.FAILING_MODEL_ANSWERS_DIRNAME=o,exports.MODEL_ANSWERS_DIRNAME=t,exports.findFailingModelAnswerDirs=function(r){return a.apply(this,arguments)},exports.findModelAnswerDirs=function(r){return i.apply(this,arguments)};
//# sourceMappingURL=findModelAnswerDirs.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:fs/promises");t=e.__toESM(t,1);let n=require("node:path");n=e.__toESM(n,1);const r=`model_answers`,i=`model_answers.fails`;async function a(e){return s(e,r)}async function o(e){return s(e,i)}async function s(e,r){let i=n.default.join(e,r),a;try{a=await t.default.readdir(i,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}return a.filter(e=>e.isDirectory()).map(e=>n.default.join(i,e.name)).toSorted()}exports.FAILING_MODEL_ANSWERS_DIRNAME=i,exports.MODEL_ANSWERS_DIRNAME=r,exports.findFailingModelAnswerDirs=o,exports.findModelAnswerDirs=a;
//# sourceMappingURL=findModelAnswerDirs.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findModelAnswerDirs.cjs","sources":["../../src/helpers/findModelAnswerDirs.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const MODEL_ANSWERS_DIRNAME = 'model_answers';\nexport const FAILING_MODEL_ANSWERS_DIRNAME = 'model_answers.fails';\n\n/**\n * Find model answer directories under `<problemDir>/model_answers/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, MODEL_ANSWERS_DIRNAME);\n}\n\n/**\n * Find failing model answer directories under `<problemDir>/model_answers.fails/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findFailingModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, FAILING_MODEL_ANSWERS_DIRNAME);\n}\n\nasync function findAnswerDirs(problemDir: string, dirname: string): Promise<string[]> {\n const modelAnswersDir = path.join(problemDir, dirname);\n let entries;\n try {\n entries = await fs.readdir(modelAnswersDir, { withFileTypes: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw error;\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(modelAnswersDir, entry.name))\n .toSorted();\n}\n"],"names":["MODEL_ANSWERS_DIRNAME","FAILING_MODEL_ANSWERS_DIRNAME","_findModelAnswerDirs","_asyncToGenerator","_regenerator","m","_callee","problemDir","w","_context","n","a","findAnswerDirs","apply","this","arguments","_findFailingModelAnswerDirs","_callee2","_context2","_x3","_x4","_findAnswerDirs","_callee3","dirname","modelAnswersDir","entries","_t","_context3","p","path","join","fs","readdir","withFileTypes","v","code","filter","entry","isDirectory","map","name","toSorted","_x2","_x"],"mappings":"6HAGaA,EAAwB,gBACxBC,EAAgC,sBAU7C,SAAAC,IAFC,OAEDA,EAAAC,EAAAA,iBAAAC,EAAAA,cAAAC,EAJO,SAAAC,EAAmCC,GAAkB,OAAAH,gBAAAI,EAAA,SAAAC,GAAA,UAAA,IAAAA,EAAAC,EAAA,OAAAD,EAAAE,EAAA,EACnDC,EAAeL,EAAYP,GAAsB,EAAAM,EAAA,KACzDO,MAAAC,KAAAC,UAAA,CAQA,SAAAC,IAAA,OAAAA,EAAAb,EAAAA,iBAAAC,EAAAA,cAAAC,EAFM,SAAAY,EAA0CV,GAAkB,OAAAH,gBAAAI,EAAA,SAAAU,GAAA,UAAA,IAAAA,EAAAR,EAAA,OAAAQ,EAAAP,EAAA,EAC1DC,EAAeL,EAAYN,GAA8B,EAAAgB,EAAA,KACjEJ,MAAAC,KAAAC,UAAA,CAAA,SAEcH,EAAcO,EAAAC,GAAA,OAAAC,EAAAR,MAAAC,KAAAC,UAAA,CAAA,SAAAM,IAa5B,OAb4BA,EAAAlB,EAAAA,iBAAAC,gBAAAC,EAA7B,SAAAiB,EAA8Bf,EAAoBgB,GAAe,IAAAC,EAAAC,EAAAC,EAAA,OAAAtB,gBAAAI,EAAA,SAAAmB,GAAA,cAAAA,EAAAC,EAAAD,EAAAjB,GAAA,KAAA,EACT,OAAhDc,EAAkBK,EAAKC,KAAKvB,EAAYgB,GAAQI,EAAAC,EAAA,EAAAD,EAAAjB,EAAA,EAGpCqB,EAAGC,QAAQR,EAAiB,CAAES,eAAe,IAAO,KAAA,EAApER,EAAOE,EAAAO,EAAAP,EAAAjB,EAAA,EAAA,MAAA,KAAA,EAAA,GAAAiB,EAAAC,EAAA,EAEuC,YAFvCF,EAAAC,EAAAO,GAE8BC,KAAiB,CAAAR,EAAAjB,EAAA,EAAA,KAAA,CAAA,OAAAiB,EAAAhB,EAAA,EAAS,IAAE,KAAA,EAAA,MAAAe,EAAA,KAAA,EAAA,OAAAC,EAAAhB,EAAA,EAG5Dc,EACJW,OAAO,SAACC,GAAK,OAAKA,EAAMC,aAAa,GACrCC,IAAI,SAACF,GAAK,OAAKR,EAAKC,KAAKN,EAAiBa,EAAMG,KAAK,GACrDC,YAAU,EAAAnB,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KACdT,MAAAC,KAAAC,UAAA,4GAjBD,SAAgD2B,GAAA,OAAA1B,EAAAH,MAAAC,KAAAC,UAAA,8BARhD,SAAyC4B,GAAA,OAAAzC,EAAAW,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"findModelAnswerDirs.cjs","names":["path","fs"],"sources":["../../src/helpers/findModelAnswerDirs.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const MODEL_ANSWERS_DIRNAME = 'model_answers';\nexport const FAILING_MODEL_ANSWERS_DIRNAME = 'model_answers.fails';\n\n/**\n * Find model answer directories under `<problemDir>/model_answers/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, MODEL_ANSWERS_DIRNAME);\n}\n\n/**\n * Find failing model answer directories under `<problemDir>/model_answers.fails/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findFailingModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, FAILING_MODEL_ANSWERS_DIRNAME);\n}\n\nasync function findAnswerDirs(problemDir: string, dirname: string): Promise<string[]> {\n const modelAnswersDir = path.join(problemDir, dirname);\n let entries;\n try {\n entries = await fs.readdir(modelAnswersDir, { withFileTypes: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw error;\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(modelAnswersDir, entry.name))\n .toSorted();\n}\n"],"mappings":"iKAGA,MAAa,EAAwB,gBACxB,EAAgC,sBAM7C,eAAsB,EAAoB,EAAuC,CAC/E,OAAO,EAAe,EAAY,CAAqB,CACzD,CAMA,eAAsB,EAA2B,EAAuC,CACtF,OAAO,EAAe,EAAY,CAA6B,CACjE,CAEA,eAAe,EAAe,EAAoB,EAAoC,CACpF,IAAM,EAAkBA,EAAAA,QAAK,KAAK,EAAY,CAAO,EACjD,EACJ,GAAI,CACF,EAAU,MAAMC,EAAAA,QAAG,QAAQ,EAAiB,CAAE,cAAe,EAAK,CAAC,CACrE,OAAS,EAAO,CACd,GAAK,EAAgC,OAAS,SAAU,MAAO,CAAC,EAChE,MAAM,CACR,CACA,OAAO,EACJ,OAAQ,GAAU,EAAM,YAAY,CAAC,CAAC,CACtC,IAAK,GAAUD,EAAAA,QAAK,KAAK,EAAiB,EAAM,IAAI,CAAC,CAAC,CACtD,SAAS,CACd"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as r,regenerator as n}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs/promises";import e from"node:path";var o="model_answers",i="model_answers.fails";function u(r){return a.apply(this,arguments)}function a(){return(a=r(n().m(function r(t){return n().w(function(r){for(;;)if(0===r.n)return r.a(2,p(t,o))},r)}))).apply(this,arguments)}function s(r){return f.apply(this,arguments)}function f(){return(f=r(n().m(function r(t){return n().w(function(r){for(;;)if(0===r.n)return r.a(2,p(t,i))},r)}))).apply(this,arguments)}function p(r,n){return c.apply(this,arguments)}function c(){return(c=r(n().m(function r(o,i){var u,a,s;return n().w(function(r){for(;;)switch(r.p=r.n){case 0:return u=e.join(o,i),r.p=1,r.n=2,t.readdir(u,{withFileTypes:!0});case 2:a=r.v,r.n=5;break;case 3:if(r.p=3,"ENOENT"!==(s=r.v).code){r.n=4;break}return r.a(2,[]);case 4:throw s;case 5:return r.a(2,a.filter(function(r){return r.isDirectory()}).map(function(r){return e.join(u,r.name)}).toSorted())}},r,null,[[1,3]])}))).apply(this,arguments)}export{i as FAILING_MODEL_ANSWERS_DIRNAME,o as MODEL_ANSWERS_DIRNAME,s as findFailingModelAnswerDirs,u as findModelAnswerDirs};
//# sourceMappingURL=findModelAnswerDirs.js.map
import e from"node:fs/promises";import t from"node:path";const n=`model_answers`,r=`model_answers.fails`;async function i(e){return o(e,n)}async function a(e){return o(e,r)}async function o(n,r){let i=t.join(n,r),a;try{a=await e.readdir(i,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}return a.filter(e=>e.isDirectory()).map(e=>t.join(i,e.name)).toSorted()}export{r as FAILING_MODEL_ANSWERS_DIRNAME,n as MODEL_ANSWERS_DIRNAME,a as findFailingModelAnswerDirs,i as findModelAnswerDirs};
//# sourceMappingURL=findModelAnswerDirs.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"findModelAnswerDirs.js","sources":["../../src/helpers/findModelAnswerDirs.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const MODEL_ANSWERS_DIRNAME = 'model_answers';\nexport const FAILING_MODEL_ANSWERS_DIRNAME = 'model_answers.fails';\n\n/**\n * Find model answer directories under `<problemDir>/model_answers/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, MODEL_ANSWERS_DIRNAME);\n}\n\n/**\n * Find failing model answer directories under `<problemDir>/model_answers.fails/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findFailingModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, FAILING_MODEL_ANSWERS_DIRNAME);\n}\n\nasync function findAnswerDirs(problemDir: string, dirname: string): Promise<string[]> {\n const modelAnswersDir = path.join(problemDir, dirname);\n let entries;\n try {\n entries = await fs.readdir(modelAnswersDir, { withFileTypes: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw error;\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(modelAnswersDir, entry.name))\n .toSorted();\n}\n"],"names":["MODEL_ANSWERS_DIRNAME","FAILING_MODEL_ANSWERS_DIRNAME","findModelAnswerDirs","_x","_findModelAnswerDirs","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","w","_context","n","a","findAnswerDirs","findFailingModelAnswerDirs","_x2","_findFailingModelAnswerDirs","_callee2","_context2","_x3","_x4","_findAnswerDirs","_callee3","dirname","modelAnswersDir","entries","_t","_context3","p","path","join","fs","readdir","withFileTypes","v","code","filter","entry","isDirectory","map","name","toSorted"],"mappings":"sJAGO,IAAMA,EAAwB,gBACxBC,EAAgC,sBAM7C,SAAsBC,EAAmBC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAIzC,SAAAH,IAFC,OAEDA,EAAAI,EAAAC,IAAAC,EAJO,SAAAC,EAAmCC,GAAkB,OAAAH,IAAAI,EAAA,SAAAC,GAAA,UAAA,IAAAA,EAAAC,EAAA,OAAAD,EAAAE,EAAA,EACnDC,EAAeL,EAAYZ,GAAsB,EAAAW,EAAA,KACzDN,MAAAC,KAAAC,UAAA,CAMD,SAAsBW,EAA0BC,GAAA,OAAAC,EAAAf,MAAAC,KAAAC,UAAA,CAE/C,SAAAa,IAAA,OAAAA,EAAAZ,EAAAC,IAAAC,EAFM,SAAAW,EAA0CT,GAAkB,OAAAH,IAAAI,EAAA,SAAAS,GAAA,UAAA,IAAAA,EAAAP,EAAA,OAAAO,EAAAN,EAAA,EAC1DC,EAAeL,EAAYX,GAA8B,EAAAoB,EAAA,KACjEhB,MAAAC,KAAAC,UAAA,CAAA,SAEcU,EAAcM,EAAAC,GAAA,OAAAC,EAAApB,MAAAC,KAAAC,UAAA,CAAA,SAAAkB,IAa5B,OAb4BA,EAAAjB,EAAAC,IAAAC,EAA7B,SAAAgB,EAA8Bd,EAAoBe,GAAe,IAAAC,EAAAC,EAAAC,EAAA,OAAArB,IAAAI,EAAA,SAAAkB,GAAA,cAAAA,EAAAC,EAAAD,EAAAhB,GAAA,KAAA,EACT,OAAhDa,EAAkBK,EAAKC,KAAKtB,EAAYe,GAAQI,EAAAC,EAAA,EAAAD,EAAAhB,EAAA,EAGpCoB,EAAGC,QAAQR,EAAiB,CAAES,eAAe,IAAO,KAAA,EAApER,EAAOE,EAAAO,EAAAP,EAAAhB,EAAA,EAAA,MAAA,KAAA,EAAA,GAAAgB,EAAAC,EAAA,EAEuC,YAFvCF,EAAAC,EAAAO,GAE8BC,KAAiB,CAAAR,EAAAhB,EAAA,EAAA,KAAA,CAAA,OAAAgB,EAAAf,EAAA,EAAS,IAAE,KAAA,EAAA,MAAAc,EAAA,KAAA,EAAA,OAAAC,EAAAf,EAAA,EAG5Da,EACJW,OAAO,SAACC,GAAK,OAAKA,EAAMC,aAAa,GACrCC,IAAI,SAACF,GAAK,OAAKR,EAAKC,KAAKN,EAAiBa,EAAMG,KAAK,GACrDC,YAAU,EAAAnB,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KACdrB,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"findModelAnswerDirs.js","names":[],"sources":["../../src/helpers/findModelAnswerDirs.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const MODEL_ANSWERS_DIRNAME = 'model_answers';\nexport const FAILING_MODEL_ANSWERS_DIRNAME = 'model_answers.fails';\n\n/**\n * Find model answer directories under `<problemDir>/model_answers/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, MODEL_ANSWERS_DIRNAME);\n}\n\n/**\n * Find failing model answer directories under `<problemDir>/model_answers.fails/`.\n * Returns absolute paths sorted lexicographically.\n */\nexport async function findFailingModelAnswerDirs(problemDir: string): Promise<string[]> {\n return findAnswerDirs(problemDir, FAILING_MODEL_ANSWERS_DIRNAME);\n}\n\nasync function findAnswerDirs(problemDir: string, dirname: string): Promise<string[]> {\n const modelAnswersDir = path.join(problemDir, dirname);\n let entries;\n try {\n entries = await fs.readdir(modelAnswersDir, { withFileTypes: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw error;\n }\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(modelAnswersDir, entry.name))\n .toSorted();\n}\n"],"mappings":"yDAGA,MAAa,EAAwB,gBACxB,EAAgC,sBAM7C,eAAsB,EAAoB,EAAuC,CAC/E,OAAO,EAAe,EAAY,CAAqB,CACzD,CAMA,eAAsB,EAA2B,EAAuC,CACtF,OAAO,EAAe,EAAY,CAA6B,CACjE,CAEA,eAAe,EAAe,EAAoB,EAAoC,CACpF,IAAM,EAAkB,EAAK,KAAK,EAAY,CAAO,EACjD,EACJ,GAAI,CACF,EAAU,MAAM,EAAG,QAAQ,EAAiB,CAAE,cAAe,EAAK,CAAC,CACrE,OAAS,EAAO,CACd,GAAK,EAAgC,OAAS,SAAU,MAAO,CAAC,EAChE,MAAM,CACR,CACA,OAAO,EACJ,OAAQ,GAAU,EAAM,YAAY,CAAC,CAAC,CACtC,IAAK,GAAU,EAAK,KAAK,EAAiB,EAAM,IAAI,CAAC,CAAC,CACtD,SAAS,CACd"}

@@ -1,2 +0,19 @@

"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)};
//# sourceMappingURL=judgeByStaticAnalysis.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./removeCommentsInSourceCode.cjs"),n=require("../types/decisionCode.cjs"),r=require("./findLanguageDefinitionByPath.cjs");let i=require("node:path");i=e.__toESM(i,1);let a=require("node:fs");a=e.__toESM(a,1);async function o(e,o){let s=new Set,c=[];for(let n of await a.default.promises.readdir(e,{withFileTypes:!0,recursive:!0})){if(!n.isFile())continue;let o=i.default.relative(e,i.default.join(n.parentPath,n.name));s.add(o);let l=await a.default.promises.readFile(i.default.join(n.parentPath,n.name),`utf8`);if(l.includes(`�`))continue;let u=r.findLanguageDefinitionByPath(n.name);u&&c.push({path:n.name,data:u.grammer?t.removeCommentsInSourceCode(u.grammer,l):l})}if(o.requiredSubmissionFilePaths){let e=o.requiredSubmissionFilePaths.filter(e=>!s.has(e)).toSorted();if(e.length>0)return{decisionCode:n.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:`ファイルが不足しています。
次のファイルを追加してから再度提出してください。
${e.map(e=>`- \`${e}\``).join(`
`)}
`}}let l=[];for(let e of c){for(let t of o.forbiddenRegExpsInCode??[]){let n=new RegExp(t,`g`),r=e.data.matchAll(n);for(let t of r)l.push({pattern:n.toString(),path:e.path,match:t[0]})}for(let t of o.forbiddenTextsInCode??[]){let n=0;for(;n<e.data.length;){let r=e.data.indexOf(t,n);if(r===-1)break;l.push({pattern:t,path:e.path,match:t}),n=r+t.length}}}if(l.length>0)return{decisionCode:n.DecisionCode.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に禁止された文字列が含まれています。
ソースコードを修正してから再度提出してください。
| ファイル | 禁止パターン | 文字列 |
| -------- | ------------ | ------ |
${l.map(e=>`| \`${e.path}\` | \`${e.pattern}\` | \`${e.match}\` |`).join(`
`)}
`};let u=[];for(let e of o.requiredRegExpsInCode??[]){let t=new RegExp(e);c.some(e=>t.test(e.data))||u.push(t.toString())}if(u.length>0)return{decisionCode:n.DecisionCode.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に必要な文字列が含まれていません。
ソースコードを修正してから再度提出してください。
${u.map(e=>`- \`${e}\``).join(`
`)}
`}}exports.judgeByStaticAnalysis=o;
//# sourceMappingURL=judgeByStaticAnalysis.cjs.map

@@ -1,1 +0,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":"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"}
{"version":3,"file":"judgeByStaticAnalysis.cjs","names":["fs","path","findLanguageDefinitionByPath","removeCommentsInSourceCode","DecisionCode"],"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"],"mappings":"6RAUA,eAAsB,EACpB,EACA,EAIgF,CAChF,IAAM,EAAc,IAAI,IAClB,EAAkE,CAAC,EAEzE,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,GAAM,UAAW,EAAK,CAAC,EAAG,CAC7F,GAAI,CAAC,EAAO,OAAO,EAAG,SAEtB,IAAM,EAAeC,EAAAA,QAAK,SAAS,EAAKA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACjF,EAAY,IAAI,CAAY,EAE5B,IAAM,EAAO,MAAMD,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,GADiB,EAAK,SAAS,GACpB,EAAG,SAEd,IAAM,EAAqBC,EAAAA,6BAA6B,EAAO,IAAI,EAC9D,GAEL,EAA8B,KAAK,CACjC,KAAM,EAAO,KACb,KAAM,EAAmB,QAAUC,EAAAA,2BAA2B,EAAmB,QAAS,CAAI,EAAI,CACpG,CAAC,CACH,CAEA,GAAI,EAA+B,4BAA6B,CAC9D,IAAM,EAAmB,EAA+B,4BACrD,OAAQ,GAAM,CAAC,EAAY,IAAI,CAAC,CAAC,CAAC,CAClC,SAAS,EAEZ,GAAI,EAAiB,OAAS,EAC5B,MAAO,CACL,aAAcC,EAAAA,aAAa,uCAC3B,iBAAkB;;;EAGxB,EAAiB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAEjD,CAEJ,CAEA,IAAM,EAAsE,CAAC,EAE7E,IAAK,IAAM,KAAQ,EAA+B,CAChD,IAAK,IAAM,KAAW,EAA+B,wBAA0B,CAAC,EAAG,CACjF,IAAM,EAAK,IAAI,OAAO,EAAS,GAAG,EAC5B,EAAU,EAAK,KAAK,SAAS,CAAE,EACrC,IAAK,IAAM,KAAS,EAAS,EAAgB,KAAK,CAAE,QAAS,EAAG,SAAS,EAAG,KAAM,EAAK,KAAM,MAAO,EAAM,EAAG,CAAC,CAChH,CACA,IAAK,IAAM,KAAW,EAA+B,sBAAwB,CAAC,EAAG,CAC/E,IAAI,EAAI,EACR,KAAO,EAAI,EAAK,KAAK,QAAQ,CAC3B,IAAM,EAAQ,EAAK,KAAK,QAAQ,EAAS,CAAC,EAC1C,GAAI,IAAU,GAAI,MAClB,EAAgB,KAAK,CAAE,UAAS,KAAM,EAAK,KAAM,MAAO,CAAQ,CAAC,EACjE,EAAI,EAAQ,EAAQ,MACtB,CACF,CACF,CAEA,GAAI,EAAgB,OAAS,EAC3B,MAAO,CACL,aAAcA,EAAAA,aAAa,iCAC3B,iBAAkB;;;;;EAKtB,EAAgB,IAAK,GAAM,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK;CAAI,EAAE;CAE7F,EAGF,IAAM,EAAoC,CAAC,EAE3C,IAAK,IAAM,KAAW,EAA+B,uBAAyB,CAAC,EAAG,CAChF,IAAM,EAAK,IAAI,OAAO,CAAO,EACb,EAA8B,KAAM,GAAM,EAAG,KAAK,EAAE,IAAI,CAC7D,GAAG,EAAwB,KAAK,EAAG,SAAS,CAAC,CAC1D,CAEA,GAAI,EAAwB,OAAS,EACnC,MAAO,CACL,aAAcA,EAAAA,aAAa,gCAC3B,iBAAkB;;;EAGtB,EAAwB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAE1D,CAIJ"}

@@ -1,2 +0,19 @@

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};
//# sourceMappingURL=judgeByStaticAnalysis.js.map
import{removeCommentsInSourceCode as e}from"./removeCommentsInSourceCode.js";import{DecisionCode as t}from"../types/decisionCode.js";import{findLanguageDefinitionByPath as n}from"./findLanguageDefinitionByPath.js";import r from"node:path";import i from"node:fs";async function a(a,o){let s=new Set,c=[];for(let t of await i.promises.readdir(a,{withFileTypes:!0,recursive:!0})){if(!t.isFile())continue;let o=r.relative(a,r.join(t.parentPath,t.name));s.add(o);let l=await i.promises.readFile(r.join(t.parentPath,t.name),`utf8`);if(l.includes(`�`))continue;let u=n(t.name);u&&c.push({path:t.name,data:u.grammer?e(u.grammer,l):l})}if(o.requiredSubmissionFilePaths){let e=o.requiredSubmissionFilePaths.filter(e=>!s.has(e)).toSorted();if(e.length>0)return{decisionCode:t.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,feedbackMarkdown:`ファイルが不足しています。
次のファイルを追加してから再度提出してください。
${e.map(e=>`- \`${e}\``).join(`
`)}
`}}let l=[];for(let e of c){for(let t of o.forbiddenRegExpsInCode??[]){let n=new RegExp(t,`g`),r=e.data.matchAll(n);for(let t of r)l.push({pattern:n.toString(),path:e.path,match:t[0]})}for(let t of o.forbiddenTextsInCode??[]){let n=0;for(;n<e.data.length;){let r=e.data.indexOf(t,n);if(r===-1)break;l.push({pattern:t,path:e.path,match:t}),n=r+t.length}}}if(l.length>0)return{decisionCode:t.FORBIDDEN_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に禁止された文字列が含まれています。
ソースコードを修正してから再度提出してください。
| ファイル | 禁止パターン | 文字列 |
| -------- | ------------ | ------ |
${l.map(e=>`| \`${e.path}\` | \`${e.pattern}\` | \`${e.match}\` |`).join(`
`)}
`};let u=[];for(let e of o.requiredRegExpsInCode??[]){let t=new RegExp(e);c.some(e=>t.test(e.data))||u.push(t.toString())}if(u.length>0)return{decisionCode:t.REQUIRED_PATTERNS_IN_CODE_ERROR,feedbackMarkdown:`ソースコード中に必要な文字列が含まれていません。
ソースコードを修正してから再度提出してください。
${u.map(e=>`- \`${e}\``).join(`
`)}
`}}export{a as judgeByStaticAnalysis};
//# sourceMappingURL=judgeByStaticAnalysis.js.map

@@ -1,1 +0,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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"}
{"version":3,"file":"judgeByStaticAnalysis.js","names":[],"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"],"mappings":"sQAUA,eAAsB,EACpB,EACA,EAIgF,CAChF,IAAM,EAAc,IAAI,IAClB,EAAkE,CAAC,EAEzE,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAK,CAAE,cAAe,GAAM,UAAW,EAAK,CAAC,EAAG,CAC7F,GAAI,CAAC,EAAO,OAAO,EAAG,SAEtB,IAAM,EAAe,EAAK,SAAS,EAAK,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACjF,EAAY,IAAI,CAAY,EAE5B,IAAM,EAAO,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,GADiB,EAAK,SAAS,GACpB,EAAG,SAEd,IAAM,EAAqB,EAA6B,EAAO,IAAI,EAC9D,GAEL,EAA8B,KAAK,CACjC,KAAM,EAAO,KACb,KAAM,EAAmB,QAAU,EAA2B,EAAmB,QAAS,CAAI,EAAI,CACpG,CAAC,CACH,CAEA,GAAI,EAA+B,4BAA6B,CAC9D,IAAM,EAAmB,EAA+B,4BACrD,OAAQ,GAAM,CAAC,EAAY,IAAI,CAAC,CAAC,CAAC,CAClC,SAAS,EAEZ,GAAI,EAAiB,OAAS,EAC5B,MAAO,CACL,aAAc,EAAa,uCAC3B,iBAAkB;;;EAGxB,EAAiB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAEjD,CAEJ,CAEA,IAAM,EAAsE,CAAC,EAE7E,IAAK,IAAM,KAAQ,EAA+B,CAChD,IAAK,IAAM,KAAW,EAA+B,wBAA0B,CAAC,EAAG,CACjF,IAAM,EAAK,IAAI,OAAO,EAAS,GAAG,EAC5B,EAAU,EAAK,KAAK,SAAS,CAAE,EACrC,IAAK,IAAM,KAAS,EAAS,EAAgB,KAAK,CAAE,QAAS,EAAG,SAAS,EAAG,KAAM,EAAK,KAAM,MAAO,EAAM,EAAG,CAAC,CAChH,CACA,IAAK,IAAM,KAAW,EAA+B,sBAAwB,CAAC,EAAG,CAC/E,IAAI,EAAI,EACR,KAAO,EAAI,EAAK,KAAK,QAAQ,CAC3B,IAAM,EAAQ,EAAK,KAAK,QAAQ,EAAS,CAAC,EAC1C,GAAI,IAAU,GAAI,MAClB,EAAgB,KAAK,CAAE,UAAS,KAAM,EAAK,KAAM,MAAO,CAAQ,CAAC,EACjE,EAAI,EAAQ,EAAQ,MACtB,CACF,CACF,CAEA,GAAI,EAAgB,OAAS,EAC3B,MAAO,CACL,aAAc,EAAa,iCAC3B,iBAAkB;;;;;EAKtB,EAAgB,IAAK,GAAM,OAAO,EAAE,KAAK,SAAS,EAAE,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK;CAAI,EAAE;CAE7F,EAGF,IAAM,EAAoC,CAAC,EAE3C,IAAK,IAAM,KAAW,EAA+B,uBAAyB,CAAC,EAAG,CAChF,IAAM,EAAK,IAAI,OAAO,CAAO,EACb,EAA8B,KAAM,GAAM,EAAG,KAAK,EAAE,IAAI,CAC7D,GAAG,EAAwB,KAAK,EAAG,SAAS,CAAC,CAC1D,CAEA,GAAI,EAAwB,OAAS,EACnC,MAAO,CACL,aAAc,EAAa,gCAC3B,iBAAkB;;;EAGtB,EAAwB,IAAK,GAAM,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK;CAAI,EAAE;CAE1D,CAIJ"}

@@ -1,2 +0,2 @@

"use strict";exports.parseArgs=function(r){var a=r[2]||void 0,s=r[3];try{return{cwd:a,params:s?JSON.parse(s):{}}}catch(r){throw new Error("bad params argument",{cause:r})}};
//# sourceMappingURL=parseArgs.cjs.map
"use strict";function e(e){let t=e[2]||void 0,n=e[3];try{return{cwd:t,params:n?JSON.parse(n):{}}}catch(e){throw Error(`bad params argument`,{cause:e})}}exports.parseArgs=e;
//# sourceMappingURL=parseArgs.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"parseArgs.cjs","sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"names":["argv","cwd","undefined","paramsJson","params","JSON","parse","error","Error","cause"],"mappings":"+BAMO,SAAmBA,GACxB,IAAMC,EAAMD,EAAK,SAAME,EACjBC,EAAaH,EAAK,GAExB,IACE,MAAO,CAAEC,IAAAA,EAAKG,OAAQD,EAAaE,KAAKC,MAAMH,GAAc,CAAA,EAC9D,CAAE,MAAOI,GACP,MAAM,IAAIC,MAAM,sBAAuB,CAAEC,MAAOF,GAClD,CACF"}
{"version":3,"file":"parseArgs.cjs","names":[],"sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"mappings":"aAMA,SAAgB,EAAU,EAAuE,CAC/F,IAAM,EAAM,EAAK,IAAM,IAAA,GACjB,EAAa,EAAK,GAExB,GAAI,CACF,MAAO,CAAE,MAAK,OAAQ,EAAa,KAAK,MAAM,CAAU,EAAI,CAAC,CAAE,CACjE,OAAS,EAAO,CACd,MAAU,MAAM,sBAAuB,CAAE,MAAO,CAAM,CAAC,CACzD,CACF"}

@@ -1,2 +0,2 @@

function r(r){var a=r[2]||void 0,t=r[3];try{return{cwd:a,params:t?JSON.parse(t):{}}}catch(r){throw new Error("bad params argument",{cause:r})}}export{r as parseArgs};
//# sourceMappingURL=parseArgs.js.map
function e(e){let t=e[2]||void 0,n=e[3];try{return{cwd:t,params:n?JSON.parse(n):{}}}catch(e){throw Error(`bad params argument`,{cause:e})}}export{e as parseArgs};
//# sourceMappingURL=parseArgs.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"parseArgs.js","sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"names":["parseArgs","argv","cwd","undefined","paramsJson","params","JSON","parse","error","Error","cause"],"mappings":"AAMO,SAASA,EAAUC,GACxB,IAAMC,EAAMD,EAAK,SAAME,EACjBC,EAAaH,EAAK,GAExB,IACE,MAAO,CAAEC,IAAAA,EAAKG,OAAQD,EAAaE,KAAKC,MAAMH,GAAc,CAAA,EAC9D,CAAE,MAAOI,GACP,MAAM,IAAIC,MAAM,sBAAuB,CAAEC,MAAOF,GAClD,CACF"}
{"version":3,"file":"parseArgs.js","names":[],"sources":["../../src/helpers/parseArgs.ts"],"sourcesContent":["/**\n * Parse command line arguments in `judge.ts` or `debug.ts`.\n *\n * `cwd` is optional: when omitted, presets that support it may fall back to\n * judging against model answers under `<problemDir>/model_answers/*`.\n */\nexport function parseArgs(argv: readonly string[]): { cwd: string | undefined; params: unknown } {\n const cwd = argv[2] || undefined;\n const paramsJson = argv[3];\n\n try {\n return { cwd, params: paramsJson ? JSON.parse(paramsJson) : {} };\n } catch (error) {\n throw new Error('bad params argument', { cause: error });\n }\n}\n"],"mappings":"AAMA,SAAgB,EAAU,EAAuE,CAC/F,IAAM,EAAM,EAAK,IAAM,IAAA,GACjB,EAAa,EAAK,GAExB,GAAI,CACF,MAAO,CAAE,MAAK,OAAQ,EAAa,KAAK,MAAM,CAAU,EAAI,CAAC,CAAE,CACjE,OAAS,EAAO,CACd,MAAU,MAAM,sBAAuB,CAAE,MAAO,CAAM,CAAC,CACzD,CACF"}

@@ -1,2 +0,3 @@

"use strict";var n="=".repeat(72);exports.printDebugBanner=function(c){var t=c.map(function(n){return" ".concat(n)}).join("\n");console.warn("\n".concat(n,"\n").concat(t,"\n").concat(n))};
//# sourceMappingURL=printDebugBanner.cjs.map
"use strict";const e=`=`.repeat(72);function t(t){let n=t.map(e=>` ${e}`).join(`
`);console.warn(`\n${e}\n${n}\n${e}`)}exports.printDebugBanner=t;
//# sourceMappingURL=printDebugBanner.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"printDebugBanner.cjs","sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"names":["BANNER_LINE","repeat","lines","body","map","line","concat","join","console","warn"],"mappings":"aAAA,IAAMA,EAAc,IAAIC,OAAO,6BAQxB,SAA0BC,GAC/B,IAAMC,EAAOD,EAAME,IAAI,SAACC,GAAI,MAAA,KAAAC,OAAUD,EAAI,GAAIE,KAAK,MACnDC,QAAQC,KAAI,KAAAH,OAAMN,EAAW,MAAAM,OAAKH,EAAI,MAAAG,OAAKN,GAC7C"}
{"version":3,"file":"printDebugBanner.cjs","names":[],"sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"mappings":"aAAA,MAAM,EAAc,IAAI,OAAO,EAAE,EAQjC,SAAgB,EAAiB,EAAgC,CAC/D,IAAM,EAAO,EAAM,IAAK,GAAS,KAAK,GAAM,CAAC,CAAC,KAAK;CAAI,EACvD,QAAQ,KAAK,KAAK,EAAY,IAAI,EAAK,IAAI,GAAa,CAC1D"}

@@ -1,2 +0,3 @@

var n="=".repeat(72);function c(c){var o=c.map(function(n){return" ".concat(n)}).join("\n");console.warn("\n".concat(n,"\n").concat(o,"\n").concat(n))}export{c as printDebugBanner};
//# sourceMappingURL=printDebugBanner.js.map
const e=`=`.repeat(72);function t(t){let n=t.map(e=>` ${e}`).join(`
`);console.warn(`\n${e}\n${n}\n${e}`)}export{t as printDebugBanner};
//# sourceMappingURL=printDebugBanner.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"printDebugBanner.js","sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"names":["BANNER_LINE","repeat","printDebugBanner","lines","body","map","line","concat","join","console","warn"],"mappings":"AAAA,IAAMA,EAAc,IAAIC,OAAO,IAQxB,SAASC,EAAiBC,GAC/B,IAAMC,EAAOD,EAAME,IAAI,SAACC,GAAI,MAAA,KAAAC,OAAUD,EAAI,GAAIE,KAAK,MACnDC,QAAQC,KAAI,KAAAH,OAAMP,EAAW,MAAAO,OAAKH,EAAI,MAAAG,OAAKP,GAC7C"}
{"version":3,"file":"printDebugBanner.js","names":[],"sources":["../../src/helpers/printDebugBanner.ts"],"sourcesContent":["const BANNER_LINE = '='.repeat(72);\n\n/**\n * Print a prominent, multi-line banner to stderr so that debug-mode runs\n * (e.g., judging against model answers without an explicit cwd) are obvious.\n *\n * Written to stderr to avoid interfering with `printTestCaseResult` output on stdout.\n */\nexport function printDebugBanner(lines: readonly string[]): void {\n const body = lines.map((line) => ` ${line}`).join('\\n');\n console.warn(`\\n${BANNER_LINE}\\n${body}\\n${BANNER_LINE}`);\n}\n"],"mappings":"AAAA,MAAM,EAAc,IAAI,OAAO,EAAE,EAQjC,SAAgB,EAAiB,EAAgC,CAC/D,IAAM,EAAO,EAAM,IAAK,GAAS,KAAK,GAAM,CAAC,CAAC,KAAK;CAAI,EACvD,QAAQ,KAAK,KAAK,EAAY,IAAI,EAAK,IAAI,GAAa,CAC1D"}

@@ -1,2 +0,2 @@

"use strict";var t=require("../types/testCaseResult.cjs");exports.encodeFileForTestCaseResult=function(t,e){var s=e.toString("utf8");return s.includes("�")?{path:t,encoding:"base64",data:e.toString("base64")}:{path:t,data:s}},exports.printTestCaseResult=function(e){console.info("".concat(t.TEST_CASE_RESULT_PREFIX).concat(JSON.stringify(e)))};
//# sourceMappingURL=printTestCaseResult.cjs.map
"use strict";const e=require("../types/testCaseResult.cjs");function t(t){console.info(`${e.TEST_CASE_RESULT_PREFIX}${JSON.stringify(t)}`)}function n(e,t){let n=t.toString(`utf8`);return n.includes(`�`)?{path:e,encoding:`base64`,data:t.toString(`base64`)}:{path:e,data:n}}exports.encodeFileForTestCaseResult=n,exports.printTestCaseResult=t;
//# sourceMappingURL=printTestCaseResult.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"printTestCaseResult.cjs","sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"names":["path","data","utf8Text","toString","includes","encoding","result","console","info","concat","TEST_CASE_RESULT_PREFIX","JSON","stringify"],"mappings":"8FAUO,SACLA,EACAC,GAEA,IAAMC,EAAWD,EAAKE,SAAS,QAE/B,OADiBD,EAASE,SAAS,KACjB,CAAEJ,KAAAA,EAAMK,SAAU,SAAUJ,KAAMA,EAAKE,SAAS,WAAc,CAAEH,KAAAA,EAAMC,KAAMC,EAChG,8BAXO,SAA6BI,GAClCC,QAAQC,KAAI,GAAAC,OAAIC,EAAAA,yBAAuBD,OAAGE,KAAKC,UAAUN,IAC3D"}
{"version":3,"file":"printTestCaseResult.cjs","names":["TEST_CASE_RESULT_PREFIX"],"sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"mappings":"4DAMA,SAAgB,EAAoB,EAA8B,CAChE,QAAQ,KAAK,GAAGA,EAAAA,0BAA0B,KAAK,UAAU,CAAM,GAAG,CACpE,CAEA,SAAgB,EACd,EACA,EACoD,CACpD,IAAM,EAAW,EAAK,SAAS,MAAM,EAErC,OADiB,EAAS,SAAS,GACrB,EAAI,CAAE,OAAM,SAAU,SAAU,KAAM,EAAK,SAAS,QAAQ,CAAE,EAAI,CAAE,OAAM,KAAM,CAAS,CACzG"}

@@ -1,2 +0,2 @@

import{TEST_CASE_RESULT_PREFIX as t}from"../types/testCaseResult.js";function n(n){console.info("".concat(t).concat(JSON.stringify(n)))}function o(t,n){var o=n.toString("utf8");return o.includes("�")?{path:t,encoding:"base64",data:n.toString("base64")}:{path:t,data:o}}export{o as encodeFileForTestCaseResult,n as printTestCaseResult};
//# sourceMappingURL=printTestCaseResult.js.map
import{TEST_CASE_RESULT_PREFIX as e}from"../types/testCaseResult.js";function t(t){console.info(`${e}${JSON.stringify(t)}`)}function n(e,t){let n=t.toString(`utf8`);return n.includes(`�`)?{path:e,encoding:`base64`,data:t.toString(`base64`)}:{path:e,data:n}}export{n as encodeFileForTestCaseResult,t as printTestCaseResult};
//# sourceMappingURL=printTestCaseResult.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"printTestCaseResult.js","sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"names":["printTestCaseResult","result","console","info","concat","TEST_CASE_RESULT_PREFIX","JSON","stringify","encodeFileForTestCaseResult","path","data","utf8Text","toString","includes","encoding"],"mappings":"qEAMO,SAASA,EAAoBC,GAClCC,QAAQC,KAAI,GAAAC,OAAIC,GAAuBD,OAAGE,KAAKC,UAAUN,IAC3D,CAEO,SAASO,EACdC,EACAC,GAEA,IAAMC,EAAWD,EAAKE,SAAS,QAE/B,OADiBD,EAASE,SAAS,KACjB,CAAEJ,KAAAA,EAAMK,SAAU,SAAUJ,KAAMA,EAAKE,SAAS,WAAc,CAAEH,KAAAA,EAAMC,KAAMC,EAChG"}
{"version":3,"file":"printTestCaseResult.js","names":[],"sources":["../../src/helpers/printTestCaseResult.ts"],"sourcesContent":["import type { TestCaseResult } from '../types/testCaseResult.js';\nimport { TEST_CASE_RESULT_PREFIX } from '../types/testCaseResult.js';\n\n/**\n * Print a test case result in a format that can be read by the judge server.\n */\nexport function printTestCaseResult(result: TestCaseResult): void {\n console.info(`${TEST_CASE_RESULT_PREFIX}${JSON.stringify(result)}`);\n}\n\nexport function encodeFileForTestCaseResult(\n path: string,\n data: Buffer\n): NonNullable<TestCaseResult['outputFiles']>[number] {\n const utf8Text = data.toString('utf8');\n const isBinary = utf8Text.includes('\\uFFFD');\n return isBinary ? { path, encoding: 'base64', data: data.toString('base64') } : { path, data: utf8Text };\n}\n"],"mappings":"qEAMA,SAAgB,EAAoB,EAA8B,CAChE,QAAQ,KAAK,GAAG,IAA0B,KAAK,UAAU,CAAM,GAAG,CACpE,CAEA,SAAgB,EACd,EACA,EACoD,CACpD,IAAM,EAAW,EAAK,SAAS,MAAM,EAErC,OADiB,EAAS,SAAS,GACrB,EAAI,CAAE,OAAM,SAAU,SAAU,KAAM,EAAK,SAAS,QAAQ,CAAE,EAAI,CAAE,OAAM,KAAM,CAAS,CACzG"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),n=require("node:path"),a=require("./printTestCaseResult.cjs");function s(){return(s=e.asyncToGenerator(e.regenerator().m(function s(t,u){var i,c,o,p,l,f;return e.regenerator().w(function(s){for(;;)switch(s.p=s.n){case 0:i=[],c=e.createForOfIteratorHelper(u),s.p=1,c.s();case 2:if((o=c.n()).done){s.n=7;break}return p=o.value,s.p=3,s.n=4,r.promises.readFile(n.join(t,p));case 4:l=s.v,i.push(a.encodeFileForTestCaseResult(p,l)),s.n=6;break;case 5:s.p=5,s.v;case 6:s.n=2;break;case 7:s.n=9;break;case 8:s.p=8,f=s.v,c.e(f);case 9:return s.p=9,c.f(),s.f(9);case 10:return s.a(2,i)}},s,null,[[3,5],[1,8,9,10]])}))).apply(this,arguments)}exports.readOutputFiles=function(e,r){return s.apply(this,arguments)};
//# sourceMappingURL=readOutputFiles.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./printTestCaseResult.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);async function i(e,i){let a=[];for(let o of i)try{let i=await r.default.promises.readFile(n.default.join(e,o));a.push(t.encodeFileForTestCaseResult(o,i))}catch{}return a}exports.readOutputFiles=i;
//# sourceMappingURL=readOutputFiles.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readOutputFiles.cjs","sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"names":["_readOutputFiles","_asyncToGenerator","_regenerator","m","_callee","cwd","outputFilePaths","outputFiles","_iterator","_step","filePath","buffer","_t2","w","_context","p","n","_createForOfIteratorHelper","s","done","value","fs","promises","readFile","path","join","v","push","encodeFileForTestCaseResult","e","f","a","apply","this","arguments","_x","_x2"],"mappings":"2JAqBC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAdM,SAAAC,EACLC,EACAC,GAAkC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAV,gBAAAW,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAE5BT,EAA0D,GAAEC,EAAAS,EAAAA,0BAC3CX,GAAeQ,EAAAC,EAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAQ,KAAAG,KAAA,CAAAL,EAAAE,EAAA,EAAA,KAAA,CAAnB,OAARN,EAAQD,EAAAW,MAAAN,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAEMK,EAAGC,SAASC,SAASC,EAAKC,KAAKpB,EAAKK,IAAU,KAAA,EAA7DC,EAAMG,EAAAY,EACZnB,EAAYoB,KAAKC,EAAAA,4BAA4BlB,EAAUC,IAASG,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAD,EAAAY,EAAA,KAAA,EAAAZ,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAY,EAAAlB,EAAAqB,EAAAjB,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAsB,IAAAhB,EAAAgB,EAAA,GAAA,KAAA,GAAA,OAAAhB,EAAAiB,EAAA,EAK7DxB,GAAW,EAAAH,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,KAAA,KACnB4B,MAAAC,KAAAC,UAAA,yBAdD,SAAqCC,EAAAC,GAAA,OAAApC,EAAAgC,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"readOutputFiles.cjs","names":["fs","path","encodeFileForTestCaseResult"],"sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"mappings":"+LAOA,eAAsB,EACpB,EACA,EACqD,CACrD,IAAM,EAA0D,CAAC,EACjE,IAAK,IAAM,KAAY,EACrB,GAAI,CACF,IAAM,EAAS,MAAMA,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAK,CAAQ,CAAC,EAClE,EAAY,KAAKC,EAAAA,4BAA4B,EAAU,CAAM,CAAC,CAChE,MAAQ,CAER,CAEF,OAAO,CACT"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as r,createForOfIteratorHelper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:fs";import t from"node:path";import{encodeFileForTestCaseResult as s}from"./printTestCaseResult.js";function o(e,r){return p.apply(this,arguments)}function p(){return(p=e(r().m(function e(o,p){var i,u,c,f,l,m;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:i=[],u=a(p),e.p=1,u.s();case 2:if((c=u.n()).done){e.n=7;break}return f=c.value,e.p=3,e.n=4,n.promises.readFile(t.join(o,f));case 4:l=e.v,i.push(s(f,l)),e.n=6;break;case 5:e.p=5,e.v;case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,m=e.v,u.e(m);case 9:return e.p=9,u.f(),e.f(9);case 10:return e.a(2,i)}},e,null,[[3,5],[1,8,9,10]])}))).apply(this,arguments)}export{o as readOutputFiles};
//# sourceMappingURL=readOutputFiles.js.map
import{encodeFileForTestCaseResult as e}from"./printTestCaseResult.js";import t from"node:path";import n from"node:fs";async function r(r,i){let a=[];for(let o of i)try{let i=await n.promises.readFile(t.join(r,o));a.push(e(o,i))}catch{}return a}export{r as readOutputFiles};
//# sourceMappingURL=readOutputFiles.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readOutputFiles.js","sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"names":["readOutputFiles","_x","_x2","_readOutputFiles","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","cwd","outputFilePaths","outputFiles","_iterator","_step","filePath","buffer","_t2","w","_context","p","n","_createForOfIteratorHelper","s","done","value","fs","promises","readFile","path","join","v","push","encodeFileForTestCaseResult","e","f","a"],"mappings":"mPAOA,SAAsBA,EAAeC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAcpC,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAdM,SAAAC,EACLC,EACAC,GAAkC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAV,IAAAW,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAE5BT,EAA0D,GAAEC,EAAAS,EAC3CX,GAAeQ,EAAAC,EAAA,EAAAP,EAAAU,IAAA,KAAA,EAAA,IAAAT,EAAAD,EAAAQ,KAAAG,KAAA,CAAAL,EAAAE,EAAA,EAAA,KAAA,CAAnB,OAARN,EAAQD,EAAAW,MAAAN,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAEMK,EAAGC,SAASC,SAASC,EAAKC,KAAKpB,EAAKK,IAAU,KAAA,EAA7DC,EAAMG,EAAAY,EACZnB,EAAYoB,KAAKC,EAA4BlB,EAAUC,IAASG,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAD,EAAAY,EAAA,KAAA,EAAAZ,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAY,EAAAlB,EAAAqB,EAAAjB,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAAsB,IAAAhB,EAAAgB,EAAA,GAAA,KAAA,GAAA,OAAAhB,EAAAiB,EAAA,EAK7DxB,GAAW,EAAAH,EAAA,KAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,EAAA,EAAA,KAAA,KACnBN,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"readOutputFiles.js","names":[],"sources":["../../src/helpers/readOutputFiles.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nimport { encodeFileForTestCaseResult } from './printTestCaseResult.js';\n\nexport async function readOutputFiles(\n cwd: string,\n outputFilePaths: readonly string[]\n): Promise<NonNullable<TestCaseResult['outputFiles']>> {\n const outputFiles: NonNullable<TestCaseResult['outputFiles']> = [];\n for (const filePath of outputFilePaths) {\n try {\n const buffer = await fs.promises.readFile(path.join(cwd, filePath));\n outputFiles.push(encodeFileForTestCaseResult(filePath, buffer));\n } catch {\n // file not found\n }\n }\n return outputFiles;\n}\n"],"mappings":"uHAOA,eAAsB,EACpB,EACA,EACqD,CACrD,IAAM,EAA0D,CAAC,EACjE,IAAK,IAAM,KAAY,EACrB,GAAI,CACF,IAAM,EAAS,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAK,CAAQ,CAAC,EAClE,EAAY,KAAK,EAA4B,EAAU,CAAM,CAAC,CAChE,MAAQ,CAER,CAEF,OAAO,CACT"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),a=require("node:path"),n=require("front-matter"),t=require("../types/problem.cjs");function o(){return(o=e.asyncToGenerator(e.regenerator().m(function o(s){var i,u,c,p,l,m,f,d;return e.regenerator().w(function(o){for(;;)switch(o.p=o.n){case 0:return f=e.createForOfIteratorHelper,o.n=1,r.promises.readdir(s,{withFileTypes:!0});case 1:i=f(o.v),o.p=2,i.s();case 3:if((u=i.n()).done){o.n=8;break}if((c=u.value).isFile()){o.n=4;break}return o.a(3,7);case 4:if("problem.md"===c.name||c.name.endsWith(".problem.md")){o.n=5;break}return o.a(3,7);case 5:return o.n=6,r.promises.readFile(a.join(c.parentPath,c.name),"utf8");case 6:return p=o.v,l=n(p),m=l.attributes,o.a(2,t.problemMarkdownFrontMatterSchema.parse(m));case 7:o.n=3;break;case 8:o.n=10;break;case 9:o.p=9,d=o.v,i.e(d);case 10:return o.p=10,i.f(),o.f(10);case 11:throw new Error("problem markdown not found: ".concat(s));case 12:return o.a(2)}},o,null,[[2,9,10,11]])}))).apply(this,arguments)}exports.readProblemMarkdownFrontMatter=function(e){return o.apply(this,arguments)};
//# sourceMappingURL=readProblemMarkdownFrontMatter.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../types/problem.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);let i=require("front-matter");i=e.__toESM(i,1);async function a(e){for(let a of await r.default.promises.readdir(e,{withFileTypes:!0})){if(!a.isFile()||!(a.name===`problem.md`||a.name.endsWith(`.problem.md`)))continue;let{attributes:e}=(0,i.default)(await r.default.promises.readFile(n.default.join(a.parentPath,a.name),`utf8`));return t.problemMarkdownFrontMatterSchema.parse(e)}throw Error(`problem markdown not found: ${e}`)}exports.readProblemMarkdownFrontMatter=a;
//# sourceMappingURL=readProblemMarkdownFrontMatter.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readProblemMarkdownFrontMatter.cjs","sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"names":["_readProblemMarkdownFrontMatter","_asyncToGenerator","_regenerator","m","_callee","problemDir","_iterator","_step","dirent","markdown","_ref","attributes","_t","_t2","w","_context","p","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","s","done","value","isFile","a","name","endsWith","readFile","path","join","parentPath","parseFrontMatter","problemMarkdownFrontMatterSchema","parse","e","f","Error","concat","apply","this","arguments","_x"],"mappings":"gLAqBC,SAAAA,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,EAAAA,cAAAC,EAbM,SAAAC,EAA8CC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAX,gBAAAY,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAL,EAAAM,EAAAA,0BAAAH,EAAAE,EAAA,EAC1CE,EAAGC,SAASC,QAAQhB,EAAY,CAAEiB,eAAe,IAAO,KAAA,EAAAhB,EAAAM,EAAAG,EAAAQ,GAAAR,EAAAC,EAAA,EAAAV,EAAAkB,IAAA,KAAA,EAAA,IAAAjB,EAAAD,EAAAW,KAAAQ,KAAA,CAAAV,EAAAE,EAAA,EAAA,KAAA,CAAlE,IAANT,EAAMD,EAAAmB,OACHC,SAAQ,CAAAZ,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,GACE,eAAhBpB,EAAOqB,MAAyBrB,EAAOqB,KAAKC,SAAS,eAAc,CAAAf,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAb,EAAAE,EAAA,EAElDE,EAAGC,SAASW,SAASC,EAAKC,KAAKzB,EAAO0B,WAAY1B,EAAOqB,MAAO,QAAO,KAAA,EAE5E,OAFZpB,EAAQM,EAAAQ,EAAAb,EAEUyB,EAA8E1B,GAA9FE,EAAUD,EAAVC,WAAUI,EAAAa,EAAA,EAEXQ,EAAAA,iCAAiCC,MAAM1B,IAAW,KAAA,EAAAI,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAQ,EAAAjB,EAAAgC,EAAAzB,GAAA,KAAA,GAAA,OAAAE,EAAAC,EAAA,GAAAV,EAAAiC,IAAAxB,EAAAwB,EAAA,IAAA,KAAA,GAAA,MAGrD,IAAIC,MAAK,+BAAAC,OAAgCpC,IAAa,KAAA,GAAA,OAAAU,EAAAa,EAAA,GAAA,EAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,GAAA,KAAA,KAC7DsC,MAAAC,KAAAC,UAAA,wCAbD,SAAoDC,GAAA,OAAA7C,EAAA0C,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"readProblemMarkdownFrontMatter.cjs","names":["fs","path","problemMarkdownFrontMatterSchema"],"sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"mappings":"yOAQA,eAAsB,EAA+B,EAAyD,CAC5G,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAY,CAAE,cAAe,EAAK,CAAC,EAAG,CAEnF,GADI,CAAC,EAAO,OAAO,GACf,EAAE,EAAO,OAAS,cAAgB,EAAO,KAAK,SAAS,aAAa,GAAI,SAI5E,GAAM,CAAE,eAAA,EAAA,EAAA,QAAA,CAA8F,MAF/EA,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,CAEiB,EAE9G,OAAOC,EAAAA,iCAAiC,MAAM,CAAU,CAC1D,CAEA,MAAU,MAAM,+BAA+B,GAAY,CAC7D"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as r,regenerator as e,createForOfIteratorHelper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:fs";import t from"node:path";import o from"front-matter";import{problemMarkdownFrontMatterSchema as s}from"../types/problem.js";function i(r){return p.apply(this,arguments)}function p(){return(p=r(e().m(function r(i){var p,m,u,c,f,l,b,d;return e().w(function(r){for(;;)switch(r.p=r.n){case 0:return b=a,r.n=1,n.promises.readdir(i,{withFileTypes:!0});case 1:p=b(r.v),r.p=2,p.s();case 3:if((m=p.n()).done){r.n=8;break}if((u=m.value).isFile()){r.n=4;break}return r.a(3,7);case 4:if("problem.md"===u.name||u.name.endsWith(".problem.md")){r.n=5;break}return r.a(3,7);case 5:return r.n=6,n.promises.readFile(t.join(u.parentPath,u.name),"utf8");case 6:return c=r.v,f=o(c),l=f.attributes,r.a(2,s.parse(l));case 7:r.n=3;break;case 8:r.n=10;break;case 9:r.p=9,d=r.v,p.e(d);case 10:return r.p=10,p.f(),r.f(10);case 11:throw new Error("problem markdown not found: ".concat(i));case 12:return r.a(2)}},r,null,[[2,9,10,11]])}))).apply(this,arguments)}export{i as readProblemMarkdownFrontMatter};
//# sourceMappingURL=readProblemMarkdownFrontMatter.js.map
import{problemMarkdownFrontMatterSchema as e}from"../types/problem.js";import t from"node:path";import n from"node:fs";import r from"front-matter";async function i(i){for(let a of await n.promises.readdir(i,{withFileTypes:!0})){if(!a.isFile()||!(a.name===`problem.md`||a.name.endsWith(`.problem.md`)))continue;let{attributes:i}=r(await n.promises.readFile(t.join(a.parentPath,a.name),`utf8`));return e.parse(i)}throw Error(`problem markdown not found: ${i}`)}export{i as readProblemMarkdownFrontMatter};
//# sourceMappingURL=readProblemMarkdownFrontMatter.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readProblemMarkdownFrontMatter.js","sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"names":["readProblemMarkdownFrontMatter","_x","_readProblemMarkdownFrontMatter","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","_iterator","_step","dirent","markdown","_ref","attributes","_t","_t2","w","_context","p","n","_createForOfIteratorHelper","fs","promises","readdir","withFileTypes","v","s","done","value","isFile","a","name","endsWith","readFile","path","join","parentPath","parseFrontMatter","problemMarkdownFrontMatterSchema","parse","e","f","Error","concat"],"mappings":"+QAQA,SAAsBA,EAA8BC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAanD,SAAAH,IAAA,OAAAA,EAAAI,EAAAC,IAAAC,EAbM,SAAAC,EAA8CC,GAAkB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAX,IAAAY,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAL,EAAAM,EAAAH,EAAAE,EAAA,EAC1CE,EAAGC,SAASC,QAAQhB,EAAY,CAAEiB,eAAe,IAAO,KAAA,EAAAhB,EAAAM,EAAAG,EAAAQ,GAAAR,EAAAC,EAAA,EAAAV,EAAAkB,IAAA,KAAA,EAAA,IAAAjB,EAAAD,EAAAW,KAAAQ,KAAA,CAAAV,EAAAE,EAAA,EAAA,KAAA,CAAlE,IAANT,EAAMD,EAAAmB,OACHC,SAAQ,CAAAZ,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,GACE,eAAhBpB,EAAOqB,MAAyBrB,EAAOqB,KAAKC,SAAS,eAAc,CAAAf,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAa,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAb,EAAAE,EAAA,EAElDE,EAAGC,SAASW,SAASC,EAAKC,KAAKzB,EAAO0B,WAAY1B,EAAOqB,MAAO,QAAO,KAAA,EAE5E,OAFZpB,EAAQM,EAAAQ,EAAAb,EAEUyB,EAA8E1B,GAA9FE,EAAUD,EAAVC,WAAUI,EAAAa,EAAA,EAEXQ,EAAiCC,MAAM1B,IAAW,KAAA,EAAAI,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAQ,EAAAjB,EAAAgC,EAAAzB,GAAA,KAAA,GAAA,OAAAE,EAAAC,EAAA,GAAAV,EAAAiC,IAAAxB,EAAAwB,EAAA,IAAA,KAAA,GAAA,MAGrD,IAAIC,MAAK,+BAAAC,OAAgCpC,IAAa,KAAA,GAAA,OAAAU,EAAAa,EAAA,GAAA,EAAAxB,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,GAAA,KAAA,KAC7DN,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"readProblemMarkdownFrontMatter.js","names":[],"sources":["../../src/helpers/readProblemMarkdownFrontMatter.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport parseFrontMatter from 'front-matter';\n\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport { problemMarkdownFrontMatterSchema } from '../types/problem.js';\n\nexport async function readProblemMarkdownFrontMatter(problemDir: string): Promise<ProblemMarkdownFrontMatter> {\n for (const dirent of await fs.promises.readdir(problemDir, { withFileTypes: true })) {\n if (!dirent.isFile()) continue;\n if (!(dirent.name === 'problem.md' || dirent.name.endsWith('.problem.md'))) continue;\n\n const markdown = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n const { attributes } = (parseFrontMatter as unknown as (markdown: string) => { attributes: unknown })(markdown);\n\n return problemMarkdownFrontMatterSchema.parse(attributes);\n }\n\n throw new Error(`problem markdown not found: ${problemDir}`);\n}\n"],"mappings":"mJAQA,eAAsB,EAA+B,EAAyD,CAC5G,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAY,CAAE,cAAe,EAAK,CAAC,EAAG,CAEnF,GADI,CAAC,EAAO,OAAO,GACf,EAAE,EAAO,OAAS,cAAgB,EAAO,KAAK,SAAS,aAAa,GAAI,SAI5E,GAAM,CAAE,cAAgB,EAA8E,MAF/E,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,CAEiB,EAE9G,OAAO,EAAiC,MAAM,CAAU,CAC1D,CAEA,MAAU,MAAM,+BAA+B,GAAY,CAC7D"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),a=require("node:path"),n="_shared";function t(){return(t=e.asyncToGenerator(e.regenerator().m(function t(s){var i,u,o,p,c,f,l,d,h,m,b,k,g,w,v,y,P,j;return e.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:if(r.existsSync(s)){t.n=1;break}return t.a(2,[]);case 1:return i=new Set,u=new Map,o=new Map,p=new Map,c=new Map,P=e.createForOfIteratorHelper,t.n=2,r.promises.readdir(s,{withFileTypes:!0});case 2:f=P(t.v),t.p=3,f.s();case 4:if((l=f.n()).done){t.n=10;break}if(!(d=l.value).isFile()){t.n=7;break}if(h=a.parse(d.name),m=h.ext,b=h.name,".in"===m||".out"===m){t.n=5;break}return t.a(3,9);case 5:return t.n=6,r.promises.readFile(a.join(d.parentPath,d.name),"utf8");case 6:k=t.v,i.add(b),".in"===m&&u.set(b,k),".out"===m&&o.set(b,k),t.n=9;break;case 7:if(!d.isDirectory()){t.n=9;break}if(g=a.parse(d.name),w=g.ext,v=g.name,".fin"===w||".fout"===w){t.n=8;break}return t.a(3,9);case 8:i.add(v),".fin"===w&&p.set(v,a.join(d.parentPath,d.name)),".fout"===w&&c.set(v,a.join(d.parentPath,d.name));case 9:t.n=4;break;case 10:t.n=12;break;case 11:t.p=11,j=t.v,f.e(j);case 12:return t.p=12,f.f(),t.f(12);case 13:return y=e.toConsumableArray(i).filter(function(e){return e!==n}).toSorted().map(function(e){return{id:e,input:u.get(e),output:o.get(e),fileInputPath:p.get(e),fileOutputPath:c.get(e)}}),i.has(n)&&(y.shared={fileInputPath:p.get(n)}),t.a(2,y)}},t,null,[[3,11,12,13]])}))).apply(this,arguments)}exports.readTestCases=function(e){return t.apply(this,arguments)};
//# sourceMappingURL=readTestCases.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs");n=e.__toESM(n,1);const r=`_shared`;async function i(e){if(!n.default.existsSync(e))return[];let i=new Set,a=new Map,o=new Map,s=new Map,c=new Map;for(let r of await n.default.promises.readdir(e,{withFileTypes:!0}))if(r.isFile()){let{ext:e,name:s}=t.default.parse(r.name);if(e!==`.in`&&e!==`.out`)continue;let c=await n.default.promises.readFile(t.default.join(r.parentPath,r.name),`utf8`);i.add(s),e===`.in`&&a.set(s,c),e===`.out`&&o.set(s,c)}else if(r.isDirectory()){let{ext:e,name:n}=t.default.parse(r.name);if(e!==`.fin`&&e!==`.fout`)continue;i.add(n),e===`.fin`&&s.set(n,t.default.join(r.parentPath,r.name)),e===`.fout`&&c.set(n,t.default.join(r.parentPath,r.name))}let l=[...i].filter(e=>e!==r).toSorted().map(e=>({id:e,input:a.get(e),output:o.get(e),fileInputPath:s.get(e),fileOutputPath:c.get(e)}));return i.has(r)&&(l.shared={fileInputPath:s.get(r)}),l}exports.readTestCases=i;
//# sourceMappingURL=readTestCases.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readTestCases.cjs","sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"names":["SHARED_TEST_CASE_NAME","_readTestCases","_asyncToGenerator","_regenerator","m","_callee","directory","idSet","idToInput","idToOutput","idToFileInputPath","idToFileOutputPath","_iterator","_step","dirent","_path$parse","ext","name","text","_path$parse2","_ext","_name","testCases","_t","_t2","w","_context","p","n","fs","existsSync","a","Set","Map","_createForOfIteratorHelper","promises","readdir","withFileTypes","v","s","done","value","isFile","path","parse","readFile","join","parentPath","add","set","isDirectory","e","f","_toConsumableArray","filter","id","toSorted","map","input","get","output","fileInputPath","fileOutputPath","has","shared","apply","this","arguments","_x"],"mappings":"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"}
{"version":3,"file":"readTestCases.cjs","names":["fs","path"],"sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"mappings":"wJAGA,MAAM,EAAwB,UAE9B,eAAsB,EAAc,EAIlC,CACA,GAAI,CAACA,EAAAA,QAAG,WAAW,CAAS,EAAG,MAAO,CAAC,EAEvC,IAAM,EAAQ,IAAI,IACZ,EAAY,IAAI,IAChB,EAAa,IAAI,IACjB,EAAoB,IAAI,IACxB,EAAqB,IAAI,IAE/B,IAAK,IAAM,KAAU,MAAMA,EAAAA,QAAG,SAAS,QAAQ,EAAW,CAAE,cAAe,EAAK,CAAC,EAC/E,GAAI,EAAO,OAAO,EAAG,CACnB,GAAM,CAAE,MAAK,QAASC,EAAAA,QAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,OAAS,IAAQ,OAAQ,SAErC,IAAM,EAAO,MAAMD,EAAAA,QAAG,SAAS,SAASC,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,EAAM,IAAI,CAAI,EACV,IAAQ,OAAO,EAAU,IAAI,EAAM,CAAI,EACvC,IAAQ,QAAQ,EAAW,IAAI,EAAM,CAAI,CAC/C,MAAO,GAAI,EAAO,YAAY,EAAG,CAC/B,GAAM,CAAE,MAAK,QAASA,EAAAA,QAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,QAAU,IAAQ,QAAS,SAEvC,EAAM,IAAI,CAAI,EACV,IAAQ,QAAQ,EAAkB,IAAI,EAAMA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACrF,IAAQ,SAAS,EAAmB,IAAI,EAAMA,EAAAA,QAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,CAC7F,CAGF,IAAM,EAAuD,CAAC,GAAG,CAAK,CAAC,CACpE,OAAQ,GAAO,IAAO,CAAqB,CAAC,CAC5C,SAAS,CAAC,CACV,IAAK,IAAQ,CACZ,KACA,MAAO,EAAU,IAAI,CAAE,EACvB,OAAQ,EAAW,IAAI,CAAE,EACzB,cAAe,EAAkB,IAAI,CAAE,EACvC,eAAgB,EAAmB,IAAI,CAAE,CAC3C,EAAE,EAMJ,OAJI,EAAM,IAAI,CAAqB,IACjC,EAAU,OAAS,CAAE,cAAe,EAAkB,IAAI,CAAqB,CAAE,GAG5E,CACT"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as a,toConsumableArray as r,createForOfIteratorHelper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import i from"node:path";var s="_shared";function o(e){return u.apply(this,arguments)}function u(){return(u=e(a().m(function e(o){var u,p,f,c,l,m,d,h,b,k,w,g,v,y,P,j,x,F;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.existsSync(o)){e.n=1;break}return e.a(2,[]);case 1:return u=new Set,p=new Map,f=new Map,c=new Map,l=new Map,x=n,e.n=2,t.promises.readdir(o,{withFileTypes:!0});case 2:m=x(e.v),e.p=3,m.s();case 4:if((d=m.n()).done){e.n=10;break}if(!(h=d.value).isFile()){e.n=7;break}if(b=i.parse(h.name),k=b.ext,w=b.name,".in"===k||".out"===k){e.n=5;break}return e.a(3,9);case 5:return e.n=6,t.promises.readFile(i.join(h.parentPath,h.name),"utf8");case 6:g=e.v,u.add(w),".in"===k&&p.set(w,g),".out"===k&&f.set(w,g),e.n=9;break;case 7:if(!h.isDirectory()){e.n=9;break}if(v=i.parse(h.name),y=v.ext,P=v.name,".fin"===y||".fout"===y){e.n=8;break}return e.a(3,9);case 8:u.add(P),".fin"===y&&c.set(P,i.join(h.parentPath,h.name)),".fout"===y&&l.set(P,i.join(h.parentPath,h.name));case 9:e.n=4;break;case 10:e.n=12;break;case 11:e.p=11,F=e.v,m.e(F);case 12:return e.p=12,m.f(),e.f(12);case 13:return j=r(u).filter(function(e){return e!==s}).toSorted().map(function(e){return{id:e,input:p.get(e),output:f.get(e),fileInputPath:c.get(e),fileOutputPath:l.get(e)}}),u.has(s)&&(j.shared={fileInputPath:c.get(s)}),e.a(2,j)}},e,null,[[3,11,12,13]])}))).apply(this,arguments)}export{o as readTestCases};
//# sourceMappingURL=readTestCases.js.map
import e from"node:path";import t from"node:fs";const n=`_shared`;async function r(r){if(!t.existsSync(r))return[];let i=new Set,a=new Map,o=new Map,s=new Map,c=new Map;for(let n of await t.promises.readdir(r,{withFileTypes:!0}))if(n.isFile()){let{ext:r,name:s}=e.parse(n.name);if(r!==`.in`&&r!==`.out`)continue;let c=await t.promises.readFile(e.join(n.parentPath,n.name),`utf8`);i.add(s),r===`.in`&&a.set(s,c),r===`.out`&&o.set(s,c)}else if(n.isDirectory()){let{ext:t,name:r}=e.parse(n.name);if(t!==`.fin`&&t!==`.fout`)continue;i.add(r),t===`.fin`&&s.set(r,e.join(n.parentPath,n.name)),t===`.fout`&&c.set(r,e.join(n.parentPath,n.name))}let l=[...i].filter(e=>e!==n).toSorted().map(e=>({id:e,input:a.get(e),output:o.get(e),fileInputPath:s.get(e),fileOutputPath:c.get(e)}));return i.has(n)&&(l.shared={fileInputPath:s.get(n)}),l}export{r as readTestCases};
//# sourceMappingURL=readTestCases.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"readTestCases.js","sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"names":["SHARED_TEST_CASE_NAME","readTestCases","_x","_readTestCases","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","directory","idSet","idToInput","idToOutput","idToFileInputPath","idToFileOutputPath","_iterator","_step","dirent","_path$parse","ext","name","text","_path$parse2","_ext","_name","testCases","_t","_t2","w","_context","p","n","fs","existsSync","a","Set","Map","_createForOfIteratorHelper","promises","readdir","withFileTypes","v","s","done","value","isFile","path","parse","readFile","join","parentPath","add","set","isDirectory","e","f","_toConsumableArray","filter","id","toSorted","map","input","get","output","fileInputPath","fileOutputPath","has","shared"],"mappings":"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"}
{"version":3,"file":"readTestCases.js","names":[],"sources":["../../src/helpers/readTestCases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nconst SHARED_TEST_CASE_NAME = '_shared';\n\nexport async function readTestCases(directory: string): Promise<\n { id: string; input?: string; output?: string; fileInputPath?: string; fileOutputPath?: string }[] & {\n shared?: { fileInputPath?: string };\n }\n> {\n if (!fs.existsSync(directory)) return [];\n\n const idSet = new Set<string>();\n const idToInput = new Map<string, string>();\n const idToOutput = new Map<string, string>();\n const idToFileInputPath = new Map<string, string>();\n const idToFileOutputPath = new Map<string, string>();\n\n for (const dirent of await fs.promises.readdir(directory, { withFileTypes: true })) {\n if (dirent.isFile()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.in' && ext !== '.out') continue;\n\n const text = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name), 'utf8');\n\n idSet.add(name);\n if (ext === '.in') idToInput.set(name, text);\n if (ext === '.out') idToOutput.set(name, text);\n } else if (dirent.isDirectory()) {\n const { ext, name } = path.parse(dirent.name);\n if (ext !== '.fin' && ext !== '.fout') continue;\n\n idSet.add(name);\n if (ext === '.fin') idToFileInputPath.set(name, path.join(dirent.parentPath, dirent.name));\n if (ext === '.fout') idToFileOutputPath.set(name, path.join(dirent.parentPath, dirent.name));\n }\n }\n\n const testCases: Awaited<ReturnType<typeof readTestCases>> = [...idSet]\n .filter((id) => id !== SHARED_TEST_CASE_NAME)\n .toSorted()\n .map((id) => ({\n id,\n input: idToInput.get(id),\n output: idToOutput.get(id),\n fileInputPath: idToFileInputPath.get(id),\n fileOutputPath: idToFileOutputPath.get(id),\n }));\n\n if (idSet.has(SHARED_TEST_CASE_NAME)) {\n testCases.shared = { fileInputPath: idToFileInputPath.get(SHARED_TEST_CASE_NAME) };\n }\n\n return testCases;\n}\n"],"mappings":"gDAGA,MAAM,EAAwB,UAE9B,eAAsB,EAAc,EAIlC,CACA,GAAI,CAAC,EAAG,WAAW,CAAS,EAAG,MAAO,CAAC,EAEvC,IAAM,EAAQ,IAAI,IACZ,EAAY,IAAI,IAChB,EAAa,IAAI,IACjB,EAAoB,IAAI,IACxB,EAAqB,IAAI,IAE/B,IAAK,IAAM,KAAU,MAAM,EAAG,SAAS,QAAQ,EAAW,CAAE,cAAe,EAAK,CAAC,EAC/E,GAAI,EAAO,OAAO,EAAG,CACnB,GAAM,CAAE,MAAK,QAAS,EAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,OAAS,IAAQ,OAAQ,SAErC,IAAM,EAAO,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,EAAG,MAAM,EAEzF,EAAM,IAAI,CAAI,EACV,IAAQ,OAAO,EAAU,IAAI,EAAM,CAAI,EACvC,IAAQ,QAAQ,EAAW,IAAI,EAAM,CAAI,CAC/C,MAAO,GAAI,EAAO,YAAY,EAAG,CAC/B,GAAM,CAAE,MAAK,QAAS,EAAK,MAAM,EAAO,IAAI,EAC5C,GAAI,IAAQ,QAAU,IAAQ,QAAS,SAEvC,EAAM,IAAI,CAAI,EACV,IAAQ,QAAQ,EAAkB,IAAI,EAAM,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,EACrF,IAAQ,SAAS,EAAmB,IAAI,EAAM,EAAK,KAAK,EAAO,WAAY,EAAO,IAAI,CAAC,CAC7F,CAGF,IAAM,EAAuD,CAAC,GAAG,CAAK,CAAC,CACpE,OAAQ,GAAO,IAAO,CAAqB,CAAC,CAC5C,SAAS,CAAC,CACV,IAAK,IAAQ,CACZ,KACA,MAAO,EAAU,IAAI,CAAE,EACvB,OAAQ,EAAW,IAAI,CAAE,EACzB,cAAe,EAAkB,IAAI,CAAE,EACvC,eAAgB,EAAmB,IAAI,CAAE,CAC3C,EAAE,EAMJ,OAJI,EAAM,IAAI,CAAqB,IACjC,EAAU,OAAS,CAAE,cAAe,EAAkB,IAAI,CAAqB,CAAE,GAG5E,CACT"}

@@ -1,2 +0,6 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs");function n(n,i,a,u){var c,f;if(void 0===u&&(u=function(n){var r,l,i,s;return[].concat(e.toConsumableArray(null!=(r=null==(l=n.comments)?void 0:l.map(function(e){var n;return{closeRegExp:t(null!=(n=e.close)?n:/(?=\n)/g),isComment:!0,openRegExp:t(e.open)}}))?r:[]),e.toConsumableArray(null!=(i=null==(s=n.strings)?void 0:s.map(function(e){return{closeRegExp:t(e.close),isComment:!1,openRegExp:t(e.open)}}))?i:[]))}(n)),!(null!=(c=n.comments)&&c.length||a.removeStrings&&null!=(f=n.strings)&&f.length))return i;for(var g=[],m=0;m<i.length;){var h,v=void 0,x=e.createForOfIteratorHelper(u);try{for(x.s();!(h=x.n()).done;){var d=h.value,p=d.openRegExp;p.lastIndex=m;var S=p.exec(i);S&&r(S,d,v,a)&&(v={grammar:d,match:S})}}catch(e){x.e(e)}finally{x.f()}if(v){var E=v.match.index;if(!v.grammar.isComment&&a.removeStrings&&(E=s(i,v.match.index)),g.push(i.slice(m,E)),v.grammar.isComment){var R=v.grammar.closeRegExp;R.lastIndex=v.match.index+v.match[0].length;var C=R.exec(i);m=C?C.index+C[0].length:i.length}else{m=l(i,v.match.index,v.grammar);var I=i.slice(v.match.index,m);a.removeStrings?g.push(o(n,u,i,v.match.index,I)):g.push(I)}}else g.push(i.slice(m)),m=i.length}return g.join("")}function r(e,n,r,t){return!r||(e.index<r.match.index||!(e.index>r.match.index)&&(t.removeStrings&&r.grammar.isComment&&!n.isComment))}function t(e){return new RegExp(e,e.flags.includes("g")?e.flags:"".concat(e.flags,"g"))}function l(e,n,r){if("`"===e[n])return function(e,n){var r=n+1;for(;r<e.length;)if("\\"!==e[r]){if("`"===e[r])return r+1;"$"!==e[r]||"{"!==e[r+1]?r+=1:r=c(e,r+2,"}",{slashStartsRegExp:!0}).endIndex+1}else r+=2;return e.length}(e,n);if(u(e,n))return function(e,n){var r=i(e,n),t=n+r.length;for(;t<e.length;){if(e.startsWith(r,t))return t+r.length;"{"!==e[t]||"{"!==e[t+1]?"{"!==e[t]?t+="\\"===e[t]?2:1:t=c(e,t+1,"}",{slashStartsRegExp:!1}).endIndex+1:t+=2}return e.length}(e,n);var t=r.closeRegExp;t.lastIndex=n+1;var l=t.exec(e);return l?l.index+l[0].length:e.length}function i(e,n){var r,t=e.slice(n,n+3);return"'''"===t||'"""'===t?t:null!=(r=e[n])?r:""}function s(e,n){var r=a(e,n);return r?n-r.length:n}function a(e,n){var r;if('"'===e[n]||"'"===e[n]){for(var t=n-1;t>=0&&/[A-Za-z]/.test(null!=(l=e[t])?l:"");){var l;t-=1}var i=e.slice(t+1,n);if(i&&/^[bfru]+$/i.test(i)&&!(t>=0&&/[\dA-Za-z_]/.test(null!=(r=e[t])?r:"")))return i}}function o(e,r,t,l,s){return s.startsWith("`")?function(e,r,t){var l=[],i=1;for(;i<t.length-1;)if("\\"!==t[i])if("$"!==t[i]||"{"!==t[i+1])i+=1;else{var s=c(t,i+2,"}",{slashStartsRegExp:!0});l.push(n(e,s.content,{removeStrings:!0},r)),i=s.endIndex+1}else i+=2;return l.join("\n")}(e,r,s):u(t,l)?function(e,r,t){var l=i(t,0).length,s=[],a=l;for(;a<t.length-l;)if("{"!==t[a]||"{"!==t[a+1])if("{"!==t[a])a+="\\"===t[a]?2:1;else{var o=c(t,a+1,"}",{slashStartsRegExp:!1});s.push(n(e,o.content,{removeStrings:!0},r)),a=o.endIndex+1}else a+=2;return s.join("\n")}(e,r,s):""}function u(e,n){var r,t;return null!=(r=null==(t=a(e,n))?void 0:t.toLowerCase().includes("f"))&&r}function c(e,n,r,t){for(var l=1,i=n;i<e.length;){var s=e[i];if('"'!==s&&"'"!==s&&"`"!==s)if(t.slashStartsRegExp&&"/"===e[i]&&"/"===e[i+1])i=m(e,i);else if(t.slashStartsRegExp&&"/"===e[i]&&"*"===e[i+1])i=h(e,i);else if(t.slashStartsRegExp&&"/"===s)i=g(e,i);else{if("{"===s&&(l+=1),s===r&&0===(l-=1))return{content:e.slice(n,i),endIndex:i};i+=1}else i=f(e,i)}return{content:e.slice(n),endIndex:e.length}}function f(e,n){for(var r=i(e,n),t=n+r.length;t<e.length;)if("\\"!==e[t]){if(e.startsWith(r,t))return t+r.length;t+=1}else t+=2;return t}function g(e,n){for(var r=n+1,t=!1;r<e.length;)if("\\"!==e[r]){if("["===e[r]&&(t=!0),"]"===e[r]&&(t=!1),"/"===e[r]&&!t){for(r+=1;/[A-Za-z]/.test(null!=(l=e[r])?l:"");){var l;r+=1}return r}if("\n"===e[r])return n+1;r+=1}else r+=2;return n+1}function m(e,n){var r=e.indexOf("\n",n+2);return-1===r?e.length:r}function h(e,n){var r=e.indexOf("*/",n+2);return-1===r?e.length:r+2}exports.removeCommentsAndStringsInSourceCode=function(e,r){return n(e,r,{removeStrings:!0})},exports.removeCommentsInSourceCode=function(e,r){return n(e,r,{removeStrings:!1})};
//# sourceMappingURL=removeCommentsInSourceCode.cjs.map
"use strict";function e(e,t){return n(e,t,{removeStrings:!1})}function t(e,t){return n(e,t,{removeStrings:!0})}function n(e,t,n,a=r(e)){if(!e.comments?.length&&(!n.removeStrings||!e.strings?.length))return t;let s=[],c=0;for(;c<t.length;){let r;for(let e of a){let a=e.openRegExp;a.lastIndex=c;let o=a.exec(t);o&&i(o,e,r,n)&&(r={grammar:e,match:o})}if(r){let i=r.match.index;if(!r.grammar.isComment&&n.removeStrings&&(i=u(t,r.match.index)),s.push(t.slice(c,i)),r.grammar.isComment){let e=r.grammar.closeRegExp;e.lastIndex=r.match.index+r.match[0].length;let n=e.exec(t);c=n?n.index+n[0].length:t.length}else{c=o(t,r.match.index,r.grammar);let i=t.slice(r.match.index,c);n.removeStrings?s.push(f(e,a,t,r.match.index,i)):s.push(i)}}else s.push(t.slice(c)),c=t.length}return s.join(``)}function r(e){return[...e.comments?.map(e=>({closeRegExp:a(e.close??/(?=\n)/g),isComment:!0,openRegExp:a(e.open)}))??[],...e.strings?.map(e=>({closeRegExp:a(e.close),isComment:!1,openRegExp:a(e.open)}))??[]]}function i(e,t,n,r){return!n||e.index<n.match.index?!0:e.index>n.match.index?!1:r.removeStrings&&n.grammar.isComment&&!t.isComment}function a(e){return new RegExp(e,e.flags.includes(`g`)?e.flags:`${e.flags}g`)}function o(e,t,n){if(e[t]==="`")return s(e,t);if(p(e,t))return c(e,t);let r=n.closeRegExp;r.lastIndex=t+1;let i=r.exec(e);return i?i.index+i[0].length:e.length}function s(e,t){let n=t+1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]==="`")return n+1;if(e[n]===`$`&&e[n+1]===`{`){n=g(e,n+2,`}`,{slashStartsRegExp:!0}).endIndex+1;continue}n+=1}return e.length}function c(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e.startsWith(n,r))return r+n.length;if(e[r]===`{`&&e[r+1]===`{`){r+=2;continue}if(e[r]===`{`){r=g(e,r+1,`}`,{slashStartsRegExp:!1}).endIndex+1;continue}r+=e[r]===`\\`?2:1}return e.length}function l(e,t){let n=e.slice(t,t+3);return n===`'''`||n===`"""`?n:e[t]??``}function u(e,t){let n=d(e,t);return n?t-n.length:t}function d(e,t){if(e[t]!==`"`&&e[t]!==`'`)return;let n=t-1;for(;n>=0&&/[A-Za-z]/.test(e[n]??``);)--n;let r=e.slice(n+1,t);if(!(!r||!/^[bfru]+$/i.test(r))&&!(n>=0&&/[\dA-Za-z_]/.test(e[n]??``)))return r}function f(e,t,n,r,i){return i.startsWith("`")?m(e,t,i):p(n,r)?h(e,t,i):``}function p(e,t){return d(e,t)?.toLowerCase().includes(`f`)??!1}function m(e,t,r){let i=[],a=1;for(;a<r.length-1;){if(r[a]===`\\`){a+=2;continue}if(r[a]===`$`&&r[a+1]===`{`){let o=g(r,a+2,`}`,{slashStartsRegExp:!0});i.push(n(e,o.content,{removeStrings:!0},t)),a=o.endIndex+1;continue}a+=1}return i.join(`
`)}function h(e,t,r){let i=l(r,0).length,a=[],o=i;for(;o<r.length-i;){if(r[o]===`{`&&r[o+1]===`{`){o+=2;continue}if(r[o]===`{`){let i=g(r,o+1,`}`,{slashStartsRegExp:!1});a.push(n(e,i.content,{removeStrings:!0},t)),o=i.endIndex+1;continue}o+=r[o]===`\\`?2:1}return a.join(`
`)}function g(e,t,n,r){let i=1,a=t;for(;a<e.length;){let o=e[a];if(o===`"`||o===`'`||o==="`"){a=_(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`/`){a=y(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`*`){a=b(e,a);continue}if(r.slashStartsRegExp&&o===`/`){a=v(e,a);continue}if(o===`{`&&(i+=1),o===n&&(--i,i===0))return{content:e.slice(t,a),endIndex:a};a+=1}return{content:e.slice(t),endIndex:e.length}}function _(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e[r]===`\\`){r+=2;continue}if(e.startsWith(n,r))return r+n.length;r+=1}return r}function v(e,t){let n=t+1,r=!1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]===`[`&&(r=!0),e[n]===`]`&&(r=!1),e[n]===`/`&&!r){for(n+=1;/[A-Za-z]/.test(e[n]??``);)n+=1;return n}if(e[n]===`
`)return t+1;n+=1}return t+1}function y(e,t){let n=e.indexOf(`
`,t+2);return n===-1?e.length:n}function b(e,t){let n=e.indexOf(`*/`,t+2);return n===-1?e.length:n+2}exports.removeCommentsAndStringsInSourceCode=t,exports.removeCommentsInSourceCode=e;
//# sourceMappingURL=removeCommentsInSourceCode.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"removeCommentsInSourceCode.cjs","sources":["../../src/helpers/removeCommentsInSourceCode.ts"],"sourcesContent":["import type { LanguageDefinition } from '../types/language.js';\n\nexport type SourceCodeGrammar = NonNullable<LanguageDefinition['grammer']>;\n\n/** Removes comments from source code according to the provided language grammar. */\nexport function removeCommentsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: false });\n}\n\n/** Removes comments and string literal contents while preserving executable interpolation expressions. */\nexport function removeCommentsAndStringsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: true });\n}\n\ninterface CommentOrStringGrammar {\n closeRegExp: RegExp;\n isComment: boolean;\n openRegExp: RegExp;\n}\n\nfunction removeCommentsAndMaybeStringsInSourceCode(\n grammar: SourceCodeGrammar,\n sourceCode: string,\n options: { removeStrings: boolean },\n commentOrStringGrammars = compileCommentOrStringGrammars(grammar)\n): string {\n if (!grammar.comments?.length && (!options.removeStrings || !grammar.strings?.length)) return sourceCode;\n\n const newSourceCodeSlices: string[] = [];\n\n let lastIndex = 0;\n\n while (lastIndex < sourceCode.length) {\n let first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined;\n\n for (const commentOrStringGrammer of commentOrStringGrammars) {\n const startRegExp = commentOrStringGrammer.openRegExp;\n startRegExp.lastIndex = lastIndex;\n\n const match = startRegExp.exec(sourceCode);\n\n if (match && shouldPreferMatch(match, commentOrStringGrammer, first, options)) {\n first = { grammar: commentOrStringGrammer, match };\n }\n }\n\n if (first) {\n let stringPrefixStartIndex = first.match.index;\n if (!first.grammar.isComment && options.removeStrings) {\n stringPrefixStartIndex = getPythonStringPrefixStartIndex(sourceCode, first.match.index);\n }\n newSourceCodeSlices.push(sourceCode.slice(lastIndex, stringPrefixStartIndex));\n\n if (!first.grammar.isComment) {\n lastIndex = findStringEndIndex(sourceCode, first.match.index, first.grammar);\n const stringLiteral = sourceCode.slice(first.match.index, lastIndex);\n if (options.removeStrings) {\n newSourceCodeSlices.push(\n preserveStringInterpolationExpressions(\n grammar,\n commentOrStringGrammars,\n sourceCode,\n first.match.index,\n stringLiteral\n )\n );\n } else {\n newSourceCodeSlices.push(stringLiteral);\n }\n } else {\n const closeRegExp = first.grammar.closeRegExp;\n closeRegExp.lastIndex = first.match.index + first.match[0].length;\n\n const match = closeRegExp.exec(sourceCode);\n\n lastIndex = match ? match.index + match[0].length : sourceCode.length;\n }\n } else {\n newSourceCodeSlices.push(sourceCode.slice(lastIndex));\n lastIndex = sourceCode.length;\n }\n }\n\n return newSourceCodeSlices.join('');\n}\n\nfunction compileCommentOrStringGrammars(grammar: SourceCodeGrammar): readonly CommentOrStringGrammar[] {\n return [\n ...(grammar.comments?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close ?? /(?=\\n)/g),\n isComment: true,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ...(grammar.strings?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close),\n isComment: false,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ] satisfies CommentOrStringGrammar[];\n}\n\nfunction shouldPreferMatch(\n match: RegExpExecArray,\n grammar: CommentOrStringGrammar,\n first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined,\n options: { removeStrings: boolean }\n): boolean {\n if (!first) return true;\n if (match.index < first.match.index) return true;\n if (match.index > first.match.index) return false;\n return options.removeStrings && first.grammar.isComment && !grammar.isComment;\n}\n\nfunction makeGlobalRegExp(regExp: RegExp): RegExp {\n return new RegExp(regExp, regExp.flags.includes('g') ? regExp.flags : `${regExp.flags}g`);\n}\n\nfunction findStringEndIndex(sourceCode: string, stringStartIndex: number, grammar: CommentOrStringGrammar): number {\n if (sourceCode[stringStartIndex] === '`') return findJavaScriptTemplateEndIndex(sourceCode, stringStartIndex);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return findPythonFStringEndIndex(sourceCode, stringStartIndex);\n\n const closeRegExp = grammar.closeRegExp;\n closeRegExp.lastIndex = stringStartIndex + 1;\n const match = closeRegExp.exec(sourceCode);\n return match ? match.index + match[0].length : sourceCode.length;\n}\n\nfunction findJavaScriptTemplateEndIndex(sourceCode: string, stringStartIndex: number): number {\n let index = stringStartIndex + 1;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '`') return index + 1;\n if (sourceCode[index] === '$' && sourceCode[index + 1] === '{') {\n index = readBalancedExpression(sourceCode, index + 2, '}', { slashStartsRegExp: true }).endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return sourceCode.length;\n}\n\nfunction findPythonFStringEndIndex(sourceCode: string, stringStartIndex: number): number {\n const quote = getStringQuote(sourceCode, stringStartIndex);\n let index = stringStartIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n if (sourceCode[index] === '{' && sourceCode[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '{') {\n index = readBalancedExpression(sourceCode, index + 1, '}', { slashStartsRegExp: false }).endIndex + 1;\n continue;\n }\n index += sourceCode[index] === '\\\\' ? 2 : 1;\n }\n\n return sourceCode.length;\n}\n\nfunction getStringQuote(sourceCode: string, stringStartIndex: number): string {\n const threeCharacterQuote = sourceCode.slice(stringStartIndex, stringStartIndex + 3);\n if (threeCharacterQuote === \"'''\" || threeCharacterQuote === '\"\"\"') return threeCharacterQuote;\n return sourceCode[stringStartIndex] ?? '';\n}\n\nfunction getPythonStringPrefixStartIndex(sourceCode: string, stringStartIndex: number): number {\n const prefix = getPythonStringPrefix(sourceCode, stringStartIndex);\n return prefix ? stringStartIndex - prefix.length : stringStartIndex;\n}\n\nfunction getPythonStringPrefix(sourceCode: string, stringStartIndex: number): string | undefined {\n if (sourceCode[stringStartIndex] !== '\"' && sourceCode[stringStartIndex] !== \"'\") return undefined;\n let index = stringStartIndex - 1;\n while (index >= 0 && /[A-Za-z]/.test(sourceCode[index] ?? '')) index -= 1;\n\n const prefix = sourceCode.slice(index + 1, stringStartIndex);\n if (!prefix || !/^[bfru]+$/i.test(prefix)) return undefined;\n if (index >= 0 && /[\\dA-Za-z_]/.test(sourceCode[index] ?? '')) return undefined;\n\n return prefix;\n}\n\nfunction preserveStringInterpolationExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n sourceCode: string,\n stringStartIndex: number,\n stringLiteral: string\n): string {\n if (stringLiteral.startsWith('`'))\n return preserveJavaScriptTemplateExpressions(grammar, commentOrStringGrammars, stringLiteral);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return preservePythonFStringExpressions(grammar, commentOrStringGrammars, stringLiteral);\n return '';\n}\n\nfunction hasPythonFStringPrefix(sourceCode: string, stringStartIndex: number): boolean {\n return getPythonStringPrefix(sourceCode, stringStartIndex)?.toLowerCase().includes('f') ?? false;\n}\n\nfunction preserveJavaScriptTemplateExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const expressions: string[] = [];\n let index = 1;\n\n while (index < stringLiteral.length - 1) {\n if (stringLiteral[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '$' && stringLiteral[index + 1] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 2, '}', { slashStartsRegExp: true });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction preservePythonFStringExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const quoteLength = getStringQuote(stringLiteral, 0).length;\n const expressions: string[] = [];\n let index = quoteLength;\n\n while (index < stringLiteral.length - quoteLength) {\n if (stringLiteral[index] === '{' && stringLiteral[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 1, '}', { slashStartsRegExp: false });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += stringLiteral[index] === '\\\\' ? 2 : 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction readBalancedExpression(\n sourceCode: string,\n startIndex: number,\n closeChar: string,\n options: { slashStartsRegExp: boolean }\n): { content: string; endIndex: number } {\n let depth = 1;\n let index = startIndex;\n\n while (index < sourceCode.length) {\n const char = sourceCode[index];\n if (char === '\"' || char === \"'\" || char === '`') {\n index = skipQuotedSpan(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '/') {\n index = skipJavaScriptSingleLineComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '*') {\n index = skipJavaScriptBlockComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && char === '/') {\n index = skipJavaScriptRegExpLiteral(sourceCode, index);\n continue;\n }\n if (char === '{') depth += 1;\n if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return { content: sourceCode.slice(startIndex, index), endIndex: index };\n }\n index += 1;\n }\n\n return { content: sourceCode.slice(startIndex), endIndex: sourceCode.length };\n}\n\nfunction skipQuotedSpan(sourceCode: string, startIndex: number): number {\n const quote = getStringQuote(sourceCode, startIndex);\n let index = startIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n index += 1;\n }\n\n return index;\n}\n\nfunction skipJavaScriptRegExpLiteral(sourceCode: string, startIndex: number): number {\n let index = startIndex + 1;\n let inCharacterClass = false;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '[') inCharacterClass = true;\n if (sourceCode[index] === ']') inCharacterClass = false;\n if (sourceCode[index] === '/' && !inCharacterClass) {\n index += 1;\n while (/[A-Za-z]/.test(sourceCode[index] ?? '')) index += 1;\n return index;\n }\n if (sourceCode[index] === '\\n') return startIndex + 1;\n index += 1;\n }\n\n return startIndex + 1;\n}\n\nfunction skipJavaScriptSingleLineComment(sourceCode: string, startIndex: number): number {\n const newLineIndex = sourceCode.indexOf('\\n', startIndex + 2);\n return newLineIndex === -1 ? sourceCode.length : newLineIndex;\n}\n\nfunction skipJavaScriptBlockComment(sourceCode: string, startIndex: number): number {\n const endIndex = sourceCode.indexOf('*/', startIndex + 2);\n return endIndex === -1 ? sourceCode.length : endIndex + 2;\n}\n"],"names":["removeCommentsAndMaybeStringsInSourceCode","grammar","sourceCode","options","commentOrStringGrammars","_grammar$comments","_grammar$strings","_grammar$comments$map","_grammar$comments2","_grammar$strings$map","_grammar$strings2","concat","_toConsumableArray","comments","map","v","_v$close","closeRegExp","makeGlobalRegExp","close","isComment","openRegExp","open","strings","compileCommentOrStringGrammars","length","removeStrings","newSourceCodeSlices","lastIndex","_step","first","_iterator","_createForOfIteratorHelper","s","n","done","commentOrStringGrammer","value","startRegExp","match","exec","shouldPreferMatch","err","e","f","stringPrefixStartIndex","index","getPythonStringPrefixStartIndex","push","slice","findStringEndIndex","stringLiteral","preserveStringInterpolationExpressions","join","regExp","RegExp","flags","includes","stringStartIndex","readBalancedExpression","slashStartsRegExp","endIndex","findJavaScriptTemplateEndIndex","hasPythonFStringPrefix","quote","getStringQuote","startsWith","findPythonFStringEndIndex","_sourceCode$stringSta","threeCharacterQuote","prefix","getPythonStringPrefix","_sourceCode$index2","test","_sourceCode$index","expressions","expression","content","preserveJavaScriptTemplateExpressions","quoteLength","preservePythonFStringExpressions","_getPythonStringPrefi","_getPythonStringPrefi2","toLowerCase","startIndex","closeChar","depth","char","skipJavaScriptSingleLineComment","skipJavaScriptBlockComment","skipJavaScriptRegExpLiteral","skipQuotedSpan","inCharacterClass","_sourceCode$index3","newLineIndex","indexOf"],"mappings":"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"}
{"version":3,"file":"removeCommentsInSourceCode.cjs","names":[],"sources":["../../src/helpers/removeCommentsInSourceCode.ts"],"sourcesContent":["import type { LanguageDefinition } from '../types/language.js';\n\nexport type SourceCodeGrammar = NonNullable<LanguageDefinition['grammer']>;\n\n/** Removes comments from source code according to the provided language grammar. */\nexport function removeCommentsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: false });\n}\n\n/** Removes comments and string literal contents while preserving executable interpolation expressions. */\nexport function removeCommentsAndStringsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: true });\n}\n\ninterface CommentOrStringGrammar {\n closeRegExp: RegExp;\n isComment: boolean;\n openRegExp: RegExp;\n}\n\nfunction removeCommentsAndMaybeStringsInSourceCode(\n grammar: SourceCodeGrammar,\n sourceCode: string,\n options: { removeStrings: boolean },\n commentOrStringGrammars = compileCommentOrStringGrammars(grammar)\n): string {\n if (!grammar.comments?.length && (!options.removeStrings || !grammar.strings?.length)) return sourceCode;\n\n const newSourceCodeSlices: string[] = [];\n\n let lastIndex = 0;\n\n while (lastIndex < sourceCode.length) {\n let first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined;\n\n for (const commentOrStringGrammer of commentOrStringGrammars) {\n const startRegExp = commentOrStringGrammer.openRegExp;\n startRegExp.lastIndex = lastIndex;\n\n const match = startRegExp.exec(sourceCode);\n\n if (match && shouldPreferMatch(match, commentOrStringGrammer, first, options)) {\n first = { grammar: commentOrStringGrammer, match };\n }\n }\n\n if (first) {\n let stringPrefixStartIndex = first.match.index;\n if (!first.grammar.isComment && options.removeStrings) {\n stringPrefixStartIndex = getPythonStringPrefixStartIndex(sourceCode, first.match.index);\n }\n newSourceCodeSlices.push(sourceCode.slice(lastIndex, stringPrefixStartIndex));\n\n if (!first.grammar.isComment) {\n lastIndex = findStringEndIndex(sourceCode, first.match.index, first.grammar);\n const stringLiteral = sourceCode.slice(first.match.index, lastIndex);\n if (options.removeStrings) {\n newSourceCodeSlices.push(\n preserveStringInterpolationExpressions(\n grammar,\n commentOrStringGrammars,\n sourceCode,\n first.match.index,\n stringLiteral\n )\n );\n } else {\n newSourceCodeSlices.push(stringLiteral);\n }\n } else {\n const closeRegExp = first.grammar.closeRegExp;\n closeRegExp.lastIndex = first.match.index + first.match[0].length;\n\n const match = closeRegExp.exec(sourceCode);\n\n lastIndex = match ? match.index + match[0].length : sourceCode.length;\n }\n } else {\n newSourceCodeSlices.push(sourceCode.slice(lastIndex));\n lastIndex = sourceCode.length;\n }\n }\n\n return newSourceCodeSlices.join('');\n}\n\nfunction compileCommentOrStringGrammars(grammar: SourceCodeGrammar): readonly CommentOrStringGrammar[] {\n return [\n ...(grammar.comments?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close ?? /(?=\\n)/g),\n isComment: true,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ...(grammar.strings?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close),\n isComment: false,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ] satisfies CommentOrStringGrammar[];\n}\n\nfunction shouldPreferMatch(\n match: RegExpExecArray,\n grammar: CommentOrStringGrammar,\n first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined,\n options: { removeStrings: boolean }\n): boolean {\n if (!first) return true;\n if (match.index < first.match.index) return true;\n if (match.index > first.match.index) return false;\n return options.removeStrings && first.grammar.isComment && !grammar.isComment;\n}\n\nfunction makeGlobalRegExp(regExp: RegExp): RegExp {\n return new RegExp(regExp, regExp.flags.includes('g') ? regExp.flags : `${regExp.flags}g`);\n}\n\nfunction findStringEndIndex(sourceCode: string, stringStartIndex: number, grammar: CommentOrStringGrammar): number {\n if (sourceCode[stringStartIndex] === '`') return findJavaScriptTemplateEndIndex(sourceCode, stringStartIndex);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return findPythonFStringEndIndex(sourceCode, stringStartIndex);\n\n const closeRegExp = grammar.closeRegExp;\n closeRegExp.lastIndex = stringStartIndex + 1;\n const match = closeRegExp.exec(sourceCode);\n return match ? match.index + match[0].length : sourceCode.length;\n}\n\nfunction findJavaScriptTemplateEndIndex(sourceCode: string, stringStartIndex: number): number {\n let index = stringStartIndex + 1;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '`') return index + 1;\n if (sourceCode[index] === '$' && sourceCode[index + 1] === '{') {\n index = readBalancedExpression(sourceCode, index + 2, '}', { slashStartsRegExp: true }).endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return sourceCode.length;\n}\n\nfunction findPythonFStringEndIndex(sourceCode: string, stringStartIndex: number): number {\n const quote = getStringQuote(sourceCode, stringStartIndex);\n let index = stringStartIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n if (sourceCode[index] === '{' && sourceCode[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '{') {\n index = readBalancedExpression(sourceCode, index + 1, '}', { slashStartsRegExp: false }).endIndex + 1;\n continue;\n }\n index += sourceCode[index] === '\\\\' ? 2 : 1;\n }\n\n return sourceCode.length;\n}\n\nfunction getStringQuote(sourceCode: string, stringStartIndex: number): string {\n const threeCharacterQuote = sourceCode.slice(stringStartIndex, stringStartIndex + 3);\n if (threeCharacterQuote === \"'''\" || threeCharacterQuote === '\"\"\"') return threeCharacterQuote;\n return sourceCode[stringStartIndex] ?? '';\n}\n\nfunction getPythonStringPrefixStartIndex(sourceCode: string, stringStartIndex: number): number {\n const prefix = getPythonStringPrefix(sourceCode, stringStartIndex);\n return prefix ? stringStartIndex - prefix.length : stringStartIndex;\n}\n\nfunction getPythonStringPrefix(sourceCode: string, stringStartIndex: number): string | undefined {\n if (sourceCode[stringStartIndex] !== '\"' && sourceCode[stringStartIndex] !== \"'\") return undefined;\n let index = stringStartIndex - 1;\n while (index >= 0 && /[A-Za-z]/.test(sourceCode[index] ?? '')) index -= 1;\n\n const prefix = sourceCode.slice(index + 1, stringStartIndex);\n if (!prefix || !/^[bfru]+$/i.test(prefix)) return undefined;\n if (index >= 0 && /[\\dA-Za-z_]/.test(sourceCode[index] ?? '')) return undefined;\n\n return prefix;\n}\n\nfunction preserveStringInterpolationExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n sourceCode: string,\n stringStartIndex: number,\n stringLiteral: string\n): string {\n if (stringLiteral.startsWith('`'))\n return preserveJavaScriptTemplateExpressions(grammar, commentOrStringGrammars, stringLiteral);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return preservePythonFStringExpressions(grammar, commentOrStringGrammars, stringLiteral);\n return '';\n}\n\nfunction hasPythonFStringPrefix(sourceCode: string, stringStartIndex: number): boolean {\n return getPythonStringPrefix(sourceCode, stringStartIndex)?.toLowerCase().includes('f') ?? false;\n}\n\nfunction preserveJavaScriptTemplateExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const expressions: string[] = [];\n let index = 1;\n\n while (index < stringLiteral.length - 1) {\n if (stringLiteral[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '$' && stringLiteral[index + 1] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 2, '}', { slashStartsRegExp: true });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction preservePythonFStringExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const quoteLength = getStringQuote(stringLiteral, 0).length;\n const expressions: string[] = [];\n let index = quoteLength;\n\n while (index < stringLiteral.length - quoteLength) {\n if (stringLiteral[index] === '{' && stringLiteral[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 1, '}', { slashStartsRegExp: false });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += stringLiteral[index] === '\\\\' ? 2 : 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction readBalancedExpression(\n sourceCode: string,\n startIndex: number,\n closeChar: string,\n options: { slashStartsRegExp: boolean }\n): { content: string; endIndex: number } {\n let depth = 1;\n let index = startIndex;\n\n while (index < sourceCode.length) {\n const char = sourceCode[index];\n if (char === '\"' || char === \"'\" || char === '`') {\n index = skipQuotedSpan(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '/') {\n index = skipJavaScriptSingleLineComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '*') {\n index = skipJavaScriptBlockComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && char === '/') {\n index = skipJavaScriptRegExpLiteral(sourceCode, index);\n continue;\n }\n if (char === '{') depth += 1;\n if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return { content: sourceCode.slice(startIndex, index), endIndex: index };\n }\n index += 1;\n }\n\n return { content: sourceCode.slice(startIndex), endIndex: sourceCode.length };\n}\n\nfunction skipQuotedSpan(sourceCode: string, startIndex: number): number {\n const quote = getStringQuote(sourceCode, startIndex);\n let index = startIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n index += 1;\n }\n\n return index;\n}\n\nfunction skipJavaScriptRegExpLiteral(sourceCode: string, startIndex: number): number {\n let index = startIndex + 1;\n let inCharacterClass = false;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '[') inCharacterClass = true;\n if (sourceCode[index] === ']') inCharacterClass = false;\n if (sourceCode[index] === '/' && !inCharacterClass) {\n index += 1;\n while (/[A-Za-z]/.test(sourceCode[index] ?? '')) index += 1;\n return index;\n }\n if (sourceCode[index] === '\\n') return startIndex + 1;\n index += 1;\n }\n\n return startIndex + 1;\n}\n\nfunction skipJavaScriptSingleLineComment(sourceCode: string, startIndex: number): number {\n const newLineIndex = sourceCode.indexOf('\\n', startIndex + 2);\n return newLineIndex === -1 ? sourceCode.length : newLineIndex;\n}\n\nfunction skipJavaScriptBlockComment(sourceCode: string, startIndex: number): number {\n const endIndex = sourceCode.indexOf('*/', startIndex + 2);\n return endIndex === -1 ? sourceCode.length : endIndex + 2;\n}\n"],"mappings":"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"}

@@ -1,2 +0,6 @@

import{createForOfIteratorHelper as e,toConsumableArray as n}from"../_virtual/_rollupPluginBabelHelpers.js";function r(e,n){return l(e,n,{removeStrings:!1})}function t(e,n){return l(e,n,{removeStrings:!0})}function l(r,t,l,o){var f,c;if(void 0===o&&(o=function(e){var r,t,l,i;return[].concat(n(null!=(r=null==(t=e.comments)?void 0:t.map(function(e){var n;return{closeRegExp:s(null!=(n=e.close)?n:/(?=\n)/g),isComment:!0,openRegExp:s(e.open)}}))?r:[]),n(null!=(l=null==(i=e.strings)?void 0:i.map(function(e){return{closeRegExp:s(e.close),isComment:!1,openRegExp:s(e.open)}}))?l:[]))}(r)),!(null!=(f=r.comments)&&f.length||l.removeStrings&&null!=(c=r.strings)&&c.length))return t;for(var h=[],m=0;m<t.length;){var v,x=void 0,d=e(o);try{for(d.s();!(v=d.n()).done;){var p=v.value,E=p.openRegExp;E.lastIndex=m;var R=E.exec(t);R&&i(R,p,x,l)&&(x={grammar:p,match:R})}}catch(e){d.e(e)}finally{d.f()}if(x){var S=x.match.index;if(!x.grammar.isComment&&l.removeStrings&&(S=u(t,x.match.index)),h.push(t.slice(m,S)),x.grammar.isComment){var I=x.grammar.closeRegExp;I.lastIndex=x.match.index+x.match[0].length;var C=I.exec(t);m=C?C.index+C[0].length:t.length}else{m=a(t,x.match.index,x.grammar);var j=t.slice(x.match.index,m);l.removeStrings?h.push(g(r,o,t,x.match.index,j)):h.push(j)}}else h.push(t.slice(m)),m=t.length}return h.join("")}function i(e,n,r,t){return!r||(e.index<r.match.index||!(e.index>r.match.index)&&(t.removeStrings&&r.grammar.isComment&&!n.isComment))}function s(e){return new RegExp(e,e.flags.includes("g")?e.flags:"".concat(e.flags,"g"))}function a(e,n,r){if("`"===e[n])return function(e,n){var r=n+1;for(;r<e.length;)if("\\"!==e[r]){if("`"===e[r])return r+1;"$"!==e[r]||"{"!==e[r+1]?r+=1:r=h(e,r+2,"}",{slashStartsRegExp:!0}).endIndex+1}else r+=2;return e.length}(e,n);if(c(e,n))return function(e,n){var r=o(e,n),t=n+r.length;for(;t<e.length;){if(e.startsWith(r,t))return t+r.length;"{"!==e[t]||"{"!==e[t+1]?"{"!==e[t]?t+="\\"===e[t]?2:1:t=h(e,t+1,"}",{slashStartsRegExp:!1}).endIndex+1:t+=2}return e.length}(e,n);var t=r.closeRegExp;t.lastIndex=n+1;var l=t.exec(e);return l?l.index+l[0].length:e.length}function o(e,n){var r,t=e.slice(n,n+3);return"'''"===t||'"""'===t?t:null!=(r=e[n])?r:""}function u(e,n){var r=f(e,n);return r?n-r.length:n}function f(e,n){var r;if('"'===e[n]||"'"===e[n]){for(var t=n-1;t>=0&&/[A-Za-z]/.test(null!=(l=e[t])?l:"");){var l;t-=1}var i=e.slice(t+1,n);if(i&&/^[bfru]+$/i.test(i)&&!(t>=0&&/[\dA-Za-z_]/.test(null!=(r=e[t])?r:"")))return i}}function g(e,n,r,t,i){return i.startsWith("`")?function(e,n,r){var t=[],i=1;for(;i<r.length-1;)if("\\"!==r[i])if("$"!==r[i]||"{"!==r[i+1])i+=1;else{var s=h(r,i+2,"}",{slashStartsRegExp:!0});t.push(l(e,s.content,{removeStrings:!0},n)),i=s.endIndex+1}else i+=2;return t.join("\n")}(e,n,i):c(r,t)?function(e,n,r){var t=o(r,0).length,i=[],s=t;for(;s<r.length-t;)if("{"!==r[s]||"{"!==r[s+1])if("{"!==r[s])s+="\\"===r[s]?2:1;else{var a=h(r,s+1,"}",{slashStartsRegExp:!1});i.push(l(e,a.content,{removeStrings:!0},n)),s=a.endIndex+1}else s+=2;return i.join("\n")}(e,n,i):""}function c(e,n){var r,t;return null!=(r=null==(t=f(e,n))?void 0:t.toLowerCase().includes("f"))&&r}function h(e,n,r,t){for(var l=1,i=n;i<e.length;){var s=e[i];if('"'!==s&&"'"!==s&&"`"!==s)if(t.slashStartsRegExp&&"/"===e[i]&&"/"===e[i+1])i=x(e,i);else if(t.slashStartsRegExp&&"/"===e[i]&&"*"===e[i+1])i=d(e,i);else if(t.slashStartsRegExp&&"/"===s)i=v(e,i);else{if("{"===s&&(l+=1),s===r&&0===(l-=1))return{content:e.slice(n,i),endIndex:i};i+=1}else i=m(e,i)}return{content:e.slice(n),endIndex:e.length}}function m(e,n){for(var r=o(e,n),t=n+r.length;t<e.length;)if("\\"!==e[t]){if(e.startsWith(r,t))return t+r.length;t+=1}else t+=2;return t}function v(e,n){for(var r=n+1,t=!1;r<e.length;)if("\\"!==e[r]){if("["===e[r]&&(t=!0),"]"===e[r]&&(t=!1),"/"===e[r]&&!t){for(r+=1;/[A-Za-z]/.test(null!=(l=e[r])?l:"");){var l;r+=1}return r}if("\n"===e[r])return n+1;r+=1}else r+=2;return n+1}function x(e,n){var r=e.indexOf("\n",n+2);return-1===r?e.length:r}function d(e,n){var r=e.indexOf("*/",n+2);return-1===r?e.length:r+2}export{t as removeCommentsAndStringsInSourceCode,r as removeCommentsInSourceCode};
//# sourceMappingURL=removeCommentsInSourceCode.js.map
function e(e,t){return n(e,t,{removeStrings:!1})}function t(e,t){return n(e,t,{removeStrings:!0})}function n(e,t,n,a=r(e)){if(!e.comments?.length&&(!n.removeStrings||!e.strings?.length))return t;let s=[],c=0;for(;c<t.length;){let r;for(let e of a){let a=e.openRegExp;a.lastIndex=c;let o=a.exec(t);o&&i(o,e,r,n)&&(r={grammar:e,match:o})}if(r){let i=r.match.index;if(!r.grammar.isComment&&n.removeStrings&&(i=u(t,r.match.index)),s.push(t.slice(c,i)),r.grammar.isComment){let e=r.grammar.closeRegExp;e.lastIndex=r.match.index+r.match[0].length;let n=e.exec(t);c=n?n.index+n[0].length:t.length}else{c=o(t,r.match.index,r.grammar);let i=t.slice(r.match.index,c);n.removeStrings?s.push(f(e,a,t,r.match.index,i)):s.push(i)}}else s.push(t.slice(c)),c=t.length}return s.join(``)}function r(e){return[...e.comments?.map(e=>({closeRegExp:a(e.close??/(?=\n)/g),isComment:!0,openRegExp:a(e.open)}))??[],...e.strings?.map(e=>({closeRegExp:a(e.close),isComment:!1,openRegExp:a(e.open)}))??[]]}function i(e,t,n,r){return!n||e.index<n.match.index?!0:e.index>n.match.index?!1:r.removeStrings&&n.grammar.isComment&&!t.isComment}function a(e){return new RegExp(e,e.flags.includes(`g`)?e.flags:`${e.flags}g`)}function o(e,t,n){if(e[t]==="`")return s(e,t);if(p(e,t))return c(e,t);let r=n.closeRegExp;r.lastIndex=t+1;let i=r.exec(e);return i?i.index+i[0].length:e.length}function s(e,t){let n=t+1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]==="`")return n+1;if(e[n]===`$`&&e[n+1]===`{`){n=g(e,n+2,`}`,{slashStartsRegExp:!0}).endIndex+1;continue}n+=1}return e.length}function c(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e.startsWith(n,r))return r+n.length;if(e[r]===`{`&&e[r+1]===`{`){r+=2;continue}if(e[r]===`{`){r=g(e,r+1,`}`,{slashStartsRegExp:!1}).endIndex+1;continue}r+=e[r]===`\\`?2:1}return e.length}function l(e,t){let n=e.slice(t,t+3);return n===`'''`||n===`"""`?n:e[t]??``}function u(e,t){let n=d(e,t);return n?t-n.length:t}function d(e,t){if(e[t]!==`"`&&e[t]!==`'`)return;let n=t-1;for(;n>=0&&/[A-Za-z]/.test(e[n]??``);)--n;let r=e.slice(n+1,t);if(!(!r||!/^[bfru]+$/i.test(r))&&!(n>=0&&/[\dA-Za-z_]/.test(e[n]??``)))return r}function f(e,t,n,r,i){return i.startsWith("`")?m(e,t,i):p(n,r)?h(e,t,i):``}function p(e,t){return d(e,t)?.toLowerCase().includes(`f`)??!1}function m(e,t,r){let i=[],a=1;for(;a<r.length-1;){if(r[a]===`\\`){a+=2;continue}if(r[a]===`$`&&r[a+1]===`{`){let o=g(r,a+2,`}`,{slashStartsRegExp:!0});i.push(n(e,o.content,{removeStrings:!0},t)),a=o.endIndex+1;continue}a+=1}return i.join(`
`)}function h(e,t,r){let i=l(r,0).length,a=[],o=i;for(;o<r.length-i;){if(r[o]===`{`&&r[o+1]===`{`){o+=2;continue}if(r[o]===`{`){let i=g(r,o+1,`}`,{slashStartsRegExp:!1});a.push(n(e,i.content,{removeStrings:!0},t)),o=i.endIndex+1;continue}o+=r[o]===`\\`?2:1}return a.join(`
`)}function g(e,t,n,r){let i=1,a=t;for(;a<e.length;){let o=e[a];if(o===`"`||o===`'`||o==="`"){a=_(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`/`){a=y(e,a);continue}if(r.slashStartsRegExp&&e[a]===`/`&&e[a+1]===`*`){a=b(e,a);continue}if(r.slashStartsRegExp&&o===`/`){a=v(e,a);continue}if(o===`{`&&(i+=1),o===n&&(--i,i===0))return{content:e.slice(t,a),endIndex:a};a+=1}return{content:e.slice(t),endIndex:e.length}}function _(e,t){let n=l(e,t),r=t+n.length;for(;r<e.length;){if(e[r]===`\\`){r+=2;continue}if(e.startsWith(n,r))return r+n.length;r+=1}return r}function v(e,t){let n=t+1,r=!1;for(;n<e.length;){if(e[n]===`\\`){n+=2;continue}if(e[n]===`[`&&(r=!0),e[n]===`]`&&(r=!1),e[n]===`/`&&!r){for(n+=1;/[A-Za-z]/.test(e[n]??``);)n+=1;return n}if(e[n]===`
`)return t+1;n+=1}return t+1}function y(e,t){let n=e.indexOf(`
`,t+2);return n===-1?e.length:n}function b(e,t){let n=e.indexOf(`*/`,t+2);return n===-1?e.length:n+2}export{t as removeCommentsAndStringsInSourceCode,e as removeCommentsInSourceCode};
//# sourceMappingURL=removeCommentsInSourceCode.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"removeCommentsInSourceCode.js","sources":["../../src/helpers/removeCommentsInSourceCode.ts"],"sourcesContent":["import type { LanguageDefinition } from '../types/language.js';\n\nexport type SourceCodeGrammar = NonNullable<LanguageDefinition['grammer']>;\n\n/** Removes comments from source code according to the provided language grammar. */\nexport function removeCommentsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: false });\n}\n\n/** Removes comments and string literal contents while preserving executable interpolation expressions. */\nexport function removeCommentsAndStringsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: true });\n}\n\ninterface CommentOrStringGrammar {\n closeRegExp: RegExp;\n isComment: boolean;\n openRegExp: RegExp;\n}\n\nfunction removeCommentsAndMaybeStringsInSourceCode(\n grammar: SourceCodeGrammar,\n sourceCode: string,\n options: { removeStrings: boolean },\n commentOrStringGrammars = compileCommentOrStringGrammars(grammar)\n): string {\n if (!grammar.comments?.length && (!options.removeStrings || !grammar.strings?.length)) return sourceCode;\n\n const newSourceCodeSlices: string[] = [];\n\n let lastIndex = 0;\n\n while (lastIndex < sourceCode.length) {\n let first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined;\n\n for (const commentOrStringGrammer of commentOrStringGrammars) {\n const startRegExp = commentOrStringGrammer.openRegExp;\n startRegExp.lastIndex = lastIndex;\n\n const match = startRegExp.exec(sourceCode);\n\n if (match && shouldPreferMatch(match, commentOrStringGrammer, first, options)) {\n first = { grammar: commentOrStringGrammer, match };\n }\n }\n\n if (first) {\n let stringPrefixStartIndex = first.match.index;\n if (!first.grammar.isComment && options.removeStrings) {\n stringPrefixStartIndex = getPythonStringPrefixStartIndex(sourceCode, first.match.index);\n }\n newSourceCodeSlices.push(sourceCode.slice(lastIndex, stringPrefixStartIndex));\n\n if (!first.grammar.isComment) {\n lastIndex = findStringEndIndex(sourceCode, first.match.index, first.grammar);\n const stringLiteral = sourceCode.slice(first.match.index, lastIndex);\n if (options.removeStrings) {\n newSourceCodeSlices.push(\n preserveStringInterpolationExpressions(\n grammar,\n commentOrStringGrammars,\n sourceCode,\n first.match.index,\n stringLiteral\n )\n );\n } else {\n newSourceCodeSlices.push(stringLiteral);\n }\n } else {\n const closeRegExp = first.grammar.closeRegExp;\n closeRegExp.lastIndex = first.match.index + first.match[0].length;\n\n const match = closeRegExp.exec(sourceCode);\n\n lastIndex = match ? match.index + match[0].length : sourceCode.length;\n }\n } else {\n newSourceCodeSlices.push(sourceCode.slice(lastIndex));\n lastIndex = sourceCode.length;\n }\n }\n\n return newSourceCodeSlices.join('');\n}\n\nfunction compileCommentOrStringGrammars(grammar: SourceCodeGrammar): readonly CommentOrStringGrammar[] {\n return [\n ...(grammar.comments?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close ?? /(?=\\n)/g),\n isComment: true,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ...(grammar.strings?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close),\n isComment: false,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ] satisfies CommentOrStringGrammar[];\n}\n\nfunction shouldPreferMatch(\n match: RegExpExecArray,\n grammar: CommentOrStringGrammar,\n first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined,\n options: { removeStrings: boolean }\n): boolean {\n if (!first) return true;\n if (match.index < first.match.index) return true;\n if (match.index > first.match.index) return false;\n return options.removeStrings && first.grammar.isComment && !grammar.isComment;\n}\n\nfunction makeGlobalRegExp(regExp: RegExp): RegExp {\n return new RegExp(regExp, regExp.flags.includes('g') ? regExp.flags : `${regExp.flags}g`);\n}\n\nfunction findStringEndIndex(sourceCode: string, stringStartIndex: number, grammar: CommentOrStringGrammar): number {\n if (sourceCode[stringStartIndex] === '`') return findJavaScriptTemplateEndIndex(sourceCode, stringStartIndex);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return findPythonFStringEndIndex(sourceCode, stringStartIndex);\n\n const closeRegExp = grammar.closeRegExp;\n closeRegExp.lastIndex = stringStartIndex + 1;\n const match = closeRegExp.exec(sourceCode);\n return match ? match.index + match[0].length : sourceCode.length;\n}\n\nfunction findJavaScriptTemplateEndIndex(sourceCode: string, stringStartIndex: number): number {\n let index = stringStartIndex + 1;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '`') return index + 1;\n if (sourceCode[index] === '$' && sourceCode[index + 1] === '{') {\n index = readBalancedExpression(sourceCode, index + 2, '}', { slashStartsRegExp: true }).endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return sourceCode.length;\n}\n\nfunction findPythonFStringEndIndex(sourceCode: string, stringStartIndex: number): number {\n const quote = getStringQuote(sourceCode, stringStartIndex);\n let index = stringStartIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n if (sourceCode[index] === '{' && sourceCode[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '{') {\n index = readBalancedExpression(sourceCode, index + 1, '}', { slashStartsRegExp: false }).endIndex + 1;\n continue;\n }\n index += sourceCode[index] === '\\\\' ? 2 : 1;\n }\n\n return sourceCode.length;\n}\n\nfunction getStringQuote(sourceCode: string, stringStartIndex: number): string {\n const threeCharacterQuote = sourceCode.slice(stringStartIndex, stringStartIndex + 3);\n if (threeCharacterQuote === \"'''\" || threeCharacterQuote === '\"\"\"') return threeCharacterQuote;\n return sourceCode[stringStartIndex] ?? '';\n}\n\nfunction getPythonStringPrefixStartIndex(sourceCode: string, stringStartIndex: number): number {\n const prefix = getPythonStringPrefix(sourceCode, stringStartIndex);\n return prefix ? stringStartIndex - prefix.length : stringStartIndex;\n}\n\nfunction getPythonStringPrefix(sourceCode: string, stringStartIndex: number): string | undefined {\n if (sourceCode[stringStartIndex] !== '\"' && sourceCode[stringStartIndex] !== \"'\") return undefined;\n let index = stringStartIndex - 1;\n while (index >= 0 && /[A-Za-z]/.test(sourceCode[index] ?? '')) index -= 1;\n\n const prefix = sourceCode.slice(index + 1, stringStartIndex);\n if (!prefix || !/^[bfru]+$/i.test(prefix)) return undefined;\n if (index >= 0 && /[\\dA-Za-z_]/.test(sourceCode[index] ?? '')) return undefined;\n\n return prefix;\n}\n\nfunction preserveStringInterpolationExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n sourceCode: string,\n stringStartIndex: number,\n stringLiteral: string\n): string {\n if (stringLiteral.startsWith('`'))\n return preserveJavaScriptTemplateExpressions(grammar, commentOrStringGrammars, stringLiteral);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return preservePythonFStringExpressions(grammar, commentOrStringGrammars, stringLiteral);\n return '';\n}\n\nfunction hasPythonFStringPrefix(sourceCode: string, stringStartIndex: number): boolean {\n return getPythonStringPrefix(sourceCode, stringStartIndex)?.toLowerCase().includes('f') ?? false;\n}\n\nfunction preserveJavaScriptTemplateExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const expressions: string[] = [];\n let index = 1;\n\n while (index < stringLiteral.length - 1) {\n if (stringLiteral[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '$' && stringLiteral[index + 1] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 2, '}', { slashStartsRegExp: true });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction preservePythonFStringExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const quoteLength = getStringQuote(stringLiteral, 0).length;\n const expressions: string[] = [];\n let index = quoteLength;\n\n while (index < stringLiteral.length - quoteLength) {\n if (stringLiteral[index] === '{' && stringLiteral[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 1, '}', { slashStartsRegExp: false });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += stringLiteral[index] === '\\\\' ? 2 : 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction readBalancedExpression(\n sourceCode: string,\n startIndex: number,\n closeChar: string,\n options: { slashStartsRegExp: boolean }\n): { content: string; endIndex: number } {\n let depth = 1;\n let index = startIndex;\n\n while (index < sourceCode.length) {\n const char = sourceCode[index];\n if (char === '\"' || char === \"'\" || char === '`') {\n index = skipQuotedSpan(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '/') {\n index = skipJavaScriptSingleLineComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '*') {\n index = skipJavaScriptBlockComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && char === '/') {\n index = skipJavaScriptRegExpLiteral(sourceCode, index);\n continue;\n }\n if (char === '{') depth += 1;\n if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return { content: sourceCode.slice(startIndex, index), endIndex: index };\n }\n index += 1;\n }\n\n return { content: sourceCode.slice(startIndex), endIndex: sourceCode.length };\n}\n\nfunction skipQuotedSpan(sourceCode: string, startIndex: number): number {\n const quote = getStringQuote(sourceCode, startIndex);\n let index = startIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n index += 1;\n }\n\n return index;\n}\n\nfunction skipJavaScriptRegExpLiteral(sourceCode: string, startIndex: number): number {\n let index = startIndex + 1;\n let inCharacterClass = false;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '[') inCharacterClass = true;\n if (sourceCode[index] === ']') inCharacterClass = false;\n if (sourceCode[index] === '/' && !inCharacterClass) {\n index += 1;\n while (/[A-Za-z]/.test(sourceCode[index] ?? '')) index += 1;\n return index;\n }\n if (sourceCode[index] === '\\n') return startIndex + 1;\n index += 1;\n }\n\n return startIndex + 1;\n}\n\nfunction skipJavaScriptSingleLineComment(sourceCode: string, startIndex: number): number {\n const newLineIndex = sourceCode.indexOf('\\n', startIndex + 2);\n return newLineIndex === -1 ? sourceCode.length : newLineIndex;\n}\n\nfunction skipJavaScriptBlockComment(sourceCode: string, startIndex: number): number {\n const endIndex = sourceCode.indexOf('*/', startIndex + 2);\n return endIndex === -1 ? sourceCode.length : endIndex + 2;\n}\n"],"names":["removeCommentsInSourceCode","grammar","sourceCode","removeCommentsAndMaybeStringsInSourceCode","removeStrings","removeCommentsAndStringsInSourceCode","options","commentOrStringGrammars","_grammar$comments","_grammar$strings","_grammar$comments$map","_grammar$comments2","_grammar$strings$map","_grammar$strings2","concat","_toConsumableArray","comments","map","v","_v$close","closeRegExp","makeGlobalRegExp","close","isComment","openRegExp","open","strings","compileCommentOrStringGrammars","length","newSourceCodeSlices","lastIndex","_step","first","_iterator","_createForOfIteratorHelper","s","n","done","commentOrStringGrammer","value","startRegExp","match","exec","shouldPreferMatch","err","e","f","stringPrefixStartIndex","index","getPythonStringPrefixStartIndex","push","slice","findStringEndIndex","stringLiteral","preserveStringInterpolationExpressions","join","regExp","RegExp","flags","includes","stringStartIndex","readBalancedExpression","slashStartsRegExp","endIndex","findJavaScriptTemplateEndIndex","hasPythonFStringPrefix","quote","getStringQuote","startsWith","findPythonFStringEndIndex","_sourceCode$stringSta","threeCharacterQuote","prefix","getPythonStringPrefix","_sourceCode$index2","test","_sourceCode$index","expressions","expression","content","preserveJavaScriptTemplateExpressions","quoteLength","preservePythonFStringExpressions","_getPythonStringPrefi","_getPythonStringPrefi2","toLowerCase","startIndex","closeChar","depth","char","skipJavaScriptSingleLineComment","skipJavaScriptBlockComment","skipJavaScriptRegExpLiteral","skipQuotedSpan","inCharacterClass","_sourceCode$index3","newLineIndex","indexOf"],"mappings":"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"}
{"version":3,"file":"removeCommentsInSourceCode.js","names":[],"sources":["../../src/helpers/removeCommentsInSourceCode.ts"],"sourcesContent":["import type { LanguageDefinition } from '../types/language.js';\n\nexport type SourceCodeGrammar = NonNullable<LanguageDefinition['grammer']>;\n\n/** Removes comments from source code according to the provided language grammar. */\nexport function removeCommentsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: false });\n}\n\n/** Removes comments and string literal contents while preserving executable interpolation expressions. */\nexport function removeCommentsAndStringsInSourceCode(grammar: SourceCodeGrammar, sourceCode: string): string {\n return removeCommentsAndMaybeStringsInSourceCode(grammar, sourceCode, { removeStrings: true });\n}\n\ninterface CommentOrStringGrammar {\n closeRegExp: RegExp;\n isComment: boolean;\n openRegExp: RegExp;\n}\n\nfunction removeCommentsAndMaybeStringsInSourceCode(\n grammar: SourceCodeGrammar,\n sourceCode: string,\n options: { removeStrings: boolean },\n commentOrStringGrammars = compileCommentOrStringGrammars(grammar)\n): string {\n if (!grammar.comments?.length && (!options.removeStrings || !grammar.strings?.length)) return sourceCode;\n\n const newSourceCodeSlices: string[] = [];\n\n let lastIndex = 0;\n\n while (lastIndex < sourceCode.length) {\n let first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined;\n\n for (const commentOrStringGrammer of commentOrStringGrammars) {\n const startRegExp = commentOrStringGrammer.openRegExp;\n startRegExp.lastIndex = lastIndex;\n\n const match = startRegExp.exec(sourceCode);\n\n if (match && shouldPreferMatch(match, commentOrStringGrammer, first, options)) {\n first = { grammar: commentOrStringGrammer, match };\n }\n }\n\n if (first) {\n let stringPrefixStartIndex = first.match.index;\n if (!first.grammar.isComment && options.removeStrings) {\n stringPrefixStartIndex = getPythonStringPrefixStartIndex(sourceCode, first.match.index);\n }\n newSourceCodeSlices.push(sourceCode.slice(lastIndex, stringPrefixStartIndex));\n\n if (!first.grammar.isComment) {\n lastIndex = findStringEndIndex(sourceCode, first.match.index, first.grammar);\n const stringLiteral = sourceCode.slice(first.match.index, lastIndex);\n if (options.removeStrings) {\n newSourceCodeSlices.push(\n preserveStringInterpolationExpressions(\n grammar,\n commentOrStringGrammars,\n sourceCode,\n first.match.index,\n stringLiteral\n )\n );\n } else {\n newSourceCodeSlices.push(stringLiteral);\n }\n } else {\n const closeRegExp = first.grammar.closeRegExp;\n closeRegExp.lastIndex = first.match.index + first.match[0].length;\n\n const match = closeRegExp.exec(sourceCode);\n\n lastIndex = match ? match.index + match[0].length : sourceCode.length;\n }\n } else {\n newSourceCodeSlices.push(sourceCode.slice(lastIndex));\n lastIndex = sourceCode.length;\n }\n }\n\n return newSourceCodeSlices.join('');\n}\n\nfunction compileCommentOrStringGrammars(grammar: SourceCodeGrammar): readonly CommentOrStringGrammar[] {\n return [\n ...(grammar.comments?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close ?? /(?=\\n)/g),\n isComment: true,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ...(grammar.strings?.map((v) => ({\n closeRegExp: makeGlobalRegExp(v.close),\n isComment: false,\n openRegExp: makeGlobalRegExp(v.open),\n })) ?? []),\n ] satisfies CommentOrStringGrammar[];\n}\n\nfunction shouldPreferMatch(\n match: RegExpExecArray,\n grammar: CommentOrStringGrammar,\n first: { grammar: CommentOrStringGrammar; match: RegExpExecArray } | undefined,\n options: { removeStrings: boolean }\n): boolean {\n if (!first) return true;\n if (match.index < first.match.index) return true;\n if (match.index > first.match.index) return false;\n return options.removeStrings && first.grammar.isComment && !grammar.isComment;\n}\n\nfunction makeGlobalRegExp(regExp: RegExp): RegExp {\n return new RegExp(regExp, regExp.flags.includes('g') ? regExp.flags : `${regExp.flags}g`);\n}\n\nfunction findStringEndIndex(sourceCode: string, stringStartIndex: number, grammar: CommentOrStringGrammar): number {\n if (sourceCode[stringStartIndex] === '`') return findJavaScriptTemplateEndIndex(sourceCode, stringStartIndex);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return findPythonFStringEndIndex(sourceCode, stringStartIndex);\n\n const closeRegExp = grammar.closeRegExp;\n closeRegExp.lastIndex = stringStartIndex + 1;\n const match = closeRegExp.exec(sourceCode);\n return match ? match.index + match[0].length : sourceCode.length;\n}\n\nfunction findJavaScriptTemplateEndIndex(sourceCode: string, stringStartIndex: number): number {\n let index = stringStartIndex + 1;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '`') return index + 1;\n if (sourceCode[index] === '$' && sourceCode[index + 1] === '{') {\n index = readBalancedExpression(sourceCode, index + 2, '}', { slashStartsRegExp: true }).endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return sourceCode.length;\n}\n\nfunction findPythonFStringEndIndex(sourceCode: string, stringStartIndex: number): number {\n const quote = getStringQuote(sourceCode, stringStartIndex);\n let index = stringStartIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n if (sourceCode[index] === '{' && sourceCode[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '{') {\n index = readBalancedExpression(sourceCode, index + 1, '}', { slashStartsRegExp: false }).endIndex + 1;\n continue;\n }\n index += sourceCode[index] === '\\\\' ? 2 : 1;\n }\n\n return sourceCode.length;\n}\n\nfunction getStringQuote(sourceCode: string, stringStartIndex: number): string {\n const threeCharacterQuote = sourceCode.slice(stringStartIndex, stringStartIndex + 3);\n if (threeCharacterQuote === \"'''\" || threeCharacterQuote === '\"\"\"') return threeCharacterQuote;\n return sourceCode[stringStartIndex] ?? '';\n}\n\nfunction getPythonStringPrefixStartIndex(sourceCode: string, stringStartIndex: number): number {\n const prefix = getPythonStringPrefix(sourceCode, stringStartIndex);\n return prefix ? stringStartIndex - prefix.length : stringStartIndex;\n}\n\nfunction getPythonStringPrefix(sourceCode: string, stringStartIndex: number): string | undefined {\n if (sourceCode[stringStartIndex] !== '\"' && sourceCode[stringStartIndex] !== \"'\") return undefined;\n let index = stringStartIndex - 1;\n while (index >= 0 && /[A-Za-z]/.test(sourceCode[index] ?? '')) index -= 1;\n\n const prefix = sourceCode.slice(index + 1, stringStartIndex);\n if (!prefix || !/^[bfru]+$/i.test(prefix)) return undefined;\n if (index >= 0 && /[\\dA-Za-z_]/.test(sourceCode[index] ?? '')) return undefined;\n\n return prefix;\n}\n\nfunction preserveStringInterpolationExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n sourceCode: string,\n stringStartIndex: number,\n stringLiteral: string\n): string {\n if (stringLiteral.startsWith('`'))\n return preserveJavaScriptTemplateExpressions(grammar, commentOrStringGrammars, stringLiteral);\n if (hasPythonFStringPrefix(sourceCode, stringStartIndex))\n return preservePythonFStringExpressions(grammar, commentOrStringGrammars, stringLiteral);\n return '';\n}\n\nfunction hasPythonFStringPrefix(sourceCode: string, stringStartIndex: number): boolean {\n return getPythonStringPrefix(sourceCode, stringStartIndex)?.toLowerCase().includes('f') ?? false;\n}\n\nfunction preserveJavaScriptTemplateExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const expressions: string[] = [];\n let index = 1;\n\n while (index < stringLiteral.length - 1) {\n if (stringLiteral[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '$' && stringLiteral[index + 1] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 2, '}', { slashStartsRegExp: true });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction preservePythonFStringExpressions(\n grammar: SourceCodeGrammar,\n commentOrStringGrammars: readonly CommentOrStringGrammar[],\n stringLiteral: string\n): string {\n const quoteLength = getStringQuote(stringLiteral, 0).length;\n const expressions: string[] = [];\n let index = quoteLength;\n\n while (index < stringLiteral.length - quoteLength) {\n if (stringLiteral[index] === '{' && stringLiteral[index + 1] === '{') {\n index += 2;\n continue;\n }\n if (stringLiteral[index] === '{') {\n const expression = readBalancedExpression(stringLiteral, index + 1, '}', { slashStartsRegExp: false });\n expressions.push(\n removeCommentsAndMaybeStringsInSourceCode(\n grammar,\n expression.content,\n { removeStrings: true },\n commentOrStringGrammars\n )\n );\n index = expression.endIndex + 1;\n continue;\n }\n index += stringLiteral[index] === '\\\\' ? 2 : 1;\n }\n\n return expressions.join('\\n');\n}\n\nfunction readBalancedExpression(\n sourceCode: string,\n startIndex: number,\n closeChar: string,\n options: { slashStartsRegExp: boolean }\n): { content: string; endIndex: number } {\n let depth = 1;\n let index = startIndex;\n\n while (index < sourceCode.length) {\n const char = sourceCode[index];\n if (char === '\"' || char === \"'\" || char === '`') {\n index = skipQuotedSpan(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '/') {\n index = skipJavaScriptSingleLineComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && sourceCode[index] === '/' && sourceCode[index + 1] === '*') {\n index = skipJavaScriptBlockComment(sourceCode, index);\n continue;\n }\n if (options.slashStartsRegExp && char === '/') {\n index = skipJavaScriptRegExpLiteral(sourceCode, index);\n continue;\n }\n if (char === '{') depth += 1;\n if (char === closeChar) {\n depth -= 1;\n if (depth === 0) return { content: sourceCode.slice(startIndex, index), endIndex: index };\n }\n index += 1;\n }\n\n return { content: sourceCode.slice(startIndex), endIndex: sourceCode.length };\n}\n\nfunction skipQuotedSpan(sourceCode: string, startIndex: number): number {\n const quote = getStringQuote(sourceCode, startIndex);\n let index = startIndex + quote.length;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode.startsWith(quote, index)) return index + quote.length;\n index += 1;\n }\n\n return index;\n}\n\nfunction skipJavaScriptRegExpLiteral(sourceCode: string, startIndex: number): number {\n let index = startIndex + 1;\n let inCharacterClass = false;\n\n while (index < sourceCode.length) {\n if (sourceCode[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (sourceCode[index] === '[') inCharacterClass = true;\n if (sourceCode[index] === ']') inCharacterClass = false;\n if (sourceCode[index] === '/' && !inCharacterClass) {\n index += 1;\n while (/[A-Za-z]/.test(sourceCode[index] ?? '')) index += 1;\n return index;\n }\n if (sourceCode[index] === '\\n') return startIndex + 1;\n index += 1;\n }\n\n return startIndex + 1;\n}\n\nfunction skipJavaScriptSingleLineComment(sourceCode: string, startIndex: number): number {\n const newLineIndex = sourceCode.indexOf('\\n', startIndex + 2);\n return newLineIndex === -1 ? sourceCode.length : newLineIndex;\n}\n\nfunction skipJavaScriptBlockComment(sourceCode: string, startIndex: number): number {\n const endIndex = sourceCode.indexOf('*/', startIndex + 2);\n return endIndex === -1 ? sourceCode.length : endIndex + 2;\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:path"),r=require("./findModelAnswerDirs.cjs"),t=require("./printDebugBanner.cjs");function a(){return(a=e.asyncToGenerator(e.regenerator().m(function a(o,s){var i,u,d,l,p,g,w,b;return e.regenerator().w(function(a){for(;;)switch(a.n){case 0:if(!s){a.n=1;break}return a.a(2,{cwds:[{cwd:s,expectedResult:"accepted"}],isDebugMode:!1});case 1:return a.n=2,Promise.all([r.findModelAnswerDirs(o),r.findFailingModelAnswerDirs(o)]);case 2:if(d=a.v,l=e.slicedToArray(d,2),p=l[0],g=l[1],0!==p.length||0!==g.length){a.n=3;break}throw new Error("cwd argument required (no model answer directories found in ".concat(n.join(o,r.MODEL_ANSWERS_DIRNAME)," or ").concat(n.join(o,r.FAILING_MODEL_ANSWERS_DIRNAME),")"));case 3:return w=c(),b=n.relative(o,null!=(i=null!=(u=p[0])?u:g[0])?i:"")||"<model_answer>",t.printDebugBanner(["[DEBUG MODE] cwd not provided -- judging against all model answers","","Problem dir : ".concat(o),"Model answers (".concat(p.length,"):")].concat(e.toConsumableArray(p.map(function(e){return" - ".concat(n.relative(o,e))})),["Failing model answers (".concat(g.length,"):")],e.toConsumableArray(g.map(function(e){return" - ".concat(n.relative(o,e))})),["","To judge a single cwd (e.g., a user submission), pass it as the first argument:"," bun ".concat(w," <cwd> [params-json]"),"For example:"," bun ".concat(w," ").concat(b)," bun ".concat(w," ").concat(b,' \'{"language":"python"}\'')])),a.a(2,{cwds:[].concat(e.toConsumableArray(p.map(function(e){return{cwd:e,expectedResult:"accepted"}})),e.toConsumableArray(g.map(function(e){return{cwd:e,expectedResult:"rejected"}}))),isDebugMode:!0})}},a)}))).apply(this,arguments)}function c(){var e=process.argv[1];return e?n.basename(e):"judge.ts"}exports.printDebugCwdBanner=function(e,r){var a=n.relative(e,r.cwd)||r.cwd,o=c();t.printDebugBanner(["[DEBUG MODE] judging: ".concat(a),"Expected result: ".concat(r.expectedResult),"","To judge only this cwd as a normal submission:"," bun ".concat(o," ").concat(a),"Run without a cwd to check debug-mode expectations."])},exports.printDebugExpectationFailureBanner=function(e,r){var a=n.relative(e,r.cwd)||r.cwd;t.printDebugBanner(["[DEBUG MODE] expectation failed: ".concat(a),"Expected result: ".concat(r.expectedResult),"accepted"===r.expectedResult?"The model answer was rejected by the judge.":"The failing model answer was accepted by the judge."])},exports.resolveCwds=function(e,n){return a.apply(this,arguments)};
//# sourceMappingURL=resolveCwds.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("./printDebugBanner.cjs"),n=require("./findModelAnswerDirs.cjs");let r=require("node:path");r=e.__toESM(r,1);async function i(e,i){if(i)return{cwds:[{cwd:i,expectedResult:`accepted`}],isDebugMode:!1};let[a,o]=await Promise.all([n.findModelAnswerDirs(e),n.findFailingModelAnswerDirs(e)]);if(a.length===0&&o.length===0)throw Error(`cwd argument required (no model answer directories found in ${r.default.join(e,n.MODEL_ANSWERS_DIRNAME)} or ${r.default.join(e,n.FAILING_MODEL_ANSWERS_DIRNAME)})`);let c=s(),l=r.default.relative(e,a[0]??o[0]??``)||`<model_answer>`;return t.printDebugBanner([`[DEBUG MODE] cwd not provided -- judging against all model answers`,``,`Problem dir : ${e}`,`Model answers (${a.length}):`,...a.map(t=>` - ${r.default.relative(e,t)}`),`Failing model answers (${o.length}):`,...o.map(t=>` - ${r.default.relative(e,t)}`),``,`To judge a single cwd (e.g., a user submission), pass it as the first argument:`,` bun ${c} <cwd> [params-json]`,`For example:`,` bun ${c} ${l}`,` bun ${c} ${l} '{"language":"python"}'`]),{cwds:[...a.map(e=>({cwd:e,expectedResult:`accepted`})),...o.map(e=>({cwd:e,expectedResult:`rejected`}))],isDebugMode:!0}}function a(e,n){let i=r.default.relative(e,n.cwd)||n.cwd,a=s();t.printDebugBanner([`[DEBUG MODE] judging: ${i}`,`Expected result: ${n.expectedResult}`,``,`To judge only this cwd as a normal submission:`,` bun ${a} ${i}`,`Run without a cwd to check debug-mode expectations.`])}function o(e,n){t.printDebugBanner([`[DEBUG MODE] expectation failed: ${r.default.relative(e,n.cwd)||n.cwd}`,`Expected result: ${n.expectedResult}`,n.expectedResult===`accepted`?`The model answer was rejected by the judge.`:`The failing model answer was accepted by the judge.`])}function s(){let e=process.argv[1];return e?r.default.basename(e):`judge.ts`}exports.printDebugCwdBanner=a,exports.printDebugExpectationFailureBanner=o,exports.resolveCwds=i;
//# sourceMappingURL=resolveCwds.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"resolveCwds.cjs","sources":["../../src/helpers/resolveCwds.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n FAILING_MODEL_ANSWERS_DIRNAME,\n MODEL_ANSWERS_DIRNAME,\n findFailingModelAnswerDirs,\n findModelAnswerDirs,\n} from './findModelAnswerDirs.js';\nimport { printDebugBanner } from './printDebugBanner.js';\n\nexport type ExpectedJudgeResult = 'accepted' | 'rejected';\n\nexport interface ResolvedCwd {\n cwd: string;\n expectedResult: ExpectedJudgeResult;\n}\n\nexport interface ResolvedCwds {\n cwds: readonly ResolvedCwd[];\n isDebugMode: boolean;\n}\n\n/**\n * Resolve which working directories to judge.\n *\n * - If `cwdArg` is provided, use it as the single cwd.\n * - Otherwise (debug mode), enumerate `<problemDir>/model_answers/*` and\n * `<problemDir>/model_answers.fails/*` and judge each.\n * A prominent banner is printed so users can tell at a glance that this is a debug run.\n *\n * @throws if `cwdArg` is missing and no model answer directories are found.\n */\nexport async function resolveCwds(problemDir: string, cwdArg: string | undefined): Promise<ResolvedCwds> {\n if (cwdArg) return { cwds: [{ cwd: cwdArg, expectedResult: 'accepted' }], isDebugMode: false };\n\n const [modelAnswerDirs, failingModelAnswerDirs] = await Promise.all([\n findModelAnswerDirs(problemDir),\n findFailingModelAnswerDirs(problemDir),\n ]);\n if (modelAnswerDirs.length === 0 && failingModelAnswerDirs.length === 0) {\n throw new Error(\n `cwd argument required (no model answer directories found in ${path.join(problemDir, MODEL_ANSWERS_DIRNAME)} or ${path.join(problemDir, FAILING_MODEL_ANSWERS_DIRNAME)})`\n );\n }\n\n const scriptName = getInvokedScriptName();\n const exampleAnswer =\n path.relative(problemDir, modelAnswerDirs[0] ?? failingModelAnswerDirs[0] ?? '') || '<model_answer>';\n printDebugBanner([\n '[DEBUG MODE] cwd not provided -- judging against all model answers',\n '',\n `Problem dir : ${problemDir}`,\n `Model answers (${modelAnswerDirs.length}):`,\n ...modelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n `Failing model answers (${failingModelAnswerDirs.length}):`,\n ...failingModelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n '',\n 'To judge a single cwd (e.g., a user submission), pass it as the first argument:',\n ` bun ${scriptName} <cwd> [params-json]`,\n 'For example:',\n ` bun ${scriptName} ${exampleAnswer}`,\n ` bun ${scriptName} ${exampleAnswer} '{\"language\":\"python\"}'`,\n ]);\n\n return {\n cwds: [\n ...modelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'accepted' as const })),\n ...failingModelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'rejected' as const })),\n ],\n isDebugMode: true,\n };\n}\n\n/**\n * Print a per-cwd banner shown before judging each model answer in debug mode.\n * Includes the command for re-running this single cwd.\n */\nexport function printDebugCwdBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n const scriptName = getInvokedScriptName();\n printDebugBanner([\n `[DEBUG MODE] judging: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n '',\n 'To judge only this cwd as a normal submission:',\n ` bun ${scriptName} ${relativeCwd}`,\n 'Run without a cwd to check debug-mode expectations.',\n ]);\n}\n\nexport function printDebugExpectationFailureBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n printDebugBanner([\n `[DEBUG MODE] expectation failed: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n resolvedCwd.expectedResult === 'accepted'\n ? 'The model answer was rejected by the judge.'\n : 'The failing model answer was accepted by the judge.',\n ]);\n}\n\nfunction getInvokedScriptName(): string {\n const scriptPath = process.argv[1];\n return scriptPath ? path.basename(scriptPath) : 'judge.ts';\n}\n"],"names":["_resolveCwds","_asyncToGenerator","_regenerator","m","_callee","problemDir","cwdArg","_ref","_modelAnswerDirs$","_yield$Promise$all","_yield$Promise$all2","modelAnswerDirs","failingModelAnswerDirs","scriptName","exampleAnswer","w","_context","n","a","cwds","cwd","expectedResult","isDebugMode","Promise","all","findModelAnswerDirs","findFailingModelAnswerDirs","v","_slicedToArray","length","Error","concat","path","join","MODEL_ANSWERS_DIRNAME","FAILING_MODEL_ANSWERS_DIRNAME","getInvokedScriptName","relative","printDebugBanner","_toConsumableArray","map","dir","apply","this","arguments","scriptPath","process","argv","basename","resolvedCwd","relativeCwd","_x","_x2"],"mappings":"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"}
{"version":3,"file":"resolveCwds.cjs","names":["findModelAnswerDirs","findFailingModelAnswerDirs","path","MODEL_ANSWERS_DIRNAME","FAILING_MODEL_ANSWERS_DIRNAME"],"sources":["../../src/helpers/resolveCwds.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n FAILING_MODEL_ANSWERS_DIRNAME,\n MODEL_ANSWERS_DIRNAME,\n findFailingModelAnswerDirs,\n findModelAnswerDirs,\n} from './findModelAnswerDirs.js';\nimport { printDebugBanner } from './printDebugBanner.js';\n\nexport type ExpectedJudgeResult = 'accepted' | 'rejected';\n\nexport interface ResolvedCwd {\n cwd: string;\n expectedResult: ExpectedJudgeResult;\n}\n\nexport interface ResolvedCwds {\n cwds: readonly ResolvedCwd[];\n isDebugMode: boolean;\n}\n\n/**\n * Resolve which working directories to judge.\n *\n * - If `cwdArg` is provided, use it as the single cwd.\n * - Otherwise (debug mode), enumerate `<problemDir>/model_answers/*` and\n * `<problemDir>/model_answers.fails/*` and judge each.\n * A prominent banner is printed so users can tell at a glance that this is a debug run.\n *\n * @throws if `cwdArg` is missing and no model answer directories are found.\n */\nexport async function resolveCwds(problemDir: string, cwdArg: string | undefined): Promise<ResolvedCwds> {\n if (cwdArg) return { cwds: [{ cwd: cwdArg, expectedResult: 'accepted' }], isDebugMode: false };\n\n const [modelAnswerDirs, failingModelAnswerDirs] = await Promise.all([\n findModelAnswerDirs(problemDir),\n findFailingModelAnswerDirs(problemDir),\n ]);\n if (modelAnswerDirs.length === 0 && failingModelAnswerDirs.length === 0) {\n throw new Error(\n `cwd argument required (no model answer directories found in ${path.join(problemDir, MODEL_ANSWERS_DIRNAME)} or ${path.join(problemDir, FAILING_MODEL_ANSWERS_DIRNAME)})`\n );\n }\n\n const scriptName = getInvokedScriptName();\n const exampleAnswer =\n path.relative(problemDir, modelAnswerDirs[0] ?? failingModelAnswerDirs[0] ?? '') || '<model_answer>';\n printDebugBanner([\n '[DEBUG MODE] cwd not provided -- judging against all model answers',\n '',\n `Problem dir : ${problemDir}`,\n `Model answers (${modelAnswerDirs.length}):`,\n ...modelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n `Failing model answers (${failingModelAnswerDirs.length}):`,\n ...failingModelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n '',\n 'To judge a single cwd (e.g., a user submission), pass it as the first argument:',\n ` bun ${scriptName} <cwd> [params-json]`,\n 'For example:',\n ` bun ${scriptName} ${exampleAnswer}`,\n ` bun ${scriptName} ${exampleAnswer} '{\"language\":\"python\"}'`,\n ]);\n\n return {\n cwds: [\n ...modelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'accepted' as const })),\n ...failingModelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'rejected' as const })),\n ],\n isDebugMode: true,\n };\n}\n\n/**\n * Print a per-cwd banner shown before judging each model answer in debug mode.\n * Includes the command for re-running this single cwd.\n */\nexport function printDebugCwdBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n const scriptName = getInvokedScriptName();\n printDebugBanner([\n `[DEBUG MODE] judging: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n '',\n 'To judge only this cwd as a normal submission:',\n ` bun ${scriptName} ${relativeCwd}`,\n 'Run without a cwd to check debug-mode expectations.',\n ]);\n}\n\nexport function printDebugExpectationFailureBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n printDebugBanner([\n `[DEBUG MODE] expectation failed: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n resolvedCwd.expectedResult === 'accepted'\n ? 'The model answer was rejected by the judge.'\n : 'The failing model answer was accepted by the judge.',\n ]);\n}\n\nfunction getInvokedScriptName(): string {\n const scriptPath = process.argv[1];\n return scriptPath ? path.basename(scriptPath) : 'judge.ts';\n}\n"],"mappings":"yLAgCA,eAAsB,EAAY,EAAoB,EAAmD,CACvG,GAAI,EAAQ,MAAO,CAAE,KAAM,CAAC,CAAE,IAAK,EAAQ,eAAgB,UAAW,CAAC,EAAG,YAAa,EAAM,EAE7F,GAAM,CAAC,EAAiB,GAA0B,MAAM,QAAQ,IAAI,CAClEA,EAAAA,oBAAoB,CAAU,EAC9BC,EAAAA,2BAA2B,CAAU,CACvC,CAAC,EACD,GAAI,EAAgB,SAAW,GAAK,EAAuB,SAAW,EACpE,MAAU,MACR,+DAA+DC,EAAAA,QAAK,KAAK,EAAYC,EAAAA,qBAAqB,EAAE,MAAMD,EAAAA,QAAK,KAAK,EAAYE,EAAAA,6BAA6B,EAAE,EACzK,EAGF,IAAM,EAAa,EAAqB,EAClC,EACJF,EAAAA,QAAK,SAAS,EAAY,EAAgB,IAAM,EAAuB,IAAM,EAAE,GAAK,iBAiBtF,OAhBA,EAAA,iBAAiB,CACf,qEACA,GACA,iBAAiB,IACjB,kBAAkB,EAAgB,OAAO,IACzC,GAAG,EAAgB,IAAK,GAAQ,OAAOA,EAAAA,QAAK,SAAS,EAAY,CAAG,GAAG,EACvE,0BAA0B,EAAuB,OAAO,IACxD,GAAG,EAAuB,IAAK,GAAQ,OAAOA,EAAAA,QAAK,SAAS,EAAY,CAAG,GAAG,EAC9E,GACA,kFACA,SAAS,EAAW,sBACpB,eACA,SAAS,EAAW,GAAG,IACvB,SAAS,EAAW,GAAG,EAAc,yBACvC,CAAC,EAEM,CACL,KAAM,CACJ,GAAG,EAAgB,IAAK,IAAS,CAAE,MAAK,eAAgB,UAAoB,EAAE,EAC9E,GAAG,EAAuB,IAAK,IAAS,CAAE,MAAK,eAAgB,UAAoB,EAAE,CACvF,EACA,YAAa,EACf,CACF,CAMA,SAAgB,EAAoB,EAAoB,EAAgC,CACtF,IAAM,EAAcA,EAAAA,QAAK,SAAS,EAAY,EAAY,GAAG,GAAK,EAAY,IACxE,EAAa,EAAqB,EACxC,EAAA,iBAAiB,CACf,yBAAyB,IACzB,oBAAoB,EAAY,iBAChC,GACA,iDACA,SAAS,EAAW,GAAG,IACvB,qDACF,CAAC,CACH,CAEA,SAAgB,EAAmC,EAAoB,EAAgC,CAErG,EAAA,iBAAiB,CACf,oCAFkBA,EAAAA,QAAK,SAAS,EAAY,EAAY,GAAG,GAAK,EAAY,MAG5E,oBAAoB,EAAY,iBAChC,EAAY,iBAAmB,WAC3B,8CACA,qDACN,CAAC,CACH,CAEA,SAAS,GAA+B,CACtC,IAAM,EAAa,QAAQ,KAAK,GAChC,OAAO,EAAaA,EAAAA,QAAK,SAAS,CAAU,EAAI,UAClD"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as n,toConsumableArray as t,slicedToArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import c from"node:path";import{MODEL_ANSWERS_DIRNAME as r,FAILING_MODEL_ANSWERS_DIRNAME as o,findModelAnswerDirs as s,findFailingModelAnswerDirs as i}from"./findModelAnswerDirs.js";import{printDebugBanner as u}from"./printDebugBanner.js";function d(e,n){return l.apply(this,arguments)}function l(){return(l=e(n().m(function e(d,l){var p,m,g,f,b,h,j,v;return n().w(function(e){for(;;)switch(e.n){case 0:if(!l){e.n=1;break}return e.a(2,{cwds:[{cwd:l,expectedResult:"accepted"}],isDebugMode:!1});case 1:return e.n=2,Promise.all([s(d),i(d)]);case 2:if(g=e.v,f=a(g,2),b=f[0],h=f[1],0!==b.length||0!==h.length){e.n=3;break}throw new Error("cwd argument required (no model answer directories found in ".concat(c.join(d,r)," or ").concat(c.join(d,o),")"));case 3:return j=w(),v=c.relative(d,null!=(p=null!=(m=b[0])?m:h[0])?p:"")||"<model_answer>",u(["[DEBUG MODE] cwd not provided -- judging against all model answers","","Problem dir : ".concat(d),"Model answers (".concat(b.length,"):")].concat(t(b.map(function(e){return" - ".concat(c.relative(d,e))})),["Failing model answers (".concat(h.length,"):")],t(h.map(function(e){return" - ".concat(c.relative(d,e))})),["","To judge a single cwd (e.g., a user submission), pass it as the first argument:"," bun ".concat(j," <cwd> [params-json]"),"For example:"," bun ".concat(j," ").concat(v)," bun ".concat(j," ").concat(v,' \'{"language":"python"}\'')])),e.a(2,{cwds:[].concat(t(b.map(function(e){return{cwd:e,expectedResult:"accepted"}})),t(h.map(function(e){return{cwd:e,expectedResult:"rejected"}}))),isDebugMode:!0})}},e)}))).apply(this,arguments)}function p(e,n){var t=c.relative(e,n.cwd)||n.cwd,a=w();u(["[DEBUG MODE] judging: ".concat(t),"Expected result: ".concat(n.expectedResult),"","To judge only this cwd as a normal submission:"," bun ".concat(a," ").concat(t),"Run without a cwd to check debug-mode expectations."])}function m(e,n){var t=c.relative(e,n.cwd)||n.cwd;u(["[DEBUG MODE] expectation failed: ".concat(t),"Expected result: ".concat(n.expectedResult),"accepted"===n.expectedResult?"The model answer was rejected by the judge.":"The failing model answer was accepted by the judge."])}function w(){var e=process.argv[1];return e?c.basename(e):"judge.ts"}export{p as printDebugCwdBanner,m as printDebugExpectationFailureBanner,d as resolveCwds};
//# sourceMappingURL=resolveCwds.js.map
import{printDebugBanner as e}from"./printDebugBanner.js";import{FAILING_MODEL_ANSWERS_DIRNAME as t,MODEL_ANSWERS_DIRNAME as n,findFailingModelAnswerDirs as r,findModelAnswerDirs as i}from"./findModelAnswerDirs.js";import a from"node:path";async function o(o,s){if(s)return{cwds:[{cwd:s,expectedResult:`accepted`}],isDebugMode:!1};let[c,u]=await Promise.all([i(o),r(o)]);if(c.length===0&&u.length===0)throw Error(`cwd argument required (no model answer directories found in ${a.join(o,n)} or ${a.join(o,t)})`);let d=l(),f=a.relative(o,c[0]??u[0]??``)||`<model_answer>`;return e([`[DEBUG MODE] cwd not provided -- judging against all model answers`,``,`Problem dir : ${o}`,`Model answers (${c.length}):`,...c.map(e=>` - ${a.relative(o,e)}`),`Failing model answers (${u.length}):`,...u.map(e=>` - ${a.relative(o,e)}`),``,`To judge a single cwd (e.g., a user submission), pass it as the first argument:`,` bun ${d} <cwd> [params-json]`,`For example:`,` bun ${d} ${f}`,` bun ${d} ${f} '{"language":"python"}'`]),{cwds:[...c.map(e=>({cwd:e,expectedResult:`accepted`})),...u.map(e=>({cwd:e,expectedResult:`rejected`}))],isDebugMode:!0}}function s(t,n){let r=a.relative(t,n.cwd)||n.cwd,i=l();e([`[DEBUG MODE] judging: ${r}`,`Expected result: ${n.expectedResult}`,``,`To judge only this cwd as a normal submission:`,` bun ${i} ${r}`,`Run without a cwd to check debug-mode expectations.`])}function c(t,n){e([`[DEBUG MODE] expectation failed: ${a.relative(t,n.cwd)||n.cwd}`,`Expected result: ${n.expectedResult}`,n.expectedResult===`accepted`?`The model answer was rejected by the judge.`:`The failing model answer was accepted by the judge.`])}function l(){let e=process.argv[1];return e?a.basename(e):`judge.ts`}export{s as printDebugCwdBanner,c as printDebugExpectationFailureBanner,o as resolveCwds};
//# sourceMappingURL=resolveCwds.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"resolveCwds.js","sources":["../../src/helpers/resolveCwds.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n FAILING_MODEL_ANSWERS_DIRNAME,\n MODEL_ANSWERS_DIRNAME,\n findFailingModelAnswerDirs,\n findModelAnswerDirs,\n} from './findModelAnswerDirs.js';\nimport { printDebugBanner } from './printDebugBanner.js';\n\nexport type ExpectedJudgeResult = 'accepted' | 'rejected';\n\nexport interface ResolvedCwd {\n cwd: string;\n expectedResult: ExpectedJudgeResult;\n}\n\nexport interface ResolvedCwds {\n cwds: readonly ResolvedCwd[];\n isDebugMode: boolean;\n}\n\n/**\n * Resolve which working directories to judge.\n *\n * - If `cwdArg` is provided, use it as the single cwd.\n * - Otherwise (debug mode), enumerate `<problemDir>/model_answers/*` and\n * `<problemDir>/model_answers.fails/*` and judge each.\n * A prominent banner is printed so users can tell at a glance that this is a debug run.\n *\n * @throws if `cwdArg` is missing and no model answer directories are found.\n */\nexport async function resolveCwds(problemDir: string, cwdArg: string | undefined): Promise<ResolvedCwds> {\n if (cwdArg) return { cwds: [{ cwd: cwdArg, expectedResult: 'accepted' }], isDebugMode: false };\n\n const [modelAnswerDirs, failingModelAnswerDirs] = await Promise.all([\n findModelAnswerDirs(problemDir),\n findFailingModelAnswerDirs(problemDir),\n ]);\n if (modelAnswerDirs.length === 0 && failingModelAnswerDirs.length === 0) {\n throw new Error(\n `cwd argument required (no model answer directories found in ${path.join(problemDir, MODEL_ANSWERS_DIRNAME)} or ${path.join(problemDir, FAILING_MODEL_ANSWERS_DIRNAME)})`\n );\n }\n\n const scriptName = getInvokedScriptName();\n const exampleAnswer =\n path.relative(problemDir, modelAnswerDirs[0] ?? failingModelAnswerDirs[0] ?? '') || '<model_answer>';\n printDebugBanner([\n '[DEBUG MODE] cwd not provided -- judging against all model answers',\n '',\n `Problem dir : ${problemDir}`,\n `Model answers (${modelAnswerDirs.length}):`,\n ...modelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n `Failing model answers (${failingModelAnswerDirs.length}):`,\n ...failingModelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n '',\n 'To judge a single cwd (e.g., a user submission), pass it as the first argument:',\n ` bun ${scriptName} <cwd> [params-json]`,\n 'For example:',\n ` bun ${scriptName} ${exampleAnswer}`,\n ` bun ${scriptName} ${exampleAnswer} '{\"language\":\"python\"}'`,\n ]);\n\n return {\n cwds: [\n ...modelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'accepted' as const })),\n ...failingModelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'rejected' as const })),\n ],\n isDebugMode: true,\n };\n}\n\n/**\n * Print a per-cwd banner shown before judging each model answer in debug mode.\n * Includes the command for re-running this single cwd.\n */\nexport function printDebugCwdBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n const scriptName = getInvokedScriptName();\n printDebugBanner([\n `[DEBUG MODE] judging: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n '',\n 'To judge only this cwd as a normal submission:',\n ` bun ${scriptName} ${relativeCwd}`,\n 'Run without a cwd to check debug-mode expectations.',\n ]);\n}\n\nexport function printDebugExpectationFailureBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n printDebugBanner([\n `[DEBUG MODE] expectation failed: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n resolvedCwd.expectedResult === 'accepted'\n ? 'The model answer was rejected by the judge.'\n : 'The failing model answer was accepted by the judge.',\n ]);\n}\n\nfunction getInvokedScriptName(): string {\n const scriptPath = process.argv[1];\n return scriptPath ? path.basename(scriptPath) : 'judge.ts';\n}\n"],"names":["resolveCwds","_x","_x2","_resolveCwds","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","cwdArg","_ref","_modelAnswerDirs$","_yield$Promise$all","_yield$Promise$all2","modelAnswerDirs","failingModelAnswerDirs","scriptName","exampleAnswer","w","_context","n","a","cwds","cwd","expectedResult","isDebugMode","Promise","all","findModelAnswerDirs","findFailingModelAnswerDirs","v","_slicedToArray","length","Error","concat","path","join","MODEL_ANSWERS_DIRNAME","FAILING_MODEL_ANSWERS_DIRNAME","getInvokedScriptName","relative","printDebugBanner","_toConsumableArray","map","dir","printDebugCwdBanner","resolvedCwd","relativeCwd","printDebugExpectationFailureBanner","scriptPath","process","argv","basename"],"mappings":"sXAgCA,SAAsBA,EAAWC,EAAAC,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,CAyCjC,SAAAH,IAFC,OAEDA,EAAAI,EAAAC,IAAAC,EAzCO,SAAAC,EAA2BC,EAAoBC,GAA0B,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAZ,IAAAa,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,IAC1EX,EAAM,CAAAU,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAE,EAAA,EAAS,CAAEC,KAAM,CAAC,CAAEC,IAAKd,EAAQe,eAAgB,aAAeC,aAAa,IAAO,KAAA,EAAA,OAAAN,EAAAC,EAAA,EAEtCM,QAAQC,IAAI,CAClEC,EAAoBpB,GACpBqB,EAA2BrB,KAC3B,KAAA,EAH4C,GAG5CI,EAAAO,EAAAW,EAAAjB,EAAAkB,EAAAnB,EAAA,GAHKE,EAAeD,EAAA,GAAEE,EAAsBF,EAAA,GAIf,IAA3BC,EAAgBkB,QAAkD,IAAlCjB,EAAuBiB,OAAY,CAAAb,EAAAC,EAAA,EAAA,KAAA,CAAA,MAC/D,IAAIa,MAAK,+DAAAC,OACkDC,EAAKC,KAAK5B,EAAY6B,GAAsB,QAAAH,OAAOC,EAAKC,KAAK5B,EAAY8B,GAA8B,MACvK,KAAA,EAoBA,OAjBGtB,EAAauB,IACbtB,EACJkB,EAAKK,SAAShC,EAA2D,OAAjDE,EAAoB,OAApBC,EAAEG,EAAgB,IAAEH,EAAII,EAAuB,IAAEL,EAAI,KAAO,iBACtF+B,EAAgB,CACd,qEACA,GAAE,iBAAAP,OACe1B,GAAU,kBAAA0B,OACTpB,EAAgBkB,OAAM,OAAAE,OAAAQ,EACrC5B,EAAgB6B,IAAI,SAACC,GAAG,MAAA,OAAAV,OAAYC,EAAKK,SAAShC,EAAYoC,GAAI,IAAG,CAAA,0BAAAV,OAC9CnB,EAAuBiB,OAAM,OAAAU,EACpD3B,EAAuB4B,IAAI,SAACC,GAAG,MAAA,OAAAV,OAAYC,EAAKK,SAAShC,EAAYoC,GAAI,IAAG,CAC/E,GACA,kFAAiF,SAAAV,OACxElB,EAAU,wBACnB,eAAc,SAAAkB,OACLlB,EAAU,KAAAkB,OAAIjB,GAAa,SAAAiB,OAC3BlB,EAAU,KAAAkB,OAAIjB,EAAa,iCACnCE,EAAAE,EAAA,EAEI,CACLC,KAAI,GAAAY,OAAAQ,EACC5B,EAAgB6B,IAAI,SAACpB,GAAG,MAAM,CAAEA,IAAAA,EAAKC,eAAgB,WAAqB,IAAEkB,EAC5E3B,EAAuB4B,IAAI,SAACpB,GAAG,MAAM,CAAEA,IAAAA,EAAKC,eAAgB,WAAqB,KAEtFC,aAAa,IACd,EAAAlB,EAAA,KACFN,MAAAC,KAAAC,UAAA,CAMM,SAAS0C,EAAoBrC,EAAoBsC,GACtD,IAAMC,EAAcZ,EAAKK,SAAShC,EAAYsC,EAAYvB,MAAQuB,EAAYvB,IACxEP,EAAauB,IACnBE,EAAiB,CAAA,yBAAAP,OACUa,GAAW,oBAAAb,OAChBY,EAAYtB,gBAChC,GACA,iDAAgD,SAAAU,OACvClB,EAAU,KAAAkB,OAAIa,GACvB,uDAEJ,CAEO,SAASC,EAAmCxC,EAAoBsC,GACrE,IAAMC,EAAcZ,EAAKK,SAAShC,EAAYsC,EAAYvB,MAAQuB,EAAYvB,IAC9EkB,EAAiB,qCAAAP,OACqBa,GAAW,oBAAAb,OAC3BY,EAAYtB,gBACD,aAA/BsB,EAAYtB,eACR,8CACA,uDAER,CAEA,SAASe,IACP,IAAMU,EAAaC,QAAQC,KAAK,GAChC,OAAOF,EAAad,EAAKiB,SAASH,GAAc,UAClD"}
{"version":3,"file":"resolveCwds.js","names":[],"sources":["../../src/helpers/resolveCwds.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n FAILING_MODEL_ANSWERS_DIRNAME,\n MODEL_ANSWERS_DIRNAME,\n findFailingModelAnswerDirs,\n findModelAnswerDirs,\n} from './findModelAnswerDirs.js';\nimport { printDebugBanner } from './printDebugBanner.js';\n\nexport type ExpectedJudgeResult = 'accepted' | 'rejected';\n\nexport interface ResolvedCwd {\n cwd: string;\n expectedResult: ExpectedJudgeResult;\n}\n\nexport interface ResolvedCwds {\n cwds: readonly ResolvedCwd[];\n isDebugMode: boolean;\n}\n\n/**\n * Resolve which working directories to judge.\n *\n * - If `cwdArg` is provided, use it as the single cwd.\n * - Otherwise (debug mode), enumerate `<problemDir>/model_answers/*` and\n * `<problemDir>/model_answers.fails/*` and judge each.\n * A prominent banner is printed so users can tell at a glance that this is a debug run.\n *\n * @throws if `cwdArg` is missing and no model answer directories are found.\n */\nexport async function resolveCwds(problemDir: string, cwdArg: string | undefined): Promise<ResolvedCwds> {\n if (cwdArg) return { cwds: [{ cwd: cwdArg, expectedResult: 'accepted' }], isDebugMode: false };\n\n const [modelAnswerDirs, failingModelAnswerDirs] = await Promise.all([\n findModelAnswerDirs(problemDir),\n findFailingModelAnswerDirs(problemDir),\n ]);\n if (modelAnswerDirs.length === 0 && failingModelAnswerDirs.length === 0) {\n throw new Error(\n `cwd argument required (no model answer directories found in ${path.join(problemDir, MODEL_ANSWERS_DIRNAME)} or ${path.join(problemDir, FAILING_MODEL_ANSWERS_DIRNAME)})`\n );\n }\n\n const scriptName = getInvokedScriptName();\n const exampleAnswer =\n path.relative(problemDir, modelAnswerDirs[0] ?? failingModelAnswerDirs[0] ?? '') || '<model_answer>';\n printDebugBanner([\n '[DEBUG MODE] cwd not provided -- judging against all model answers',\n '',\n `Problem dir : ${problemDir}`,\n `Model answers (${modelAnswerDirs.length}):`,\n ...modelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n `Failing model answers (${failingModelAnswerDirs.length}):`,\n ...failingModelAnswerDirs.map((dir) => ` - ${path.relative(problemDir, dir)}`),\n '',\n 'To judge a single cwd (e.g., a user submission), pass it as the first argument:',\n ` bun ${scriptName} <cwd> [params-json]`,\n 'For example:',\n ` bun ${scriptName} ${exampleAnswer}`,\n ` bun ${scriptName} ${exampleAnswer} '{\"language\":\"python\"}'`,\n ]);\n\n return {\n cwds: [\n ...modelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'accepted' as const })),\n ...failingModelAnswerDirs.map((cwd) => ({ cwd, expectedResult: 'rejected' as const })),\n ],\n isDebugMode: true,\n };\n}\n\n/**\n * Print a per-cwd banner shown before judging each model answer in debug mode.\n * Includes the command for re-running this single cwd.\n */\nexport function printDebugCwdBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n const scriptName = getInvokedScriptName();\n printDebugBanner([\n `[DEBUG MODE] judging: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n '',\n 'To judge only this cwd as a normal submission:',\n ` bun ${scriptName} ${relativeCwd}`,\n 'Run without a cwd to check debug-mode expectations.',\n ]);\n}\n\nexport function printDebugExpectationFailureBanner(problemDir: string, resolvedCwd: ResolvedCwd): void {\n const relativeCwd = path.relative(problemDir, resolvedCwd.cwd) || resolvedCwd.cwd;\n printDebugBanner([\n `[DEBUG MODE] expectation failed: ${relativeCwd}`,\n `Expected result: ${resolvedCwd.expectedResult}`,\n resolvedCwd.expectedResult === 'accepted'\n ? 'The model answer was rejected by the judge.'\n : 'The failing model answer was accepted by the judge.',\n ]);\n}\n\nfunction getInvokedScriptName(): string {\n const scriptPath = process.argv[1];\n return scriptPath ? path.basename(scriptPath) : 'judge.ts';\n}\n"],"mappings":"+OAgCA,eAAsB,EAAY,EAAoB,EAAmD,CACvG,GAAI,EAAQ,MAAO,CAAE,KAAM,CAAC,CAAE,IAAK,EAAQ,eAAgB,UAAW,CAAC,EAAG,YAAa,EAAM,EAE7F,GAAM,CAAC,EAAiB,GAA0B,MAAM,QAAQ,IAAI,CAClE,EAAoB,CAAU,EAC9B,EAA2B,CAAU,CACvC,CAAC,EACD,GAAI,EAAgB,SAAW,GAAK,EAAuB,SAAW,EACpE,MAAU,MACR,+DAA+D,EAAK,KAAK,EAAY,CAAqB,EAAE,MAAM,EAAK,KAAK,EAAY,CAA6B,EAAE,EACzK,EAGF,IAAM,EAAa,EAAqB,EAClC,EACJ,EAAK,SAAS,EAAY,EAAgB,IAAM,EAAuB,IAAM,EAAE,GAAK,iBAiBtF,OAhBA,EAAiB,CACf,qEACA,GACA,iBAAiB,IACjB,kBAAkB,EAAgB,OAAO,IACzC,GAAG,EAAgB,IAAK,GAAQ,OAAO,EAAK,SAAS,EAAY,CAAG,GAAG,EACvE,0BAA0B,EAAuB,OAAO,IACxD,GAAG,EAAuB,IAAK,GAAQ,OAAO,EAAK,SAAS,EAAY,CAAG,GAAG,EAC9E,GACA,kFACA,SAAS,EAAW,sBACpB,eACA,SAAS,EAAW,GAAG,IACvB,SAAS,EAAW,GAAG,EAAc,yBACvC,CAAC,EAEM,CACL,KAAM,CACJ,GAAG,EAAgB,IAAK,IAAS,CAAE,MAAK,eAAgB,UAAoB,EAAE,EAC9E,GAAG,EAAuB,IAAK,IAAS,CAAE,MAAK,eAAgB,UAAoB,EAAE,CACvF,EACA,YAAa,EACf,CACF,CAMA,SAAgB,EAAoB,EAAoB,EAAgC,CACtF,IAAM,EAAc,EAAK,SAAS,EAAY,EAAY,GAAG,GAAK,EAAY,IACxE,EAAa,EAAqB,EACxC,EAAiB,CACf,yBAAyB,IACzB,oBAAoB,EAAY,iBAChC,GACA,iDACA,SAAS,EAAW,GAAG,IACvB,qDACF,CAAC,CACH,CAEA,SAAgB,EAAmC,EAAoB,EAAgC,CAErG,EAAiB,CACf,oCAFkB,EAAK,SAAS,EAAY,EAAY,GAAG,GAAK,EAAY,MAG5E,oBAAoB,EAAY,iBAChC,EAAY,iBAAmB,WAC3B,8CACA,qDACN,CAAC,CACH,CAEA,SAAS,GAA+B,CACtC,IAAM,EAAa,QAAQ,KAAK,GAChC,OAAO,EAAa,EAAK,SAAS,CAAU,EAAI,UAClD"}

@@ -1,2 +0,2 @@

"use strict";var e,n,r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),t=require("node:child_process"),a=require("node:fs/promises"),o=require("node:os"),i=require("node:path"),c={bun:["package.json","bun.lock","bun.lockb"],cargo:["Cargo.toml","Cargo.lock"],go:["go.mod","go.sum"],gradle:["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","gradle.lockfile","buildscript-gradle.lockfile","gradle","gradlew","gradlew.bat"],maven:["pom.xml",".mvn","mvnw","mvnw.cmd"],npm:["package.json","package-lock.json"],pnpm:["package.json","pnpm-lock.yaml","pnpm-workspace.yaml"],ruby:["Gemfile","Gemfile.lock",".ruby-version"],uv:["pyproject.toml","uv.lock"],yarn:["package.json","yarn.lock",".yarnrc",".yarnrc.yml",".yarn"]},s={bun:function(e){return m.apply(this,arguments)},cargo:function(e){return y.apply(this,arguments)},go:function(e){return g.apply(this,arguments)},gradle:function(e){return v.apply(this,arguments)},maven:function(e){return k.apply(this,arguments)},npm:function(e){return b.apply(this,arguments)},pnpm:function(e){return h.apply(this,arguments)},ruby:function(e){return w.apply(this,arguments)},uv:function(){return j.apply(this,arguments)},yarn:function(e){return S.apply(this,arguments)}},u=(e="darwin"===o.platform()?"gtime":"/usr/bin/time",(n=t.spawnSync(e,["--version"],{stdio:"ignore"})).error||0!==n.status?void 0:[e,"--format","%e %M"]);function l(){return l=r.asyncToGenerator(r.regenerator().m(function e(n){var t,c,s,u,l,m,y,g,v,k,b,h,w,j,S,T,L,G,B,E,x;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,a.mkdtemp(i.join(o.tmpdir(),null!=(t=n.tempDirPrefix)?t:"exercode-"));case 1:return c=e.v,e.p=2,e.n=3,a.cp(n.cwd,c,{recursive:!0});case 3:return e.n=4,P({packageManager:n.packageManager,projectDir:n.projectDir,runDir:c,projectFilePaths:n.projectFilePaths});case 4:return l=n.env?r.objectSpread2(r.objectSpread2({},process.env),n.env):process.env,e.n=5,d(n.packageManager,c);case 5:if(m=e.v,y="function"==typeof n.command?n.command({runDir:c}):n.command,g=Date.now(),v=null!=(s=n.outputLimitBytes)?s:52428800,!m){e.n=7;break}return e.n=6,q(m,{cwd:c,env:l,outputLimitBytes:v,stdin:"",timeLimitSeconds:n.timeLimitSeconds});case 6:if(!f(k=e.v)){e.n=7;break}return e.a(2,p({elapsedTimeSeconds:(Date.now()-g)/1e3,options:n,result:k}));case 7:if(!((b=n.timeLimitSeconds-(Date.now()-g)/1e3)<=0)){e.n=8;break}return e.a(2,{stdin:null!=(h=n.stdin)?h:"",stdout:null!=(w=null==(j=k)?void 0:j.stdout)?w:"",stderr:null!=(S=null==(T=k)?void 0:T.stderr)?S:"",status:0,timeSeconds:n.timeLimitSeconds+.001,memoryBytes:null!=(L=null==(G=k)?void 0:G.memoryBytes)?L:0,timedOut:!0,signal:null==(B=k)?void 0:B.signal,outputLimitExceeded:!1});case 8:return e.n=9,q(y,{cwd:c,env:l,outputLimitBytes:v,stdin:null!=(u=n.stdin)?u:"",timeLimitSeconds:b});case 9:if(E=e.v,x=(Date.now()-g)/1e3,!k){e.n=10;break}return e.a(2,p({elapsedTimeSeconds:x,options:n,result:r.objectSpread2(r.objectSpread2({},E),{},{timeSeconds:k.timeSeconds+E.timeSeconds,memoryBytes:Math.max(k.memoryBytes,E.memoryBytes)})}));case 10:return e.a(2,p({elapsedTimeSeconds:x,options:n,result:E}));case 11:return e.p=11,e.n=12,a.rm(c,{force:!0,recursive:!0});case 12:return e.f(11);case 13:return e.a(2)}},e,null,[[2,,11,13]])})),l.apply(this,arguments)}function p(e){var n;return{stdin:null!=(n=e.options.stdin)?n:"",stdout:e.result.stdout,stderr:e.result.stderr,status:e.result.timedOut||e.result.outputLimitExceeded?0:e.result.status,timeSeconds:e.result.timedOut?e.options.timeLimitSeconds+.001:e.result.timeSeconds||e.elapsedTimeSeconds,memoryBytes:e.result.memoryBytes,timedOut:e.result.timedOut,signal:e.result.signal,outputLimitExceeded:e.result.outputLimitExceeded}}function d(e,n){return s[e](n)}function f(e){return 0!==e.status||e.timedOut||e.outputLimitExceeded}function m(){return(m=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"package.json"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,G(n,["bun.lock","bun.lockb"]);case 3:if(!e.v){e.n=4;break}t=["bun","install","--frozen-lockfile","--silent"],e.n=5;break;case 4:t=["bun","install","--silent"];case 5:return e.a(2,t)}},e)}))).apply(this,arguments)}function y(){return(y=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"Cargo.toml"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,E(i.join(n,"Cargo.lock"));case 3:if(!e.v){e.n=4;break}t=["cargo","fetch","--locked"],e.n=5;break;case 4:t=["cargo","fetch"];case 5:return e.a(2,t)}},e)}))).apply(this,arguments)}function g(){return(g=r.asyncToGenerator(r.regenerator().m(function e(n){return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"go.mod"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.a(2,["go","mod","download"])}},e)}))).apply(this,arguments)}function v(){return(v=r.asyncToGenerator(r.regenerator().m(function e(n){var t,a,o;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,G(n,["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradlew","gradlew.bat"]);case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:if(t=["--no-daemon","--quiet","dependencies"],"win32"!==process.platform){e.n=6;break}return e.n=3,E(i.join(n,"gradlew.bat"));case 3:if(!e.v){e.n=4;break}a=["cmd.exe","/c","gradlew.bat"].concat(t),e.n=5;break;case 4:a=["gradle"].concat(t);case 5:return e.a(2,a);case 6:return e.n=7,E(i.join(n,"gradlew"));case 7:if(!e.v){e.n=8;break}o=["sh","./gradlew"].concat(t),e.n=9;break;case 8:o=["gradle"].concat(t);case 9:return e.a(2,o)}},e)}))).apply(this,arguments)}function k(){return(k=r.asyncToGenerator(r.regenerator().m(function e(n){var t,a,o;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"pom.xml"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:if(t=["-q","dependency:go-offline"],"win32"!==process.platform){e.n=6;break}return e.n=3,E(i.join(n,"mvnw.cmd"));case 3:if(!e.v){e.n=4;break}a=["cmd.exe","/c","mvnw.cmd"].concat(t),e.n=5;break;case 4:a=["mvn"].concat(t);case 5:return e.a(2,a);case 6:return e.n=7,E(i.join(n,"mvnw"));case 7:if(!e.v){e.n=8;break}o=["sh","./mvnw"].concat(t),e.n=9;break;case 8:o=["mvn"].concat(t);case 9:return e.a(2,o)}},e)}))).apply(this,arguments)}function b(){return(b=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"package.json"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,E(i.join(n,"package-lock.json"));case 3:if(!e.v){e.n=4;break}t=["npm","ci","--silent"],e.n=5;break;case 4:t=["npm","install","--silent"];case 5:return e.a(2,t)}},e)}))).apply(this,arguments)}function h(){return(h=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"package.json"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,E(i.join(n,"pnpm-lock.yaml"));case 3:if(!e.v){e.n=4;break}t=["pnpm","install","--frozen-lockfile","--silent"],e.n=5;break;case 4:t=["pnpm","install","--silent"];case 5:return e.a(2,t)}},e)}))).apply(this,arguments)}function w(){return(w=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"Gemfile"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,E(i.join(n,"Gemfile.lock"));case 3:if(!e.v){e.n=4;break}t=["bundle","install","--frozen","--quiet"],e.n=5;break;case 4:t=["bundle","install","--quiet"];case 5:return e.a(2,t)}},e)}))).apply(this,arguments)}function j(){return(j=r.asyncToGenerator(r.regenerator().m(function e(){return r.regenerator().w(function(e){for(;;)if(0===e.n)return e.a(2,void 0)},e)}))).apply(this,arguments)}function S(){return(S=r.asyncToGenerator(r.regenerator().m(function e(n){var t,a;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,"package.json"));case 1:if(e.v){e.n=2;break}return e.a(2,void 0);case 2:return e.n=3,T(n);case 3:return t=e.v,e.n=4,E(i.join(n,"yarn.lock"));case 4:if(a=e.v,!t){e.n=5;break}return e.a(2,a?["yarn","install","--immutable"]:["yarn","install"]);case 5:return e.a(2,a?["yarn","install","--frozen-lockfile","--silent"]:["yarn","install","--silent"])}},e)}))).apply(this,arguments)}function T(e){return L.apply(this,arguments)}function L(){return(L=r.asyncToGenerator(r.regenerator().m(function e(n){var t,a,o,c;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,E(i.join(n,".yarnrc.yml"));case 1:if(!e.v){e.n=2;break}return e.a(2,!0);case 2:return e.n=3,O(i.join(n,"package.json"));case 3:return a=e.v,o="string"==typeof a.packageManager?a.packageManager:void 0,c=null==(t=/^yarn@(\d+)/.exec(null!=o?o:""))?void 0:t[1],e.a(2,void 0!==c&&Number(c)>=2)}},e)}))).apply(this,arguments)}function G(e,n){return B.apply(this,arguments)}function B(){return(B=r.asyncToGenerator(r.regenerator().m(function e(n,t){var a,o,c,s;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:a=r.createForOfIteratorHelper(t),e.p=1,a.s();case 2:if((o=a.n()).done){e.n=5;break}return c=o.value,e.n=3,E(i.join(n,c));case 3:if(!e.v){e.n=4;break}return e.a(2,!0);case 4:e.n=2;break;case 5:e.n=7;break;case 6:e.p=6,s=e.v,a.e(s);case 7:return e.p=7,a.f(),e.f(7);case 8:return e.a(2,!1)}},e,null,[[1,6,7,8]])}))).apply(this,arguments)}function E(e){return x.apply(this,arguments)}function x(){return(x=r.asyncToGenerator(r.regenerator().m(function e(n){var t;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,a.access(n);case 1:return e.a(2,!0);case 2:if(e.p=2,t=e.v,"ENOENT"===("object"===r.typeof(t)&&null!==t&&"code"in t?t.code:void 0)){e.n=3;break}throw t;case 3:return e.a(2,!1)}},e,null,[[0,2]])}))).apply(this,arguments)}function O(e){return I.apply(this,arguments)}function I(){return(I=r.asyncToGenerator(r.regenerator().m(function e(n){var t,o,i;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,o=JSON,e.n=1,a.readFile(n,"utf8");case 1:return t=o.parse.call(o,e.v),e.a(2,"object"!==r.typeof(t)||null===t||Array.isArray(t)?{}:t);case 2:if(e.p=2,!((i=e.v)instanceof SyntaxError)){e.n=3;break}return e.a(2,{});case 3:if("ENOENT"!==("object"===r.typeof(i)&&null!==i&&"code"in i?i.code:void 0)){e.n=4;break}return e.a(2,{});case 4:throw i;case 5:return e.a(2)}},e,null,[[0,2]])}))).apply(this,arguments)}function P(e){return M.apply(this,arguments)}function M(){return(M=r.asyncToGenerator(r.regenerator().m(function e(n){var t,a,o,s,u;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:a=r.createForOfIteratorHelper(null!=(t=n.projectFilePaths)?t:c[n.packageManager]),e.p=1,a.s();case 2:if((o=a.n()).done){e.n=4;break}return s=o.value,e.n=3,N(i.join(n.projectDir,s),i.join(n.runDir,s));case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,u=e.v,a.e(u);case 6:return e.p=6,a.f(),e.f(6);case 7:return e.a(2)}},e,null,[[1,5,6,7]])}))).apply(this,arguments)}function N(e,n){return D.apply(this,arguments)}function D(){return(D=r.asyncToGenerator(r.regenerator().m(function e(n,t){var o;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,a.cp(n,t,{recursive:!0});case 1:e.n=3;break;case 2:if(e.p=2,o=e.v,"ENOENT"===("object"===r.typeof(o)&&null!==o&&"code"in o?o.code:void 0)){e.n=3;break}throw o;case 3:return e.a(2)}},e,null,[[0,2]])}))).apply(this,arguments)}function q(e,n){return C.apply(this,arguments)}function C(){return C=r.asyncToGenerator(r.regenerator().m(function e(n,a){var o,c,s,l,p,d,f,m,y,g,v,k,b,h,w,j,S,T;return r.regenerator().w(function(e){for(;;)switch(e.n){case 0:return o=void 0===u?void 0:i.join(a.cwd,".exercode-time-result"),c=void 0===u?n:[].concat(r.toConsumableArray(u),["--output=".concat(o)],r.toConsumableArray(n)),s=t.spawn(c[0],c.slice(1),{cwd:a.cwd,detached:"win32"!==process.platform,env:a.env,stdio:["pipe","pipe","pipe"]}),l=[],p=[],d=0,f=!1,m=!1,y=function(e,n){if(d>=a.outputLimitBytes)n.byteLength>0&&(m=!0,F(s,"SIGKILL"));else{var r=a.outputLimitBytes-d,t=n.byteLength>r?n.subarray(0,r):n;e.push(t),d+=t.byteLength,n.byteLength>r&&(m=!0,F(s,"SIGKILL"))}},s.stdout.on("data",function(e){return y(l,e)}),s.stderr.on("data",function(e){return y(p,e)}),g=setTimeout(function(){f=!0,F(s,"SIGTERM")},1e3*a.timeLimitSeconds),(v=setTimeout(function(){f&&F(s,"SIGKILL")},1e3*a.timeLimitSeconds+1e3)).unref(),e.n=1,new Promise(function(e,n){var r,t=!1,o=function(e){t||(r=e,F(s,"SIGKILL"),void 0===s.pid&&(t=!0,n(e)))};s.on("error",o),s.stdin.on("error",function(e){"EPIPE"!==e.code&&o(e)}),s.on("close",function(a,o){t||(t=!0,r?n(r):e({status:null!=a?a:void 0,signal:null!=o?o:void 0}))}),s.stdin.end(a.stdin)}).finally(function(){clearTimeout(g),clearTimeout(v)});case 1:if(k=e.v,b=k.status,h=k.signal,void 0!==o){e.n=2;break}T={timeSeconds:0,memoryBytes:0},e.n=4;break;case 2:return e.n=3,z(o);case 3:T=e.v;case 4:return j=(w=T).timeSeconds,S=w.memoryBytes,e.a(2,{stdout:Buffer.concat(l).toString(),stderr:Buffer.concat(p).toString(),status:b,timeSeconds:j,memoryBytes:S,timedOut:f,signal:h,outputLimitExceeded:m})}},e)})),C.apply(this,arguments)}function F(e,n){if(void 0!==e.pid)try{if("win32"===process.platform)return void e.kill(n);process.kill(-e.pid,n)}catch(e){var t="object"===r.typeof(e)&&null!==e&&"code"in e?e.code:void 0;if("ESRCH"!==t&&"EPERM"!==t)throw e}}function z(e){return A.apply(this,arguments)}function A(){return(A=r.asyncToGenerator(r.regenerator().m(function e(n){var t,o,i;return r.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,a.readFile(n,"utf8");case 1:t=e.v,e.n=4;break;case 2:if(e.p=2,i=e.v,"ENOENT"===("object"===r.typeof(i)&&null!==i&&"code"in i?i.code:void 0)){e.n=3;break}throw i;case 3:return e.a(2,{timeSeconds:0,memoryBytes:0});case 4:if(o=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(t)){e.n=5;break}return e.a(2,{timeSeconds:0,memoryBytes:0});case 5:return e.a(2,{timeSeconds:Number(o[1].replace(",",".")),memoryBytes:1024*Number(o[2])})}},e,null,[[0,2]])}))).apply(this,arguments)}exports.copyPackageManagerProjectFiles=P,exports.runCommandInTemporaryPackageManagerProject=function(e){return l.apply(this,arguments)};
//# sourceMappingURL=runCommandInTemporaryPackageManagerProject.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:child_process");t=e.__toESM(t,1);let n=require("node:fs/promises");n=e.__toESM(n,1);let r=require("node:os");r=e.__toESM(r,1);let i=require("node:path");i=e.__toESM(i,1);const a={bun:[`package.json`,`bun.lock`,`bun.lockb`],cargo:[`Cargo.toml`,`Cargo.lock`],go:[`go.mod`,`go.sum`],gradle:[`build.gradle`,`build.gradle.kts`,`settings.gradle`,`settings.gradle.kts`,`gradle.properties`,`gradle.lockfile`,`buildscript-gradle.lockfile`,`gradle`,`gradlew`,`gradlew.bat`],maven:[`pom.xml`,`.mvn`,`mvnw`,`mvnw.cmd`],npm:[`package.json`,`package-lock.json`],pnpm:[`package.json`,`pnpm-lock.yaml`,`pnpm-workspace.yaml`],ruby:[`Gemfile`,`Gemfile.lock`,`.ruby-version`],uv:[`pyproject.toml`,`uv.lock`],yarn:[`package.json`,`yarn.lock`,`.yarnrc`,`.yarnrc.yml`,`.yarn`]},o={bun:f,cargo:p,go:m,gradle:h,maven:g,npm:_,pnpm:v,ruby:y,uv:b,yarn:x},s=k();async function c(e){let t=await n.default.mkdtemp(i.default.join(r.default.tmpdir(),e.tempDirPrefix??`exercode-`));try{await n.default.cp(e.cwd,t,{recursive:!0}),await E({packageManager:e.packageManager,projectDir:e.projectDir,runDir:t,projectFilePaths:e.projectFilePaths});let r=e.env?{...process.env,...e.env}:process.env,i=await u(e.packageManager,t),a=typeof e.command==`function`?e.command({runDir:t}):e.command,o=Date.now(),s=e.outputLimitBytes??52428800,c;if(i&&(c=await O(i,{cwd:t,env:r,outputLimitBytes:s,stdin:``,timeLimitSeconds:e.timeLimitSeconds}),d(c)))return l({elapsedTimeSeconds:(Date.now()-o)/1e3,options:e,result:c});let f=e.timeLimitSeconds-(Date.now()-o)/1e3;if(f<=0)return{stdin:e.stdin??``,stdout:c?.stdout??``,stderr:c?.stderr??``,status:0,timeSeconds:e.timeLimitSeconds+.001,memoryBytes:c?.memoryBytes??0,timedOut:!0,signal:c?.signal,outputLimitExceeded:!1};let p=await O(a,{cwd:t,env:r,outputLimitBytes:s,stdin:e.stdin??``,timeLimitSeconds:f}),m=(Date.now()-o)/1e3;return l(c?{elapsedTimeSeconds:m,options:e,result:{...p,timeSeconds:c.timeSeconds+p.timeSeconds,memoryBytes:Math.max(c.memoryBytes,p.memoryBytes)}}:{elapsedTimeSeconds:m,options:e,result:p})}finally{await n.default.rm(t,{force:!0,recursive:!0})}}function l(e){return{stdin:e.options.stdin??``,stdout:e.result.stdout,stderr:e.result.stderr,status:e.result.timedOut||e.result.outputLimitExceeded?0:e.result.status,timeSeconds:e.result.timedOut?e.options.timeLimitSeconds+.001:e.result.timeSeconds||e.elapsedTimeSeconds,memoryBytes:e.result.memoryBytes,timedOut:e.result.timedOut,signal:e.result.signal,outputLimitExceeded:e.result.outputLimitExceeded}}function u(e,t){return o[e](t)}function d(e){return e.status!==0||e.timedOut||e.outputLimitExceeded}async function f(e){if(await w(i.default.join(e,`package.json`)))return await C(e,[`bun.lock`,`bun.lockb`])?[`bun`,`install`,`--frozen-lockfile`,`--silent`]:[`bun`,`install`,`--silent`]}async function p(e){if(await w(i.default.join(e,`Cargo.toml`)))return await w(i.default.join(e,`Cargo.lock`))?[`cargo`,`fetch`,`--locked`]:[`cargo`,`fetch`]}async function m(e){if(await w(i.default.join(e,`go.mod`)))return[`go`,`mod`,`download`]}async function h(e){if(!await C(e,[`build.gradle`,`build.gradle.kts`,`settings.gradle`,`settings.gradle.kts`,`gradlew`,`gradlew.bat`]))return;let t=[`--no-daemon`,`--quiet`,`dependencies`];return process.platform===`win32`?await w(i.default.join(e,`gradlew.bat`))?[`cmd.exe`,`/c`,`gradlew.bat`,...t]:[`gradle`,...t]:await w(i.default.join(e,`gradlew`))?[`sh`,`./gradlew`,...t]:[`gradle`,...t]}async function g(e){if(!await w(i.default.join(e,`pom.xml`)))return;let t=[`-q`,`dependency:go-offline`];return process.platform===`win32`?await w(i.default.join(e,`mvnw.cmd`))?[`cmd.exe`,`/c`,`mvnw.cmd`,...t]:[`mvn`,...t]:await w(i.default.join(e,`mvnw`))?[`sh`,`./mvnw`,...t]:[`mvn`,...t]}async function _(e){if(await w(i.default.join(e,`package.json`)))return await w(i.default.join(e,`package-lock.json`))?[`npm`,`ci`,`--silent`]:[`npm`,`install`,`--silent`]}async function v(e){if(await w(i.default.join(e,`package.json`)))return await w(i.default.join(e,`pnpm-lock.yaml`))?[`pnpm`,`install`,`--frozen-lockfile`,`--silent`]:[`pnpm`,`install`,`--silent`]}async function y(e){if(await w(i.default.join(e,`Gemfile`)))return await w(i.default.join(e,`Gemfile.lock`))?[`bundle`,`install`,`--frozen`,`--quiet`]:[`bundle`,`install`,`--quiet`]}async function b(){}async function x(e){if(!await w(i.default.join(e,`package.json`)))return;let t=await S(e),n=await w(i.default.join(e,`yarn.lock`));return t?n?[`yarn`,`install`,`--immutable`]:[`yarn`,`install`]:n?[`yarn`,`install`,`--frozen-lockfile`,`--silent`]:[`yarn`,`install`,`--silent`]}async function S(e){if(await w(i.default.join(e,`.yarnrc.yml`)))return!0;let t=await T(i.default.join(e,`package.json`)),n=typeof t.packageManager==`string`?t.packageManager:void 0,r=/^yarn@(\d+)/.exec(n??``)?.[1];return r!==void 0&&Number(r)>=2}async function C(e,t){for(let n of t)if(await w(i.default.join(e,n)))return!0;return!1}async function w(e){try{return await n.default.access(e),!0}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e;return!1}}async function T(e){try{let t=JSON.parse(await n.default.readFile(e,`utf8`));return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch(e){if(e instanceof SyntaxError||(typeof e==`object`&&e&&`code`in e?e.code:void 0)===`ENOENT`)return{};throw e}}async function E(e){for(let t of e.projectFilePaths??a[e.packageManager])await D(i.default.join(e.projectDir,t),i.default.join(e.runDir,t))}async function D(e,t){try{await n.default.cp(e,t,{recursive:!0})}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e}}async function O(e,n){let r=s===void 0?void 0:i.default.join(n.cwd,`.exercode-time-result`),a=s===void 0?e:[...s,`--output=${r}`,...e],o=t.default.spawn(a[0],a.slice(1),{cwd:n.cwd,detached:process.platform!==`win32`,env:n.env,stdio:[`pipe`,`pipe`,`pipe`]}),c=[],l=[],u=0,d=!1,f=!1,p=(e,t)=>{if(u>=n.outputLimitBytes){t.byteLength>0&&(f=!0,A(o,`SIGKILL`));return}let r=n.outputLimitBytes-u,i=t.byteLength>r?t.subarray(0,r):t;e.push(i),u+=i.byteLength,t.byteLength>r&&(f=!0,A(o,`SIGKILL`))};o.stdout.on(`data`,e=>p(c,e)),o.stderr.on(`data`,e=>p(l,e));let m=setTimeout(()=>{d=!0,A(o,`SIGTERM`)},n.timeLimitSeconds*1e3),h=setTimeout(()=>{d&&A(o,`SIGKILL`)},n.timeLimitSeconds*1e3+1e3);h.unref();let{status:g,signal:_}=await new Promise((e,t)=>{let r=!1,i,a=e=>{r||(i=e,A(o,`SIGKILL`),o.pid===void 0&&(r=!0,t(e)))};o.on(`error`,a),o.stdin.on(`error`,e=>{e.code!==`EPIPE`&&a(e)}),o.on(`close`,(n,a)=>{if(!r){if(r=!0,i){t(i);return}e({status:n??void 0,signal:a??void 0})}}),o.stdin.end(n.stdin)}).finally(()=>{clearTimeout(m),clearTimeout(h)}),{timeSeconds:v,memoryBytes:y}=r===void 0?{timeSeconds:0,memoryBytes:0}:await j(r);return{stdout:Buffer.concat(c).toString(),stderr:Buffer.concat(l).toString(),status:g,timeSeconds:v,memoryBytes:y,timedOut:d,signal:_,outputLimitExceeded:f}}function k(){let e=r.default.platform()===`darwin`?`gtime`:`/usr/bin/time`,n=t.default.spawnSync(e,[`--version`],{stdio:`ignore`});if(!(n.error||n.status!==0))return[e,`--format`,`%e %M`]}function A(e,t){if(e.pid!==void 0)try{if(process.platform===`win32`){e.kill(t);return}process.kill(-e.pid,t)}catch(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;if(t!==`ESRCH`&&t!==`EPERM`)throw e}}async function j(e){let t;try{t=await n.default.readFile(e,`utf8`)}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e;return{timeSeconds:0,memoryBytes:0}}let r=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(t);return r?{timeSeconds:Number(r[1].replace(`,`,`.`)),memoryBytes:Number(r[2])*1024}:{timeSeconds:0,memoryBytes:0}}exports.copyPackageManagerProjectFiles=E,exports.runCommandInTemporaryPackageManagerProject=c;
//# sourceMappingURL=runCommandInTemporaryPackageManagerProject.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"runCommandInTemporaryPackageManagerProject.cjs","sources":["../../src/helpers/runCommandInTemporaryPackageManagerProject.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport type PackageManager = 'bun' | 'cargo' | 'go' | 'gradle' | 'maven' | 'npm' | 'pnpm' | 'ruby' | 'uv' | 'yarn';\ntype PackageManagerInstallCommand = readonly [string, ...string[]];\n\nexport interface PackageManagerCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}\n\nexport interface RunCommandInTemporaryPackageManagerProjectOptions {\n cwd: string;\n projectDir: string;\n packageManager: PackageManager;\n command: readonly [string, ...string[]] | ((context: { runDir: string }) => readonly [string, ...string[]]);\n stdin?: string;\n env?: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n outputLimitBytes?: number;\n tempDirPrefix?: string;\n projectFilePaths?: readonly string[];\n}\n\nconst packageManagerProjectFilePaths = {\n bun: ['package.json', 'bun.lock', 'bun.lockb'],\n cargo: ['Cargo.toml', 'Cargo.lock'],\n go: ['go.mod', 'go.sum'],\n gradle: [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradle.properties',\n 'gradle.lockfile',\n 'buildscript-gradle.lockfile',\n 'gradle',\n 'gradlew',\n 'gradlew.bat',\n ],\n maven: ['pom.xml', '.mvn', 'mvnw', 'mvnw.cmd'],\n npm: ['package.json', 'package-lock.json'],\n pnpm: ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'],\n ruby: ['Gemfile', 'Gemfile.lock', '.ruby-version'],\n uv: ['pyproject.toml', 'uv.lock'],\n yarn: ['package.json', 'yarn.lock', '.yarnrc', '.yarnrc.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommandResolvers = {\n bun: resolveBunInstallCommand,\n cargo: resolveCargoInstallCommand,\n go: resolveGoInstallCommand,\n gradle: resolveGradleInstallCommand,\n maven: resolveMavenInstallCommand,\n npm: resolveNpmInstallCommand,\n pnpm: resolvePnpmInstallCommand,\n ruby: resolveRubyInstallCommand,\n uv: resolveUvInstallCommand,\n yarn: resolveYarnInstallCommand,\n} as const satisfies Record<PackageManager, (runDir: string) => Promise<PackageManagerInstallCommand | undefined>>;\n\nconst defaultOutputLimitBytes = 50 * 1024 * 1024;\nconst killGracePeriodMilliseconds = 1000;\nconst timeCommand = resolveTimeCommand();\n\n/**\n * Copies a submission directory to a temporary directory, overlays package\n * manager project files from the problem directory, prepares dependencies,\n * runs a command, and then removes the temporary directory.\n */\nexport async function runCommandInTemporaryPackageManagerProject(\n options: RunCommandInTemporaryPackageManagerProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const runDir = await fs.mkdtemp(path.join(os.tmpdir(), options.tempDirPrefix ?? 'exercode-'));\n try {\n await fs.cp(options.cwd, runDir, { recursive: true });\n await copyPackageManagerProjectFiles({\n packageManager: options.packageManager,\n projectDir: options.projectDir,\n runDir,\n projectFilePaths: options.projectFilePaths,\n });\n\n const env = options.env ? { ...process.env, ...options.env } : process.env;\n const installCommand = await resolveInstallCommand(options.packageManager, runDir);\n const command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const outputLimitBytes = options.outputLimitBytes ?? defaultOutputLimitBytes;\n let installResult: Awaited<ReturnType<typeof spawnWithInput>> | undefined;\n\n if (installCommand) {\n installResult = await spawnWithInput(installCommand, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n if (isFailedSpawnResult(installResult)) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds: (Date.now() - startedAt) / 1000,\n options,\n result: installResult,\n });\n }\n }\n\n const remainingTimeLimitSeconds = options.timeLimitSeconds - (Date.now() - startedAt) / 1000;\n if (remainingTimeLimitSeconds <= 0) {\n return {\n stdin: options.stdin ?? '',\n stdout: installResult?.stdout ?? '',\n stderr: installResult?.stderr ?? '',\n status: 0,\n timeSeconds: options.timeLimitSeconds + 1e-3,\n memoryBytes: installResult?.memoryBytes ?? 0,\n timedOut: true,\n signal: installResult?.signal,\n outputLimitExceeded: false,\n };\n }\n\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: remainingTimeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n if (installResult) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds,\n options,\n result: {\n ...result,\n timeSeconds: installResult.timeSeconds + result.timeSeconds,\n memoryBytes: Math.max(installResult.memoryBytes, result.memoryBytes),\n },\n });\n }\n\n return toPackageManagerCommandRunResult({ elapsedTimeSeconds, options, result });\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\n }\n}\n\nfunction toPackageManagerCommandRunResult(context: {\n elapsedTimeSeconds: number;\n options: RunCommandInTemporaryPackageManagerProjectOptions;\n result: Awaited<ReturnType<typeof spawnWithInput>>;\n}): PackageManagerCommandRunResult {\n return {\n stdin: context.options.stdin ?? '',\n stdout: context.result.stdout,\n stderr: context.result.stderr,\n status: context.result.timedOut || context.result.outputLimitExceeded ? 0 : context.result.status,\n timeSeconds: context.result.timedOut\n ? context.options.timeLimitSeconds + 1e-3\n : context.result.timeSeconds || context.elapsedTimeSeconds,\n memoryBytes: context.result.memoryBytes,\n timedOut: context.result.timedOut,\n signal: context.result.signal,\n outputLimitExceeded: context.result.outputLimitExceeded,\n };\n}\n\nfunction resolveInstallCommand(\n packageManager: PackageManager,\n runDir: string\n): Promise<PackageManagerInstallCommand | undefined> {\n return packageManagerInstallCommandResolvers[packageManager](runDir);\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\n}\n\nasync function resolveBunInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n // Bun supports --silent and it keeps successful preparation output out of judge output buffers.\n return (await hasAnyPath(runDir, ['bun.lock', 'bun.lockb']))\n ? ['bun', 'install', '--frozen-lockfile', '--silent']\n : ['bun', 'install', '--silent'];\n}\n\nasync function resolveCargoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Cargo.toml')))) return undefined;\n return (await pathExists(path.join(runDir, 'Cargo.lock'))) ? ['cargo', 'fetch', '--locked'] : ['cargo', 'fetch'];\n}\n\nasync function resolveGoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'go.mod')))) return undefined;\n return ['go', 'mod', 'download'];\n}\n\nasync function resolveGradleInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (\n !(await hasAnyPath(runDir, [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradlew',\n 'gradlew.bat',\n ]))\n )\n return undefined;\n const args = ['--no-daemon', '--quiet', 'dependencies'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'gradlew.bat')))\n ? ['cmd.exe', '/c', 'gradlew.bat', ...args]\n : ['gradle', ...args];\n }\n return (await pathExists(path.join(runDir, 'gradlew'))) ? ['sh', './gradlew', ...args] : ['gradle', ...args];\n}\n\nasync function resolveMavenInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'pom.xml')))) return undefined;\n const args = ['-q', 'dependency:go-offline'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'mvnw.cmd')))\n ? ['cmd.exe', '/c', 'mvnw.cmd', ...args]\n : ['mvn', ...args];\n }\n return (await pathExists(path.join(runDir, 'mvnw'))) ? ['sh', './mvnw', ...args] : ['mvn', ...args];\n}\n\nasync function resolveNpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'package-lock.json')))\n ? ['npm', 'ci', '--silent']\n : ['npm', 'install', '--silent'];\n}\n\nasync function resolvePnpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'pnpm-lock.yaml')))\n ? ['pnpm', 'install', '--frozen-lockfile', '--silent']\n : ['pnpm', 'install', '--silent'];\n}\n\nasync function resolveRubyInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Gemfile')))) return undefined;\n return (await pathExists(path.join(runDir, 'Gemfile.lock')))\n ? ['bundle', 'install', '--frozen', '--quiet']\n : ['bundle', 'install', '--quiet'];\n}\n\nasync function resolveUvInstallCommand(): Promise<undefined> {\n return undefined;\n}\n\nasync function resolveYarnInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n const isBerry = await isYarnBerryProject(runDir);\n const hasLockfile = await pathExists(path.join(runDir, 'yarn.lock'));\n if (isBerry) return hasLockfile ? ['yarn', 'install', '--immutable'] : ['yarn', 'install'];\n return hasLockfile ? ['yarn', 'install', '--frozen-lockfile', '--silent'] : ['yarn', 'install', '--silent'];\n}\n\nasync function isYarnBerryProject(runDir: string): Promise<boolean> {\n if (await pathExists(path.join(runDir, '.yarnrc.yml'))) return true;\n\n const packageJson = await readJson(path.join(runDir, 'package.json'));\n const packageManager = typeof packageJson.packageManager === 'string' ? packageJson.packageManager : undefined;\n const yarnMajorVersion = /^yarn@(\\d+)/.exec(packageManager ?? '')?.[1];\n return yarnMajorVersion !== undefined && Number(yarnMajorVersion) >= 2;\n}\n\nasync function hasAnyPath(directoryPath: string, relativePaths: readonly string[]): Promise<boolean> {\n for (const relativePath of relativePaths) {\n if (await pathExists(path.join(directoryPath, relativePath))) return true;\n }\n return false;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return false;\n }\n}\n\nasync function readJson(filePath: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await fs.readFile(filePath, 'utf8')) as unknown;\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch (error) {\n if (error instanceof SyntaxError) return {};\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code === 'ENOENT') return {};\n throw error;\n }\n}\n\nexport async function copyPackageManagerProjectFiles(options: {\n packageManager: PackageManager;\n projectDir: string;\n runDir: string;\n projectFilePaths?: readonly string[];\n}): Promise<void> {\n for (const projectFilePath of options.projectFilePaths ?? packageManagerProjectFilePaths[options.packageManager]) {\n await copyPathIfExists(path.join(options.projectDir, projectFilePath), path.join(options.runDir, projectFilePath));\n }\n}\n\nasync function copyPathIfExists(sourcePath: string, destinationPath: string): Promise<void> {\n try {\n await fs.cp(sourcePath, destinationPath, { recursive: true });\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n }\n}\n\nasync function spawnWithInput(\n command: readonly [string, ...string[]],\n context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n outputLimitBytes: number;\n stdin: string;\n timeLimitSeconds: number;\n }\n): Promise<{\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}> {\n const timeOutputPath = timeCommand === undefined ? undefined : path.join(context.cwd, '.exercode-time-result');\n const spawnedCommand =\n timeCommand === undefined ? command : ([...timeCommand, `--output=${timeOutputPath}`, ...command] as const);\n const subprocess = childProcess.spawn(spawnedCommand[0], spawnedCommand.slice(1), {\n cwd: context.cwd,\n detached: process.platform !== 'win32',\n env: context.env,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let outputBytes = 0;\n let timedOut = false;\n let outputLimitExceeded = false;\n\n const appendOutputChunk = (chunks: Buffer[], chunk: Buffer): void => {\n if (outputBytes >= context.outputLimitBytes) {\n if (chunk.byteLength > 0) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n return;\n }\n\n const remainingBytes = context.outputLimitBytes - outputBytes;\n const appendedChunk = chunk.byteLength > remainingBytes ? chunk.subarray(0, remainingBytes) : chunk;\n chunks.push(appendedChunk);\n outputBytes += appendedChunk.byteLength;\n\n if (chunk.byteLength > remainingBytes) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n };\n\n subprocess.stdout.on('data', (chunk: Buffer) => appendOutputChunk(stdoutChunks, chunk));\n subprocess.stderr.on('data', (chunk: Buffer) => appendOutputChunk(stderrChunks, chunk));\n\n const timeout = setTimeout(() => {\n timedOut = true;\n killSubprocessGroup(subprocess, 'SIGTERM');\n }, context.timeLimitSeconds * 1000);\n const killTimeout = setTimeout(\n () => {\n if (timedOut) killSubprocessGroup(subprocess, 'SIGKILL');\n },\n context.timeLimitSeconds * 1000 + killGracePeriodMilliseconds\n );\n killTimeout.unref();\n\n const { status, signal } = await new Promise<{ status: number | undefined; signal: NodeJS.Signals | undefined }>(\n (resolve, reject) => {\n let settled = false;\n let pendingError: Error | undefined;\n const failAfterClose = (error: Error): void => {\n if (settled) return;\n pendingError = error;\n killSubprocessGroup(subprocess, 'SIGKILL');\n if (subprocess.pid === undefined) {\n settled = true;\n reject(error);\n }\n };\n subprocess.on('error', failAfterClose);\n subprocess.stdin.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code !== 'EPIPE') failAfterClose(error);\n });\n subprocess.on('close', (code, closeSignal) => {\n if (settled) return;\n settled = true;\n if (pendingError) {\n reject(pendingError);\n return;\n }\n resolve({ status: code ?? undefined, signal: closeSignal ?? undefined });\n });\n subprocess.stdin.end(context.stdin);\n }\n ).finally(() => {\n clearTimeout(timeout);\n clearTimeout(killTimeout);\n });\n\n const { timeSeconds, memoryBytes } =\n timeOutputPath === undefined ? { timeSeconds: 0, memoryBytes: 0 } : await readTimeResult(timeOutputPath);\n\n return {\n stdout: Buffer.concat(stdoutChunks).toString(),\n stderr: Buffer.concat(stderrChunks).toString(),\n status,\n timeSeconds,\n memoryBytes,\n timedOut,\n signal,\n outputLimitExceeded,\n };\n}\n\nfunction resolveTimeCommand(): readonly [string, ...string[]] | undefined {\n const command = os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time';\n const result = childProcess.spawnSync(command, ['--version'], { stdio: 'ignore' });\n if (result.error || result.status !== 0) return undefined;\n\n return [command, '--format', '%e %M'];\n}\n\nfunction killSubprocessGroup(subprocess: childProcess.ChildProcess, signal: NodeJS.Signals): void {\n if (subprocess.pid === undefined) return;\n\n try {\n if (process.platform === 'win32') {\n subprocess.kill(signal);\n return;\n }\n process.kill(-subprocess.pid, signal);\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ESRCH' && code !== 'EPERM') throw error;\n }\n}\n\nasync function readTimeResult(timeOutputPath: string): Promise<{ timeSeconds: number; memoryBytes: number }> {\n let content: string;\n try {\n content = await fs.readFile(timeOutputPath, 'utf8');\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return { timeSeconds: 0, memoryBytes: 0 };\n }\n\n const match = /(\\d+(?:[.,]\\d+)?) (\\d+)\\s*$/.exec(content);\n if (!match) return { timeSeconds: 0, memoryBytes: 0 };\n\n return { timeSeconds: Number(match[1]!.replace(',', '.')), memoryBytes: Number(match[2]) * 1024 };\n}\n"],"names":["command","result","packageManagerProjectFilePaths","bun","cargo","go","gradle","maven","npm","pnpm","ruby","uv","yarn","packageManagerInstallCommandResolvers","_x2","_resolveBunInstallCommand","apply","this","arguments","_x3","_resolveCargoInstallCommand","_x4","_resolveGoInstallCommand","_x5","_resolveGradleInstallCommand","_x6","_resolveMavenInstallCommand","_x7","_resolveNpmInstallCommand","_x8","_resolvePnpmInstallCommand","_x9","_resolveRubyInstallCommand","_resolveUvInstallCommand","_x0","_resolveYarnInstallCommand","timeCommand","os","platform","childProcess","spawnSync","stdio","error","status","_runCommandInTemporaryPackageManagerProject","_asyncToGenerator","_regenerator","m","_callee","options","_options$tempDirPrefi","runDir","_options$outputLimitB","_options$stdin2","env","installCommand","startedAt","outputLimitBytes","installResult","remainingTimeLimitSeconds","_options$stdin","_installResult$stdout","_installResult","_installResult$stderr","_installResult2","_installResult$memory","_installResult3","_installResult4","elapsedTimeSeconds","w","_context","p","n","fs","mkdtemp","path","join","tmpdir","tempDirPrefix","v","cp","cwd","recursive","copyPackageManagerProjectFiles","packageManager","projectDir","projectFilePaths","_objectSpread","process","resolveInstallCommand","Date","now","spawnWithInput","stdin","timeLimitSeconds","isFailedSpawnResult","a","toPackageManagerCommandRunResult","stdout","stderr","timeSeconds","memoryBytes","timedOut","signal","outputLimitExceeded","Math","max","rm","force","f","context","_context$options$stdi","_callee2","_t","_context2","pathExists","undefined","hasAnyPath","_callee3","_t2","_context3","_callee4","_context4","_callee5","args","_t3","_t4","_context5","concat","_callee6","_t5","_t6","_context6","_callee7","_t7","_context7","_callee8","_t8","_context8","_callee9","_t9","_context9","_callee0","_context0","_callee1","isBerry","hasLockfile","_context1","isYarnBerryProject","_x1","_isYarnBerryProject","_callee10","_exec","packageJson","yarnMajorVersion","_context10","readJson","exec","Number","_x10","_x11","_hasAnyPath","_callee11","directoryPath","relativePaths","_iterator","_step","relativePath","_t0","_context11","_createForOfIteratorHelper","s","done","value","e","_x12","_pathExists","_callee12","filePath","_t1","_context12","access","_typeof","code","_x13","_readJson","_callee13","parsed","_t10","_t11","_context13","JSON","readFile","parse","call","Array","isArray","SyntaxError","_x14","_copyPackageManagerProjectFiles","_callee14","_options$projectFileP","_iterator2","_step2","projectFilePath","_t12","_context14","copyPathIfExists","_x15","_x16","_copyPathIfExists","_callee15","sourcePath","destinationPath","_t13","_context15","_x17","_x18","_spawnWithInput","_callee16","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t14","_context16","_toConsumableArray","spawn","slice","detached","chunks","chunk","byteLength","killSubprocessGroup","remainingBytes","appendedChunk","subarray","push","on","setTimeout","unref","Promise","resolve","reject","pendingError","settled","failAfterClose","pid","closeSignal","end","clearTimeout","readTimeResult","Buffer","toString","kill","_x19","_readTimeResult","_callee17","content","match","_t15","_context17","replace","_x"],"mappings":"iBAucQA,EACAC,mKAvaFC,EAAiC,CACrCC,IAAK,CAAC,eAAgB,WAAY,aAClCC,MAAO,CAAC,aAAc,cACtBC,GAAI,CAAC,SAAU,UACfC,OAAQ,CACN,eACA,mBACA,kBACA,sBACA,oBACA,kBACA,8BACA,SACA,UACA,eAEFC,MAAO,CAAC,UAAW,OAAQ,OAAQ,YACnCC,IAAK,CAAC,eAAgB,qBACtBC,KAAM,CAAC,eAAgB,iBAAkB,uBACzCC,KAAM,CAAC,UAAW,eAAgB,iBAClCC,GAAI,CAAC,iBAAkB,WACvBC,KAAM,CAAC,eAAgB,YAAa,UAAW,cAAe,UAG1DC,EAAwC,CAC5CV,IAiID,SAEsCW,GAAA,OAAAC,EAAAC,MAAAC,KAAAC,UAAA,EAlIrCd,MAwID,SAEwCe,GAAA,OAAAC,EAAAJ,MAAAC,KAAAC,UAAA,EAzIvCb,GA4ID,SAEqCgB,GAAA,OAAAC,EAAAN,MAAAC,KAAAC,UAAA,EA7IpCZ,OAgJD,SAEyCiB,GAAA,OAAAC,EAAAR,MAAAC,KAAAC,UAAA,EAjJxCX,MAoKD,SAEwCkB,GAAA,OAAAC,EAAAV,MAAAC,KAAAC,UAAA,EArKvCV,IA8KD,SAEsCmB,GAAA,OAAAC,EAAAZ,MAAAC,KAAAC,UAAA,EA/KrCT,KAoLD,SAEuCoB,GAAA,OAAAC,EAAAd,MAAAC,KAAAC,UAAA,EArLtCR,KA0LD,SAEuCqB,GAAA,OAAAC,EAAAhB,MAAAC,KAAAC,UAAA,EA3LtCP,GAgMD,WAEqC,OAAAsB,EAAAjB,MAAAC,KAAAC,UAAA,EAjMpCN,KAmMD,SAEuCsB,GAAA,OAAAC,EAAAnB,MAAAC,KAAAC,UAAA,GAhMlCkB,GA+XEpC,EAA4B,WAAlBqC,EAAGC,WAA0B,QAAU,iBACjDrC,EAASsC,EAAaC,UAAUxC,EAAS,CAAC,aAAc,CAAEyC,MAAO,YAC5DC,OAA2B,IAAlBzC,EAAO0C,YAAc,EAElC,CAAC3C,EAAS,WAAY,UA/S9B,SAAA4C,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,EAAAA,cAAAC,EA7EM,SAAAC,EACLC,GAA0D,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvD,EAAAwD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAlE,EAAAmE,EAAA,OAAAtB,gBAAAuB,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAAA,OAAAF,EAAAE,EAAA,EAErCC,EAAGC,QAAQC,EAAKC,KAAKvC,EAAGwC,gBAAQ3B,EAAED,EAAQ6B,eAAa5B,EAAI,cAAa,KAAA,EAAjF,OAANC,EAAMmB,EAAAS,EAAAT,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAEJC,EAAGO,GAAG/B,EAAQgC,IAAK9B,EAAQ,CAAE+B,WAAW,IAAO,KAAA,EAAA,OAAAZ,EAAAE,EAAA,EAC/CW,EAA+B,CACnCC,eAAgBnC,EAAQmC,eACxBC,WAAYpC,EAAQoC,WACpBlC,OAAAA,EACAmC,iBAAkBrC,EAAQqC,mBAC1B,KAAA,EAEwE,OAApEhC,EAAML,EAAQK,IAAGiC,EAAAA,cAAAA,EAAAA,cAAA,CAAA,EAAQC,QAAQlC,KAAQL,EAAQK,KAAQkC,QAAQlC,IAAGgB,EAAAE,EAAA,EAC7CiB,EAAsBxC,EAAQmC,eAAgBjC,GAAO,KAAA,EAGN,GAHtEI,EAAce,EAAAS,EACd/E,EAAqC,mBAApBiD,EAAQjD,QAAyBiD,EAAQjD,QAAQ,CAAEmD,OAAAA,IAAYF,EAAQjD,QACxFwD,EAAYkC,KAAKC,MACjBlC,EAA2C,OAA3BL,EAAGH,EAAQQ,kBAAgBL,EA1BrB,UA6BxBG,EAAc,CAAAe,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,EACMoB,EAAerC,EAAgB,CACnD0B,IAAK9B,EACLG,IAAAA,EACAG,iBAAAA,EACAoC,MAAO,GACPC,iBAAkB7C,EAAQ6C,mBAC1B,KAAA,EANW,IAOTC,EAPJrC,EAAaY,EAAAS,GAOyB,CAAAT,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAA0B,EAAA,EAC7BC,EAAiC,CACtC7B,oBAAqBsB,KAAKC,MAAQnC,GAAa,IAC/CP,QAAAA,EACAhD,OAAQyD,KACR,KAAA,EAIsF,MAAtFC,EAA4BV,EAAQ6C,kBAAoBJ,KAAKC,MAAQnC,GAAa,MACvD,GAAC,CAAAc,EAAAE,EAAA,EAAA,KAAA,CAAA,OAAAF,EAAA0B,EAAA,EACzB,CACLH,MAAoB,OAAfjC,EAAEX,EAAQ4C,OAAKjC,EAAI,GACxBsC,OAA6B,OAAvBrC,EAAe,OAAfC,EAAEJ,QAAa,EAAbI,EAAeoC,QAAMrC,EAAI,GACjCsC,OAA6B,OAAvBpC,EAAe,OAAfC,EAAEN,QAAa,EAAbM,EAAemC,QAAMpC,EAAI,GACjCpB,OAAQ,EACRyD,YAAanD,EAAQ6C,iBAAmB,KACxCO,YAAuC,OAA5BpC,EAAe,OAAfC,EAAER,QAAa,EAAbQ,EAAemC,aAAWpC,EAAI,EAC3CqC,UAAU,EACVC,OAAqB,OAAfpC,EAAET,QAAa,EAAbS,EAAeoC,OACvBC,qBAAqB,IACtB,KAAA,EAAA,OAAAlC,EAAAE,EAAA,EAGkBoB,EAAe5F,EAAS,CAC3CiF,IAAK9B,EACLG,IAAAA,EACAG,iBAAAA,EACAoC,MAAoB,OAAfxC,EAAEJ,EAAQ4C,OAAKxC,EAAI,GACxByC,iBAAkBnC,IAClB,KAAA,EACwD,GAPpD1D,EAAMqE,EAAAS,EAONX,GAAsBsB,KAAKC,MAAQnC,GAAa,KAElDE,EAAa,CAAAY,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAA0B,EAAA,EACRC,EAAiC,CACtC7B,mBAAAA,EACAnB,QAAAA,EACAhD,OAAMsF,EAAAA,cAAAA,EAAAA,iBACDtF,GAAM,CAAA,EAAA,CACTmG,YAAa1C,EAAc0C,YAAcnG,EAAOmG,YAChDC,YAAaI,KAAKC,IAAIhD,EAAc2C,YAAapG,EAAOoG,kBAE1D,KAAA,GAAA,OAAA/B,EAAA0B,EAAA,EAGGC,EAAiC,CAAE7B,mBAAAA,EAAoBnB,QAAAA,EAAShD,OAAAA,KAAS,KAAA,GAAA,OAAAqE,EAAAC,EAAA,GAAAD,EAAAE,EAAA,GAE1EC,EAAGkC,GAAGxD,EAAQ,CAAEyD,OAAO,EAAM1B,WAAW,IAAO,KAAA,GAAA,OAAAZ,EAAAuC,EAAA,IAAA,KAAA,GAAA,OAAAvC,EAAA0B,EAAA,GAAA,EAAAhD,EAAA,KAAA,CAAA,CAAA,GAAA,GAAA,KAAA,IAExDJ,EAAA5B,MAAAC,KAAAC,UAAA,CAED,SAAS+E,EAAiCa,GAIP,IAAAC,EACjC,MAAO,CACLlB,MAA4B,OAAvBkB,EAAED,EAAQ7D,QAAQ4C,OAAKkB,EAAI,GAChCb,OAAQY,EAAQ7G,OAAOiG,OACvBC,OAAQW,EAAQ7G,OAAOkG,OACvBxD,OAAQmE,EAAQ7G,OAAOqG,UAAYQ,EAAQ7G,OAAOuG,oBAAsB,EAAIM,EAAQ7G,OAAO0C,OAC3FyD,YAAaU,EAAQ7G,OAAOqG,SACxBQ,EAAQ7D,QAAQ6C,iBAAmB,KACnCgB,EAAQ7G,OAAOmG,aAAeU,EAAQ1C,mBAC1CiC,YAAaS,EAAQ7G,OAAOoG,YAC5BC,SAAUQ,EAAQ7G,OAAOqG,SACzBC,OAAQO,EAAQ7G,OAAOsG,OACvBC,oBAAqBM,EAAQ7G,OAAOuG,oBAExC,CAEA,SAASf,EACPL,EACAjC,GAEA,OAAOtC,EAAsCuE,GAAgBjC,EAC/D,CAEA,SAAS4C,EAAoB9F,GAC3B,OAAyB,IAAlBA,EAAO0C,QAAgB1C,EAAOqG,UAAYrG,EAAOuG,mBAC1D,CAEuC,SAAAzF,IAMtC,OANsCA,EAAA8B,EAAAA,iBAAAC,EAAAA,cAAAC,EAAvC,SAAAiE,EAAwC7D,GAAc,IAAA8D,EAAA,OAAAnE,gBAAAuB,EAAA,SAAA6C,GAAA,cAAAA,EAAA1C,GAAA,KAAA,EAAA,OAAA0C,EAAA1C,EAAA,EACxC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAAA,GAAA+D,EAAAnC,EAAA,CAAAmC,EAAA1C,EAAA,EAAA,KAAA,CAAA,OAAA0C,EAAAlB,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAF,EAAA1C,EAAA,EAE9D6C,EAAWlE,EAAQ,CAAC,WAAY,cAAa,KAAA,EAAA,IAAA+D,EAAAnC,EAAA,CAAAmC,EAAA1C,EAAA,EAAA,KAAA,CAAAyC,EACvD,CAAC,MAAO,UAAW,oBAAqB,YAAWC,EAAA1C,EAAA,EAAA,MAAA,KAAA,EAAAyC,EACnD,CAAC,MAAO,UAAW,YAAW,KAAA,EAAA,OAAAC,EAAAlB,EAAA,EAAAiB,GAAA,EAAAD,EAAA,KACnChG,MAAAC,KAAAC,UAAA,CAEwC,SAAAE,IAGxC,OAHwCA,EAAAyB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAzC,SAAAuE,EAA0CnE,GAAc,IAAAoE,EAAA,OAAAzE,gBAAAuB,EAAA,SAAAmD,GAAA,cAAAA,EAAAhD,GAAA,KAAA,EAAA,OAAAgD,EAAAhD,EAAA,EAC1C2C,EAAWxC,EAAKC,KAAKzB,EAAQ,eAAc,KAAA,EAAA,GAAAqE,EAAAzC,EAAA,CAAAyC,EAAAhD,EAAA,EAAA,KAAA,CAAA,OAAAgD,EAAAxB,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAI,EAAAhD,EAAA,EAC5D2C,EAAWxC,EAAKC,KAAKzB,EAAQ,eAAc,KAAA,EAAA,IAAAqE,EAAAzC,EAAA,CAAAyC,EAAAhD,EAAA,EAAA,KAAA,CAAA+C,EAAI,CAAC,QAAS,QAAS,YAAWC,EAAAhD,EAAA,EAAA,MAAA,KAAA,EAAA+C,EAAG,CAAC,QAAS,SAAQ,KAAA,EAAA,OAAAC,EAAAxB,EAAA,EAAAuB,GAAA,EAAAD,EAAA,KACjHtG,MAAAC,KAAAC,UAAA,CAEqC,SAAAI,IAGrC,OAHqCA,EAAAuB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAtC,SAAA0E,EAAuCtE,GAAc,OAAAL,gBAAAuB,EAAA,SAAAqD,GAAA,cAAAA,EAAAlD,GAAA,KAAA,EAAA,OAAAkD,EAAAlD,EAAA,EACvC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,WAAU,KAAA,EAAA,GAAAuE,EAAA3C,EAAA,CAAA2C,EAAAlD,EAAA,EAAA,KAAA,CAAA,OAAAkD,EAAA1B,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAM,EAAA1B,EAAA,EAC/D,CAAC,KAAM,MAAO,aAAW,EAAAyB,EAAA,KACjCzG,MAAAC,KAAAC,UAAA,CAEyC,SAAAM,IAmBzC,OAnByCA,EAAAqB,EAAAA,iBAAAC,EAAAA,cAAAC,EAA1C,SAAA4E,EAA2CxE,GAAc,IAAAyE,EAAAC,EAAAC,EAAA,OAAAhF,gBAAAuB,EAAA,SAAA0D,GAAA,cAAAA,EAAAvD,GAAA,KAAA,EAAA,OAAAuD,EAAAvD,EAAA,EAE7C6C,EAAWlE,EAAQ,CACzB,eACA,mBACA,kBACA,sBACA,UACA,gBACA,KAAA,EAAA,GAAA4E,EAAAhD,EAAA,CAAAgD,EAAAvD,EAAA,EAAA,KAAA,CAAA,OAAAuD,EAAA/B,EAAA,OAEKoB,GAAS,KAAA,EACqC,GAAjDQ,EAAO,CAAC,cAAe,UAAW,gBACf,UAArBpC,QAAQlD,SAAoB,CAAAyF,EAAAvD,EAAA,EAAA,KAAA,CAAA,OAAAuD,EAAAvD,EAAA,EAChB2C,EAAWxC,EAAKC,KAAKzB,EAAQ,gBAAe,KAAA,EAAA,IAAA4E,EAAAhD,EAAA,CAAAgD,EAAAvD,EAAA,EAAA,KAAA,CAAAqD,EAAA,CACrD,UAAW,KAAM,eAAaG,OAAKJ,GAAIG,EAAAvD,EAAA,EAAA,MAAA,KAAA,EAAAqD,EAAA,CACvC,UAAQG,OAAKJ,GAAI,KAAA,EAAA,OAAAG,EAAA/B,EAAA,EAAA6B,GAAA,KAAA,EAAA,OAAAE,EAAAvD,EAAA,EAEV2C,EAAWxC,EAAKC,KAAKzB,EAAQ,YAAW,KAAA,EAAA,IAAA4E,EAAAhD,EAAA,CAAAgD,EAAAvD,EAAA,EAAA,KAAA,CAAAsD,GAAK,KAAM,aAAWE,OAAKJ,GAAIG,EAAAvD,EAAA,EAAA,MAAA,KAAA,EAAAsD,EAAA,CAAK,UAAQE,OAAKJ,GAAI,KAAA,EAAA,OAAAG,EAAA/B,EAAA,EAAA8B,GAAA,EAAAH,EAAA,KAC5G3G,MAAAC,KAAAC,UAAA,CAEwC,SAAAQ,IASxC,OATwCA,EAAAmB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAzC,SAAAkF,EAA0C9E,GAAc,IAAAyE,EAAAM,EAAAC,EAAA,OAAArF,gBAAAuB,EAAA,SAAA+D,GAAA,cAAAA,EAAA5D,GAAA,KAAA,EAAA,OAAA4D,EAAA5D,EAAA,EAC1C2C,EAAWxC,EAAKC,KAAKzB,EAAQ,YAAW,KAAA,EAAA,GAAAiF,EAAArD,EAAA,CAAAqD,EAAA5D,EAAA,EAAA,KAAA,CAAA,OAAA4D,EAAApC,EAAA,OAAUoB,GAAS,KAAA,EAC3B,GAAtCQ,EAAO,CAAC,KAAM,yBACK,UAArBpC,QAAQlD,SAAoB,CAAA8F,EAAA5D,EAAA,EAAA,KAAA,CAAA,OAAA4D,EAAA5D,EAAA,EAChB2C,EAAWxC,EAAKC,KAAKzB,EAAQ,aAAY,KAAA,EAAA,IAAAiF,EAAArD,EAAA,CAAAqD,EAAA5D,EAAA,EAAA,KAAA,CAAA0D,EAAA,CAClD,UAAW,KAAM,YAAUF,OAAKJ,GAAIQ,EAAA5D,EAAA,EAAA,MAAA,KAAA,EAAA0D,EAAA,CACpC,OAAKF,OAAKJ,GAAI,KAAA,EAAA,OAAAQ,EAAApC,EAAA,EAAAkC,GAAA,KAAA,EAAA,OAAAE,EAAA5D,EAAA,EAEP2C,EAAWxC,EAAKC,KAAKzB,EAAQ,SAAQ,KAAA,EAAA,IAAAiF,EAAArD,EAAA,CAAAqD,EAAA5D,EAAA,EAAA,KAAA,CAAA2D,GAAK,KAAM,UAAQH,OAAKJ,GAAIQ,EAAA5D,EAAA,EAAA,MAAA,KAAA,EAAA2D,EAAA,CAAK,OAAKH,OAAKJ,GAAI,KAAA,EAAA,OAAAQ,EAAApC,EAAA,EAAAmC,GAAA,EAAAF,EAAA,KACnGjH,MAAAC,KAAAC,UAAA,CAEsC,SAAAU,IAKtC,OALsCA,EAAAiB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAvC,SAAAsF,EAAwClF,GAAc,IAAAmF,EAAA,OAAAxF,gBAAAuB,EAAA,SAAAkE,GAAA,cAAAA,EAAA/D,GAAA,KAAA,EAAA,OAAA+D,EAAA/D,EAAA,EACxC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAAA,GAAAoF,EAAAxD,EAAA,CAAAwD,EAAA/D,EAAA,EAAA,KAAA,CAAA,OAAA+D,EAAAvC,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAmB,EAAA/D,EAAA,EAC9D2C,EAAWxC,EAAKC,KAAKzB,EAAQ,sBAAqB,KAAA,EAAA,IAAAoF,EAAAxD,EAAA,CAAAwD,EAAA/D,EAAA,EAAA,KAAA,CAAA8D,EAC5D,CAAC,MAAO,KAAM,YAAWC,EAAA/D,EAAA,EAAA,MAAA,KAAA,EAAA8D,EACzB,CAAC,MAAO,UAAW,YAAW,KAAA,EAAA,OAAAC,EAAAvC,EAAA,EAAAsC,GAAA,EAAAD,EAAA,KACnCrH,MAAAC,KAAAC,UAAA,CAEuC,SAAAY,IAKvC,OALuCA,EAAAe,EAAAA,iBAAAC,EAAAA,cAAAC,EAAxC,SAAAyF,EAAyCrF,GAAc,IAAAsF,EAAA,OAAA3F,gBAAAuB,EAAA,SAAAqE,GAAA,cAAAA,EAAAlE,GAAA,KAAA,EAAA,OAAAkE,EAAAlE,EAAA,EACzC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAAA,GAAAuF,EAAA3D,EAAA,CAAA2D,EAAAlE,EAAA,EAAA,KAAA,CAAA,OAAAkE,EAAA1C,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAsB,EAAAlE,EAAA,EAC9D2C,EAAWxC,EAAKC,KAAKzB,EAAQ,mBAAkB,KAAA,EAAA,IAAAuF,EAAA3D,EAAA,CAAA2D,EAAAlE,EAAA,EAAA,KAAA,CAAAiE,EACzD,CAAC,OAAQ,UAAW,oBAAqB,YAAWC,EAAAlE,EAAA,EAAA,MAAA,KAAA,EAAAiE,EACpD,CAAC,OAAQ,UAAW,YAAW,KAAA,EAAA,OAAAC,EAAA1C,EAAA,EAAAyC,GAAA,EAAAD,EAAA,KACpCxH,MAAAC,KAAAC,UAAA,CAEuC,SAAAc,IAKvC,OALuCA,EAAAa,EAAAA,iBAAAC,EAAAA,cAAAC,EAAxC,SAAA4F,EAAyCxF,GAAc,IAAAyF,EAAA,OAAA9F,gBAAAuB,EAAA,SAAAwE,GAAA,cAAAA,EAAArE,GAAA,KAAA,EAAA,OAAAqE,EAAArE,EAAA,EACzC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,YAAW,KAAA,EAAA,GAAA0F,EAAA9D,EAAA,CAAA8D,EAAArE,EAAA,EAAA,KAAA,CAAA,OAAAqE,EAAA7C,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAAyB,EAAArE,EAAA,EACzD2C,EAAWxC,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAAA,IAAA0F,EAAA9D,EAAA,CAAA8D,EAAArE,EAAA,EAAA,KAAA,CAAAoE,EACvD,CAAC,SAAU,UAAW,WAAY,WAAUC,EAAArE,EAAA,EAAA,MAAA,KAAA,EAAAoE,EAC5C,CAAC,SAAU,UAAW,WAAU,KAAA,EAAA,OAAAC,EAAA7C,EAAA,EAAA4C,GAAA,EAAAD,EAAA,KACrC3H,MAAAC,KAAAC,UAAA,CAEqC,SAAAe,IAErC,OAFqCA,EAAAY,EAAAA,iBAAAC,EAAAA,cAAAC,EAAtC,SAAA+F,IAAA,OAAAhG,gBAAAuB,EAAA,SAAA0E,GAAA,UAAA,IAAAA,EAAAvE,EAAA,OAAAuE,EAAA/C,EAAA,OACSoB,EAAS,EAAA0B,EAAA,KACjB9H,MAAAC,KAAAC,UAAA,CAEuC,SAAAiB,IAMvC,OANuCA,EAAAU,EAAAA,iBAAAC,EAAAA,cAAAC,EAAxC,SAAAiG,EAAyC7F,GAAc,IAAA8F,EAAAC,EAAA,OAAApG,gBAAAuB,EAAA,SAAA8E,GAAA,cAAAA,EAAA3E,GAAA,KAAA,EAAA,OAAA2E,EAAA3E,EAAA,EACzC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAAA,GAAAgG,EAAApE,EAAA,CAAAoE,EAAA3E,EAAA,EAAA,KAAA,CAAA,OAAA2E,EAAAnD,EAAA,OAAUoB,GAAS,KAAA,EAAA,OAAA+B,EAAA3E,EAAA,EACtD4E,EAAmBjG,GAAO,KAAA,EAAnC,OAAP8F,EAAOE,EAAApE,EAAAoE,EAAA3E,EAAA,EACa2C,EAAWxC,EAAKC,KAAKzB,EAAQ,cAAa,KAAA,EAAnD,GAAX+F,EAAWC,EAAApE,GACbkE,EAAO,CAAAE,EAAA3E,EAAA,EAAA,KAAA,CAAA,OAAA2E,EAAAnD,IAASkD,EAAc,CAAC,OAAQ,UAAW,eAAiB,CAAC,OAAQ,YAAU,KAAA,EAAA,OAAAC,EAAAnD,EAAA,EACnFkD,EAAc,CAAC,OAAQ,UAAW,oBAAqB,YAAc,CAAC,OAAQ,UAAW,aAAW,EAAAF,EAAA,KAC5GhI,MAAAC,KAAAC,UAAA,CAAA,SAEckI,EAAkBC,GAAA,OAAAC,EAAAtI,MAAAC,KAAAC,UAAA,CAAA,SAAAoI,IAOhC,OAPgCA,EAAAzG,EAAAA,iBAAAC,EAAAA,cAAAC,EAAjC,SAAAwG,EAAkCpG,GAAc,IAAAqG,EAAAC,EAAArE,EAAAsE,EAAA,OAAA5G,gBAAAuB,EAAA,SAAAsF,GAAA,cAAAA,EAAAnF,GAAA,KAAA,EAAA,OAAAmF,EAAAnF,EAAA,EACpC2C,EAAWxC,EAAKC,KAAKzB,EAAQ,gBAAe,KAAA,EAAA,IAAAwG,EAAA5E,EAAA,CAAA4E,EAAAnF,EAAA,EAAA,KAAA,CAAA,OAAAmF,EAAA3D,EAAA,GAAS,GAAI,KAAA,EAAA,OAAA2D,EAAAnF,EAAA,EAEzCoF,EAASjF,EAAKC,KAAKzB,EAAQ,iBAAgB,KAAA,EAEC,OAFhEsG,EAAWE,EAAA5E,EACXK,EAAuD,iBAA/BqE,EAAYrE,eAA8BqE,EAAYrE,oBAAiBgC,EAC/FsC,SAAgBF,EAAG,cAAcK,KAAmB,MAAdzE,EAAAA,EAAkB,YAArCoE,EAA2C,GAAEG,EAAA3D,EAAA,OAC1CoB,IAArBsC,GAAkCI,OAAOJ,IAAqB,GAAC,EAAAH,EAAA,KACvEvI,MAAAC,KAAAC,UAAA,CAAA,SAEcmG,EAAU0C,EAAAC,GAAA,OAAAC,EAAAjJ,MAAAC,KAAAC,UAAA,CAAA,SAAA+I,IAKxB,OALwBA,EAAApH,EAAAA,iBAAAC,gBAAAC,EAAzB,SAAAmH,EAA0BC,EAAuBC,GAAgC,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA1H,gBAAAuB,EAAA,SAAAoG,GAAA,cAAAA,EAAAlG,EAAAkG,EAAAjG,GAAA,KAAA,EAAA6F,EAAAK,EAAAA,0BACpDN,GAAaK,EAAAlG,EAAA,EAAA8F,EAAAM,IAAA,KAAA,EAAA,IAAAL,EAAAD,EAAA7F,KAAAoG,KAAA,CAAAH,EAAAjG,EAAA,EAAA,KAAA,CAAjB,OAAZ+F,EAAYD,EAAAO,MAAAJ,EAAAjG,EAAA,EACX2C,EAAWxC,EAAKC,KAAKuF,EAAeI,IAAc,KAAA,EAAA,IAAAE,EAAA1F,EAAA,CAAA0F,EAAAjG,EAAA,EAAA,KAAA,CAAA,OAAAiG,EAAAzE,EAAA,GAAS,GAAI,KAAA,EAAAyE,EAAAjG,EAAA,EAAA,MAAA,KAAA,EAAAiG,EAAAjG,EAAA,EAAA,MAAA,KAAA,EAAAiG,EAAAlG,EAAA,EAAAiG,EAAAC,EAAA1F,EAAAsF,EAAAS,EAAAN,GAAA,KAAA,EAAA,OAAAC,EAAAlG,EAAA,EAAA8F,EAAAxD,IAAA4D,EAAA5D,EAAA,GAAA,KAAA,EAAA,OAAA4D,EAAAzE,EAAA,GAEpE,GAAK,EAAAkE,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KACblJ,MAAAC,KAAAC,UAAA,CAAA,SAEciG,EAAU4D,GAAA,OAAAC,EAAAhK,MAAAC,KAAAC,UAAA,CAAA,SAAA8J,IAUxB,OAVwBA,EAAAnI,EAAAA,iBAAAC,EAAAA,cAAAC,EAAzB,SAAAkI,EAA0BC,GAAgB,IAAAC,EAAA,OAAArI,gBAAAuB,EAAA,SAAA+G,GAAA,cAAAA,EAAA7G,EAAA6G,EAAA5G,GAAA,KAAA,EAAA,OAAA4G,EAAA7G,EAAA,EAAA6G,EAAA5G,EAAA,EAEhCC,EAAG4G,OAAOH,GAAS,KAAA,EAAA,OAAAE,EAAApF,EAAA,GAClB,GAAI,KAAA,EAGqG,GAHrGoF,EAAA7G,EAAA,EAAA4G,EAAAC,EAAArG,EAIE,YADM,WAAjBuG,EAAAA,OAAAH,IAAuC,OAAVA,GAAkB,SAAMA,EAAYA,EAA6BI,UAAOnE,GAClF,CAAAgE,EAAA5G,EAAA,EAAA,KAAA,CAAA,MAAA2G,EAAA,KAAA,EAAA,OAAAC,EAAApF,EAAA,GACd,GAAK,EAAAiF,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KAEfjK,MAAAC,KAAAC,UAAA,CAAA,SAEc0I,EAAQ4B,GAAA,OAAAC,EAAAzK,MAAAC,KAAAC,UAAA,CAAA,SAAAuK,IAatB,OAbsBA,EAAA5I,EAAAA,iBAAAC,EAAAA,cAAAC,EAAvB,SAAA2I,EAAwBR,GAAgB,IAAAS,EAAAC,EAAAC,EAAA,OAAA/I,gBAAAuB,EAAA,SAAAyH,GAAA,cAAAA,EAAAvH,EAAAuH,EAAAtH,GAAA,KAAA,EAEjB,OAFiBsH,EAAAvH,EAAA,EAAAqH,EAErBG,KAAID,EAAAtH,EAAA,EAAaC,EAAGuH,SAASd,EAAU,QAAO,KAAA,EAApC,OAAnBS,EAAMC,EAAQK,MAAKC,KAAAN,EAAAE,EAAA/G,GAAA+G,EAAA9F,EAAA,EACA,WAAlBsF,EAAAA,OAAOK,IAAkC,OAAXA,GAAoBQ,MAAMC,QAAQT,GAEnE,GADCA,GACC,KAAA,EAAA,GAAAG,EAAAvH,EAAA,KAAAsH,EAAAC,EAAA/G,aAEesH,aAAW,CAAAP,EAAAtH,EAAA,EAAA,KAAA,CAAA,OAAAsH,EAAA9F,EAAA,EAAS,IAAE,KAAA,EAEqE,GACnG,YADM,WAAjBsF,EAAAA,OAAAO,IAAuC,OAAVA,GAAkB,SAAMA,EAAYA,EAA6BN,UAAOnE,GAClF,CAAA0E,EAAAtH,EAAA,EAAA,KAAA,CAAA,OAAAsH,EAAA9F,EAAA,EAAS,IAAE,KAAA,EAAA,MAAA6F,EAAA,KAAA,EAAA,OAAAC,EAAA9F,EAAA,GAAA,EAAA0F,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KAGnC1K,MAAAC,KAAAC,UAAA,CAED,SAAsBiE,EAA8BmH,GAAA,OAAAC,EAAAvL,MAAAC,KAAAC,UAAA,CASnD,SAAAqL,IAAA,OAAAA,EAAA1J,EAAAA,iBAAAC,EAAAA,cAAAC,EATM,SAAAyJ,EAA8CvJ,GAKpD,IAAAwJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA/J,gBAAAuB,EAAA,SAAAyI,GAAA,cAAAA,EAAAvI,EAAAuI,EAAAtI,GAAA,KAAA,EAAAkI,EAAAhC,EAAAA,0BACuD,OADvD+B,EAC+BxJ,EAAQqC,kBAAgBmH,EAAIvM,EAA+B+C,EAAQmC,iBAAe0H,EAAAvI,EAAA,EAAAmI,EAAA/B,IAAA,KAAA,EAAA,IAAAgC,EAAAD,EAAAlI,KAAAoG,KAAA,CAAAkC,EAAAtI,EAAA,EAAA,KAAA,CAAtF,OAAfoI,EAAeD,EAAA9B,MAAAiC,EAAAtI,EAAA,EAClBuI,EAAiBpI,EAAKC,KAAK3B,EAAQoC,WAAYuH,GAAkBjI,EAAKC,KAAK3B,EAAQE,OAAQyJ,IAAiB,KAAA,EAAAE,EAAAtI,EAAA,EAAA,MAAA,KAAA,EAAAsI,EAAAtI,EAAA,EAAA,MAAA,KAAA,EAAAsI,EAAAvI,EAAA,EAAAsI,EAAAC,EAAA/H,EAAA2H,EAAA5B,EAAA+B,GAAA,KAAA,EAAA,OAAAC,EAAAvI,EAAA,EAAAmI,EAAA7F,IAAAiG,EAAAjG,EAAA,GAAA,KAAA,EAAA,OAAAiG,EAAA9G,EAAA,GAAA,EAAAwG,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KAErHxL,MAAAC,KAAAC,UAAA,CAAA,SAEc6L,EAAgBC,EAAAC,GAAA,OAAAC,EAAAlM,MAAAC,KAAAC,UAAA,CAAA,SAAAgM,IAQ9B,OAR8BA,EAAArK,EAAAA,iBAAAC,gBAAAC,EAA/B,SAAAoK,EAAgCC,EAAoBC,GAAuB,IAAAC,EAAA,OAAAxK,gBAAAuB,EAAA,SAAAkJ,GAAA,cAAAA,EAAAhJ,EAAAgJ,EAAA/I,GAAA,KAAA,EAAA,OAAA+I,EAAAhJ,EAAA,EAAAgJ,EAAA/I,EAAA,EAEjEC,EAAGO,GAAGoI,EAAYC,EAAiB,CAAEnI,WAAW,IAAO,KAAA,EAAAqI,EAAA/I,EAAA,EAAA,MAAA,KAAA,EAGmD,GAHnD+I,EAAAhJ,EAAA,EAAA+I,EAAAC,EAAAxI,EAIhD,YADM,WAAjBuG,EAAAA,OAAAgC,IAAuC,OAAVA,GAAkB,SAAMA,EAAYA,EAA6B/B,UAAOnE,GAClF,CAAAmG,EAAA/I,EAAA,EAAA,KAAA,CAAA,MAAA8I,EAAA,KAAA,EAAA,OAAAC,EAAAvH,EAAA,GAAA,EAAAmH,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KAExBnM,MAAAC,KAAAC,UAAA,CAAA,SAEc0E,EAAc4H,EAAAC,GAAA,OAAAC,EAAA1M,MAAAC,KAAAC,UAAA,CAAA,SAAAwM,IAoH5B,OApH4BA,EAAA7K,EAAAA,iBAAAC,gBAAAC,EAA7B,SAAA4K,EACE3N,EACA8G,GAMC,IAAA8G,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA3H,EAAAE,EAAA0H,EAAAC,EAAAC,EAAAC,EAAA1L,EAAA4D,EAAA+H,EAAAlI,EAAAC,EAAAkI,EAAA,OAAAzL,gBAAAuB,EAAA,SAAAmK,GAAA,cAAAA,EAAAhK,GAAA,KAAA,EA4DmB,OAjDdoJ,OAAiCxG,IAAhBhF,OAA4BgF,EAAYzC,EAAKC,KAAKkC,EAAQ7B,IAAK,yBAChF4I,OACYzG,IAAhBhF,EAA4BpC,EAAO,GAAAgI,OAAAyG,oBAAQrM,GAAW,CAAA,YAAA4F,OAAc4F,IAAca,EAAAA,kBAAOzO,IACrF8N,EAAavL,EAAamM,MAAMb,EAAe,GAAIA,EAAec,MAAM,GAAI,CAChF1J,IAAK6B,EAAQ7B,IACb2J,SAA+B,UAArBpJ,QAAQlD,SAClBgB,IAAKwD,EAAQxD,IACbb,MAAO,CAAC,OAAQ,OAAQ,UAGpBsL,EAAyB,GACzBC,EAAyB,GAC3BC,EAAc,EACd3H,GAAW,EACXE,GAAsB,EAEpB0H,EAAoB,SAACW,EAAkBC,GAC3C,GAAIb,GAAenH,EAAQrD,iBACrBqL,EAAMC,WAAa,IACrBvI,GAAsB,EACtBwI,EAAoBlB,EAAY,gBAHpC,CAQA,IAAMmB,EAAiBnI,EAAQrD,iBAAmBwK,EAC5CiB,EAAgBJ,EAAMC,WAAaE,EAAiBH,EAAMK,SAAS,EAAGF,GAAkBH,EAC9FD,EAAOO,KAAKF,GACZjB,GAAeiB,EAAcH,WAEzBD,EAAMC,WAAaE,IACrBzI,GAAsB,EACtBwI,EAAoBlB,EAAY,WATlC,CAWF,EAEAA,EAAW5H,OAAOmJ,GAAG,OAAQ,SAACP,GAAa,OAAKZ,EAAkBH,EAAce,EAAM,GACtFhB,EAAW3H,OAAOkJ,GAAG,OAAQ,SAACP,GAAa,OAAKZ,EAAkBF,EAAcc,EAAM,GAEhFX,EAAUmB,WAAW,WACzBhJ,GAAW,EACX0I,EAAoBlB,EAAY,UAClC,EAA8B,IAA3BhH,EAAQhB,mBACLsI,EAAckB,WAClB,WACMhJ,GAAU0I,EAAoBlB,EAAY,UAChD,EAC2B,IAA3BhH,EAAQhB,iBA3UwB,MA6UtByJ,QAAQf,EAAAhK,EAAA,EAEa,IAAIgL,QACnC,SAACC,EAASC,GACR,IACIC,EADAC,GAAU,EAERC,EAAiB,SAACnN,GAClBkN,IACJD,EAAejN,EACfsM,EAAoBlB,EAAY,gBACT1G,IAAnB0G,EAAWgC,MACbF,GAAU,EACVF,EAAOhN,IAEX,EACAoL,EAAWuB,GAAG,QAASQ,GACvB/B,EAAWjI,MAAMwJ,GAAG,QAAS,SAAC3M,GACT,UAAfA,EAAM6I,MAAkBsE,EAAenN,EAC7C,GACAoL,EAAWuB,GAAG,QAAS,SAAC9D,EAAMwE,GACxBH,IACJA,GAAU,EACND,EACFD,EAAOC,GAGTF,EAAQ,CAAE9M,OAAY,MAAJ4I,EAAAA,OAAQnE,EAAWb,OAAmB,MAAXwJ,EAAAA,OAAe3I,IAC9D,GACA0G,EAAWjI,MAAMmK,IAAIlJ,EAAQjB,MAC/B,GACD,QAAS,WACRoK,aAAa9B,GACb8B,aAAa7B,EACf,GAAE,KAAA,EA/BoB,GA+BpBC,EAAAG,EAAAzJ,EA/BMpC,EAAM0L,EAAN1L,OAAQ4D,EAAM8H,EAAN9H,YAkCKa,IAAnBwG,EAA4B,CAAAY,EAAAhK,EAAA,EAAA,KAAA,CAAA+J,EAAG,CAAEnI,YAAa,EAAGC,YAAa,GAAGmI,EAAAhK,EAAA,EAAA,MAAA,KAAA,EAAA,OAAAgK,EAAAhK,EAAA,EAAS0L,EAAetC,GAAe,KAAA,EAAAW,EAAAC,EAAAzJ,EAAA,KAAA,EAD1E,OAAxBqB,GACkGkI,EAAAC,GADlGnI,YAAaC,EAAWiI,EAAXjI,YAAWmI,EAAAxI,EAAA,EAGzB,CACLE,OAAQiK,OAAOnI,OAAO+F,GAAcqC,WACpCjK,OAAQgK,OAAOnI,OAAOgG,GAAcoC,WACpCzN,OAAAA,EACAyD,YAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAC,oBAAAA,IACD,EAAAmH,EAAA,IACFD,EAAA1M,MAAAC,KAAAC,UAAA,CAUD,SAAS8N,EAAoBlB,EAAuCvH,GAClE,QAAuBa,IAAnB0G,EAAWgC,IAEf,IACE,GAAyB,UAArBtK,QAAQlD,SAEV,YADAwL,EAAWuC,KAAK9J,GAGlBf,QAAQ6K,MAAMvC,EAAWgC,IAAKvJ,EAChC,CAAE,MAAO7D,GACP,IAAM6I,EACa,WAAjBD,EAAAA,OAAO5I,IAAgC,OAAVA,GAAkB,SAAUA,EAASA,EAA4B6I,UAAOnE,EACvG,GAAa,UAATmE,GAA6B,UAATA,EAAkB,MAAM7I,CAClD,CACF,CAAC,SAEcwN,EAAcI,GAAA,OAAAC,EAAAvP,MAAAC,KAAAC,UAAA,CAAA,SAAAqP,IAe5B,OAf4BA,EAAA1N,EAAAA,iBAAAC,EAAAA,cAAAC,EAA7B,SAAAyN,EAA8B5C,GAAsB,IAAA6C,EAAAC,EAAAC,EAAA,OAAA7N,gBAAAuB,EAAA,SAAAuM,GAAA,cAAAA,EAAArM,EAAAqM,EAAApM,GAAA,KAAA,EAAA,OAAAoM,EAAArM,EAAA,EAAAqM,EAAApM,EAAA,EAGhCC,EAAGuH,SAAS4B,EAAgB,QAAO,KAAA,EAAnD6C,EAAOG,EAAA7L,EAAA6L,EAAApM,EAAA,EAAA,MAAA,KAAA,EAGyG,GAHzGoM,EAAArM,EAAA,EAAAoM,EAAAC,EAAA7L,EAIM,YADM,WAAjBuG,EAAAA,OAAAqF,IAAuC,OAAVA,GAAkB,SAAMA,EAAYA,EAA6BpF,UAAOnE,GAClF,CAAAwJ,EAAApM,EAAA,EAAA,KAAA,CAAA,MAAAmM,EAAA,KAAA,EAAA,OAAAC,EAAA5K,EAAA,EACd,CAAEI,YAAa,EAAGC,YAAa,IAAG,KAAA,EAGc,GAAnDqK,EAAQ,8BAA8B7G,KAAK4G,GACvC,CAAAG,EAAApM,EAAA,EAAA,KAAA,CAAA,OAAAoM,EAAA5K,EAAA,EAAS,CAAEI,YAAa,EAAGC,YAAa,IAAG,KAAA,EAAA,OAAAuK,EAAA5K,EAAA,EAE9C,CAAEI,YAAa0D,OAAO4G,EAAM,GAAIG,QAAQ,IAAK,MAAOxK,YAAgC,KAAnByD,OAAO4G,EAAM,MAAY,EAAAF,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KAClGxP,MAAAC,KAAAC,UAAA,6FA9ZD,SAAgE4P,GAAA,OAAAlO,EAAA5B,MAAAC,KAAAC,UAAA"}
{"version":3,"file":"runCommandInTemporaryPackageManagerProject.cjs","names":["fs","path","os","childProcess"],"sources":["../../src/helpers/runCommandInTemporaryPackageManagerProject.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport type PackageManager = 'bun' | 'cargo' | 'go' | 'gradle' | 'maven' | 'npm' | 'pnpm' | 'ruby' | 'uv' | 'yarn';\ntype PackageManagerInstallCommand = readonly [string, ...string[]];\n\nexport interface PackageManagerCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}\n\nexport interface RunCommandInTemporaryPackageManagerProjectOptions {\n cwd: string;\n projectDir: string;\n packageManager: PackageManager;\n command: readonly [string, ...string[]] | ((context: { runDir: string }) => readonly [string, ...string[]]);\n stdin?: string;\n env?: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n outputLimitBytes?: number;\n tempDirPrefix?: string;\n projectFilePaths?: readonly string[];\n}\n\nconst packageManagerProjectFilePaths = {\n bun: ['package.json', 'bun.lock', 'bun.lockb'],\n cargo: ['Cargo.toml', 'Cargo.lock'],\n go: ['go.mod', 'go.sum'],\n gradle: [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradle.properties',\n 'gradle.lockfile',\n 'buildscript-gradle.lockfile',\n 'gradle',\n 'gradlew',\n 'gradlew.bat',\n ],\n maven: ['pom.xml', '.mvn', 'mvnw', 'mvnw.cmd'],\n npm: ['package.json', 'package-lock.json'],\n pnpm: ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'],\n ruby: ['Gemfile', 'Gemfile.lock', '.ruby-version'],\n uv: ['pyproject.toml', 'uv.lock'],\n yarn: ['package.json', 'yarn.lock', '.yarnrc', '.yarnrc.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommandResolvers = {\n bun: resolveBunInstallCommand,\n cargo: resolveCargoInstallCommand,\n go: resolveGoInstallCommand,\n gradle: resolveGradleInstallCommand,\n maven: resolveMavenInstallCommand,\n npm: resolveNpmInstallCommand,\n pnpm: resolvePnpmInstallCommand,\n ruby: resolveRubyInstallCommand,\n uv: resolveUvInstallCommand,\n yarn: resolveYarnInstallCommand,\n} as const satisfies Record<PackageManager, (runDir: string) => Promise<PackageManagerInstallCommand | undefined>>;\n\nconst defaultOutputLimitBytes = 50 * 1024 * 1024;\nconst killGracePeriodMilliseconds = 1000;\nconst timeCommand = resolveTimeCommand();\n\n/**\n * Copies a submission directory to a temporary directory, overlays package\n * manager project files from the problem directory, prepares dependencies,\n * runs a command, and then removes the temporary directory.\n */\nexport async function runCommandInTemporaryPackageManagerProject(\n options: RunCommandInTemporaryPackageManagerProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const runDir = await fs.mkdtemp(path.join(os.tmpdir(), options.tempDirPrefix ?? 'exercode-'));\n try {\n await fs.cp(options.cwd, runDir, { recursive: true });\n await copyPackageManagerProjectFiles({\n packageManager: options.packageManager,\n projectDir: options.projectDir,\n runDir,\n projectFilePaths: options.projectFilePaths,\n });\n\n const env = options.env ? { ...process.env, ...options.env } : process.env;\n const installCommand = await resolveInstallCommand(options.packageManager, runDir);\n const command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const outputLimitBytes = options.outputLimitBytes ?? defaultOutputLimitBytes;\n let installResult: Awaited<ReturnType<typeof spawnWithInput>> | undefined;\n\n if (installCommand) {\n installResult = await spawnWithInput(installCommand, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n if (isFailedSpawnResult(installResult)) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds: (Date.now() - startedAt) / 1000,\n options,\n result: installResult,\n });\n }\n }\n\n const remainingTimeLimitSeconds = options.timeLimitSeconds - (Date.now() - startedAt) / 1000;\n if (remainingTimeLimitSeconds <= 0) {\n return {\n stdin: options.stdin ?? '',\n stdout: installResult?.stdout ?? '',\n stderr: installResult?.stderr ?? '',\n status: 0,\n timeSeconds: options.timeLimitSeconds + 1e-3,\n memoryBytes: installResult?.memoryBytes ?? 0,\n timedOut: true,\n signal: installResult?.signal,\n outputLimitExceeded: false,\n };\n }\n\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: remainingTimeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n if (installResult) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds,\n options,\n result: {\n ...result,\n timeSeconds: installResult.timeSeconds + result.timeSeconds,\n memoryBytes: Math.max(installResult.memoryBytes, result.memoryBytes),\n },\n });\n }\n\n return toPackageManagerCommandRunResult({ elapsedTimeSeconds, options, result });\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\n }\n}\n\nfunction toPackageManagerCommandRunResult(context: {\n elapsedTimeSeconds: number;\n options: RunCommandInTemporaryPackageManagerProjectOptions;\n result: Awaited<ReturnType<typeof spawnWithInput>>;\n}): PackageManagerCommandRunResult {\n return {\n stdin: context.options.stdin ?? '',\n stdout: context.result.stdout,\n stderr: context.result.stderr,\n status: context.result.timedOut || context.result.outputLimitExceeded ? 0 : context.result.status,\n timeSeconds: context.result.timedOut\n ? context.options.timeLimitSeconds + 1e-3\n : context.result.timeSeconds || context.elapsedTimeSeconds,\n memoryBytes: context.result.memoryBytes,\n timedOut: context.result.timedOut,\n signal: context.result.signal,\n outputLimitExceeded: context.result.outputLimitExceeded,\n };\n}\n\nfunction resolveInstallCommand(\n packageManager: PackageManager,\n runDir: string\n): Promise<PackageManagerInstallCommand | undefined> {\n return packageManagerInstallCommandResolvers[packageManager](runDir);\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\n}\n\nasync function resolveBunInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n // Bun supports --silent and it keeps successful preparation output out of judge output buffers.\n return (await hasAnyPath(runDir, ['bun.lock', 'bun.lockb']))\n ? ['bun', 'install', '--frozen-lockfile', '--silent']\n : ['bun', 'install', '--silent'];\n}\n\nasync function resolveCargoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Cargo.toml')))) return undefined;\n return (await pathExists(path.join(runDir, 'Cargo.lock'))) ? ['cargo', 'fetch', '--locked'] : ['cargo', 'fetch'];\n}\n\nasync function resolveGoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'go.mod')))) return undefined;\n return ['go', 'mod', 'download'];\n}\n\nasync function resolveGradleInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (\n !(await hasAnyPath(runDir, [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradlew',\n 'gradlew.bat',\n ]))\n )\n return undefined;\n const args = ['--no-daemon', '--quiet', 'dependencies'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'gradlew.bat')))\n ? ['cmd.exe', '/c', 'gradlew.bat', ...args]\n : ['gradle', ...args];\n }\n return (await pathExists(path.join(runDir, 'gradlew'))) ? ['sh', './gradlew', ...args] : ['gradle', ...args];\n}\n\nasync function resolveMavenInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'pom.xml')))) return undefined;\n const args = ['-q', 'dependency:go-offline'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'mvnw.cmd')))\n ? ['cmd.exe', '/c', 'mvnw.cmd', ...args]\n : ['mvn', ...args];\n }\n return (await pathExists(path.join(runDir, 'mvnw'))) ? ['sh', './mvnw', ...args] : ['mvn', ...args];\n}\n\nasync function resolveNpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'package-lock.json')))\n ? ['npm', 'ci', '--silent']\n : ['npm', 'install', '--silent'];\n}\n\nasync function resolvePnpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'pnpm-lock.yaml')))\n ? ['pnpm', 'install', '--frozen-lockfile', '--silent']\n : ['pnpm', 'install', '--silent'];\n}\n\nasync function resolveRubyInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Gemfile')))) return undefined;\n return (await pathExists(path.join(runDir, 'Gemfile.lock')))\n ? ['bundle', 'install', '--frozen', '--quiet']\n : ['bundle', 'install', '--quiet'];\n}\n\nasync function resolveUvInstallCommand(): Promise<undefined> {\n return undefined;\n}\n\nasync function resolveYarnInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n const isBerry = await isYarnBerryProject(runDir);\n const hasLockfile = await pathExists(path.join(runDir, 'yarn.lock'));\n if (isBerry) return hasLockfile ? ['yarn', 'install', '--immutable'] : ['yarn', 'install'];\n return hasLockfile ? ['yarn', 'install', '--frozen-lockfile', '--silent'] : ['yarn', 'install', '--silent'];\n}\n\nasync function isYarnBerryProject(runDir: string): Promise<boolean> {\n if (await pathExists(path.join(runDir, '.yarnrc.yml'))) return true;\n\n const packageJson = await readJson(path.join(runDir, 'package.json'));\n const packageManager = typeof packageJson.packageManager === 'string' ? packageJson.packageManager : undefined;\n const yarnMajorVersion = /^yarn@(\\d+)/.exec(packageManager ?? '')?.[1];\n return yarnMajorVersion !== undefined && Number(yarnMajorVersion) >= 2;\n}\n\nasync function hasAnyPath(directoryPath: string, relativePaths: readonly string[]): Promise<boolean> {\n for (const relativePath of relativePaths) {\n if (await pathExists(path.join(directoryPath, relativePath))) return true;\n }\n return false;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return false;\n }\n}\n\nasync function readJson(filePath: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await fs.readFile(filePath, 'utf8')) as unknown;\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch (error) {\n if (error instanceof SyntaxError) return {};\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code === 'ENOENT') return {};\n throw error;\n }\n}\n\nexport async function copyPackageManagerProjectFiles(options: {\n packageManager: PackageManager;\n projectDir: string;\n runDir: string;\n projectFilePaths?: readonly string[];\n}): Promise<void> {\n for (const projectFilePath of options.projectFilePaths ?? packageManagerProjectFilePaths[options.packageManager]) {\n await copyPathIfExists(path.join(options.projectDir, projectFilePath), path.join(options.runDir, projectFilePath));\n }\n}\n\nasync function copyPathIfExists(sourcePath: string, destinationPath: string): Promise<void> {\n try {\n await fs.cp(sourcePath, destinationPath, { recursive: true });\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n }\n}\n\nasync function spawnWithInput(\n command: readonly [string, ...string[]],\n context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n outputLimitBytes: number;\n stdin: string;\n timeLimitSeconds: number;\n }\n): Promise<{\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}> {\n const timeOutputPath = timeCommand === undefined ? undefined : path.join(context.cwd, '.exercode-time-result');\n const spawnedCommand =\n timeCommand === undefined ? command : ([...timeCommand, `--output=${timeOutputPath}`, ...command] as const);\n const subprocess = childProcess.spawn(spawnedCommand[0], spawnedCommand.slice(1), {\n cwd: context.cwd,\n detached: process.platform !== 'win32',\n env: context.env,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let outputBytes = 0;\n let timedOut = false;\n let outputLimitExceeded = false;\n\n const appendOutputChunk = (chunks: Buffer[], chunk: Buffer): void => {\n if (outputBytes >= context.outputLimitBytes) {\n if (chunk.byteLength > 0) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n return;\n }\n\n const remainingBytes = context.outputLimitBytes - outputBytes;\n const appendedChunk = chunk.byteLength > remainingBytes ? chunk.subarray(0, remainingBytes) : chunk;\n chunks.push(appendedChunk);\n outputBytes += appendedChunk.byteLength;\n\n if (chunk.byteLength > remainingBytes) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n };\n\n subprocess.stdout.on('data', (chunk: Buffer) => appendOutputChunk(stdoutChunks, chunk));\n subprocess.stderr.on('data', (chunk: Buffer) => appendOutputChunk(stderrChunks, chunk));\n\n const timeout = setTimeout(() => {\n timedOut = true;\n killSubprocessGroup(subprocess, 'SIGTERM');\n }, context.timeLimitSeconds * 1000);\n const killTimeout = setTimeout(\n () => {\n if (timedOut) killSubprocessGroup(subprocess, 'SIGKILL');\n },\n context.timeLimitSeconds * 1000 + killGracePeriodMilliseconds\n );\n killTimeout.unref();\n\n const { status, signal } = await new Promise<{ status: number | undefined; signal: NodeJS.Signals | undefined }>(\n (resolve, reject) => {\n let settled = false;\n let pendingError: Error | undefined;\n const failAfterClose = (error: Error): void => {\n if (settled) return;\n pendingError = error;\n killSubprocessGroup(subprocess, 'SIGKILL');\n if (subprocess.pid === undefined) {\n settled = true;\n reject(error);\n }\n };\n subprocess.on('error', failAfterClose);\n subprocess.stdin.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code !== 'EPIPE') failAfterClose(error);\n });\n subprocess.on('close', (code, closeSignal) => {\n if (settled) return;\n settled = true;\n if (pendingError) {\n reject(pendingError);\n return;\n }\n resolve({ status: code ?? undefined, signal: closeSignal ?? undefined });\n });\n subprocess.stdin.end(context.stdin);\n }\n ).finally(() => {\n clearTimeout(timeout);\n clearTimeout(killTimeout);\n });\n\n const { timeSeconds, memoryBytes } =\n timeOutputPath === undefined ? { timeSeconds: 0, memoryBytes: 0 } : await readTimeResult(timeOutputPath);\n\n return {\n stdout: Buffer.concat(stdoutChunks).toString(),\n stderr: Buffer.concat(stderrChunks).toString(),\n status,\n timeSeconds,\n memoryBytes,\n timedOut,\n signal,\n outputLimitExceeded,\n };\n}\n\nfunction resolveTimeCommand(): readonly [string, ...string[]] | undefined {\n const command = os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time';\n const result = childProcess.spawnSync(command, ['--version'], { stdio: 'ignore' });\n if (result.error || result.status !== 0) return undefined;\n\n return [command, '--format', '%e %M'];\n}\n\nfunction killSubprocessGroup(subprocess: childProcess.ChildProcess, signal: NodeJS.Signals): void {\n if (subprocess.pid === undefined) return;\n\n try {\n if (process.platform === 'win32') {\n subprocess.kill(signal);\n return;\n }\n process.kill(-subprocess.pid, signal);\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ESRCH' && code !== 'EPERM') throw error;\n }\n}\n\nasync function readTimeResult(timeOutputPath: string): Promise<{ timeSeconds: number; memoryBytes: number }> {\n let content: string;\n try {\n content = await fs.readFile(timeOutputPath, 'utf8');\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return { timeSeconds: 0, memoryBytes: 0 };\n }\n\n const match = /(\\d+(?:[.,]\\d+)?) (\\d+)\\s*$/.exec(content);\n if (!match) return { timeSeconds: 0, memoryBytes: 0 };\n\n return { timeSeconds: Number(match[1]!.replace(',', '.')), memoryBytes: Number(match[2]) * 1024 };\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as n,regenerator as e,objectSpread2 as r,createForOfIteratorHelper as t,typeof as a,toConsumableArray as i}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"node:child_process";import c from"node:fs/promises";import s from"node:os";import u from"node:path";var l,p,f={bun:["package.json","bun.lock","bun.lockb"],cargo:["Cargo.toml","Cargo.lock"],go:["go.mod","go.sum"],gradle:["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","gradle.lockfile","buildscript-gradle.lockfile","gradle","gradlew","gradlew.bat"],maven:["pom.xml",".mvn","mvnw","mvnw.cmd"],npm:["package.json","package-lock.json"],pnpm:["package.json","pnpm-lock.yaml","pnpm-workspace.yaml"],ruby:["Gemfile","Gemfile.lock",".ruby-version"],uv:["pyproject.toml","uv.lock"],yarn:["package.json","yarn.lock",".yarnrc",".yarnrc.yml",".yarn"]},d={bun:function(n){return h.apply(this,arguments)},cargo:function(n){return w.apply(this,arguments)},go:function(n){return j.apply(this,arguments)},gradle:function(n){return S.apply(this,arguments)},maven:function(n){return L.apply(this,arguments)},npm:function(n){return B.apply(this,arguments)},pnpm:function(n){return E.apply(this,arguments)},ruby:function(n){return x.apply(this,arguments)},uv:function(){return T.apply(this,arguments)},yarn:function(n){return O.apply(this,arguments)}},m=(l="darwin"===s.platform()?"gtime":"/usr/bin/time",(p=o.spawnSync(l,["--version"],{stdio:"ignore"})).error||0!==p.status?void 0:[l,"--format","%e %M"]);function v(n){return y.apply(this,arguments)}function y(){return y=n(e().m(function n(t){var a,i,o,l,p,f,d,m,v,y,h,w,j,S,L,B,E,x,T,O,N;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,c.mkdtemp(u.join(s.tmpdir(),null!=(a=t.tempDirPrefix)?a:"exercode-"));case 1:return i=n.v,n.p=2,n.n=3,c.cp(t.cwd,i,{recursive:!0});case 3:return n.n=4,q({packageManager:t.packageManager,projectDir:t.projectDir,runDir:i,projectFilePaths:t.projectFilePaths});case 4:return p=t.env?r(r({},process.env),t.env):process.env,n.n=5,b(t.packageManager,i);case 5:if(f=n.v,d="function"==typeof t.command?t.command({runDir:i}):t.command,m=Date.now(),v=null!=(o=t.outputLimitBytes)?o:52428800,!f){n.n=7;break}return n.n=6,H(f,{cwd:i,env:p,outputLimitBytes:v,stdin:"",timeLimitSeconds:t.timeLimitSeconds});case 6:if(!g(y=n.v)){n.n=7;break}return n.a(2,k({elapsedTimeSeconds:(Date.now()-m)/1e3,options:t,result:y}));case 7:if(!((h=t.timeLimitSeconds-(Date.now()-m)/1e3)<=0)){n.n=8;break}return n.a(2,{stdin:null!=(w=t.stdin)?w:"",stdout:null!=(j=null==(S=y)?void 0:S.stdout)?j:"",stderr:null!=(L=null==(B=y)?void 0:B.stderr)?L:"",status:0,timeSeconds:t.timeLimitSeconds+.001,memoryBytes:null!=(E=null==(x=y)?void 0:x.memoryBytes)?E:0,timedOut:!0,signal:null==(T=y)?void 0:T.signal,outputLimitExceeded:!1});case 8:return n.n=9,H(d,{cwd:i,env:p,outputLimitBytes:v,stdin:null!=(l=t.stdin)?l:"",timeLimitSeconds:h});case 9:if(O=n.v,N=(Date.now()-m)/1e3,!y){n.n=10;break}return n.a(2,k({elapsedTimeSeconds:N,options:t,result:r(r({},O),{},{timeSeconds:y.timeSeconds+O.timeSeconds,memoryBytes:Math.max(y.memoryBytes,O.memoryBytes)})}));case 10:return n.a(2,k({elapsedTimeSeconds:N,options:t,result:O}));case 11:return n.p=11,n.n=12,c.rm(i,{force:!0,recursive:!0});case 12:return n.f(11);case 13:return n.a(2)}},n,null,[[2,,11,13]])})),y.apply(this,arguments)}function k(n){var e;return{stdin:null!=(e=n.options.stdin)?e:"",stdout:n.result.stdout,stderr:n.result.stderr,status:n.result.timedOut||n.result.outputLimitExceeded?0:n.result.status,timeSeconds:n.result.timedOut?n.options.timeLimitSeconds+.001:n.result.timeSeconds||n.elapsedTimeSeconds,memoryBytes:n.result.memoryBytes,timedOut:n.result.timedOut,signal:n.result.signal,outputLimitExceeded:n.result.outputLimitExceeded}}function b(n,e){return d[n](e)}function g(n){return 0!==n.status||n.timedOut||n.outputLimitExceeded}function h(){return(h=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"package.json"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,I(r,["bun.lock","bun.lockb"]);case 3:if(!n.v){n.n=4;break}t=["bun","install","--frozen-lockfile","--silent"],n.n=5;break;case 4:t=["bun","install","--silent"];case 5:return n.a(2,t)}},n)}))).apply(this,arguments)}function w(){return(w=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"Cargo.toml"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,M(u.join(r,"Cargo.lock"));case 3:if(!n.v){n.n=4;break}t=["cargo","fetch","--locked"],n.n=5;break;case 4:t=["cargo","fetch"];case 5:return n.a(2,t)}},n)}))).apply(this,arguments)}function j(){return(j=n(e().m(function n(r){return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"go.mod"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,["go","mod","download"])}},n)}))).apply(this,arguments)}function S(){return(S=n(e().m(function n(r){var t,a,i;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,I(r,["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradlew","gradlew.bat"]);case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:if(t=["--no-daemon","--quiet","dependencies"],"win32"!==process.platform){n.n=6;break}return n.n=3,M(u.join(r,"gradlew.bat"));case 3:if(!n.v){n.n=4;break}a=["cmd.exe","/c","gradlew.bat"].concat(t),n.n=5;break;case 4:a=["gradle"].concat(t);case 5:return n.a(2,a);case 6:return n.n=7,M(u.join(r,"gradlew"));case 7:if(!n.v){n.n=8;break}i=["sh","./gradlew"].concat(t),n.n=9;break;case 8:i=["gradle"].concat(t);case 9:return n.a(2,i)}},n)}))).apply(this,arguments)}function L(){return(L=n(e().m(function n(r){var t,a,i;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"pom.xml"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:if(t=["-q","dependency:go-offline"],"win32"!==process.platform){n.n=6;break}return n.n=3,M(u.join(r,"mvnw.cmd"));case 3:if(!n.v){n.n=4;break}a=["cmd.exe","/c","mvnw.cmd"].concat(t),n.n=5;break;case 4:a=["mvn"].concat(t);case 5:return n.a(2,a);case 6:return n.n=7,M(u.join(r,"mvnw"));case 7:if(!n.v){n.n=8;break}i=["sh","./mvnw"].concat(t),n.n=9;break;case 8:i=["mvn"].concat(t);case 9:return n.a(2,i)}},n)}))).apply(this,arguments)}function B(){return(B=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"package.json"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,M(u.join(r,"package-lock.json"));case 3:if(!n.v){n.n=4;break}t=["npm","ci","--silent"],n.n=5;break;case 4:t=["npm","install","--silent"];case 5:return n.a(2,t)}},n)}))).apply(this,arguments)}function E(){return(E=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"package.json"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,M(u.join(r,"pnpm-lock.yaml"));case 3:if(!n.v){n.n=4;break}t=["pnpm","install","--frozen-lockfile","--silent"],n.n=5;break;case 4:t=["pnpm","install","--silent"];case 5:return n.a(2,t)}},n)}))).apply(this,arguments)}function x(){return(x=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"Gemfile"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,M(u.join(r,"Gemfile.lock"));case 3:if(!n.v){n.n=4;break}t=["bundle","install","--frozen","--quiet"],n.n=5;break;case 4:t=["bundle","install","--quiet"];case 5:return n.a(2,t)}},n)}))).apply(this,arguments)}function T(){return(T=n(e().m(function n(){return e().w(function(n){for(;;)if(0===n.n)return n.a(2,void 0)},n)}))).apply(this,arguments)}function O(){return(O=n(e().m(function n(r){var t,a;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,"package.json"));case 1:if(n.v){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,N(r);case 3:return t=n.v,n.n=4,M(u.join(r,"yarn.lock"));case 4:if(a=n.v,!t){n.n=5;break}return n.a(2,a?["yarn","install","--immutable"]:["yarn","install"]);case 5:return n.a(2,a?["yarn","install","--frozen-lockfile","--silent"]:["yarn","install","--silent"])}},n)}))).apply(this,arguments)}function N(n){return D.apply(this,arguments)}function D(){return(D=n(e().m(function n(r){var t,a,i,o;return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(u.join(r,".yarnrc.yml"));case 1:if(!n.v){n.n=2;break}return n.a(2,!0);case 2:return n.n=3,C(u.join(r,"package.json"));case 3:return a=n.v,i="string"==typeof a.packageManager?a.packageManager:void 0,o=null==(t=/^yarn@(\d+)/.exec(null!=i?i:""))?void 0:t[1],n.a(2,void 0!==o&&Number(o)>=2)}},n)}))).apply(this,arguments)}function I(n,e){return G.apply(this,arguments)}function G(){return(G=n(e().m(function n(r,a){var i,o,c,s;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:i=t(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=5;break}return c=o.value,n.n=3,M(u.join(r,c));case 3:if(!n.v){n.n=4;break}return n.a(2,!0);case 4:n.n=2;break;case 5:n.n=7;break;case 6:n.p=6,s=n.v,i.e(s);case 7:return n.p=7,i.f(),n.f(7);case 8:return n.a(2,!1)}},n,null,[[1,6,7,8]])}))).apply(this,arguments)}function M(n){return P.apply(this,arguments)}function P(){return(P=n(e().m(function n(r){var t;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,c.access(r);case 1:return n.a(2,!0);case 2:if(n.p=2,t=n.v,"ENOENT"===("object"===a(t)&&null!==t&&"code"in t?t.code:void 0)){n.n=3;break}throw t;case 3:return n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function C(n){return F.apply(this,arguments)}function F(){return(F=n(e().m(function n(r){var t,i,o;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,i=JSON,n.n=1,c.readFile(r,"utf8");case 1:return t=i.parse.call(i,n.v),n.a(2,"object"!==a(t)||null===t||Array.isArray(t)?{}:t);case 2:if(n.p=2,!((o=n.v)instanceof SyntaxError)){n.n=3;break}return n.a(2,{});case 3:if("ENOENT"!==("object"===a(o)&&null!==o&&"code"in o?o.code:void 0)){n.n=4;break}return n.a(2,{});case 4:throw o;case 5:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function q(n){return z.apply(this,arguments)}function z(){return(z=n(e().m(function n(r){var a,i,o,c,s;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:i=t(null!=(a=r.projectFilePaths)?a:f[r.packageManager]),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=4;break}return c=o.value,n.n=3,K(u.join(r.projectDir,c),u.join(r.runDir,c));case 3:n.n=2;break;case 4:n.n=6;break;case 5:n.p=5,s=n.v,i.e(s);case 6:return n.p=6,i.f(),n.f(6);case 7:return n.a(2)}},n,null,[[1,5,6,7]])}))).apply(this,arguments)}function K(n,e){return A.apply(this,arguments)}function A(){return(A=n(e().m(function n(r,t){var i;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,c.cp(r,t,{recursive:!0});case 1:n.n=3;break;case 2:if(n.p=2,i=n.v,"ENOENT"===("object"===a(i)&&null!==i&&"code"in i?i.code:void 0)){n.n=3;break}throw i;case 3:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function H(n,e){return R.apply(this,arguments)}function R(){return R=n(e().m(function n(r,t){var a,c,s,l,p,f,d,v,y,k,b,g,h,w,j,S,L,B;return e().w(function(n){for(;;)switch(n.n){case 0:return a=void 0===m?void 0:u.join(t.cwd,".exercode-time-result"),c=void 0===m?r:[].concat(i(m),["--output=".concat(a)],i(r)),s=o.spawn(c[0],c.slice(1),{cwd:t.cwd,detached:"win32"!==process.platform,env:t.env,stdio:["pipe","pipe","pipe"]}),l=[],p=[],f=0,d=!1,v=!1,y=function(n,e){if(f>=t.outputLimitBytes)e.byteLength>0&&(v=!0,_(s,"SIGKILL"));else{var r=t.outputLimitBytes-f,a=e.byteLength>r?e.subarray(0,r):e;n.push(a),f+=a.byteLength,e.byteLength>r&&(v=!0,_(s,"SIGKILL"))}},s.stdout.on("data",function(n){return y(l,n)}),s.stderr.on("data",function(n){return y(p,n)}),k=setTimeout(function(){d=!0,_(s,"SIGTERM")},1e3*t.timeLimitSeconds),(b=setTimeout(function(){d&&_(s,"SIGKILL")},1e3*t.timeLimitSeconds+1e3)).unref(),n.n=1,new Promise(function(n,e){var r,a=!1,i=function(n){a||(r=n,_(s,"SIGKILL"),void 0===s.pid&&(a=!0,e(n)))};s.on("error",i),s.stdin.on("error",function(n){"EPIPE"!==n.code&&i(n)}),s.on("close",function(t,i){a||(a=!0,r?e(r):n({status:null!=t?t:void 0,signal:null!=i?i:void 0}))}),s.stdin.end(t.stdin)}).finally(function(){clearTimeout(k),clearTimeout(b)});case 1:if(g=n.v,h=g.status,w=g.signal,void 0!==a){n.n=2;break}B={timeSeconds:0,memoryBytes:0},n.n=4;break;case 2:return n.n=3,J(a);case 3:B=n.v;case 4:return S=(j=B).timeSeconds,L=j.memoryBytes,n.a(2,{stdout:Buffer.concat(l).toString(),stderr:Buffer.concat(p).toString(),status:h,timeSeconds:S,memoryBytes:L,timedOut:d,signal:w,outputLimitExceeded:v})}},n)})),R.apply(this,arguments)}function _(n,e){if(void 0!==n.pid)try{if("win32"===process.platform)return void n.kill(e);process.kill(-n.pid,e)}catch(n){var r="object"===a(n)&&null!==n&&"code"in n?n.code:void 0;if("ESRCH"!==r&&"EPERM"!==r)throw n}}function J(n){return $.apply(this,arguments)}function $(){return($=n(e().m(function n(r){var t,i,o;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,c.readFile(r,"utf8");case 1:t=n.v,n.n=4;break;case 2:if(n.p=2,o=n.v,"ENOENT"===("object"===a(o)&&null!==o&&"code"in o?o.code:void 0)){n.n=3;break}throw o;case 3:return n.a(2,{timeSeconds:0,memoryBytes:0});case 4:if(i=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(t)){n.n=5;break}return n.a(2,{timeSeconds:0,memoryBytes:0});case 5:return n.a(2,{timeSeconds:Number(i[1].replace(",",".")),memoryBytes:1024*Number(i[2])})}},n,null,[[0,2]])}))).apply(this,arguments)}export{q as copyPackageManagerProjectFiles,v as runCommandInTemporaryPackageManagerProject};
//# sourceMappingURL=runCommandInTemporaryPackageManagerProject.js.map
import e from"node:child_process";import t from"node:fs/promises";import n from"node:os";import r from"node:path";const i={bun:[`package.json`,`bun.lock`,`bun.lockb`],cargo:[`Cargo.toml`,`Cargo.lock`],go:[`go.mod`,`go.sum`],gradle:[`build.gradle`,`build.gradle.kts`,`settings.gradle`,`settings.gradle.kts`,`gradle.properties`,`gradle.lockfile`,`buildscript-gradle.lockfile`,`gradle`,`gradlew`,`gradlew.bat`],maven:[`pom.xml`,`.mvn`,`mvnw`,`mvnw.cmd`],npm:[`package.json`,`package-lock.json`],pnpm:[`package.json`,`pnpm-lock.yaml`,`pnpm-workspace.yaml`],ruby:[`Gemfile`,`Gemfile.lock`,`.ruby-version`],uv:[`pyproject.toml`,`uv.lock`],yarn:[`package.json`,`yarn.lock`,`.yarnrc`,`.yarnrc.yml`,`.yarn`]},a={bun:d,cargo:f,go:p,gradle:m,maven:h,npm:g,pnpm:_,ruby:v,uv:y,yarn:b},o=O();async function s(e){let i=await t.mkdtemp(r.join(n.tmpdir(),e.tempDirPrefix??`exercode-`));try{await t.cp(e.cwd,i,{recursive:!0}),await T({packageManager:e.packageManager,projectDir:e.projectDir,runDir:i,projectFilePaths:e.projectFilePaths});let n=e.env?{...process.env,...e.env}:process.env,r=await l(e.packageManager,i),a=typeof e.command==`function`?e.command({runDir:i}):e.command,o=Date.now(),s=e.outputLimitBytes??52428800,d;if(r&&(d=await D(r,{cwd:i,env:n,outputLimitBytes:s,stdin:``,timeLimitSeconds:e.timeLimitSeconds}),u(d)))return c({elapsedTimeSeconds:(Date.now()-o)/1e3,options:e,result:d});let f=e.timeLimitSeconds-(Date.now()-o)/1e3;if(f<=0)return{stdin:e.stdin??``,stdout:d?.stdout??``,stderr:d?.stderr??``,status:0,timeSeconds:e.timeLimitSeconds+.001,memoryBytes:d?.memoryBytes??0,timedOut:!0,signal:d?.signal,outputLimitExceeded:!1};let p=await D(a,{cwd:i,env:n,outputLimitBytes:s,stdin:e.stdin??``,timeLimitSeconds:f}),m=(Date.now()-o)/1e3;return c(d?{elapsedTimeSeconds:m,options:e,result:{...p,timeSeconds:d.timeSeconds+p.timeSeconds,memoryBytes:Math.max(d.memoryBytes,p.memoryBytes)}}:{elapsedTimeSeconds:m,options:e,result:p})}finally{await t.rm(i,{force:!0,recursive:!0})}}function c(e){return{stdin:e.options.stdin??``,stdout:e.result.stdout,stderr:e.result.stderr,status:e.result.timedOut||e.result.outputLimitExceeded?0:e.result.status,timeSeconds:e.result.timedOut?e.options.timeLimitSeconds+.001:e.result.timeSeconds||e.elapsedTimeSeconds,memoryBytes:e.result.memoryBytes,timedOut:e.result.timedOut,signal:e.result.signal,outputLimitExceeded:e.result.outputLimitExceeded}}function l(e,t){return a[e](t)}function u(e){return e.status!==0||e.timedOut||e.outputLimitExceeded}async function d(e){if(await C(r.join(e,`package.json`)))return await S(e,[`bun.lock`,`bun.lockb`])?[`bun`,`install`,`--frozen-lockfile`,`--silent`]:[`bun`,`install`,`--silent`]}async function f(e){if(await C(r.join(e,`Cargo.toml`)))return await C(r.join(e,`Cargo.lock`))?[`cargo`,`fetch`,`--locked`]:[`cargo`,`fetch`]}async function p(e){if(await C(r.join(e,`go.mod`)))return[`go`,`mod`,`download`]}async function m(e){if(!await S(e,[`build.gradle`,`build.gradle.kts`,`settings.gradle`,`settings.gradle.kts`,`gradlew`,`gradlew.bat`]))return;let t=[`--no-daemon`,`--quiet`,`dependencies`];return process.platform===`win32`?await C(r.join(e,`gradlew.bat`))?[`cmd.exe`,`/c`,`gradlew.bat`,...t]:[`gradle`,...t]:await C(r.join(e,`gradlew`))?[`sh`,`./gradlew`,...t]:[`gradle`,...t]}async function h(e){if(!await C(r.join(e,`pom.xml`)))return;let t=[`-q`,`dependency:go-offline`];return process.platform===`win32`?await C(r.join(e,`mvnw.cmd`))?[`cmd.exe`,`/c`,`mvnw.cmd`,...t]:[`mvn`,...t]:await C(r.join(e,`mvnw`))?[`sh`,`./mvnw`,...t]:[`mvn`,...t]}async function g(e){if(await C(r.join(e,`package.json`)))return await C(r.join(e,`package-lock.json`))?[`npm`,`ci`,`--silent`]:[`npm`,`install`,`--silent`]}async function _(e){if(await C(r.join(e,`package.json`)))return await C(r.join(e,`pnpm-lock.yaml`))?[`pnpm`,`install`,`--frozen-lockfile`,`--silent`]:[`pnpm`,`install`,`--silent`]}async function v(e){if(await C(r.join(e,`Gemfile`)))return await C(r.join(e,`Gemfile.lock`))?[`bundle`,`install`,`--frozen`,`--quiet`]:[`bundle`,`install`,`--quiet`]}async function y(){}async function b(e){if(!await C(r.join(e,`package.json`)))return;let t=await x(e),n=await C(r.join(e,`yarn.lock`));return t?n?[`yarn`,`install`,`--immutable`]:[`yarn`,`install`]:n?[`yarn`,`install`,`--frozen-lockfile`,`--silent`]:[`yarn`,`install`,`--silent`]}async function x(e){if(await C(r.join(e,`.yarnrc.yml`)))return!0;let t=await w(r.join(e,`package.json`)),n=typeof t.packageManager==`string`?t.packageManager:void 0,i=/^yarn@(\d+)/.exec(n??``)?.[1];return i!==void 0&&Number(i)>=2}async function S(e,t){for(let n of t)if(await C(r.join(e,n)))return!0;return!1}async function C(e){try{return await t.access(e),!0}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e;return!1}}async function w(e){try{let n=JSON.parse(await t.readFile(e,`utf8`));return typeof n==`object`&&n&&!Array.isArray(n)?n:{}}catch(e){if(e instanceof SyntaxError||(typeof e==`object`&&e&&`code`in e?e.code:void 0)===`ENOENT`)return{};throw e}}async function T(e){for(let t of e.projectFilePaths??i[e.packageManager])await E(r.join(e.projectDir,t),r.join(e.runDir,t))}async function E(e,n){try{await t.cp(e,n,{recursive:!0})}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e}}async function D(t,n){let i=o===void 0?void 0:r.join(n.cwd,`.exercode-time-result`),a=o===void 0?t:[...o,`--output=${i}`,...t],s=e.spawn(a[0],a.slice(1),{cwd:n.cwd,detached:process.platform!==`win32`,env:n.env,stdio:[`pipe`,`pipe`,`pipe`]}),c=[],l=[],u=0,d=!1,f=!1,p=(e,t)=>{if(u>=n.outputLimitBytes){t.byteLength>0&&(f=!0,k(s,`SIGKILL`));return}let r=n.outputLimitBytes-u,i=t.byteLength>r?t.subarray(0,r):t;e.push(i),u+=i.byteLength,t.byteLength>r&&(f=!0,k(s,`SIGKILL`))};s.stdout.on(`data`,e=>p(c,e)),s.stderr.on(`data`,e=>p(l,e));let m=setTimeout(()=>{d=!0,k(s,`SIGTERM`)},n.timeLimitSeconds*1e3),h=setTimeout(()=>{d&&k(s,`SIGKILL`)},n.timeLimitSeconds*1e3+1e3);h.unref();let{status:g,signal:_}=await new Promise((e,t)=>{let r=!1,i,a=e=>{r||(i=e,k(s,`SIGKILL`),s.pid===void 0&&(r=!0,t(e)))};s.on(`error`,a),s.stdin.on(`error`,e=>{e.code!==`EPIPE`&&a(e)}),s.on(`close`,(n,a)=>{if(!r){if(r=!0,i){t(i);return}e({status:n??void 0,signal:a??void 0})}}),s.stdin.end(n.stdin)}).finally(()=>{clearTimeout(m),clearTimeout(h)}),{timeSeconds:v,memoryBytes:y}=i===void 0?{timeSeconds:0,memoryBytes:0}:await A(i);return{stdout:Buffer.concat(c).toString(),stderr:Buffer.concat(l).toString(),status:g,timeSeconds:v,memoryBytes:y,timedOut:d,signal:_,outputLimitExceeded:f}}function O(){let t=n.platform()===`darwin`?`gtime`:`/usr/bin/time`,r=e.spawnSync(t,[`--version`],{stdio:`ignore`});if(!(r.error||r.status!==0))return[t,`--format`,`%e %M`]}function k(e,t){if(e.pid!==void 0)try{if(process.platform===`win32`){e.kill(t);return}process.kill(-e.pid,t)}catch(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;if(t!==`ESRCH`&&t!==`EPERM`)throw e}}async function A(e){let n;try{n=await t.readFile(e,`utf8`)}catch(e){if((typeof e==`object`&&e&&`code`in e?e.code:void 0)!==`ENOENT`)throw e;return{timeSeconds:0,memoryBytes:0}}let r=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(n);return r?{timeSeconds:Number(r[1].replace(`,`,`.`)),memoryBytes:Number(r[2])*1024}:{timeSeconds:0,memoryBytes:0}}export{T as copyPackageManagerProjectFiles,s as runCommandInTemporaryPackageManagerProject};
//# sourceMappingURL=runCommandInTemporaryPackageManagerProject.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"runCommandInTemporaryPackageManagerProject.js","sources":["../../src/helpers/runCommandInTemporaryPackageManagerProject.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport type PackageManager = 'bun' | 'cargo' | 'go' | 'gradle' | 'maven' | 'npm' | 'pnpm' | 'ruby' | 'uv' | 'yarn';\ntype PackageManagerInstallCommand = readonly [string, ...string[]];\n\nexport interface PackageManagerCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}\n\nexport interface RunCommandInTemporaryPackageManagerProjectOptions {\n cwd: string;\n projectDir: string;\n packageManager: PackageManager;\n command: readonly [string, ...string[]] | ((context: { runDir: string }) => readonly [string, ...string[]]);\n stdin?: string;\n env?: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n outputLimitBytes?: number;\n tempDirPrefix?: string;\n projectFilePaths?: readonly string[];\n}\n\nconst packageManagerProjectFilePaths = {\n bun: ['package.json', 'bun.lock', 'bun.lockb'],\n cargo: ['Cargo.toml', 'Cargo.lock'],\n go: ['go.mod', 'go.sum'],\n gradle: [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradle.properties',\n 'gradle.lockfile',\n 'buildscript-gradle.lockfile',\n 'gradle',\n 'gradlew',\n 'gradlew.bat',\n ],\n maven: ['pom.xml', '.mvn', 'mvnw', 'mvnw.cmd'],\n npm: ['package.json', 'package-lock.json'],\n pnpm: ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'],\n ruby: ['Gemfile', 'Gemfile.lock', '.ruby-version'],\n uv: ['pyproject.toml', 'uv.lock'],\n yarn: ['package.json', 'yarn.lock', '.yarnrc', '.yarnrc.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommandResolvers = {\n bun: resolveBunInstallCommand,\n cargo: resolveCargoInstallCommand,\n go: resolveGoInstallCommand,\n gradle: resolveGradleInstallCommand,\n maven: resolveMavenInstallCommand,\n npm: resolveNpmInstallCommand,\n pnpm: resolvePnpmInstallCommand,\n ruby: resolveRubyInstallCommand,\n uv: resolveUvInstallCommand,\n yarn: resolveYarnInstallCommand,\n} as const satisfies Record<PackageManager, (runDir: string) => Promise<PackageManagerInstallCommand | undefined>>;\n\nconst defaultOutputLimitBytes = 50 * 1024 * 1024;\nconst killGracePeriodMilliseconds = 1000;\nconst timeCommand = resolveTimeCommand();\n\n/**\n * Copies a submission directory to a temporary directory, overlays package\n * manager project files from the problem directory, prepares dependencies,\n * runs a command, and then removes the temporary directory.\n */\nexport async function runCommandInTemporaryPackageManagerProject(\n options: RunCommandInTemporaryPackageManagerProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const runDir = await fs.mkdtemp(path.join(os.tmpdir(), options.tempDirPrefix ?? 'exercode-'));\n try {\n await fs.cp(options.cwd, runDir, { recursive: true });\n await copyPackageManagerProjectFiles({\n packageManager: options.packageManager,\n projectDir: options.projectDir,\n runDir,\n projectFilePaths: options.projectFilePaths,\n });\n\n const env = options.env ? { ...process.env, ...options.env } : process.env;\n const installCommand = await resolveInstallCommand(options.packageManager, runDir);\n const command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const outputLimitBytes = options.outputLimitBytes ?? defaultOutputLimitBytes;\n let installResult: Awaited<ReturnType<typeof spawnWithInput>> | undefined;\n\n if (installCommand) {\n installResult = await spawnWithInput(installCommand, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n if (isFailedSpawnResult(installResult)) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds: (Date.now() - startedAt) / 1000,\n options,\n result: installResult,\n });\n }\n }\n\n const remainingTimeLimitSeconds = options.timeLimitSeconds - (Date.now() - startedAt) / 1000;\n if (remainingTimeLimitSeconds <= 0) {\n return {\n stdin: options.stdin ?? '',\n stdout: installResult?.stdout ?? '',\n stderr: installResult?.stderr ?? '',\n status: 0,\n timeSeconds: options.timeLimitSeconds + 1e-3,\n memoryBytes: installResult?.memoryBytes ?? 0,\n timedOut: true,\n signal: installResult?.signal,\n outputLimitExceeded: false,\n };\n }\n\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: remainingTimeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n if (installResult) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds,\n options,\n result: {\n ...result,\n timeSeconds: installResult.timeSeconds + result.timeSeconds,\n memoryBytes: Math.max(installResult.memoryBytes, result.memoryBytes),\n },\n });\n }\n\n return toPackageManagerCommandRunResult({ elapsedTimeSeconds, options, result });\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\n }\n}\n\nfunction toPackageManagerCommandRunResult(context: {\n elapsedTimeSeconds: number;\n options: RunCommandInTemporaryPackageManagerProjectOptions;\n result: Awaited<ReturnType<typeof spawnWithInput>>;\n}): PackageManagerCommandRunResult {\n return {\n stdin: context.options.stdin ?? '',\n stdout: context.result.stdout,\n stderr: context.result.stderr,\n status: context.result.timedOut || context.result.outputLimitExceeded ? 0 : context.result.status,\n timeSeconds: context.result.timedOut\n ? context.options.timeLimitSeconds + 1e-3\n : context.result.timeSeconds || context.elapsedTimeSeconds,\n memoryBytes: context.result.memoryBytes,\n timedOut: context.result.timedOut,\n signal: context.result.signal,\n outputLimitExceeded: context.result.outputLimitExceeded,\n };\n}\n\nfunction resolveInstallCommand(\n packageManager: PackageManager,\n runDir: string\n): Promise<PackageManagerInstallCommand | undefined> {\n return packageManagerInstallCommandResolvers[packageManager](runDir);\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\n}\n\nasync function resolveBunInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n // Bun supports --silent and it keeps successful preparation output out of judge output buffers.\n return (await hasAnyPath(runDir, ['bun.lock', 'bun.lockb']))\n ? ['bun', 'install', '--frozen-lockfile', '--silent']\n : ['bun', 'install', '--silent'];\n}\n\nasync function resolveCargoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Cargo.toml')))) return undefined;\n return (await pathExists(path.join(runDir, 'Cargo.lock'))) ? ['cargo', 'fetch', '--locked'] : ['cargo', 'fetch'];\n}\n\nasync function resolveGoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'go.mod')))) return undefined;\n return ['go', 'mod', 'download'];\n}\n\nasync function resolveGradleInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (\n !(await hasAnyPath(runDir, [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradlew',\n 'gradlew.bat',\n ]))\n )\n return undefined;\n const args = ['--no-daemon', '--quiet', 'dependencies'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'gradlew.bat')))\n ? ['cmd.exe', '/c', 'gradlew.bat', ...args]\n : ['gradle', ...args];\n }\n return (await pathExists(path.join(runDir, 'gradlew'))) ? ['sh', './gradlew', ...args] : ['gradle', ...args];\n}\n\nasync function resolveMavenInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'pom.xml')))) return undefined;\n const args = ['-q', 'dependency:go-offline'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'mvnw.cmd')))\n ? ['cmd.exe', '/c', 'mvnw.cmd', ...args]\n : ['mvn', ...args];\n }\n return (await pathExists(path.join(runDir, 'mvnw'))) ? ['sh', './mvnw', ...args] : ['mvn', ...args];\n}\n\nasync function resolveNpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'package-lock.json')))\n ? ['npm', 'ci', '--silent']\n : ['npm', 'install', '--silent'];\n}\n\nasync function resolvePnpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'pnpm-lock.yaml')))\n ? ['pnpm', 'install', '--frozen-lockfile', '--silent']\n : ['pnpm', 'install', '--silent'];\n}\n\nasync function resolveRubyInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Gemfile')))) return undefined;\n return (await pathExists(path.join(runDir, 'Gemfile.lock')))\n ? ['bundle', 'install', '--frozen', '--quiet']\n : ['bundle', 'install', '--quiet'];\n}\n\nasync function resolveUvInstallCommand(): Promise<undefined> {\n return undefined;\n}\n\nasync function resolveYarnInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n const isBerry = await isYarnBerryProject(runDir);\n const hasLockfile = await pathExists(path.join(runDir, 'yarn.lock'));\n if (isBerry) return hasLockfile ? ['yarn', 'install', '--immutable'] : ['yarn', 'install'];\n return hasLockfile ? ['yarn', 'install', '--frozen-lockfile', '--silent'] : ['yarn', 'install', '--silent'];\n}\n\nasync function isYarnBerryProject(runDir: string): Promise<boolean> {\n if (await pathExists(path.join(runDir, '.yarnrc.yml'))) return true;\n\n const packageJson = await readJson(path.join(runDir, 'package.json'));\n const packageManager = typeof packageJson.packageManager === 'string' ? packageJson.packageManager : undefined;\n const yarnMajorVersion = /^yarn@(\\d+)/.exec(packageManager ?? '')?.[1];\n return yarnMajorVersion !== undefined && Number(yarnMajorVersion) >= 2;\n}\n\nasync function hasAnyPath(directoryPath: string, relativePaths: readonly string[]): Promise<boolean> {\n for (const relativePath of relativePaths) {\n if (await pathExists(path.join(directoryPath, relativePath))) return true;\n }\n return false;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return false;\n }\n}\n\nasync function readJson(filePath: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await fs.readFile(filePath, 'utf8')) as unknown;\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch (error) {\n if (error instanceof SyntaxError) return {};\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code === 'ENOENT') return {};\n throw error;\n }\n}\n\nexport async function copyPackageManagerProjectFiles(options: {\n packageManager: PackageManager;\n projectDir: string;\n runDir: string;\n projectFilePaths?: readonly string[];\n}): Promise<void> {\n for (const projectFilePath of options.projectFilePaths ?? packageManagerProjectFilePaths[options.packageManager]) {\n await copyPathIfExists(path.join(options.projectDir, projectFilePath), path.join(options.runDir, projectFilePath));\n }\n}\n\nasync function copyPathIfExists(sourcePath: string, destinationPath: string): Promise<void> {\n try {\n await fs.cp(sourcePath, destinationPath, { recursive: true });\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n }\n}\n\nasync function spawnWithInput(\n command: readonly [string, ...string[]],\n context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n outputLimitBytes: number;\n stdin: string;\n timeLimitSeconds: number;\n }\n): Promise<{\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}> {\n const timeOutputPath = timeCommand === undefined ? undefined : path.join(context.cwd, '.exercode-time-result');\n const spawnedCommand =\n timeCommand === undefined ? command : ([...timeCommand, `--output=${timeOutputPath}`, ...command] as const);\n const subprocess = childProcess.spawn(spawnedCommand[0], spawnedCommand.slice(1), {\n cwd: context.cwd,\n detached: process.platform !== 'win32',\n env: context.env,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let outputBytes = 0;\n let timedOut = false;\n let outputLimitExceeded = false;\n\n const appendOutputChunk = (chunks: Buffer[], chunk: Buffer): void => {\n if (outputBytes >= context.outputLimitBytes) {\n if (chunk.byteLength > 0) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n return;\n }\n\n const remainingBytes = context.outputLimitBytes - outputBytes;\n const appendedChunk = chunk.byteLength > remainingBytes ? chunk.subarray(0, remainingBytes) : chunk;\n chunks.push(appendedChunk);\n outputBytes += appendedChunk.byteLength;\n\n if (chunk.byteLength > remainingBytes) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n };\n\n subprocess.stdout.on('data', (chunk: Buffer) => appendOutputChunk(stdoutChunks, chunk));\n subprocess.stderr.on('data', (chunk: Buffer) => appendOutputChunk(stderrChunks, chunk));\n\n const timeout = setTimeout(() => {\n timedOut = true;\n killSubprocessGroup(subprocess, 'SIGTERM');\n }, context.timeLimitSeconds * 1000);\n const killTimeout = setTimeout(\n () => {\n if (timedOut) killSubprocessGroup(subprocess, 'SIGKILL');\n },\n context.timeLimitSeconds * 1000 + killGracePeriodMilliseconds\n );\n killTimeout.unref();\n\n const { status, signal } = await new Promise<{ status: number | undefined; signal: NodeJS.Signals | undefined }>(\n (resolve, reject) => {\n let settled = false;\n let pendingError: Error | undefined;\n const failAfterClose = (error: Error): void => {\n if (settled) return;\n pendingError = error;\n killSubprocessGroup(subprocess, 'SIGKILL');\n if (subprocess.pid === undefined) {\n settled = true;\n reject(error);\n }\n };\n subprocess.on('error', failAfterClose);\n subprocess.stdin.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code !== 'EPIPE') failAfterClose(error);\n });\n subprocess.on('close', (code, closeSignal) => {\n if (settled) return;\n settled = true;\n if (pendingError) {\n reject(pendingError);\n return;\n }\n resolve({ status: code ?? undefined, signal: closeSignal ?? undefined });\n });\n subprocess.stdin.end(context.stdin);\n }\n ).finally(() => {\n clearTimeout(timeout);\n clearTimeout(killTimeout);\n });\n\n const { timeSeconds, memoryBytes } =\n timeOutputPath === undefined ? { timeSeconds: 0, memoryBytes: 0 } : await readTimeResult(timeOutputPath);\n\n return {\n stdout: Buffer.concat(stdoutChunks).toString(),\n stderr: Buffer.concat(stderrChunks).toString(),\n status,\n timeSeconds,\n memoryBytes,\n timedOut,\n signal,\n outputLimitExceeded,\n };\n}\n\nfunction resolveTimeCommand(): readonly [string, ...string[]] | undefined {\n const command = os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time';\n const result = childProcess.spawnSync(command, ['--version'], { stdio: 'ignore' });\n if (result.error || result.status !== 0) return undefined;\n\n return [command, '--format', '%e %M'];\n}\n\nfunction killSubprocessGroup(subprocess: childProcess.ChildProcess, signal: NodeJS.Signals): void {\n if (subprocess.pid === undefined) return;\n\n try {\n if (process.platform === 'win32') {\n subprocess.kill(signal);\n return;\n }\n process.kill(-subprocess.pid, signal);\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ESRCH' && code !== 'EPERM') throw error;\n }\n}\n\nasync function readTimeResult(timeOutputPath: string): Promise<{ timeSeconds: number; memoryBytes: number }> {\n let content: string;\n try {\n content = await fs.readFile(timeOutputPath, 'utf8');\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return { timeSeconds: 0, memoryBytes: 0 };\n }\n\n const match = /(\\d+(?:[.,]\\d+)?) (\\d+)\\s*$/.exec(content);\n if (!match) return { timeSeconds: 0, memoryBytes: 0 };\n\n return { timeSeconds: Number(match[1]!.replace(',', '.')), memoryBytes: Number(match[2]) * 1024 };\n}\n"],"names":["command","result","packageManagerProjectFilePaths","bun","cargo","go","gradle","maven","npm","pnpm","ruby","uv","yarn","packageManagerInstallCommandResolvers","_x2","_resolveBunInstallCommand","apply","this","arguments","_x3","_resolveCargoInstallCommand","_x4","_resolveGoInstallCommand","_x5","_resolveGradleInstallCommand","_x6","_resolveMavenInstallCommand","_x7","_resolveNpmInstallCommand","_x8","_resolvePnpmInstallCommand","_x9","_resolveRubyInstallCommand","_resolveUvInstallCommand","_x0","_resolveYarnInstallCommand","timeCommand","os","platform","childProcess","spawnSync","stdio","error","status","runCommandInTemporaryPackageManagerProject","_x","_runCommandInTemporaryPackageManagerProject","_asyncToGenerator","_regenerator","m","_callee","options","_options$tempDirPrefi","runDir","_options$outputLimitB","_options$stdin2","env","installCommand","startedAt","outputLimitBytes","installResult","remainingTimeLimitSeconds","_options$stdin","_installResult$stdout","_installResult","_installResult$stderr","_installResult2","_installResult$memory","_installResult3","_installResult4","elapsedTimeSeconds","w","_context","p","n","fs","mkdtemp","path","join","tmpdir","tempDirPrefix","v","cp","cwd","recursive","copyPackageManagerProjectFiles","packageManager","projectDir","projectFilePaths","_objectSpread","process","resolveInstallCommand","Date","now","spawnWithInput","stdin","timeLimitSeconds","isFailedSpawnResult","a","toPackageManagerCommandRunResult","stdout","stderr","timeSeconds","memoryBytes","timedOut","signal","outputLimitExceeded","Math","max","rm","force","f","context","_context$options$stdi","_callee2","_t","_context2","pathExists","undefined","hasAnyPath","_callee3","_t2","_context3","_callee4","_context4","_callee5","args","_t3","_t4","_context5","concat","_callee6","_t5","_t6","_context6","_callee7","_t7","_context7","_callee8","_t8","_context8","_callee9","_t9","_context9","_callee0","_context0","_callee1","isBerry","hasLockfile","_context1","isYarnBerryProject","_x1","_isYarnBerryProject","_callee10","_exec","packageJson","yarnMajorVersion","_context10","readJson","exec","Number","_x10","_x11","_hasAnyPath","_callee11","directoryPath","relativePaths","_iterator","_step","relativePath","_t0","_context11","_createForOfIteratorHelper","s","done","value","e","_x12","_pathExists","_callee12","filePath","_t1","_context12","access","_typeof","code","_x13","_readJson","_callee13","parsed","_t10","_t11","_context13","JSON","readFile","parse","call","Array","isArray","SyntaxError","_x14","_copyPackageManagerProjectFiles","_callee14","_options$projectFileP","_iterator2","_step2","projectFilePath","_t12","_context14","copyPathIfExists","_x15","_x16","_copyPathIfExists","_callee15","sourcePath","destinationPath","_t13","_context15","_x17","_x18","_spawnWithInput","_callee16","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t14","_context16","_toConsumableArray","spawn","slice","detached","chunks","chunk","byteLength","killSubprocessGroup","remainingBytes","appendedChunk","subarray","push","on","setTimeout","unref","Promise","resolve","reject","pendingError","settled","failAfterClose","pid","closeSignal","end","clearTimeout","readTimeResult","Buffer","toString","kill","_x19","_readTimeResult","_callee17","content","match","_t15","_context17","replace"],"mappings":"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"}
{"version":3,"file":"runCommandInTemporaryPackageManagerProject.js","names":[],"sources":["../../src/helpers/runCommandInTemporaryPackageManagerProject.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport type PackageManager = 'bun' | 'cargo' | 'go' | 'gradle' | 'maven' | 'npm' | 'pnpm' | 'ruby' | 'uv' | 'yarn';\ntype PackageManagerInstallCommand = readonly [string, ...string[]];\n\nexport interface PackageManagerCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}\n\nexport interface RunCommandInTemporaryPackageManagerProjectOptions {\n cwd: string;\n projectDir: string;\n packageManager: PackageManager;\n command: readonly [string, ...string[]] | ((context: { runDir: string }) => readonly [string, ...string[]]);\n stdin?: string;\n env?: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n outputLimitBytes?: number;\n tempDirPrefix?: string;\n projectFilePaths?: readonly string[];\n}\n\nconst packageManagerProjectFilePaths = {\n bun: ['package.json', 'bun.lock', 'bun.lockb'],\n cargo: ['Cargo.toml', 'Cargo.lock'],\n go: ['go.mod', 'go.sum'],\n gradle: [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradle.properties',\n 'gradle.lockfile',\n 'buildscript-gradle.lockfile',\n 'gradle',\n 'gradlew',\n 'gradlew.bat',\n ],\n maven: ['pom.xml', '.mvn', 'mvnw', 'mvnw.cmd'],\n npm: ['package.json', 'package-lock.json'],\n pnpm: ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'],\n ruby: ['Gemfile', 'Gemfile.lock', '.ruby-version'],\n uv: ['pyproject.toml', 'uv.lock'],\n yarn: ['package.json', 'yarn.lock', '.yarnrc', '.yarnrc.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommandResolvers = {\n bun: resolveBunInstallCommand,\n cargo: resolveCargoInstallCommand,\n go: resolveGoInstallCommand,\n gradle: resolveGradleInstallCommand,\n maven: resolveMavenInstallCommand,\n npm: resolveNpmInstallCommand,\n pnpm: resolvePnpmInstallCommand,\n ruby: resolveRubyInstallCommand,\n uv: resolveUvInstallCommand,\n yarn: resolveYarnInstallCommand,\n} as const satisfies Record<PackageManager, (runDir: string) => Promise<PackageManagerInstallCommand | undefined>>;\n\nconst defaultOutputLimitBytes = 50 * 1024 * 1024;\nconst killGracePeriodMilliseconds = 1000;\nconst timeCommand = resolveTimeCommand();\n\n/**\n * Copies a submission directory to a temporary directory, overlays package\n * manager project files from the problem directory, prepares dependencies,\n * runs a command, and then removes the temporary directory.\n */\nexport async function runCommandInTemporaryPackageManagerProject(\n options: RunCommandInTemporaryPackageManagerProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const runDir = await fs.mkdtemp(path.join(os.tmpdir(), options.tempDirPrefix ?? 'exercode-'));\n try {\n await fs.cp(options.cwd, runDir, { recursive: true });\n await copyPackageManagerProjectFiles({\n packageManager: options.packageManager,\n projectDir: options.projectDir,\n runDir,\n projectFilePaths: options.projectFilePaths,\n });\n\n const env = options.env ? { ...process.env, ...options.env } : process.env;\n const installCommand = await resolveInstallCommand(options.packageManager, runDir);\n const command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const outputLimitBytes = options.outputLimitBytes ?? defaultOutputLimitBytes;\n let installResult: Awaited<ReturnType<typeof spawnWithInput>> | undefined;\n\n if (installCommand) {\n installResult = await spawnWithInput(installCommand, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n if (isFailedSpawnResult(installResult)) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds: (Date.now() - startedAt) / 1000,\n options,\n result: installResult,\n });\n }\n }\n\n const remainingTimeLimitSeconds = options.timeLimitSeconds - (Date.now() - startedAt) / 1000;\n if (remainingTimeLimitSeconds <= 0) {\n return {\n stdin: options.stdin ?? '',\n stdout: installResult?.stdout ?? '',\n stderr: installResult?.stderr ?? '',\n status: 0,\n timeSeconds: options.timeLimitSeconds + 1e-3,\n memoryBytes: installResult?.memoryBytes ?? 0,\n timedOut: true,\n signal: installResult?.signal,\n outputLimitExceeded: false,\n };\n }\n\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env,\n outputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: remainingTimeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n if (installResult) {\n return toPackageManagerCommandRunResult({\n elapsedTimeSeconds,\n options,\n result: {\n ...result,\n timeSeconds: installResult.timeSeconds + result.timeSeconds,\n memoryBytes: Math.max(installResult.memoryBytes, result.memoryBytes),\n },\n });\n }\n\n return toPackageManagerCommandRunResult({ elapsedTimeSeconds, options, result });\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\n }\n}\n\nfunction toPackageManagerCommandRunResult(context: {\n elapsedTimeSeconds: number;\n options: RunCommandInTemporaryPackageManagerProjectOptions;\n result: Awaited<ReturnType<typeof spawnWithInput>>;\n}): PackageManagerCommandRunResult {\n return {\n stdin: context.options.stdin ?? '',\n stdout: context.result.stdout,\n stderr: context.result.stderr,\n status: context.result.timedOut || context.result.outputLimitExceeded ? 0 : context.result.status,\n timeSeconds: context.result.timedOut\n ? context.options.timeLimitSeconds + 1e-3\n : context.result.timeSeconds || context.elapsedTimeSeconds,\n memoryBytes: context.result.memoryBytes,\n timedOut: context.result.timedOut,\n signal: context.result.signal,\n outputLimitExceeded: context.result.outputLimitExceeded,\n };\n}\n\nfunction resolveInstallCommand(\n packageManager: PackageManager,\n runDir: string\n): Promise<PackageManagerInstallCommand | undefined> {\n return packageManagerInstallCommandResolvers[packageManager](runDir);\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\n}\n\nasync function resolveBunInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n // Bun supports --silent and it keeps successful preparation output out of judge output buffers.\n return (await hasAnyPath(runDir, ['bun.lock', 'bun.lockb']))\n ? ['bun', 'install', '--frozen-lockfile', '--silent']\n : ['bun', 'install', '--silent'];\n}\n\nasync function resolveCargoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Cargo.toml')))) return undefined;\n return (await pathExists(path.join(runDir, 'Cargo.lock'))) ? ['cargo', 'fetch', '--locked'] : ['cargo', 'fetch'];\n}\n\nasync function resolveGoInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'go.mod')))) return undefined;\n return ['go', 'mod', 'download'];\n}\n\nasync function resolveGradleInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (\n !(await hasAnyPath(runDir, [\n 'build.gradle',\n 'build.gradle.kts',\n 'settings.gradle',\n 'settings.gradle.kts',\n 'gradlew',\n 'gradlew.bat',\n ]))\n )\n return undefined;\n const args = ['--no-daemon', '--quiet', 'dependencies'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'gradlew.bat')))\n ? ['cmd.exe', '/c', 'gradlew.bat', ...args]\n : ['gradle', ...args];\n }\n return (await pathExists(path.join(runDir, 'gradlew'))) ? ['sh', './gradlew', ...args] : ['gradle', ...args];\n}\n\nasync function resolveMavenInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'pom.xml')))) return undefined;\n const args = ['-q', 'dependency:go-offline'] as const;\n if (process.platform === 'win32') {\n return (await pathExists(path.join(runDir, 'mvnw.cmd')))\n ? ['cmd.exe', '/c', 'mvnw.cmd', ...args]\n : ['mvn', ...args];\n }\n return (await pathExists(path.join(runDir, 'mvnw'))) ? ['sh', './mvnw', ...args] : ['mvn', ...args];\n}\n\nasync function resolveNpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'package-lock.json')))\n ? ['npm', 'ci', '--silent']\n : ['npm', 'install', '--silent'];\n}\n\nasync function resolvePnpmInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n return (await pathExists(path.join(runDir, 'pnpm-lock.yaml')))\n ? ['pnpm', 'install', '--frozen-lockfile', '--silent']\n : ['pnpm', 'install', '--silent'];\n}\n\nasync function resolveRubyInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'Gemfile')))) return undefined;\n return (await pathExists(path.join(runDir, 'Gemfile.lock')))\n ? ['bundle', 'install', '--frozen', '--quiet']\n : ['bundle', 'install', '--quiet'];\n}\n\nasync function resolveUvInstallCommand(): Promise<undefined> {\n return undefined;\n}\n\nasync function resolveYarnInstallCommand(runDir: string): Promise<PackageManagerInstallCommand | undefined> {\n if (!(await pathExists(path.join(runDir, 'package.json')))) return undefined;\n const isBerry = await isYarnBerryProject(runDir);\n const hasLockfile = await pathExists(path.join(runDir, 'yarn.lock'));\n if (isBerry) return hasLockfile ? ['yarn', 'install', '--immutable'] : ['yarn', 'install'];\n return hasLockfile ? ['yarn', 'install', '--frozen-lockfile', '--silent'] : ['yarn', 'install', '--silent'];\n}\n\nasync function isYarnBerryProject(runDir: string): Promise<boolean> {\n if (await pathExists(path.join(runDir, '.yarnrc.yml'))) return true;\n\n const packageJson = await readJson(path.join(runDir, 'package.json'));\n const packageManager = typeof packageJson.packageManager === 'string' ? packageJson.packageManager : undefined;\n const yarnMajorVersion = /^yarn@(\\d+)/.exec(packageManager ?? '')?.[1];\n return yarnMajorVersion !== undefined && Number(yarnMajorVersion) >= 2;\n}\n\nasync function hasAnyPath(directoryPath: string, relativePaths: readonly string[]): Promise<boolean> {\n for (const relativePath of relativePaths) {\n if (await pathExists(path.join(directoryPath, relativePath))) return true;\n }\n return false;\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return false;\n }\n}\n\nasync function readJson(filePath: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await fs.readFile(filePath, 'utf8')) as unknown;\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch (error) {\n if (error instanceof SyntaxError) return {};\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code === 'ENOENT') return {};\n throw error;\n }\n}\n\nexport async function copyPackageManagerProjectFiles(options: {\n packageManager: PackageManager;\n projectDir: string;\n runDir: string;\n projectFilePaths?: readonly string[];\n}): Promise<void> {\n for (const projectFilePath of options.projectFilePaths ?? packageManagerProjectFilePaths[options.packageManager]) {\n await copyPathIfExists(path.join(options.projectDir, projectFilePath), path.join(options.runDir, projectFilePath));\n }\n}\n\nasync function copyPathIfExists(sourcePath: string, destinationPath: string): Promise<void> {\n try {\n await fs.cp(sourcePath, destinationPath, { recursive: true });\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n }\n}\n\nasync function spawnWithInput(\n command: readonly [string, ...string[]],\n context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n outputLimitBytes: number;\n stdin: string;\n timeLimitSeconds: number;\n }\n): Promise<{\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n timedOut: boolean;\n signal: NodeJS.Signals | undefined;\n outputLimitExceeded: boolean;\n}> {\n const timeOutputPath = timeCommand === undefined ? undefined : path.join(context.cwd, '.exercode-time-result');\n const spawnedCommand =\n timeCommand === undefined ? command : ([...timeCommand, `--output=${timeOutputPath}`, ...command] as const);\n const subprocess = childProcess.spawn(spawnedCommand[0], spawnedCommand.slice(1), {\n cwd: context.cwd,\n detached: process.platform !== 'win32',\n env: context.env,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n let outputBytes = 0;\n let timedOut = false;\n let outputLimitExceeded = false;\n\n const appendOutputChunk = (chunks: Buffer[], chunk: Buffer): void => {\n if (outputBytes >= context.outputLimitBytes) {\n if (chunk.byteLength > 0) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n return;\n }\n\n const remainingBytes = context.outputLimitBytes - outputBytes;\n const appendedChunk = chunk.byteLength > remainingBytes ? chunk.subarray(0, remainingBytes) : chunk;\n chunks.push(appendedChunk);\n outputBytes += appendedChunk.byteLength;\n\n if (chunk.byteLength > remainingBytes) {\n outputLimitExceeded = true;\n killSubprocessGroup(subprocess, 'SIGKILL');\n }\n };\n\n subprocess.stdout.on('data', (chunk: Buffer) => appendOutputChunk(stdoutChunks, chunk));\n subprocess.stderr.on('data', (chunk: Buffer) => appendOutputChunk(stderrChunks, chunk));\n\n const timeout = setTimeout(() => {\n timedOut = true;\n killSubprocessGroup(subprocess, 'SIGTERM');\n }, context.timeLimitSeconds * 1000);\n const killTimeout = setTimeout(\n () => {\n if (timedOut) killSubprocessGroup(subprocess, 'SIGKILL');\n },\n context.timeLimitSeconds * 1000 + killGracePeriodMilliseconds\n );\n killTimeout.unref();\n\n const { status, signal } = await new Promise<{ status: number | undefined; signal: NodeJS.Signals | undefined }>(\n (resolve, reject) => {\n let settled = false;\n let pendingError: Error | undefined;\n const failAfterClose = (error: Error): void => {\n if (settled) return;\n pendingError = error;\n killSubprocessGroup(subprocess, 'SIGKILL');\n if (subprocess.pid === undefined) {\n settled = true;\n reject(error);\n }\n };\n subprocess.on('error', failAfterClose);\n subprocess.stdin.on('error', (error: NodeJS.ErrnoException) => {\n if (error.code !== 'EPIPE') failAfterClose(error);\n });\n subprocess.on('close', (code, closeSignal) => {\n if (settled) return;\n settled = true;\n if (pendingError) {\n reject(pendingError);\n return;\n }\n resolve({ status: code ?? undefined, signal: closeSignal ?? undefined });\n });\n subprocess.stdin.end(context.stdin);\n }\n ).finally(() => {\n clearTimeout(timeout);\n clearTimeout(killTimeout);\n });\n\n const { timeSeconds, memoryBytes } =\n timeOutputPath === undefined ? { timeSeconds: 0, memoryBytes: 0 } : await readTimeResult(timeOutputPath);\n\n return {\n stdout: Buffer.concat(stdoutChunks).toString(),\n stderr: Buffer.concat(stderrChunks).toString(),\n status,\n timeSeconds,\n memoryBytes,\n timedOut,\n signal,\n outputLimitExceeded,\n };\n}\n\nfunction resolveTimeCommand(): readonly [string, ...string[]] | undefined {\n const command = os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time';\n const result = childProcess.spawnSync(command, ['--version'], { stdio: 'ignore' });\n if (result.error || result.status !== 0) return undefined;\n\n return [command, '--format', '%e %M'];\n}\n\nfunction killSubprocessGroup(subprocess: childProcess.ChildProcess, signal: NodeJS.Signals): void {\n if (subprocess.pid === undefined) return;\n\n try {\n if (process.platform === 'win32') {\n subprocess.kill(signal);\n return;\n }\n process.kill(-subprocess.pid, signal);\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ESRCH' && code !== 'EPERM') throw error;\n }\n}\n\nasync function readTimeResult(timeOutputPath: string): Promise<{ timeSeconds: number; memoryBytes: number }> {\n let content: string;\n try {\n content = await fs.readFile(timeOutputPath, 'utf8');\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error ? (error as { code: unknown }).code : undefined;\n if (code !== 'ENOENT') throw error;\n return { timeSeconds: 0, memoryBytes: 0 };\n }\n\n const match = /(\\d+(?:[.,]\\d+)?) (\\d+)\\s*$/.exec(content);\n if (!match) return { timeSeconds: 0, memoryBytes: 0 };\n\n return { timeSeconds: Number(match[1]!.replace(',', '.')), memoryBytes: Number(match[2]) * 1024 };\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";var r=require("../_virtual/_rollupPluginBabelHelpers.cjs"),e=require("./runCommandInTemporaryPackageManagerProject.cjs"),a=["pythonArgs","uvArgs"],o=["main.py"];exports.runPythonInTemporaryUvProject=function(n){var t=n.pythonArgs,u=void 0===t?o:t,c=n.uvArgs,p=void 0===c?[]:c,s=r.objectWithoutProperties(n,a);return e.runCommandInTemporaryPackageManagerProject(r.objectSpread2(r.objectSpread2({},s),{},{packageManager:"uv",command:["uv","run","--quiet","--no-progress"].concat(r.toConsumableArray(p),["python"],r.toConsumableArray(u))}))};
//# sourceMappingURL=runPythonInTemporaryUvProject.cjs.map
"use strict";const e=require("./runCommandInTemporaryPackageManagerProject.cjs"),t=[`main.py`];function n(n){let{pythonArgs:r=t,uvArgs:i=[],...a}=n;return e.runCommandInTemporaryPackageManagerProject({...a,packageManager:`uv`,command:[`uv`,`run`,`--quiet`,`--no-progress`,...i,`python`,...r]})}exports.runPythonInTemporaryUvProject=n;
//# sourceMappingURL=runPythonInTemporaryUvProject.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"runPythonInTemporaryUvProject.cjs","sources":["../../src/helpers/runPythonInTemporaryUvProject.ts"],"sourcesContent":["import {\n type PackageManagerCommandRunResult,\n runCommandInTemporaryPackageManagerProject,\n type RunCommandInTemporaryPackageManagerProjectOptions,\n} from './runCommandInTemporaryPackageManagerProject.js';\n\nexport interface RunPythonInTemporaryUvProjectOptions extends Omit<\n RunCommandInTemporaryPackageManagerProjectOptions,\n 'command' | 'packageManager'\n> {\n pythonArgs?: readonly [string, ...string[]];\n uvArgs?: readonly string[];\n}\n\nconst defaultPythonArgs = ['main.py'] as const;\n\n/**\n * Runs a Python command inside a temporary uv project created from a submission\n * directory and the problem's `pyproject.toml` / `uv.lock`.\n */\nexport function runPythonInTemporaryUvProject(\n options: RunPythonInTemporaryUvProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const { pythonArgs = defaultPythonArgs, uvArgs = [], ...restOptions } = options;\n return runCommandInTemporaryPackageManagerProject({\n ...restOptions,\n packageManager: 'uv',\n command: ['uv', 'run', '--quiet', '--no-progress', ...uvArgs, 'python', ...pythonArgs] as const,\n });\n}\n"],"names":["defaultPythonArgs","options","_options$pythonArgs","pythonArgs","_options$uvArgs","uvArgs","restOptions","_objectWithoutProperties","_excluded","runCommandInTemporaryPackageManagerProject","_objectSpread","packageManager","command","concat","_toConsumableArray"],"mappings":"gKAcMA,EAAoB,CAAC,iDAMpB,SACLC,GAEA,IAAAC,EAAwED,EAAhEE,WAAAA,WAAUD,EAAGF,EAAiBE,EAAAE,EAAkCH,EAAhCI,OAAAA,WAAMD,EAAG,GAAEA,EAAKE,EAAWC,EAAAA,wBAAKN,EAAOO,GAC/E,OAAOC,EAAAA,2CAA0CC,EAAAA,cAAAA,EAAAA,iBAC5CJ,GAAW,GAAA,CACdK,eAAgB,KAChBC,SAAU,KAAM,MAAO,UAAW,iBAAeC,OAAAC,EAAAA,kBAAKT,GAAM,CAAE,UAAQS,EAAAA,kBAAKX,MAE/E"}
{"version":3,"file":"runPythonInTemporaryUvProject.cjs","names":["runCommandInTemporaryPackageManagerProject"],"sources":["../../src/helpers/runPythonInTemporaryUvProject.ts"],"sourcesContent":["import {\n type PackageManagerCommandRunResult,\n runCommandInTemporaryPackageManagerProject,\n type RunCommandInTemporaryPackageManagerProjectOptions,\n} from './runCommandInTemporaryPackageManagerProject.js';\n\nexport interface RunPythonInTemporaryUvProjectOptions extends Omit<\n RunCommandInTemporaryPackageManagerProjectOptions,\n 'command' | 'packageManager'\n> {\n pythonArgs?: readonly [string, ...string[]];\n uvArgs?: readonly string[];\n}\n\nconst defaultPythonArgs = ['main.py'] as const;\n\n/**\n * Runs a Python command inside a temporary uv project created from a submission\n * directory and the problem's `pyproject.toml` / `uv.lock`.\n */\nexport function runPythonInTemporaryUvProject(\n options: RunPythonInTemporaryUvProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const { pythonArgs = defaultPythonArgs, uvArgs = [], ...restOptions } = options;\n return runCommandInTemporaryPackageManagerProject({\n ...restOptions,\n packageManager: 'uv',\n command: ['uv', 'run', '--quiet', '--no-progress', ...uvArgs, 'python', ...pythonArgs] as const,\n });\n}\n"],"mappings":"iFAcM,EAAoB,CAAC,SAAS,EAMpC,SAAgB,EACd,EACyC,CACzC,GAAM,CAAE,aAAa,EAAmB,SAAS,CAAC,EAAG,GAAG,GAAgB,EACxE,OAAOA,EAAAA,2CAA2C,CAChD,GAAG,EACH,eAAgB,KAChB,QAAS,CAAC,KAAM,MAAO,UAAW,gBAAiB,GAAG,EAAQ,SAAU,GAAG,CAAU,CACvF,CAAC,CACH"}

@@ -1,2 +0,2 @@

import{objectWithoutProperties as r,objectSpread2 as o,toConsumableArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{runCommandInTemporaryPackageManagerProject as e}from"./runCommandInTemporaryPackageManagerProject.js";var n=["pythonArgs","uvArgs"],t=["main.py"];function p(p){var s=p.pythonArgs,u=void 0===s?t:s,i=p.uvArgs,m=void 0===i?[]:i,g=r(p,n);return e(o(o({},g),{},{packageManager:"uv",command:["uv","run","--quiet","--no-progress"].concat(a(m),["python"],a(u))}))}export{p as runPythonInTemporaryUvProject};
//# sourceMappingURL=runPythonInTemporaryUvProject.js.map
import{runCommandInTemporaryPackageManagerProject as e}from"./runCommandInTemporaryPackageManagerProject.js";const t=[`main.py`];function n(n){let{pythonArgs:r=t,uvArgs:i=[],...a}=n;return e({...a,packageManager:`uv`,command:[`uv`,`run`,`--quiet`,`--no-progress`,...i,`python`,...r]})}export{n as runPythonInTemporaryUvProject};
//# sourceMappingURL=runPythonInTemporaryUvProject.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"runPythonInTemporaryUvProject.js","sources":["../../src/helpers/runPythonInTemporaryUvProject.ts"],"sourcesContent":["import {\n type PackageManagerCommandRunResult,\n runCommandInTemporaryPackageManagerProject,\n type RunCommandInTemporaryPackageManagerProjectOptions,\n} from './runCommandInTemporaryPackageManagerProject.js';\n\nexport interface RunPythonInTemporaryUvProjectOptions extends Omit<\n RunCommandInTemporaryPackageManagerProjectOptions,\n 'command' | 'packageManager'\n> {\n pythonArgs?: readonly [string, ...string[]];\n uvArgs?: readonly string[];\n}\n\nconst defaultPythonArgs = ['main.py'] as const;\n\n/**\n * Runs a Python command inside a temporary uv project created from a submission\n * directory and the problem's `pyproject.toml` / `uv.lock`.\n */\nexport function runPythonInTemporaryUvProject(\n options: RunPythonInTemporaryUvProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const { pythonArgs = defaultPythonArgs, uvArgs = [], ...restOptions } = options;\n return runCommandInTemporaryPackageManagerProject({\n ...restOptions,\n packageManager: 'uv',\n command: ['uv', 'run', '--quiet', '--no-progress', ...uvArgs, 'python', ...pythonArgs] as const,\n });\n}\n"],"names":["defaultPythonArgs","runPythonInTemporaryUvProject","options","_options$pythonArgs","pythonArgs","_options$uvArgs","uvArgs","restOptions","_objectWithoutProperties","_excluded","runCommandInTemporaryPackageManagerProject","_objectSpread","packageManager","command","concat","_toConsumableArray"],"mappings":"wQAcMA,EAAoB,CAAC,WAMpB,SAASC,EACdC,GAEA,IAAAC,EAAwED,EAAhEE,WAAAA,WAAUD,EAAGH,EAAiBG,EAAAE,EAAkCH,EAAhCI,OAAAA,WAAMD,EAAG,GAAEA,EAAKE,EAAWC,EAAKN,EAAOO,GAC/E,OAAOC,EAA0CC,EAAAA,KAC5CJ,GAAW,GAAA,CACdK,eAAgB,KAChBC,SAAU,KAAM,MAAO,UAAW,iBAAeC,OAAAC,EAAKT,GAAM,CAAE,UAAQS,EAAKX,MAE/E"}
{"version":3,"file":"runPythonInTemporaryUvProject.js","names":[],"sources":["../../src/helpers/runPythonInTemporaryUvProject.ts"],"sourcesContent":["import {\n type PackageManagerCommandRunResult,\n runCommandInTemporaryPackageManagerProject,\n type RunCommandInTemporaryPackageManagerProjectOptions,\n} from './runCommandInTemporaryPackageManagerProject.js';\n\nexport interface RunPythonInTemporaryUvProjectOptions extends Omit<\n RunCommandInTemporaryPackageManagerProjectOptions,\n 'command' | 'packageManager'\n> {\n pythonArgs?: readonly [string, ...string[]];\n uvArgs?: readonly string[];\n}\n\nconst defaultPythonArgs = ['main.py'] as const;\n\n/**\n * Runs a Python command inside a temporary uv project created from a submission\n * directory and the problem's `pyproject.toml` / `uv.lock`.\n */\nexport function runPythonInTemporaryUvProject(\n options: RunPythonInTemporaryUvProjectOptions\n): Promise<PackageManagerCommandRunResult> {\n const { pythonArgs = defaultPythonArgs, uvArgs = [], ...restOptions } = options;\n return runCommandInTemporaryPackageManagerProject({\n ...restOptions,\n packageManager: 'uv',\n command: ['uv', 'run', '--quiet', '--no-progress', ...uvArgs, 'python', ...pythonArgs] as const,\n });\n}\n"],"mappings":"6GAcA,MAAM,EAAoB,CAAC,SAAS,EAMpC,SAAgB,EACd,EACyC,CACzC,GAAM,CAAE,aAAa,EAAmB,SAAS,CAAC,EAAG,GAAG,GAAgB,EACxE,OAAO,EAA2C,CAChD,GAAG,EACH,eAAgB,KAChB,QAAS,CAAC,KAAM,MAAO,UAAW,gBAAiB,GAAG,EAAQ,SAAU,GAAG,CAAU,CACvF,CAAC,CACH"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("../types/language.cjs"),a=Object.fromEntries(Object.entries(r.languageIdToDefinition).flatMap(function(r){var a=e.slicedToArray(r,2),t=a[0],i=a[1];return i.grammer?[[t,i.grammer]]:[]}));exports.languageIdToSourceCodeGrammar=a;
//# sourceMappingURL=sourceCodeGrammars.cjs.map
"use strict";const e=require("../types/language.cjs"),t=Object.fromEntries(Object.entries(e.languageIdToDefinition).flatMap(([e,t])=>t.grammer?[[e,t.grammer]]:[]));exports.languageIdToSourceCodeGrammar=t;
//# sourceMappingURL=sourceCodeGrammars.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"sourceCodeGrammars.cjs","sources":["../../src/helpers/sourceCodeGrammars.ts"],"sourcesContent":["import type { SourceCodeGrammar } from './removeCommentsInSourceCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\n\nexport const languageIdToSourceCodeGrammar = Object.fromEntries(\n Object.entries(languageIdToDefinition).flatMap(([languageId, languageDefinition]) =>\n languageDefinition.grammer ? [[languageId, languageDefinition.grammer] as const] : []\n )\n) as Readonly<Record<string, SourceCodeGrammar | undefined>>;\n"],"names":["languageIdToSourceCodeGrammar","Object","fromEntries","entries","languageIdToDefinition","flatMap","_ref","_ref2","_slicedToArray","languageId","languageDefinition","grammer"],"mappings":"2GAGaA,EAAgCC,OAAOC,YAClDD,OAAOE,QAAQC,0BAAwBC,QAAQ,SAAAC,GAAA,IAAAC,EAAAC,EAAAA,cAAAF,EAAA,GAAEG,EAAUF,EAAA,GAAEG,EAAkBH,EAAA,GAAA,OAC7EG,EAAmBC,QAAU,CAAC,CAACF,EAAYC,EAAmBC,UAAqB,EAAE"}
{"version":3,"file":"sourceCodeGrammars.cjs","names":["languageIdToDefinition"],"sources":["../../src/helpers/sourceCodeGrammars.ts"],"sourcesContent":["import type { SourceCodeGrammar } from './removeCommentsInSourceCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\n\nexport const languageIdToSourceCodeGrammar = Object.fromEntries(\n Object.entries(languageIdToDefinition).flatMap(([languageId, languageDefinition]) =>\n languageDefinition.grammer ? [[languageId, languageDefinition.grammer] as const] : []\n )\n) as Readonly<Record<string, SourceCodeGrammar | undefined>>;\n"],"mappings":"sDAGa,EAAgC,OAAO,YAClD,OAAO,QAAQA,EAAAA,sBAAsB,CAAC,CAAC,SAAS,CAAC,EAAY,KAC3D,EAAmB,QAAU,CAAC,CAAC,EAAY,EAAmB,OAAO,CAAU,EAAI,CAAC,CACtF,CACF"}

@@ -1,2 +0,2 @@

import{slicedToArray as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{languageIdToDefinition as e}from"../types/language.js";var a=Object.fromEntries(Object.entries(e).flatMap(function(e){var a=r(e,2),t=a[0],l=a[1];return l.grammer?[[t,l.grammer]]:[]}));export{a as languageIdToSourceCodeGrammar};
//# sourceMappingURL=sourceCodeGrammars.js.map
import{languageIdToDefinition as e}from"../types/language.js";const t=Object.fromEntries(Object.entries(e).flatMap(([e,t])=>t.grammer?[[e,t.grammer]]:[]));export{t as languageIdToSourceCodeGrammar};
//# sourceMappingURL=sourceCodeGrammars.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"sourceCodeGrammars.js","sources":["../../src/helpers/sourceCodeGrammars.ts"],"sourcesContent":["import type { SourceCodeGrammar } from './removeCommentsInSourceCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\n\nexport const languageIdToSourceCodeGrammar = Object.fromEntries(\n Object.entries(languageIdToDefinition).flatMap(([languageId, languageDefinition]) =>\n languageDefinition.grammer ? [[languageId, languageDefinition.grammer] as const] : []\n )\n) as Readonly<Record<string, SourceCodeGrammar | undefined>>;\n"],"names":["languageIdToSourceCodeGrammar","Object","fromEntries","entries","languageIdToDefinition","flatMap","_ref","_ref2","_slicedToArray","languageId","languageDefinition","grammer"],"mappings":"2IAGaA,EAAgCC,OAAOC,YAClDD,OAAOE,QAAQC,GAAwBC,QAAQ,SAAAC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAAEG,EAAUF,EAAA,GAAEG,EAAkBH,EAAA,GAAA,OAC7EG,EAAmBC,QAAU,CAAC,CAACF,EAAYC,EAAmBC,UAAqB,EAAE"}
{"version":3,"file":"sourceCodeGrammars.js","names":[],"sources":["../../src/helpers/sourceCodeGrammars.ts"],"sourcesContent":["import type { SourceCodeGrammar } from './removeCommentsInSourceCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\n\nexport const languageIdToSourceCodeGrammar = Object.fromEntries(\n Object.entries(languageIdToDefinition).flatMap(([languageId, languageDefinition]) =>\n languageDefinition.grammer ? [[languageId, languageDefinition.grammer] as const] : []\n )\n) as Readonly<Record<string, SourceCodeGrammar | undefined>>;\n"],"mappings":"8DAGA,MAAa,EAAgC,OAAO,YAClD,OAAO,QAAQ,CAAsB,CAAC,CAAC,SAAS,CAAC,EAAY,KAC3D,EAAmB,QAAU,CAAC,CAAC,EAAY,EAAmB,OAAO,CAAU,EAAI,CAAC,CACtF,CACF"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:child_process"),t=["darwin"===require("node:os").platform()?"gtime":"/usr/bin/time","--format","%e %M"];exports.spawnSyncWithTimeout=function(o,s,d,i){var n=Date.now(),a=r.spawnSync("timeout",[i.toFixed(3)].concat(t,[o],e.toConsumableArray(s)),d),u=Date.now(),c=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(a.stderr),m=c?a.stderr.slice(0,c.index):a.stderr,l=Number(null==c?void 0:c[1])||(u-n)/1e3,p=1024*Number(null==c?void 0:c[2])||0;return 124===a.status?e.objectSpread2(e.objectSpread2({},a),{},{status:0,stderr:m,timeSeconds:i+.001,memoryBytes:p}):e.objectSpread2(e.objectSpread2({},a),{},{stderr:m,timeSeconds:l,memoryBytes:p})};
//# sourceMappingURL=spawnSyncWithTimeout.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:child_process");t=e.__toESM(t,1);let n=require("node:os");n=e.__toESM(n,1);const r=[n.default.platform()===`darwin`?`gtime`:`/usr/bin/time`,`--format`,`%e %M`];function i(e,n,i,a){let o=Date.now(),s=t.default.spawnSync(`timeout`,[a.toFixed(3),...r,e,...n],i),c=Date.now(),l=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(s.stderr),u=l?s.stderr.slice(0,l.index):s.stderr,d=Number(l?.[1])||(c-o)/1e3,f=Number(l?.[2])*1024||0;return s.status===124?{...s,status:0,stderr:u,timeSeconds:a+.001,memoryBytes:f}:{...s,stderr:u,timeSeconds:d,memoryBytes:f}}exports.spawnSyncWithTimeout=i;
//# sourceMappingURL=spawnSyncWithTimeout.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"spawnSyncWithTimeout.cjs","sources":["../../src/helpers/spawnSyncWithTimeout.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport os from 'node:os';\n\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nexport function spawnSyncWithTimeout(\n command: string,\n args: readonly string[],\n options: child_process.SpawnSyncOptionsWithStringEncoding,\n timeoutSeconds: number\n): child_process.SpawnSyncReturns<string> & { timeSeconds: number; memoryBytes: number } {\n const startTimeMilliseconds = Date.now();\n\n const spawnResult = child_process.spawnSync(\n 'timeout',\n [timeoutSeconds.toFixed(3), ...TIME_COMMAND, command, ...args],\n options\n );\n\n const stopTimeMilliseconds = Date.now();\n\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(spawnResult.stderr);\n const stderr = match ? spawnResult.stderr.slice(0, match.index) : spawnResult.stderr;\n const timeSeconds = Number(match?.[1]) || (stopTimeMilliseconds - startTimeMilliseconds) / 1000;\n const memoryBytes = Number(match?.[2]) * 1024 || 0;\n\n // timeout\n if (spawnResult.status === 124) {\n return { ...spawnResult, status: 0, stderr, timeSeconds: timeoutSeconds + 1e-3, memoryBytes };\n }\n\n return { ...spawnResult, stderr, timeSeconds, memoryBytes };\n}\n"],"names":["TIME_COMMAND","platform","command","args","options","timeoutSeconds","startTimeMilliseconds","Date","now","spawnResult","child_process","spawnSync","toFixed","concat","_toConsumableArray","stopTimeMilliseconds","match","exec","stderr","slice","index","timeSeconds","Number","memoryBytes","status","_objectSpread"],"mappings":"wGAGMA,EAAe,CAAmB,8BAAfC,WAA0B,QAAU,gBAAiB,WAAY,sCAEnF,SACLC,EACAC,EACAC,EACAC,GAEA,IAAMC,EAAwBC,KAAKC,MAE7BC,EAAcC,EAAcC,UAChC,UAAS,CACRN,EAAeO,QAAQ,IAAEC,OAAKb,EAAY,CAAEE,GAAOY,EAAAA,kBAAKX,IACzDC,GAGIW,EAAuBR,KAAKC,MAE5BQ,EAAQ,+BAA+BC,KAAKR,EAAYS,QACxDA,EAASF,EAAQP,EAAYS,OAAOC,MAAM,EAAGH,EAAMI,OAASX,EAAYS,OACxEG,EAAcC,aAAON,SAAAA,EAAQ,MAAQD,EAAuBT,GAAyB,IACrFiB,EAAmC,KAArBD,OAAY,MAALN,SAAAA,EAAQ,KAAc,EAGjD,OAA2B,MAAvBP,EAAYe,OACdC,EAAAA,cAAAA,EAAAA,cAAA,CAAA,EAAYhB,GAAW,CAAA,EAAA,CAAEe,OAAQ,EAAGN,OAAAA,EAAQG,YAAahB,EAAiB,KAAMkB,YAAAA,IAGlFE,EAAAA,cAAAA,EAAAA,cAAA,CAAA,EAAYhB,GAAW,CAAA,EAAA,CAAES,OAAAA,EAAQG,YAAAA,EAAaE,YAAAA,GAChD"}
{"version":3,"file":"spawnSyncWithTimeout.cjs","names":["os","child_process"],"sources":["../../src/helpers/spawnSyncWithTimeout.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport os from 'node:os';\n\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nexport function spawnSyncWithTimeout(\n command: string,\n args: readonly string[],\n options: child_process.SpawnSyncOptionsWithStringEncoding,\n timeoutSeconds: number\n): child_process.SpawnSyncReturns<string> & { timeSeconds: number; memoryBytes: number } {\n const startTimeMilliseconds = Date.now();\n\n const spawnResult = child_process.spawnSync(\n 'timeout',\n [timeoutSeconds.toFixed(3), ...TIME_COMMAND, command, ...args],\n options\n );\n\n const stopTimeMilliseconds = Date.now();\n\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(spawnResult.stderr);\n const stderr = match ? spawnResult.stderr.slice(0, match.index) : spawnResult.stderr;\n const timeSeconds = Number(match?.[1]) || (stopTimeMilliseconds - startTimeMilliseconds) / 1000;\n const memoryBytes = Number(match?.[2]) * 1024 || 0;\n\n // timeout\n if (spawnResult.status === 124) {\n return { ...spawnResult, status: 0, stderr, timeSeconds: timeoutSeconds + 1e-3, memoryBytes };\n }\n\n return { ...spawnResult, stderr, timeSeconds, memoryBytes };\n}\n"],"mappings":"iKAGA,MAAM,EAAe,CAACA,EAAAA,QAAG,SAAS,IAAM,SAAW,QAAU,gBAAiB,WAAY,OAAO,EAEjG,SAAgB,EACd,EACA,EACA,EACA,EACuF,CACvF,IAAM,EAAwB,KAAK,IAAI,EAEjC,EAAcC,EAAAA,QAAc,UAChC,UACA,CAAC,EAAe,QAAQ,CAAC,EAAG,GAAG,EAAc,EAAS,GAAG,CAAI,EAC7D,CACF,EAEM,EAAuB,KAAK,IAAI,EAEhC,EAAQ,+BAA+B,KAAK,EAAY,MAAM,EAC9D,EAAS,EAAQ,EAAY,OAAO,MAAM,EAAG,EAAM,KAAK,EAAI,EAAY,OACxE,EAAc,OAAO,IAAQ,EAAE,IAAM,EAAuB,GAAyB,IACrF,EAAc,OAAO,IAAQ,EAAE,EAAI,MAAQ,EAOjD,OAJI,EAAY,SAAW,IAClB,CAAE,GAAG,EAAa,OAAQ,EAAG,SAAQ,YAAa,EAAiB,KAAM,aAAY,EAGvF,CAAE,GAAG,EAAa,SAAQ,cAAa,aAAY,CAC5D"}

@@ -1,2 +0,2 @@

import{toConsumableArray as e,objectSpread2 as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:child_process";import o from"node:os";var s=["darwin"===o.platform()?"gtime":"/usr/bin/time","--format","%e %M"];function m(o,m,n,d){var i=Date.now(),a=t.spawnSync("timeout",[d.toFixed(3)].concat(s,[o],e(m)),n),l=Date.now(),u=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(a.stderr),c=u?a.stderr.slice(0,u.index):a.stderr,p=Number(null==u?void 0:u[1])||(l-i)/1e3,b=1024*Number(null==u?void 0:u[2])||0;return 124===a.status?r(r({},a),{},{status:0,stderr:c,timeSeconds:d+.001,memoryBytes:b}):r(r({},a),{},{stderr:c,timeSeconds:p,memoryBytes:b})}export{m as spawnSyncWithTimeout};
//# sourceMappingURL=spawnSyncWithTimeout.js.map
import e from"node:child_process";import t from"node:os";const n=[t.platform()===`darwin`?`gtime`:`/usr/bin/time`,`--format`,`%e %M`];function r(t,r,i,a){let o=Date.now(),s=e.spawnSync(`timeout`,[a.toFixed(3),...n,t,...r],i),c=Date.now(),l=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(s.stderr),u=l?s.stderr.slice(0,l.index):s.stderr,d=Number(l?.[1])||(c-o)/1e3,f=Number(l?.[2])*1024||0;return s.status===124?{...s,status:0,stderr:u,timeSeconds:a+.001,memoryBytes:f}:{...s,stderr:u,timeSeconds:d,memoryBytes:f}}export{r as spawnSyncWithTimeout};
//# sourceMappingURL=spawnSyncWithTimeout.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"spawnSyncWithTimeout.js","sources":["../../src/helpers/spawnSyncWithTimeout.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport os from 'node:os';\n\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nexport function spawnSyncWithTimeout(\n command: string,\n args: readonly string[],\n options: child_process.SpawnSyncOptionsWithStringEncoding,\n timeoutSeconds: number\n): child_process.SpawnSyncReturns<string> & { timeSeconds: number; memoryBytes: number } {\n const startTimeMilliseconds = Date.now();\n\n const spawnResult = child_process.spawnSync(\n 'timeout',\n [timeoutSeconds.toFixed(3), ...TIME_COMMAND, command, ...args],\n options\n );\n\n const stopTimeMilliseconds = Date.now();\n\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(spawnResult.stderr);\n const stderr = match ? spawnResult.stderr.slice(0, match.index) : spawnResult.stderr;\n const timeSeconds = Number(match?.[1]) || (stopTimeMilliseconds - startTimeMilliseconds) / 1000;\n const memoryBytes = Number(match?.[2]) * 1024 || 0;\n\n // timeout\n if (spawnResult.status === 124) {\n return { ...spawnResult, status: 0, stderr, timeSeconds: timeoutSeconds + 1e-3, memoryBytes };\n }\n\n return { ...spawnResult, stderr, timeSeconds, memoryBytes };\n}\n"],"names":["TIME_COMMAND","os","platform","spawnSyncWithTimeout","command","args","options","timeoutSeconds","startTimeMilliseconds","Date","now","spawnResult","child_process","spawnSync","toFixed","concat","_toConsumableArray","stopTimeMilliseconds","match","exec","stderr","slice","index","timeSeconds","Number","memoryBytes","status","_objectSpread"],"mappings":"yJAGA,IAAMA,EAAe,CAAmB,WAAlBC,EAAGC,WAA0B,QAAU,gBAAiB,WAAY,SAEnF,SAASC,EACdC,EACAC,EACAC,EACAC,GAEA,IAAMC,EAAwBC,KAAKC,MAE7BC,EAAcC,EAAcC,UAChC,UAAS,CACRN,EAAeO,QAAQ,IAAEC,OAAKf,EAAY,CAAEI,GAAOY,EAAKX,IACzDC,GAGIW,EAAuBR,KAAKC,MAE5BQ,EAAQ,+BAA+BC,KAAKR,EAAYS,QACxDA,EAASF,EAAQP,EAAYS,OAAOC,MAAM,EAAGH,EAAMI,OAASX,EAAYS,OACxEG,EAAcC,aAAON,SAAAA,EAAQ,MAAQD,EAAuBT,GAAyB,IACrFiB,EAAmC,KAArBD,OAAY,MAALN,SAAAA,EAAQ,KAAc,EAGjD,OAA2B,MAAvBP,EAAYe,OACdC,EAAAA,EAAA,CAAA,EAAYhB,GAAW,CAAA,EAAA,CAAEe,OAAQ,EAAGN,OAAAA,EAAQG,YAAahB,EAAiB,KAAMkB,YAAAA,IAGlFE,EAAAA,EAAA,CAAA,EAAYhB,GAAW,CAAA,EAAA,CAAES,OAAAA,EAAQG,YAAAA,EAAaE,YAAAA,GAChD"}
{"version":3,"file":"spawnSyncWithTimeout.js","names":["child_process"],"sources":["../../src/helpers/spawnSyncWithTimeout.ts"],"sourcesContent":["import child_process from 'node:child_process';\nimport os from 'node:os';\n\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nexport function spawnSyncWithTimeout(\n command: string,\n args: readonly string[],\n options: child_process.SpawnSyncOptionsWithStringEncoding,\n timeoutSeconds: number\n): child_process.SpawnSyncReturns<string> & { timeSeconds: number; memoryBytes: number } {\n const startTimeMilliseconds = Date.now();\n\n const spawnResult = child_process.spawnSync(\n 'timeout',\n [timeoutSeconds.toFixed(3), ...TIME_COMMAND, command, ...args],\n options\n );\n\n const stopTimeMilliseconds = Date.now();\n\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(spawnResult.stderr);\n const stderr = match ? spawnResult.stderr.slice(0, match.index) : spawnResult.stderr;\n const timeSeconds = Number(match?.[1]) || (stopTimeMilliseconds - startTimeMilliseconds) / 1000;\n const memoryBytes = Number(match?.[2]) * 1024 || 0;\n\n // timeout\n if (spawnResult.status === 124) {\n return { ...spawnResult, status: 0, stderr, timeSeconds: timeoutSeconds + 1e-3, memoryBytes };\n }\n\n return { ...spawnResult, stderr, timeSeconds, memoryBytes };\n}\n"],"mappings":"yDAGA,MAAM,EAAe,CAAC,EAAG,SAAS,IAAM,SAAW,QAAU,gBAAiB,WAAY,OAAO,EAEjG,SAAgB,EACd,EACA,EACA,EACA,EACuF,CACvF,IAAM,EAAwB,KAAK,IAAI,EAEjC,EAAcA,EAAc,UAChC,UACA,CAAC,EAAe,QAAQ,CAAC,EAAG,GAAG,EAAc,EAAS,GAAG,CAAI,EAC7D,CACF,EAEM,EAAuB,KAAK,IAAI,EAEhC,EAAQ,+BAA+B,KAAK,EAAY,MAAM,EAC9D,EAAS,EAAQ,EAAY,OAAO,MAAM,EAAG,EAAM,KAAK,EAAI,EAAY,OACxE,EAAc,OAAO,IAAQ,EAAE,IAAM,EAAuB,GAAyB,IACrF,EAAc,OAAO,IAAQ,EAAE,EAAI,MAAQ,EAOjD,OAJI,EAAY,SAAW,IAClB,CAAE,GAAG,EAAa,OAAQ,EAAG,SAAQ,YAAa,EAAiB,KAAM,aAAY,EAGvF,CAAE,GAAG,EAAa,SAAQ,cAAa,aAAY,CAC5D"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),t=require("node:fs"),r=require("node:http"),n=require("node:path");var o={".css":"text/css",".html":"text/html",".js":"text/javascript",".gif":"image/gif",".jpg":"image/jpeg",".png":"image/png",".svg":"image/svg+xml"};function s(t){for(var r=0,n=Object.entries(o);r<n.length;r++){var s=e.slicedToArray(n[r],2),a=s[0],i=s[1];if(t.endsWith(a))return i}return"text/plain"}exports.startHttpServer=function(o){var a,i=r.createServer(function(e,r){var a,i=new URL(null!=(a=e.url)?a:"/","http://127.0.0.1").pathname;"/"===i&&(i="/index.html");var c=i.endsWith("/")?n.join(i,"index.html"):i,l=n.join(o,c);if(t.existsSync(l))try{var u=t.readFileSync(l);r.writeHead(200,{"Access-Control-Allow-Origin":"*",Pragma:"no-cache","Cache-Control":"no-cache","Content-Type":s(c)}),r.end(u)}catch(e){r.statusCode=500,r.end()}else r.statusCode=404,r.end()});i.listen();var c=i.address();if(!c)throw new Error("server has been unexpectedly closed");return(a={})[Symbol.asyncDispose]=e.asyncToGenerator(e.regenerator().m(function t(){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return i.closeAllConnections(),e.n=1,new Promise(function(e){i.close(function(){e()})});case 1:return e.a(2)}},t)})),a.url="string"==typeof c?c:"http://127.0.0.1:".concat(c.port),a.port="object"===e.typeof(c)?c.port:void 0,a};
//# sourceMappingURL=startHttpServer.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:http");r=e.__toESM(r,1);function i(e){let i=r.default.createServer((r,i)=>{let a=new URL(r.url??`/`,`http://127.0.0.1`).pathname;a===`/`&&(a=`/index.html`);let s=a.endsWith(`/`)?t.default.join(a,`index.html`):a,c=t.default.join(e,s);if(n.default.existsSync(c))try{let e=n.default.readFileSync(c);i.writeHead(200,{"Access-Control-Allow-Origin":`*`,Pragma:`no-cache`,"Cache-Control":`no-cache`,"Content-Type":o(s)}),i.end(e)}catch{i.statusCode=500,i.end()}else i.statusCode=404,i.end()});i.listen();let a=i.address();if(!a)throw Error(`server has been unexpectedly closed`);return{[Symbol.asyncDispose]:async()=>{i.closeAllConnections(),await new Promise(e=>{i.close(()=>{e()})})},url:typeof a==`string`?a:`http://127.0.0.1:${a.port}`,port:typeof a==`object`?a.port:void 0}}const a={".css":`text/css`,".html":`text/html`,".js":`text/javascript`,".gif":`image/gif`,".jpg":`image/jpeg`,".png":`image/png`,".svg":`image/svg+xml`};function o(e){for(let[t,n]of Object.entries(a))if(e.endsWith(t))return n;return`text/plain`}exports.startHttpServer=i;
//# sourceMappingURL=startHttpServer.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"startHttpServer.cjs","sources":["../../src/helpers/startHttpServer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\n\nexport interface HttpServer {\n [Symbol.asyncDispose](): Promise<void>;\n url: string;\n port: number | undefined;\n}\n\n/**\n * Start a HTTP server for testing web pages.\n */\nexport function startHttpServer(dir: string): HttpServer {\n const server = http.createServer((request, response) => {\n let pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;\n\n if (pathname === '/') {\n pathname = '/index.html';\n }\n\n const pathnameWithIndexHtml = pathname.endsWith('/') ? path.join(pathname, 'index.html') : pathname;\n\n const filePath = path.join(dir, pathnameWithIndexHtml);\n\n if (fs.existsSync(filePath)) {\n try {\n const buffer = fs.readFileSync(filePath);\n response.writeHead(200, {\n 'Access-Control-Allow-Origin': '*',\n Pragma: 'no-cache',\n 'Cache-Control': 'no-cache',\n 'Content-Type': getContentType(pathnameWithIndexHtml),\n });\n response.end(buffer);\n } catch {\n response.statusCode = 500;\n response.end();\n }\n } else {\n response.statusCode = 404;\n response.end();\n }\n });\n\n server.listen();\n\n const address = server.address();\n if (!address) throw new Error('server has been unexpectedly closed');\n\n return {\n [Symbol.asyncDispose]: async () => {\n server.closeAllConnections();\n await new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n });\n },\n url: typeof address === 'string' ? address : `http://127.0.0.1:${address.port}`,\n port: typeof address === 'object' ? address.port : undefined,\n };\n}\n\nconst CONTENT_TYPE_BY_SUFFIX: Record<string, string> = {\n '.css': 'text/css',\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.gif': 'image/gif',\n '.jpg': 'image/jpeg',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n};\n\nfunction getContentType(pathname: string): string {\n for (const [suffix, contentType] of Object.entries(CONTENT_TYPE_BY_SUFFIX)) {\n if (pathname.endsWith(suffix)) return contentType;\n }\n return 'text/plain';\n}\n"],"names":["CONTENT_TYPE_BY_SUFFIX","getContentType","pathname","_i","_Object$entries","Object","entries","length","_Object$entries$_i","_slicedToArray","suffix","contentType","endsWith","dir","_ref2","server","http","createServer","request","response","_request$url","URL","url","pathnameWithIndexHtml","path","join","filePath","fs","existsSync","buffer","readFileSync","writeHead","Pragma","end","_unused","statusCode","listen","address","Error","Symbol","asyncDispose","_asyncToGenerator","_regenerator","m","_callee","w","_context","n","closeAllConnections","Promise","resolve","close","a","concat","port","_typeof","undefined"],"mappings":"2IAgEA,IAAMA,EAAiD,CACrD,OAAQ,WACR,QAAS,YACT,MAAO,kBACP,OAAQ,YACR,OAAQ,aACR,OAAQ,YACR,OAAQ,iBAGV,SAASC,EAAeC,GACtB,IAAA,IAAAC,EAAA,EAAAC,EAAoCC,OAAOC,QAAQN,GAAuBG,EAAAC,EAAAG,OAAAJ,IAAE,CAAvE,IAAAK,EAAAC,EAAAA,cAAAL,EAAAD,GAAA,GAAOO,EAAMF,EAAA,GAAEG,EAAWH,EAAA,GAC7B,GAAIN,EAASU,SAASF,GAAS,OAAOC,CACxC,CACA,MAAO,YACT,yBAlEO,SAAyBE,GAAyB,IAAAC,EACjDC,EAASC,EAAKC,aAAa,SAACC,EAASC,GAAa,IAAAC,EAClDlB,EAAW,IAAImB,IAAe,OAAZD,EAACF,EAAQI,KAAGF,EAAI,IAAK,oBAAoBlB,SAE9C,MAAbA,IACFA,EAAW,eAGb,IAAMqB,EAAwBrB,EAASU,SAAS,KAAOY,EAAKC,KAAKvB,EAAU,cAAgBA,EAErFwB,EAAWF,EAAKC,KAAKZ,EAAKU,GAEhC,GAAII,EAAGC,WAAWF,GAChB,IACE,IAAMG,EAASF,EAAGG,aAAaJ,GAC/BP,EAASY,UAAU,IAAK,CACtB,8BAA+B,IAC/BC,OAAQ,WACR,gBAAiB,WACjB,eAAgB/B,EAAesB,KAEjCJ,EAASc,IAAIJ,EACf,CAAE,MAAAK,GACAf,EAASgB,WAAa,IACtBhB,EAASc,KACX,MAEAd,EAASgB,WAAa,IACtBhB,EAASc,KAEb,GAEAlB,EAAOqB,SAEP,IAAMC,EAAUtB,EAAOsB,UACvB,IAAKA,EAAS,MAAM,IAAIC,MAAM,uCAE9B,OAAAxB,EAAA,CAAA,GACGyB,OAAOC,cAAYC,EAAAA,iBAAAC,EAAAA,cAAAC,EAAG,SAAAC,IAAA,OAAAF,gBAAAG,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EACQ,OAA7BhC,EAAOiC,sBAAsBF,EAAAC,EAAA,EACvB,IAAIE,QAAc,SAACC,GACvBnC,EAAOoC,MAAM,WACXD,GACF,EACF,GAAE,KAAA,EAAA,OAAAJ,EAAAM,EAAA,GAAA,EAAAR,EAAA,IACH9B,EACDQ,IAAwB,iBAAZe,EAAuBA,EAAO,oBAAAgB,OAAuBhB,EAAQiB,MAAMxC,EAC/EwC,KAAyB,WAAnBC,SAAOlB,GAAuBA,EAAQiB,UAAOE,EAAS1C,CAEhE"}
{"version":3,"file":"startHttpServer.cjs","names":["http","path","fs"],"sources":["../../src/helpers/startHttpServer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\n\nexport interface HttpServer {\n [Symbol.asyncDispose](): Promise<void>;\n url: string;\n port: number | undefined;\n}\n\n/**\n * Start a HTTP server for testing web pages.\n */\nexport function startHttpServer(dir: string): HttpServer {\n const server = http.createServer((request, response) => {\n let pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;\n\n if (pathname === '/') {\n pathname = '/index.html';\n }\n\n const pathnameWithIndexHtml = pathname.endsWith('/') ? path.join(pathname, 'index.html') : pathname;\n\n const filePath = path.join(dir, pathnameWithIndexHtml);\n\n if (fs.existsSync(filePath)) {\n try {\n const buffer = fs.readFileSync(filePath);\n response.writeHead(200, {\n 'Access-Control-Allow-Origin': '*',\n Pragma: 'no-cache',\n 'Cache-Control': 'no-cache',\n 'Content-Type': getContentType(pathnameWithIndexHtml),\n });\n response.end(buffer);\n } catch {\n response.statusCode = 500;\n response.end();\n }\n } else {\n response.statusCode = 404;\n response.end();\n }\n });\n\n server.listen();\n\n const address = server.address();\n if (!address) throw new Error('server has been unexpectedly closed');\n\n return {\n [Symbol.asyncDispose]: async () => {\n server.closeAllConnections();\n await new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n });\n },\n url: typeof address === 'string' ? address : `http://127.0.0.1:${address.port}`,\n port: typeof address === 'object' ? address.port : undefined,\n };\n}\n\nconst CONTENT_TYPE_BY_SUFFIX: Record<string, string> = {\n '.css': 'text/css',\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.gif': 'image/gif',\n '.jpg': 'image/jpeg',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n};\n\nfunction getContentType(pathname: string): string {\n for (const [suffix, contentType] of Object.entries(CONTENT_TYPE_BY_SUFFIX)) {\n if (pathname.endsWith(suffix)) return contentType;\n }\n return 'text/plain';\n}\n"],"mappings":"oMAaA,SAAgB,EAAgB,EAAyB,CACvD,IAAM,EAASA,EAAAA,QAAK,cAAc,EAAS,IAAa,CACtD,IAAI,EAAW,IAAI,IAAI,EAAQ,KAAO,IAAK,kBAAkB,CAAC,CAAC,SAE3D,IAAa,MACf,EAAW,eAGb,IAAM,EAAwB,EAAS,SAAS,GAAG,EAAIC,EAAAA,QAAK,KAAK,EAAU,YAAY,EAAI,EAErF,EAAWA,EAAAA,QAAK,KAAK,EAAK,CAAqB,EAErD,GAAIC,EAAAA,QAAG,WAAW,CAAQ,EACxB,GAAI,CACF,IAAM,EAASA,EAAAA,QAAG,aAAa,CAAQ,EACvC,EAAS,UAAU,IAAK,CACtB,8BAA+B,IAC/B,OAAQ,WACR,gBAAiB,WACjB,eAAgB,EAAe,CAAqB,CACtD,CAAC,EACD,EAAS,IAAI,CAAM,CACrB,MAAQ,CACN,EAAS,WAAa,IACtB,EAAS,IAAI,CACf,KAEA,GAAS,WAAa,IACtB,EAAS,IAAI,CAEjB,CAAC,EAED,EAAO,OAAO,EAEd,IAAM,EAAU,EAAO,QAAQ,EAC/B,GAAI,CAAC,EAAS,MAAU,MAAM,qCAAqC,EAEnE,MAAO,EACJ,OAAO,cAAe,SAAY,CACjC,EAAO,oBAAoB,EAC3B,MAAM,IAAI,QAAe,GAAY,CACnC,EAAO,UAAY,CACjB,EAAQ,CACV,CAAC,CACH,CAAC,CACH,EACA,IAAK,OAAO,GAAY,SAAW,EAAU,oBAAoB,EAAQ,OACzE,KAAM,OAAO,GAAY,SAAW,EAAQ,KAAO,IAAA,EACrD,CACF,CAEA,MAAM,EAAiD,CACrD,OAAQ,WACR,QAAS,YACT,MAAO,kBACP,OAAQ,YACR,OAAQ,aACR,OAAQ,YACR,OAAQ,eACV,EAEA,SAAS,EAAe,EAA0B,CAChD,IAAK,GAAM,CAAC,EAAQ,KAAgB,OAAO,QAAQ,CAAsB,EACvE,GAAI,EAAS,SAAS,CAAM,EAAG,OAAO,EAExC,MAAO,YACT"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,typeof as t,slicedToArray as r,regenerator as n}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"node:fs";import a from"node:http";import s from"node:path";function i(r){var i,c=a.createServer(function(e,t){var n,a=new URL(null!=(n=e.url)?n:"/","http://127.0.0.1").pathname;"/"===a&&(a="/index.html");var i=a.endsWith("/")?s.join(a,"index.html"):a,c=s.join(r,i);if(o.existsSync(c))try{var p=o.readFileSync(c);t.writeHead(200,{"Access-Control-Allow-Origin":"*",Pragma:"no-cache","Cache-Control":"no-cache","Content-Type":l(i)}),t.end(p)}catch(e){t.statusCode=500,t.end()}else t.statusCode=404,t.end()});c.listen();var p=c.address();if(!p)throw new Error("server has been unexpectedly closed");return(i={})[Symbol.asyncDispose]=e(n().m(function e(){return n().w(function(e){for(;;)switch(e.n){case 0:return c.closeAllConnections(),e.n=1,new Promise(function(e){c.close(function(){e()})});case 1:return e.a(2)}},e)})),i.url="string"==typeof p?p:"http://127.0.0.1:".concat(p.port),i.port="object"===t(p)?p.port:void 0,i}var c={".css":"text/css",".html":"text/html",".js":"text/javascript",".gif":"image/gif",".jpg":"image/jpeg",".png":"image/png",".svg":"image/svg+xml"};function l(e){for(var t=0,n=Object.entries(c);t<n.length;t++){var o=r(n[t],2),a=o[0],s=o[1];if(e.endsWith(a))return s}return"text/plain"}export{i as startHttpServer};
//# sourceMappingURL=startHttpServer.js.map
import e from"node:path";import t from"node:fs";import n from"node:http";function r(r){let i=n.createServer((n,i)=>{let o=new URL(n.url??`/`,`http://127.0.0.1`).pathname;o===`/`&&(o=`/index.html`);let s=o.endsWith(`/`)?e.join(o,`index.html`):o,c=e.join(r,s);if(t.existsSync(c))try{let e=t.readFileSync(c);i.writeHead(200,{"Access-Control-Allow-Origin":`*`,Pragma:`no-cache`,"Cache-Control":`no-cache`,"Content-Type":a(s)}),i.end(e)}catch{i.statusCode=500,i.end()}else i.statusCode=404,i.end()});i.listen();let o=i.address();if(!o)throw Error(`server has been unexpectedly closed`);return{[Symbol.asyncDispose]:async()=>{i.closeAllConnections(),await new Promise(e=>{i.close(()=>{e()})})},url:typeof o==`string`?o:`http://127.0.0.1:${o.port}`,port:typeof o==`object`?o.port:void 0}}const i={".css":`text/css`,".html":`text/html`,".js":`text/javascript`,".gif":`image/gif`,".jpg":`image/jpeg`,".png":`image/png`,".svg":`image/svg+xml`};function a(e){for(let[t,n]of Object.entries(i))if(e.endsWith(t))return n;return`text/plain`}export{r as startHttpServer};
//# sourceMappingURL=startHttpServer.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"startHttpServer.js","sources":["../../src/helpers/startHttpServer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\n\nexport interface HttpServer {\n [Symbol.asyncDispose](): Promise<void>;\n url: string;\n port: number | undefined;\n}\n\n/**\n * Start a HTTP server for testing web pages.\n */\nexport function startHttpServer(dir: string): HttpServer {\n const server = http.createServer((request, response) => {\n let pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;\n\n if (pathname === '/') {\n pathname = '/index.html';\n }\n\n const pathnameWithIndexHtml = pathname.endsWith('/') ? path.join(pathname, 'index.html') : pathname;\n\n const filePath = path.join(dir, pathnameWithIndexHtml);\n\n if (fs.existsSync(filePath)) {\n try {\n const buffer = fs.readFileSync(filePath);\n response.writeHead(200, {\n 'Access-Control-Allow-Origin': '*',\n Pragma: 'no-cache',\n 'Cache-Control': 'no-cache',\n 'Content-Type': getContentType(pathnameWithIndexHtml),\n });\n response.end(buffer);\n } catch {\n response.statusCode = 500;\n response.end();\n }\n } else {\n response.statusCode = 404;\n response.end();\n }\n });\n\n server.listen();\n\n const address = server.address();\n if (!address) throw new Error('server has been unexpectedly closed');\n\n return {\n [Symbol.asyncDispose]: async () => {\n server.closeAllConnections();\n await new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n });\n },\n url: typeof address === 'string' ? address : `http://127.0.0.1:${address.port}`,\n port: typeof address === 'object' ? address.port : undefined,\n };\n}\n\nconst CONTENT_TYPE_BY_SUFFIX: Record<string, string> = {\n '.css': 'text/css',\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.gif': 'image/gif',\n '.jpg': 'image/jpeg',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n};\n\nfunction getContentType(pathname: string): string {\n for (const [suffix, contentType] of Object.entries(CONTENT_TYPE_BY_SUFFIX)) {\n if (pathname.endsWith(suffix)) return contentType;\n }\n return 'text/plain';\n}\n"],"names":["startHttpServer","dir","_ref2","server","http","createServer","request","response","_request$url","pathname","URL","url","pathnameWithIndexHtml","endsWith","path","join","filePath","fs","existsSync","buffer","readFileSync","writeHead","Pragma","getContentType","end","_unused","statusCode","listen","address","Error","Symbol","asyncDispose","_asyncToGenerator","_regenerator","m","_callee","w","_context","n","closeAllConnections","Promise","resolve","close","a","concat","port","_typeof","undefined","CONTENT_TYPE_BY_SUFFIX","_i","_Object$entries","Object","entries","length","_Object$entries$_i","_slicedToArray","suffix","contentType"],"mappings":"qMAaO,SAASA,EAAgBC,GAAyB,IAAAC,EACjDC,EAASC,EAAKC,aAAa,SAACC,EAASC,GAAa,IAAAC,EAClDC,EAAW,IAAIC,IAAe,OAAZF,EAACF,EAAQK,KAAGH,EAAI,IAAK,oBAAoBC,SAE9C,MAAbA,IACFA,EAAW,eAGb,IAAMG,EAAwBH,EAASI,SAAS,KAAOC,EAAKC,KAAKN,EAAU,cAAgBA,EAErFO,EAAWF,EAAKC,KAAKd,EAAKW,GAEhC,GAAIK,EAAGC,WAAWF,GAChB,IACE,IAAMG,EAASF,EAAGG,aAAaJ,GAC/BT,EAASc,UAAU,IAAK,CACtB,8BAA+B,IAC/BC,OAAQ,WACR,gBAAiB,WACjB,eAAgBC,EAAeX,KAEjCL,EAASiB,IAAIL,EACf,CAAE,MAAAM,GACAlB,EAASmB,WAAa,IACtBnB,EAASiB,KACX,MAEAjB,EAASmB,WAAa,IACtBnB,EAASiB,KAEb,GAEArB,EAAOwB,SAEP,IAAMC,EAAUzB,EAAOyB,UACvB,IAAKA,EAAS,MAAM,IAAIC,MAAM,uCAE9B,OAAA3B,EAAA,CAAA,GACG4B,OAAOC,cAAYC,EAAAC,IAAAC,EAAG,SAAAC,IAAA,OAAAF,IAAAG,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EACQ,OAA7BnC,EAAOoC,sBAAsBF,EAAAC,EAAA,EACvB,IAAIE,QAAc,SAACC,GACvBtC,EAAOuC,MAAM,WACXD,GACF,EACF,GAAE,KAAA,EAAA,OAAAJ,EAAAM,EAAA,GAAA,EAAAR,EAAA,IACHjC,EACDS,IAAwB,iBAAZiB,EAAuBA,EAAO,oBAAAgB,OAAuBhB,EAAQiB,MAAM3C,EAC/E2C,KAAyB,WAAnBC,EAAOlB,GAAuBA,EAAQiB,UAAOE,EAAS7C,CAEhE,CAEA,IAAM8C,EAAiD,CACrD,OAAQ,WACR,QAAS,YACT,MAAO,kBACP,OAAQ,YACR,OAAQ,aACR,OAAQ,YACR,OAAQ,iBAGV,SAASzB,EAAed,GACtB,IAAA,IAAAwC,EAAA,EAAAC,EAAoCC,OAAOC,QAAQJ,GAAuBC,EAAAC,EAAAG,OAAAJ,IAAE,CAAvE,IAAAK,EAAAC,EAAAL,EAAAD,GAAA,GAAOO,EAAMF,EAAA,GAAEG,EAAWH,EAAA,GAC7B,GAAI7C,EAASI,SAAS2C,GAAS,OAAOC,CACxC,CACA,MAAO,YACT"}
{"version":3,"file":"startHttpServer.js","names":[],"sources":["../../src/helpers/startHttpServer.ts"],"sourcesContent":["import fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\n\nexport interface HttpServer {\n [Symbol.asyncDispose](): Promise<void>;\n url: string;\n port: number | undefined;\n}\n\n/**\n * Start a HTTP server for testing web pages.\n */\nexport function startHttpServer(dir: string): HttpServer {\n const server = http.createServer((request, response) => {\n let pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;\n\n if (pathname === '/') {\n pathname = '/index.html';\n }\n\n const pathnameWithIndexHtml = pathname.endsWith('/') ? path.join(pathname, 'index.html') : pathname;\n\n const filePath = path.join(dir, pathnameWithIndexHtml);\n\n if (fs.existsSync(filePath)) {\n try {\n const buffer = fs.readFileSync(filePath);\n response.writeHead(200, {\n 'Access-Control-Allow-Origin': '*',\n Pragma: 'no-cache',\n 'Cache-Control': 'no-cache',\n 'Content-Type': getContentType(pathnameWithIndexHtml),\n });\n response.end(buffer);\n } catch {\n response.statusCode = 500;\n response.end();\n }\n } else {\n response.statusCode = 404;\n response.end();\n }\n });\n\n server.listen();\n\n const address = server.address();\n if (!address) throw new Error('server has been unexpectedly closed');\n\n return {\n [Symbol.asyncDispose]: async () => {\n server.closeAllConnections();\n await new Promise<void>((resolve) => {\n server.close(() => {\n resolve();\n });\n });\n },\n url: typeof address === 'string' ? address : `http://127.0.0.1:${address.port}`,\n port: typeof address === 'object' ? address.port : undefined,\n };\n}\n\nconst CONTENT_TYPE_BY_SUFFIX: Record<string, string> = {\n '.css': 'text/css',\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.gif': 'image/gif',\n '.jpg': 'image/jpeg',\n '.png': 'image/png',\n '.svg': 'image/svg+xml',\n};\n\nfunction getContentType(pathname: string): string {\n for (const [suffix, contentType] of Object.entries(CONTENT_TYPE_BY_SUFFIX)) {\n if (pathname.endsWith(suffix)) return contentType;\n }\n return 'text/plain';\n}\n"],"mappings":"yEAaA,SAAgB,EAAgB,EAAyB,CACvD,IAAM,EAAS,EAAK,cAAc,EAAS,IAAa,CACtD,IAAI,EAAW,IAAI,IAAI,EAAQ,KAAO,IAAK,kBAAkB,CAAC,CAAC,SAE3D,IAAa,MACf,EAAW,eAGb,IAAM,EAAwB,EAAS,SAAS,GAAG,EAAI,EAAK,KAAK,EAAU,YAAY,EAAI,EAErF,EAAW,EAAK,KAAK,EAAK,CAAqB,EAErD,GAAI,EAAG,WAAW,CAAQ,EACxB,GAAI,CACF,IAAM,EAAS,EAAG,aAAa,CAAQ,EACvC,EAAS,UAAU,IAAK,CACtB,8BAA+B,IAC/B,OAAQ,WACR,gBAAiB,WACjB,eAAgB,EAAe,CAAqB,CACtD,CAAC,EACD,EAAS,IAAI,CAAM,CACrB,MAAQ,CACN,EAAS,WAAa,IACtB,EAAS,IAAI,CACf,KAEA,GAAS,WAAa,IACtB,EAAS,IAAI,CAEjB,CAAC,EAED,EAAO,OAAO,EAEd,IAAM,EAAU,EAAO,QAAQ,EAC/B,GAAI,CAAC,EAAS,MAAU,MAAM,qCAAqC,EAEnE,MAAO,EACJ,OAAO,cAAe,SAAY,CACjC,EAAO,oBAAoB,EAC3B,MAAM,IAAI,QAAe,GAAY,CACnC,EAAO,UAAY,CACjB,EAAQ,CACV,CAAC,CACH,CAAC,CACH,EACA,IAAK,OAAO,GAAY,SAAW,EAAU,oBAAoB,EAAQ,OACzE,KAAM,OAAO,GAAY,SAAW,EAAQ,KAAO,IAAA,EACrD,CACF,CAEA,MAAM,EAAiD,CACrD,OAAQ,WACR,QAAS,YACT,MAAO,kBACP,OAAQ,YACR,OAAQ,aACR,OAAQ,YACR,OAAQ,eACV,EAEA,SAAS,EAAe,EAA0B,CAChD,IAAK,GAAM,CAAC,EAAQ,KAAgB,OAAO,QAAQ,CAAsB,EACvE,GAAI,EAAS,SAAS,CAAM,EAAG,OAAO,EAExC,MAAO,YACT"}

@@ -1,2 +0,1 @@

"use strict";var e=require("./helpers/parseArgs.cjs"),r=require("./helpers/printTestCaseResult.cjs"),s=require("./helpers/removeCommentsInSourceCode.cjs"),o=require("./helpers/runCommandInTemporaryPackageManagerProject.cjs"),t=require("./helpers/runPythonInTemporaryUvProject.cjs"),a=require("./helpers/sourceCodeGrammars.cjs"),n=require("./helpers/startHttpServer.cjs"),c=require("./types/decisionCode.cjs"),p=require("./types/testCaseResult.cjs");exports.parseArgs=e.parseArgs,exports.encodeFileForTestCaseResult=r.encodeFileForTestCaseResult,exports.printTestCaseResult=r.printTestCaseResult,exports.removeCommentsAndStringsInSourceCode=s.removeCommentsAndStringsInSourceCode,exports.removeCommentsInSourceCode=s.removeCommentsInSourceCode,exports.copyPackageManagerProjectFiles=o.copyPackageManagerProjectFiles,exports.runCommandInTemporaryPackageManagerProject=o.runCommandInTemporaryPackageManagerProject,exports.runPythonInTemporaryUvProject=t.runPythonInTemporaryUvProject,exports.languageIdToSourceCodeGrammar=a.languageIdToSourceCodeGrammar,exports.startHttpServer=n.startHttpServer,exports.DecisionCode=c.DecisionCode,exports.TEST_CASE_RESULT_PREFIX=p.TEST_CASE_RESULT_PREFIX,exports.testCaseResultSchema=p.testCaseResultSchema;
//# sourceMappingURL=index.cjs.map
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./helpers/parseArgs.cjs"),t=require("./types/testCaseResult.cjs"),n=require("./helpers/printTestCaseResult.cjs"),r=require("./helpers/removeCommentsInSourceCode.cjs"),i=require("./helpers/runCommandInTemporaryPackageManagerProject.cjs"),a=require("./helpers/runPythonInTemporaryUvProject.cjs"),o=require("./helpers/sourceCodeGrammars.cjs"),s=require("./helpers/startHttpServer.cjs"),c=require("./types/decisionCode.cjs");exports.DecisionCode=c.DecisionCode,exports.TEST_CASE_RESULT_PREFIX=t.TEST_CASE_RESULT_PREFIX,exports.copyPackageManagerProjectFiles=i.copyPackageManagerProjectFiles,exports.encodeFileForTestCaseResult=n.encodeFileForTestCaseResult,exports.languageIdToSourceCodeGrammar=o.languageIdToSourceCodeGrammar,exports.parseArgs=e.parseArgs,exports.printTestCaseResult=n.printTestCaseResult,exports.removeCommentsAndStringsInSourceCode=r.removeCommentsAndStringsInSourceCode,exports.removeCommentsInSourceCode=r.removeCommentsInSourceCode,exports.runCommandInTemporaryPackageManagerProject=i.runCommandInTemporaryPackageManagerProject,exports.runPythonInTemporaryUvProject=a.runPythonInTemporaryUvProject,exports.startHttpServer=s.startHttpServer,exports.testCaseResultSchema=t.testCaseResultSchema;

@@ -1,2 +0,1 @@

export{parseArgs}from"./helpers/parseArgs.js";export{encodeFileForTestCaseResult,printTestCaseResult}from"./helpers/printTestCaseResult.js";export{removeCommentsAndStringsInSourceCode,removeCommentsInSourceCode}from"./helpers/removeCommentsInSourceCode.js";export{copyPackageManagerProjectFiles,runCommandInTemporaryPackageManagerProject}from"./helpers/runCommandInTemporaryPackageManagerProject.js";export{runPythonInTemporaryUvProject}from"./helpers/runPythonInTemporaryUvProject.js";export{languageIdToSourceCodeGrammar}from"./helpers/sourceCodeGrammars.js";export{startHttpServer}from"./helpers/startHttpServer.js";export{DecisionCode}from"./types/decisionCode.js";export{TEST_CASE_RESULT_PREFIX,testCaseResultSchema}from"./types/testCaseResult.js";
//# sourceMappingURL=index.js.map
import{parseArgs as e}from"./helpers/parseArgs.js";import{TEST_CASE_RESULT_PREFIX as t,testCaseResultSchema as n}from"./types/testCaseResult.js";import{encodeFileForTestCaseResult as r,printTestCaseResult as i}from"./helpers/printTestCaseResult.js";import{removeCommentsAndStringsInSourceCode as a,removeCommentsInSourceCode as o}from"./helpers/removeCommentsInSourceCode.js";import{copyPackageManagerProjectFiles as s,runCommandInTemporaryPackageManagerProject as c}from"./helpers/runCommandInTemporaryPackageManagerProject.js";import{runPythonInTemporaryUvProject as l}from"./helpers/runPythonInTemporaryUvProject.js";import{languageIdToSourceCodeGrammar as u}from"./helpers/sourceCodeGrammars.js";import{startHttpServer as d}from"./helpers/startHttpServer.js";import{DecisionCode as f}from"./types/decisionCode.js";export{f as DecisionCode,t as TEST_CASE_RESULT_PREFIX,s as copyPackageManagerProjectFiles,r as encodeFileForTestCaseResult,u as languageIdToSourceCodeGrammar,e as parseArgs,i as printTestCaseResult,a as removeCommentsAndStringsInSourceCode,o as removeCommentsInSourceCode,c as runCommandInTemporaryPackageManagerProject,l as runPythonInTemporaryUvProject,d as startHttpServer,n as testCaseResultSchema};

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),t=require("node:path"),r=require("zod"),n=require("../helpers/checkProblemDirIsolation.cjs"),s=require("../helpers/cleanWorkingDirectory.cjs"),i=require("../helpers/copyTestCaseFileInput.cjs"),a=require("../helpers/findEntryPointFile.cjs"),u=require("../helpers/findLanguageDefinitionByPath.cjs"),o=require("../helpers/judgeByStaticAnalysis.cjs"),c=require("../helpers/parseArgs.cjs"),d=require("../helpers/printDebugBanner.cjs"),l=require("../helpers/printTestCaseResult.cjs"),p=require("../helpers/readOutputFiles.cjs"),m=require("../helpers/readProblemMarkdownFrontMatter.cjs"),C=require("../helpers/readTestCases.cjs"),f=require("../helpers/resolveCwds.cjs"),h=require("../helpers/spawnSyncWithTimeout.cjs"),g=require("../types/decisionCode.cjs"),I=r.z.object({language:r.z.union([r.z.string(),r.z.array(r.z.string())]).optional()});function b(){return(b=e.asyncToGenerator(e.regenerator().m(function t(r,s){var i,a,u,o,l,p,m,C,h,g,b;return e.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:return i=c.parseArgs(process.argv),a=I.parse(i.params),t.n=1,f.resolveCwds(r,i.cwd);case 1:if(u=t.v,o=u.cwds,!(l=u.isDebugMode)){t.n=5;break}if(!(p=o.find(function(e){return"accepted"===e.expectedResult}))){t.n=4;break}return t.n=2,n.checkProblemDirIsolation(r,p,a);case 2:if(t.v.passed){t.n=3;break}return process.exitCode=1,t.a(2);case 3:t.n=5;break;case 4:d.printDebugBanner(["[DEBUG MODE] isolated problem directory check skipped","","No accepted model answer is available for checking that the copied judge still accepts a valid submission."]);case 5:m=e.createForOfIteratorHelper(o),t.p=6,m.s();case 7:if((C=m.n()).done){t.n=10;break}return h=C.value,l&&f.printDebugCwdBanner(r,h),t.n=8,v(r,h.cwd,a,s);case 8:g=t.v,l&&!y(h,g)&&(process.exitCode=1,f.printDebugExpectationFailureBanner(r,h));case 9:t.n=7;break;case 10:t.n=12;break;case 11:t.p=11,b=t.v,m.e(b);case 12:return t.p=12,m.f(),t.f(12);case 13:return t.a(2)}},t,null,[[6,11,12,13]])}))).apply(this,arguments)}function v(e,t,r,n){return E.apply(this,arguments)}function E(){return(E=e.asyncToGenerator(e.regenerator().m(function t(r,n,c,d){var C,f,h,I,b,v,E,y,T,O,_,w,x,M,P,B,F,j,q,A,U,N,W,G,z,X,H,Q,Y,Z,J,V,K,$,ee,te,re,ne,se,ie,ae,ue,oe,ce,de,le,pe;return e.regenerator().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.n=1,m.readProblemMarkdownFrontMatter(r);case 1:return _=t.v,t.n=2,(null!=(C=d.readTestCases)?C:S)(r);case 2:return w=t.v,x=null!=(f=null==(h=w[0])?void 0:h.id)?f:"prebuild",M={buildTimeoutSeconds:null!=(I=null==(b=d.limits)?void 0:b.buildTimeoutSeconds)?I:10,maxOutputLength:null!=(v=null==(E=d.limits)?void 0:E.maxOutputLength)?v:5e4},P=null!=(y=d.runTimeoutSeconds)?y:2,t.n=3,o.judgeByStaticAnalysis(n,_);case 3:if(!(B=t.v)){t.n=4;break}return l.printTestCaseResult(e.objectSpread2({testCaseId:x},B)),t.a(2,{allAccepted:!1});case 4:return t.n=5,a.findEntryPointFile(n,c.language);case 5:if(F=t.v){t.n=6;break}return l.printTestCaseResult({testCaseId:x,decisionCode:g.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(c.language?": language: ".concat(c.language):"")}),t.a(2,{allAccepted:!1});case 6:if(j=u.findLanguageDefinitionByPath(F)){t.n=7;break}return l.printTestCaseResult({testCaseId:x,decisionCode:g.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),t.a(2,{allAccepted:!1});case 7:if(q=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),A=F,!j.prebuild){t.n=12;break}return t.p=8,t.n=9,j.prebuild(n);case 9:return t.n=10,a.findEntryPointFile(n,c.language);case 10:(U=t.v)&&(A=U),t.n=12;break;case 11:return t.p=11,oe=t.v,l.printTestCaseResult({testCaseId:x,decisionCode:g.DecisionCode.BUILD_ERROR,stderr:oe instanceof Error?oe.message:String(oe)}),t.a(2,{allAccepted:!1});case 12:if(!(N=null==(T=j.buildCommand)?void 0:T.call(j,A))){t.n=13;break}if(!(W=R(N,{cwd:n,env:q,testCaseId:x,limits:M}))){t.n=13;break}return l.printTestCaseResult(W),t.a(2,{allAccepted:!1});case 13:return t.n=14,s.snapshotWorkingDirectory(n);case 14:if(G=t.v,0!==w.length){t.n=15;break}return l.printTestCaseResult({testCaseId:"default",decisionCode:g.DecisionCode.ACCEPTED}),t.a(2,{allAccepted:!0});case 15:z=null==(O=w.shared)?void 0:O.fileInputPath,X=e.createForOfIteratorHelper(w),t.p=16,X.s();case 17:if((H=X.n()).done){t.n=36;break}if(J=H.value,!z){t.n=18;break}return t.n=18,i.copyTestCaseFileInput(z,n);case 18:if(!J.fileInputPath){t.n=19;break}return t.n=19,i.copyTestCaseFileInput(J.fileInputPath,n);case 19:if(V="number"==typeof _.timeLimitMs?_.timeLimitMs/1e3:P,K=j.command(A),$=null!=(Q=J.input)?Q:"",ee=void 0,t.p=20,!d.resolveInput){t.n=22;break}return t.n=21,d.resolveInput({testCase:J,cwd:n,env:q});case 21:$=t.v;case 22:if(!d.runCommand){t.n=24;break}return t.n=23,d.runCommand({testCase:J,command:K,stdin:$,cwd:n,env:q,timeLimitSeconds:V});case 23:ce=t.v,t.n=25;break;case 24:ce=k(K,{stdin:$,cwd:n,env:q,timeLimitSeconds:V});case 25:ee=ce,t.n=28;break;case 26:return t.p=26,de=t.v,l.printTestCaseResult({testCaseId:J.id,decisionCode:g.DecisionCode.RUNTIME_ERROR,stdin:$,stderr:D(de)}),t.n=27,s.cleanWorkingDirectory(n,G);case 27:return t.a(2,{allAccepted:!1});case 28:return t.n=29,p.readOutputFiles(n,null!=(Y=_.requiredOutputFilePaths)?Y:[]);case 29:if(te=t.v,re={timeLimitSeconds:V,outputLimitLength:M.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:_.memoryLimitByte,requiredOutputFilePaths:_.requiredOutputFilePaths}},ne=L({runResult:ee,outputFiles:te,context:re}),se=ne,ne.decisionCode!==g.DecisionCode.ACCEPTED){t.n=33;break}return t.p=30,t.n=31,null==(ie=d.test)?void 0:ie.call(d,{testCase:J,runResult:ee,outputFiles:te,context:re});case 31:(ae=t.v)&&(se={decisionCode:null!=(ue=ae.decisionCode)?ue:ne.decisionCode,feedbackMarkdown:ae.feedbackMarkdown,stderr:ae.stderr}),t.n=33;break;case 32:t.p=32,le=t.v,se={decisionCode:g.DecisionCode.RUNTIME_ERROR,stderr:D(le)};case 33:return l.printTestCaseResult(e.objectSpread2(e.objectSpread2({testCaseId:J.id},se),{},{exitStatus:ee.status,stdin:ee.stdin,stdout:ee.stdout.slice(0,M.maxOutputLength)||void 0,stderr:(null!=(Z=se.stderr)?Z:ee.stderr).slice(0,M.maxOutputLength)||void 0,timeSeconds:ee.timeSeconds,memoryBytes:ee.memoryBytes,outputFiles:te.length>0?te:void 0})),t.n=34,s.cleanWorkingDirectory(n,G);case 34:if(se.decisionCode===g.DecisionCode.ACCEPTED){t.n=35;break}return t.a(2,{allAccepted:!1});case 35:t.n=17;break;case 36:t.n=38;break;case 37:t.p=37,pe=t.v,X.e(pe);case 38:return t.p=38,X.f(),t.f(38);case 39:return t.a(2,{allAccepted:!0})}},t,null,[[30,32],[20,26],[16,37,38,39],[8,11]])}))).apply(this,arguments)}function y(e,t){return t.allAccepted===("accepted"===e.expectedResult)}function R(e,t){var r,n=h.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",env:t.env},t.limits.buildTimeoutSeconds),s=null!=(r=n.status)?r:void 0;return 0!==n.status?{testCaseId:t.testCaseId,decisionCode:g.DecisionCode.BUILD_ERROR,exitStatus:s,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:n.timeSeconds>t.limits.buildTimeoutSeconds?{testCaseId:t.testCaseId,decisionCode:g.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:s,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:n.stdout.length>t.limits.maxOutputLength||n.stderr.length>t.limits.maxOutputLength?{testCaseId:t.testCaseId,decisionCode:g.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:s,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}:void 0}function D(e){return e instanceof Error?e.message:String(e)}function S(e){return T.apply(this,arguments)}function T(){return(T=e.asyncToGenerator(e.regenerator().m(function r(n){var s,i,a;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,C.readTestCases(t.join(n,"test_cases"));case 1:if(i=e.v,a=i.map(function(e){return{id:(t=e).id,input:t.input,fileInputPath:t.fileInputPath};var t}),null==(s=i.shared)||!s.fileInputPath){e.n=2;break}return e.a(2,Object.assign(a,{shared:{fileInputPath:i.shared.fileInputPath}}));case 2:return e.a(2,a)}},r)}))).apply(this,arguments)}function k(e,t){var r,n=h.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:n.stdout,stderr:n.stderr,status:null!=(r=n.status)?r:void 0,timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}}function L(e){var t,r,n;if(0!==e.runResult.status)return{decisionCode:g.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:g.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(t=e.context.problemMarkdownFrontMatter.memoryLimitByte)?t:Number.POSITIVE_INFINITY))return{decisionCode:g.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.outputLimitExceeded||e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:g.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var s=null!=(r=null==(n=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:n.length)?r:0;return e.outputFiles.length<s?{decisionCode:g.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:g.DecisionCode.ACCEPTED}}exports.commandJudgePreset=function(e,t){return b.apply(this,arguments)};
//# sourceMappingURL=command.cjs.map
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/parseArgs.cjs"),n=require("../helpers/printTestCaseResult.cjs"),r=require("../types/decisionCode.cjs"),i=require("../helpers/printDebugBanner.cjs"),a=require("../helpers/checkProblemDirIsolation.cjs"),o=require("../helpers/cleanWorkingDirectory.cjs"),s=require("../helpers/copyTestCaseFileInput.cjs"),c=require("../helpers/findEntryPointFile.cjs"),l=require("../helpers/findLanguageDefinitionByPath.cjs"),u=require("../helpers/judgeByStaticAnalysis.cjs"),d=require("../helpers/readOutputFiles.cjs"),f=require("../helpers/readProblemMarkdownFrontMatter.cjs"),p=require("../helpers/readTestCases.cjs"),m=require("../helpers/resolveCwds.cjs"),h=require("../helpers/spawnSyncWithTimeout.cjs");let g=require("zod"),_=require("node:path");_=e.__toESM(_,1);const v=g.z.object({language:g.z.union([g.z.string(),g.z.array(g.z.string())]).optional()});async function y(e,n){let r=t.parseArgs(process.argv),o=v.parse(r.params),{cwds:s,isDebugMode:c}=await m.resolveCwds(e,r.cwd);if(c){let t=s.find(e=>e.expectedResult===`accepted`);if(t){if(!(await a.checkProblemDirIsolation(e,t,o)).passed){process.exitCode=1;return}}else i.printDebugBanner([`[DEBUG MODE] isolated problem directory check skipped`,``,`No accepted model answer is available for checking that the copied judge still accepts a valid submission.`])}for(let t of s){c&&m.printDebugCwdBanner(e,t);let r=await b(e,t.cwd,o,n);c&&!x(t,r)&&(process.exitCode=1,m.printDebugExpectationFailureBanner(e,t))}}async function b(e,t,i,a){let p=await f.readProblemMarkdownFrontMatter(e),m=await(a.readTestCases??T)(e),h=m[0]?.id??`prebuild`,g={buildTimeoutSeconds:a.limits?.buildTimeoutSeconds??10,maxOutputLength:a.limits?.maxOutputLength??5e4},_=a.runTimeoutSeconds??2,v=await u.judgeByStaticAnalysis(t,p);if(v)return n.printTestCaseResult({testCaseId:h,...v}),{allAccepted:!1};let y=await c.findEntryPointFile(t,i.language);if(!y)return n.printTestCaseResult({testCaseId:h,decisionCode:r.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${i.language?`: language: ${i.language}`:``}`}),{allAccepted:!1};let b=l.findLanguageDefinitionByPath(y);if(!b)return n.printTestCaseResult({testCaseId:h,decisionCode:r.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`}),{allAccepted:!1};let x={...process.env,CI:``,FORCE_COLOR:`0`},w=y;if(b.prebuild)try{await b.prebuild(t);let e=await c.findEntryPointFile(t,i.language);e&&(w=e)}catch(e){return n.printTestCaseResult({testCaseId:h,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)}),{allAccepted:!1}}let O=b.buildCommand?.(w);if(O){let e=S(O,{cwd:t,env:x,testCaseId:h,limits:g});if(e)return n.printTestCaseResult(e),{allAccepted:!1}}let k=await o.snapshotWorkingDirectory(t);if(m.length===0)return n.printTestCaseResult({testCaseId:`default`,decisionCode:r.DecisionCode.ACCEPTED}),{allAccepted:!0};let A=m.shared?.fileInputPath;for(let e of m){A&&await s.copyTestCaseFileInput(A,t),e.fileInputPath&&await s.copyTestCaseFileInput(e.fileInputPath,t);let i=typeof p.timeLimitMs==`number`?p.timeLimitMs/1e3:_,c=b.command(w),l=e.input??``,u;try{a.resolveInput&&(l=await a.resolveInput({testCase:e,cwd:t,env:x})),u=a.runCommand?await a.runCommand({testCase:e,command:c,stdin:l,cwd:t,env:x,timeLimitSeconds:i}):E(c,{stdin:l,cwd:t,env:x,timeLimitSeconds:i})}catch(i){return n.printTestCaseResult({testCaseId:e.id,decisionCode:r.DecisionCode.RUNTIME_ERROR,stdin:l,stderr:C(i)}),await o.cleanWorkingDirectory(t,k),{allAccepted:!1}}let f=await d.readOutputFiles(t,p.requiredOutputFilePaths??[]),m={timeLimitSeconds:i,outputLimitLength:g.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:p.memoryLimitByte,requiredOutputFilePaths:p.requiredOutputFilePaths}},h=D({runResult:u,outputFiles:f,context:m}),v=h;if(h.decisionCode===r.DecisionCode.ACCEPTED)try{let t=await a.test?.({testCase:e,runResult:u,outputFiles:f,context:m});t&&(v={decisionCode:t.decisionCode??h.decisionCode,feedbackMarkdown:t.feedbackMarkdown,stderr:t.stderr})}catch(e){v={decisionCode:r.DecisionCode.RUNTIME_ERROR,stderr:C(e)}}if(n.printTestCaseResult({testCaseId:e.id,...v,exitStatus:u.status,stdin:u.stdin,stdout:u.stdout.slice(0,g.maxOutputLength)||void 0,stderr:(v.stderr??u.stderr).slice(0,g.maxOutputLength)||void 0,timeSeconds:u.timeSeconds,memoryBytes:u.memoryBytes,outputFiles:f.length>0?f:void 0}),await o.cleanWorkingDirectory(t,k),v.decisionCode!==r.DecisionCode.ACCEPTED)return{allAccepted:!1}}return{allAccepted:!0}}function x(e,t){return t.allAccepted===(e.expectedResult===`accepted`)}function S(e,t){let n=h.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:`utf8`,env:t.env},t.limits.buildTimeoutSeconds),i=n.status??void 0;if(n.status!==0)return{testCaseId:t.testCaseId,decisionCode:r.DecisionCode.BUILD_ERROR,exitStatus:i,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes};if(n.timeSeconds>t.limits.buildTimeoutSeconds)return{testCaseId:t.testCaseId,decisionCode:r.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:i,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes};if(n.stdout.length>t.limits.maxOutputLength||n.stderr.length>t.limits.maxOutputLength)return{testCaseId:t.testCaseId,decisionCode:r.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:i,stdout:n.stdout.slice(0,t.limits.maxOutputLength),stderr:n.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}}function C(e){return e instanceof Error?e.message:String(e)}function w(e){return{id:e.id,input:e.input,fileInputPath:e.fileInputPath}}async function T(e){let t=await p.readTestCases(_.default.join(e,`test_cases`)),n=t.map(e=>w(e));return t.shared?.fileInputPath?Object.assign(n,{shared:{fileInputPath:t.shared.fileInputPath}}):n}function E(e,t){let n=h.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:t.cwd,encoding:`utf8`,input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:n.stdout,stderr:n.stderr,status:n.status??void 0,timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}}function D(e){if(e.runResult.status!==0)return{decisionCode:r.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:r.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(e.context.problemMarkdownFrontMatter.memoryLimitByte??1/0))return{decisionCode:r.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.outputLimitExceeded||e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:r.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};let t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length??0;return e.outputFiles.length<t?{decisionCode:r.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:r.DecisionCode.ACCEPTED}}exports.commandJudgePreset=y;
//# sourceMappingURL=command.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"command.cjs","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { checkProblemDirIsolation } from '../helpers/checkProblemDirIsolation.js';\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printDebugBanner } from '../helpers/printDebugBanner.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\n printDebugCwdBanner,\n printDebugExpectationFailureBanner,\n resolveCwds,\n type ResolvedCwd,\n} from '../helpers/resolveCwds.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ntype JudgeParams = z.infer<typeof judgeParamsSchema>;\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n outputLimitExceeded?: boolean;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<TRunResult> | TRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: TRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\n * Run without a cwd argument to judge each `<problemDir>/model_answers/*` directory\n * for debugging. A prominent banner is printed for each run.\n * ```bash\n * bun judge.ts\n * ```\n */\nexport async function commandJudgePreset<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(problemDir: string, options: CommandJudgePresetOptions<TTestCase, TRunResult>): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n if (isDebugMode) {\n const acceptedCwd = cwds.find((cwd) => cwd.expectedResult === 'accepted');\n if (acceptedCwd) {\n const isolationCheckResult = await checkProblemDirIsolation(problemDir, acceptedCwd, params);\n if (!isolationCheckResult.passed) {\n process.exitCode = 1;\n return;\n }\n } else {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'No accepted model answer is available for checking that the copied judge still accepts a valid submission.',\n ]);\n }\n }\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase, TRunResult>(problemDir, resolvedCwd.cwd, params, options);\n if (isDebugMode && !matchesExpectedResult(resolvedCwd, result)) {\n process.exitCode = 1;\n printDebugExpectationFailureBanner(problemDir, resolvedCwd);\n }\n }\n}\n\nasync function runCommandJudgeForCwd<\n TTestCase extends BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase, TRunResult>\n): Promise<{ allAccepted: boolean }> {\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return { allAccepted: false };\n }\n\n const originalMainFilePath = await findEntryPointFile(cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return { allAccepted: false };\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return { allAccepted: false };\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(cwd);\n const prebuiltMainFilePath = await findEntryPointFile(cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return { allAccepted: false };\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return { allAccepted: false };\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return { allAccepted: true };\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: TRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n })\n : (runCommand(command, {\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n }) as TRunResult);\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n return { allAccepted: false };\n }\n\n const outputFiles = await readOutputFiles(cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return { allAccepted: false };\n }\n\n return { allAccepted: true };\n}\n\nfunction matchesExpectedResult(resolvedCwd: ResolvedCwd, result: { allAccepted: boolean }): boolean {\n return result.allAccepted === (resolvedCwd.expectedResult === 'accepted');\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.outputLimitExceeded ||\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"names":["judgeParamsSchema","z","object","language","union","string","array","optional","_commandJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","args","params","_yield$resolveCwds","cwds","isDebugMode","acceptedCwd","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","find","expectedResult","checkProblemDirIsolation","passed","exitCode","a","printDebugBanner","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","printDebugExpectationFailureBanner","e","f","apply","this","arguments","_x3","_x4","_x5","_x6","_runCommandJudgeForCwd","_callee2","_options$readTestCase","_testCases$0$id","_testCases$","_options$limits$build","_options$limits","_options$limits$maxOu","_options$limits2","_options$runTimeoutSe","_languageDefinition$b","_shared","problemMarkdownFrontMatter","testCases","prebuildTestCaseId","limits","runTimeoutSeconds","staticAnalysisResult","originalMainFilePath","languageDefinition","env","mainFilePath","prebuiltMainFilePath","buildCommand","buildResult","cwdSnapshot","sharedFileInputPath","_iterator2","_step2","_testCase$input","_problemMarkdownFront","_judgeResult$stderr","testCase","timeLimitSeconds","command","stdin","runResult","outputFiles","judgeContext","baseJudgeResult","judgeResult","_options$test","extendedJudgeResult","_extendedJudgeResult$","_t2","_t3","_t4","_t5","_t6","_context2","readProblemMarkdownFrontMatter","readTestCases","readCommandTestCases","id","buildTimeoutSeconds","maxOutputLength","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","allAccepted","findEntryPointFile","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","BUILD_ERROR","Error","message","String","call","runBuild","snapshotWorkingDirectory","length","ACCEPTED","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","resolveInput","runCommand","RUNTIME_ERROR","errorToMessage","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","outputLimitLength","memoryLimitByte","evaluateByLimits","context","test","feedbackMarkdown","exitStatus","status","stdout","slice","undefined","timeSeconds","memoryBytes","_spawnResult$status","spawnResult","spawnSyncWithTimeout","encoding","BUILD_TIME_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","error","_x7","_readCommandTestCases","_callee3","_fileTestCases$shared","fileTestCases","commandTestCases","_context3","readFileTestCases","path","join","map","Object","assign","_spawnResult$status2","_context$context$prob","_context$context$prob2","_context$context$prob3","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","outputLimitExceeded","OUTPUT_SIZE_LIMIT_EXCEEDED","requiredOutputFileCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x","_x2"],"mappings":"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"}
{"version":3,"file":"command.cjs","names":["z","parseArgs","resolveCwds","checkProblemDirIsolation","readProblemMarkdownFrontMatter","judgeByStaticAnalysis","findEntryPointFile","DecisionCode","findLanguageDefinitionByPath","snapshotWorkingDirectory","copyTestCaseFileInput","cleanWorkingDirectory","readOutputFiles","spawnSyncWithTimeout","readFileTestCases","path"],"sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { checkProblemDirIsolation } from '../helpers/checkProblemDirIsolation.js';\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printDebugBanner } from '../helpers/printDebugBanner.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\n printDebugCwdBanner,\n printDebugExpectationFailureBanner,\n resolveCwds,\n type ResolvedCwd,\n} from '../helpers/resolveCwds.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ntype JudgeParams = z.infer<typeof judgeParamsSchema>;\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n outputLimitExceeded?: boolean;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<TRunResult> | TRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: TRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\n * Run without a cwd argument to judge each `<problemDir>/model_answers/*` directory\n * for debugging. A prominent banner is printed for each run.\n * ```bash\n * bun judge.ts\n * ```\n */\nexport async function commandJudgePreset<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(problemDir: string, options: CommandJudgePresetOptions<TTestCase, TRunResult>): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n if (isDebugMode) {\n const acceptedCwd = cwds.find((cwd) => cwd.expectedResult === 'accepted');\n if (acceptedCwd) {\n const isolationCheckResult = await checkProblemDirIsolation(problemDir, acceptedCwd, params);\n if (!isolationCheckResult.passed) {\n process.exitCode = 1;\n return;\n }\n } else {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'No accepted model answer is available for checking that the copied judge still accepts a valid submission.',\n ]);\n }\n }\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase, TRunResult>(problemDir, resolvedCwd.cwd, params, options);\n if (isDebugMode && !matchesExpectedResult(resolvedCwd, result)) {\n process.exitCode = 1;\n printDebugExpectationFailureBanner(problemDir, resolvedCwd);\n }\n }\n}\n\nasync function runCommandJudgeForCwd<\n TTestCase extends BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase, TRunResult>\n): Promise<{ allAccepted: boolean }> {\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return { allAccepted: false };\n }\n\n const originalMainFilePath = await findEntryPointFile(cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return { allAccepted: false };\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return { allAccepted: false };\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(cwd);\n const prebuiltMainFilePath = await findEntryPointFile(cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return { allAccepted: false };\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return { allAccepted: false };\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return { allAccepted: true };\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: TRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n })\n : (runCommand(command, {\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n }) as TRunResult);\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n return { allAccepted: false };\n }\n\n const outputFiles = await readOutputFiles(cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return { allAccepted: false };\n }\n\n return { allAccepted: true };\n}\n\nfunction matchesExpectedResult(resolvedCwd: ResolvedCwd, result: { allAccepted: boolean }): boolean {\n return result.allAccepted === (resolvedCwd.expectedResult === 'accepted');\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.outputLimitExceeded ||\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as t,createForOfIteratorHelper as r,objectSpread2 as s}from"../_virtual/_rollupPluginBabelHelpers.js";import n from"node:path";import{z as i}from"zod";import{checkProblemDirIsolation as a}from"../helpers/checkProblemDirIsolation.js";import{cleanWorkingDirectory as u,snapshotWorkingDirectory as o}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as d}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as c}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as l}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as m}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as p}from"../helpers/parseArgs.js";import{printDebugBanner as f}from"../helpers/printDebugBanner.js";import{printTestCaseResult as h}from"../helpers/printTestCaseResult.js";import{readOutputFiles as C}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as I}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as v}from"../helpers/readTestCases.js";import{resolveCwds as g,printDebugExpectationFailureBanner as E,printDebugCwdBanner as b}from"../helpers/resolveCwds.js";import{spawnSyncWithTimeout as R}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as y}from"../types/decisionCode.js";var L=i.object({language:i.union([i.string(),i.array(i.string())]).optional()});function S(e,t){return k.apply(this,arguments)}function k(){return(k=e(t().m(function e(s,n){var i,u,o,d,c,l,m,h,C,I,v;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return i=p(process.argv),u=L.parse(i.params),e.n=1,g(s,i.cwd);case 1:if(o=e.v,d=o.cwds,!(c=o.isDebugMode)){e.n=5;break}if(!(l=d.find(function(e){return"accepted"===e.expectedResult}))){e.n=4;break}return e.n=2,a(s,l,u);case 2:if(e.v.passed){e.n=3;break}return process.exitCode=1,e.a(2);case 3:e.n=5;break;case 4:f(["[DEBUG MODE] isolated problem directory check skipped","","No accepted model answer is available for checking that the copied judge still accepts a valid submission."]);case 5:m=r(d),e.p=6,m.s();case 7:if((h=m.n()).done){e.n=10;break}return C=h.value,c&&b(s,C),e.n=8,O(s,C.cwd,u,n);case 8:I=e.v,c&&!_(C,I)&&(process.exitCode=1,E(s,C));case 9:e.n=7;break;case 10:e.n=12;break;case 11:e.p=11,v=e.v,m.e(v);case 12:return e.p=12,m.f(),e.f(12);case 13:return e.a(2)}},e,null,[[6,11,12,13]])}))).apply(this,arguments)}function O(e,t,r,s){return T.apply(this,arguments)}function T(){return(T=e(t().m(function e(n,i,a,p){var f,v,g,E,b,R,L,S,k,O,T,_,w,j,F,A,U,N,G,X,q,W,H,Q,Y,Z,z,V,J,K,$,ee,te,re,se,ne,ie,ae,ue,oe,de,ce,le,me,pe,fe,he;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,I(n);case 1:return T=e.v,e.n=2,(null!=(f=p.readTestCases)?f:D)(n);case 2:return _=e.v,w=null!=(v=null==(g=_[0])?void 0:g.id)?v:"prebuild",j={buildTimeoutSeconds:null!=(E=null==(b=p.limits)?void 0:b.buildTimeoutSeconds)?E:10,maxOutputLength:null!=(R=null==(L=p.limits)?void 0:L.maxOutputLength)?R:5e4},F=null!=(S=p.runTimeoutSeconds)?S:2,e.n=3,m(i,T);case 3:if(!(A=e.v)){e.n=4;break}return h(s({testCaseId:w},A)),e.a(2,{allAccepted:!1});case 4:return e.n=5,c(i,a.language);case 5:if(U=e.v){e.n=6;break}return h({testCaseId:w,decisionCode:y.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(a.language?": language: ".concat(a.language):"")}),e.a(2,{allAccepted:!1});case 6:if(N=l(U)){e.n=7;break}return h({testCaseId:w,decisionCode:y.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2,{allAccepted:!1});case 7:if(G=s(s({},process.env),{},{CI:"",FORCE_COLOR:"0"}),X=U,!N.prebuild){e.n=12;break}return e.p=8,e.n=9,N.prebuild(i);case 9:return e.n=10,c(i,a.language);case 10:(q=e.v)&&(X=q),e.n=12;break;case 11:return e.p=11,le=e.v,h({testCaseId:w,decisionCode:y.BUILD_ERROR,stderr:le instanceof Error?le.message:String(le)}),e.a(2,{allAccepted:!1});case 12:if(!(W=null==(k=N.buildCommand)?void 0:k.call(N,X))){e.n=13;break}if(!(H=x(W,{cwd:i,env:G,testCaseId:w,limits:j}))){e.n=13;break}return h(H),e.a(2,{allAccepted:!1});case 13:return e.n=14,o(i);case 14:if(Q=e.v,0!==_.length){e.n=15;break}return h({testCaseId:"default",decisionCode:y.ACCEPTED}),e.a(2,{allAccepted:!0});case 15:Y=null==(O=_.shared)?void 0:O.fileInputPath,Z=r(_),e.p=16,Z.s();case 17:if((z=Z.n()).done){e.n=36;break}if($=z.value,!Y){e.n=18;break}return e.n=18,d(Y,i);case 18:if(!$.fileInputPath){e.n=19;break}return e.n=19,d($.fileInputPath,i);case 19:if(ee="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:F,te=N.command(X),re=null!=(V=$.input)?V:"",se=void 0,e.p=20,!p.resolveInput){e.n=22;break}return e.n=21,p.resolveInput({testCase:$,cwd:i,env:G});case 21:re=e.v;case 22:if(!p.runCommand){e.n=24;break}return e.n=23,p.runCommand({testCase:$,command:te,stdin:re,cwd:i,env:G,timeLimitSeconds:ee});case 23:me=e.v,e.n=25;break;case 24:me=P(te,{stdin:re,cwd:i,env:G,timeLimitSeconds:ee});case 25:se=me,e.n=28;break;case 26:return e.p=26,pe=e.v,h({testCaseId:$.id,decisionCode:y.RUNTIME_ERROR,stdin:re,stderr:M(pe)}),e.n=27,u(i,Q);case 27:return e.a(2,{allAccepted:!1});case 28:return e.n=29,C(i,null!=(J=T.requiredOutputFilePaths)?J:[]);case 29:if(ne=e.v,ie={timeLimitSeconds:ee,outputLimitLength:j.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:T.memoryLimitByte,requiredOutputFilePaths:T.requiredOutputFilePaths}},ae=B({runResult:se,outputFiles:ne,context:ie}),ue=ae,ae.decisionCode!==y.ACCEPTED){e.n=33;break}return e.p=30,e.n=31,null==(oe=p.test)?void 0:oe.call(p,{testCase:$,runResult:se,outputFiles:ne,context:ie});case 31:(de=e.v)&&(ue={decisionCode:null!=(ce=de.decisionCode)?ce:ae.decisionCode,feedbackMarkdown:de.feedbackMarkdown,stderr:de.stderr}),e.n=33;break;case 32:e.p=32,fe=e.v,ue={decisionCode:y.RUNTIME_ERROR,stderr:M(fe)};case 33:return h(s(s({testCaseId:$.id},ue),{},{exitStatus:se.status,stdin:se.stdin,stdout:se.stdout.slice(0,j.maxOutputLength)||void 0,stderr:(null!=(K=ue.stderr)?K:se.stderr).slice(0,j.maxOutputLength)||void 0,timeSeconds:se.timeSeconds,memoryBytes:se.memoryBytes,outputFiles:ne.length>0?ne:void 0})),e.n=34,u(i,Q);case 34:if(ue.decisionCode===y.ACCEPTED){e.n=35;break}return e.a(2,{allAccepted:!1});case 35:e.n=17;break;case 36:e.n=38;break;case 37:e.p=37,he=e.v,Z.e(he);case 38:return e.p=38,Z.f(),e.f(38);case 39:return e.a(2,{allAccepted:!0})}},e,null,[[30,32],[20,26],[16,37,38,39],[8,11]])}))).apply(this,arguments)}function _(e,t){return t.allAccepted===("accepted"===e.expectedResult)}function x(e,t){var r,s=R(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",env:t.env},t.limits.buildTimeoutSeconds),n=null!=(r=s.status)?r:void 0;return 0!==s.status?{testCaseId:t.testCaseId,decisionCode:y.BUILD_ERROR,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:s.timeSeconds>t.limits.buildTimeoutSeconds?{testCaseId:t.testCaseId,decisionCode:y.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:s.stdout.length>t.limits.maxOutputLength||s.stderr.length>t.limits.maxOutputLength?{testCaseId:t.testCaseId,decisionCode:y.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:n,stdout:s.stdout.slice(0,t.limits.maxOutputLength),stderr:s.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}:void 0}function M(e){return e instanceof Error?e.message:String(e)}function D(e){return w.apply(this,arguments)}function w(){return(w=e(t().m(function e(r){var s,i,a;return t().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,v(n.join(r,"test_cases"));case 1:if(i=e.v,a=i.map(function(e){return{id:(t=e).id,input:t.input,fileInputPath:t.fileInputPath};var t}),null==(s=i.shared)||!s.fileInputPath){e.n=2;break}return e.a(2,Object.assign(a,{shared:{fileInputPath:i.shared.fileInputPath}}));case 2:return e.a(2,a)}},e)}))).apply(this,arguments)}function P(e,t){var r,s=R(e[0],e.slice(1),{cwd:t.cwd,encoding:"utf8",input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:s.stdout,stderr:s.stderr,status:null!=(r=s.status)?r:void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes}}function B(e){var t,r,s;if(0!==e.runResult.status)return{decisionCode:y.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:y.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(t=e.context.problemMarkdownFrontMatter.memoryLimitByte)?t:Number.POSITIVE_INFINITY))return{decisionCode:y.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.outputLimitExceeded||e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:y.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var n=null!=(r=null==(s=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:s.length)?r:0;return e.outputFiles.length<n?{decisionCode:y.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:y.ACCEPTED}}export{S as commandJudgePreset};
//# sourceMappingURL=command.js.map
import{parseArgs as e}from"../helpers/parseArgs.js";import{printTestCaseResult as t}from"../helpers/printTestCaseResult.js";import{DecisionCode as n}from"../types/decisionCode.js";import{printDebugBanner as r}from"../helpers/printDebugBanner.js";import{checkProblemDirIsolation as i}from"../helpers/checkProblemDirIsolation.js";import{cleanWorkingDirectory as a,snapshotWorkingDirectory as o}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as s}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as c}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as l}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as u}from"../helpers/judgeByStaticAnalysis.js";import{readOutputFiles as d}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as f}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as p}from"../helpers/readTestCases.js";import{printDebugCwdBanner as m,printDebugExpectationFailureBanner as h,resolveCwds as g}from"../helpers/resolveCwds.js";import{spawnSyncWithTimeout as _}from"../helpers/spawnSyncWithTimeout.js";import{z as v}from"zod";import y from"node:path";const b=v.object({language:v.union([v.string(),v.array(v.string())]).optional()});async function x(t,n){let a=e(process.argv),o=b.parse(a.params),{cwds:s,isDebugMode:c}=await g(t,a.cwd);if(c){let e=s.find(e=>e.expectedResult===`accepted`);if(e){if(!(await i(t,e,o)).passed){process.exitCode=1;return}}else r([`[DEBUG MODE] isolated problem directory check skipped`,``,`No accepted model answer is available for checking that the copied judge still accepts a valid submission.`])}for(let e of s){c&&m(t,e);let r=await S(t,e.cwd,o,n);c&&!C(e,r)&&(process.exitCode=1,h(t,e))}}async function S(e,r,i,p){let m=await f(e),h=await(p.readTestCases??D)(e),g=h[0]?.id??`prebuild`,_={buildTimeoutSeconds:p.limits?.buildTimeoutSeconds??10,maxOutputLength:p.limits?.maxOutputLength??5e4},v=p.runTimeoutSeconds??2,y=await u(r,m);if(y)return t({testCaseId:g,...y}),{allAccepted:!1};let b=await c(r,i.language);if(!b)return t({testCaseId:g,decisionCode:n.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${i.language?`: language: ${i.language}`:``}`}),{allAccepted:!1};let x=l(b);if(!x)return t({testCaseId:g,decisionCode:n.WRONG_ANSWER,stderr:`unsupported language`}),{allAccepted:!1};let S={...process.env,CI:``,FORCE_COLOR:`0`},C=b;if(x.prebuild)try{await x.prebuild(r);let e=await c(r,i.language);e&&(C=e)}catch(e){return t({testCaseId:g,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)}),{allAccepted:!1}}let E=x.buildCommand?.(C);if(E){let e=w(E,{cwd:r,env:S,testCaseId:g,limits:_});if(e)return t(e),{allAccepted:!1}}let A=await o(r);if(h.length===0)return t({testCaseId:`default`,decisionCode:n.ACCEPTED}),{allAccepted:!0};let j=h.shared?.fileInputPath;for(let e of h){j&&await s(j,r),e.fileInputPath&&await s(e.fileInputPath,r);let i=typeof m.timeLimitMs==`number`?m.timeLimitMs/1e3:v,o=x.command(C),c=e.input??``,l;try{p.resolveInput&&(c=await p.resolveInput({testCase:e,cwd:r,env:S})),l=p.runCommand?await p.runCommand({testCase:e,command:o,stdin:c,cwd:r,env:S,timeLimitSeconds:i}):O(o,{stdin:c,cwd:r,env:S,timeLimitSeconds:i})}catch(i){return t({testCaseId:e.id,decisionCode:n.RUNTIME_ERROR,stdin:c,stderr:T(i)}),await a(r,A),{allAccepted:!1}}let u=await d(r,m.requiredOutputFilePaths??[]),f={timeLimitSeconds:i,outputLimitLength:_.maxOutputLength,problemMarkdownFrontMatter:{memoryLimitByte:m.memoryLimitByte,requiredOutputFilePaths:m.requiredOutputFilePaths}},h=k({runResult:l,outputFiles:u,context:f}),g=h;if(h.decisionCode===n.ACCEPTED)try{let t=await p.test?.({testCase:e,runResult:l,outputFiles:u,context:f});t&&(g={decisionCode:t.decisionCode??h.decisionCode,feedbackMarkdown:t.feedbackMarkdown,stderr:t.stderr})}catch(e){g={decisionCode:n.RUNTIME_ERROR,stderr:T(e)}}if(t({testCaseId:e.id,...g,exitStatus:l.status,stdin:l.stdin,stdout:l.stdout.slice(0,_.maxOutputLength)||void 0,stderr:(g.stderr??l.stderr).slice(0,_.maxOutputLength)||void 0,timeSeconds:l.timeSeconds,memoryBytes:l.memoryBytes,outputFiles:u.length>0?u:void 0}),await a(r,A),g.decisionCode!==n.ACCEPTED)return{allAccepted:!1}}return{allAccepted:!0}}function C(e,t){return t.allAccepted===(e.expectedResult===`accepted`)}function w(e,t){let r=_(e[0],e.slice(1),{cwd:t.cwd,encoding:`utf8`,env:t.env},t.limits.buildTimeoutSeconds),i=r.status??void 0;if(r.status!==0)return{testCaseId:t.testCaseId,decisionCode:n.BUILD_ERROR,exitStatus:i,stdout:r.stdout.slice(0,t.limits.maxOutputLength),stderr:r.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes};if(r.timeSeconds>t.limits.buildTimeoutSeconds)return{testCaseId:t.testCaseId,decisionCode:n.BUILD_TIME_LIMIT_EXCEEDED,exitStatus:i,stdout:r.stdout.slice(0,t.limits.maxOutputLength),stderr:r.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes};if(r.stdout.length>t.limits.maxOutputLength||r.stderr.length>t.limits.maxOutputLength)return{testCaseId:t.testCaseId,decisionCode:n.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,exitStatus:i,stdout:r.stdout.slice(0,t.limits.maxOutputLength),stderr:r.stderr.slice(0,t.limits.maxOutputLength),timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes}}function T(e){return e instanceof Error?e.message:String(e)}function E(e){return{id:e.id,input:e.input,fileInputPath:e.fileInputPath}}async function D(e){let t=await p(y.join(e,`test_cases`)),n=t.map(e=>E(e));return t.shared?.fileInputPath?Object.assign(n,{shared:{fileInputPath:t.shared.fileInputPath}}):n}function O(e,t){let n=_(e[0],e.slice(1),{cwd:t.cwd,encoding:`utf8`,input:t.stdin,env:t.env},t.timeLimitSeconds);return{stdin:t.stdin,stdout:n.stdout,stderr:n.stderr,status:n.status??void 0,timeSeconds:n.timeSeconds,memoryBytes:n.memoryBytes}}function k(e){if(e.runResult.status!==0)return{decisionCode:n.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.timeSeconds>e.context.timeLimitSeconds)return{decisionCode:n.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(e.context.problemMarkdownFrontMatter.memoryLimitByte??1/0))return{decisionCode:n.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.outputLimitExceeded||e.runResult.stdout.length>e.context.outputLimitLength||e.runResult.stderr.length>e.context.outputLimitLength)return{decisionCode:n.OUTPUT_SIZE_LIMIT_EXCEEDED,stderr:e.runResult.stderr};let t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length??0;return e.outputFiles.length<t?{decisionCode:n.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:n.ACCEPTED}}export{x as commandJudgePreset};
//# sourceMappingURL=command.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"command.js","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { checkProblemDirIsolation } from '../helpers/checkProblemDirIsolation.js';\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printDebugBanner } from '../helpers/printDebugBanner.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\n printDebugCwdBanner,\n printDebugExpectationFailureBanner,\n resolveCwds,\n type ResolvedCwd,\n} from '../helpers/resolveCwds.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ntype JudgeParams = z.infer<typeof judgeParamsSchema>;\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n outputLimitExceeded?: boolean;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<TRunResult> | TRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: TRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\n * Run without a cwd argument to judge each `<problemDir>/model_answers/*` directory\n * for debugging. A prominent banner is printed for each run.\n * ```bash\n * bun judge.ts\n * ```\n */\nexport async function commandJudgePreset<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(problemDir: string, options: CommandJudgePresetOptions<TTestCase, TRunResult>): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n if (isDebugMode) {\n const acceptedCwd = cwds.find((cwd) => cwd.expectedResult === 'accepted');\n if (acceptedCwd) {\n const isolationCheckResult = await checkProblemDirIsolation(problemDir, acceptedCwd, params);\n if (!isolationCheckResult.passed) {\n process.exitCode = 1;\n return;\n }\n } else {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'No accepted model answer is available for checking that the copied judge still accepts a valid submission.',\n ]);\n }\n }\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase, TRunResult>(problemDir, resolvedCwd.cwd, params, options);\n if (isDebugMode && !matchesExpectedResult(resolvedCwd, result)) {\n process.exitCode = 1;\n printDebugExpectationFailureBanner(problemDir, resolvedCwd);\n }\n }\n}\n\nasync function runCommandJudgeForCwd<\n TTestCase extends BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase, TRunResult>\n): Promise<{ allAccepted: boolean }> {\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return { allAccepted: false };\n }\n\n const originalMainFilePath = await findEntryPointFile(cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return { allAccepted: false };\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return { allAccepted: false };\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(cwd);\n const prebuiltMainFilePath = await findEntryPointFile(cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return { allAccepted: false };\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return { allAccepted: false };\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return { allAccepted: true };\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: TRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n })\n : (runCommand(command, {\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n }) as TRunResult);\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n return { allAccepted: false };\n }\n\n const outputFiles = await readOutputFiles(cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return { allAccepted: false };\n }\n\n return { allAccepted: true };\n}\n\nfunction matchesExpectedResult(resolvedCwd: ResolvedCwd, result: { allAccepted: boolean }): boolean {\n return result.allAccepted === (resolvedCwd.expectedResult === 'accepted');\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.outputLimitExceeded ||\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"names":["judgeParamsSchema","z","object","language","union","string","array","optional","commandJudgePreset","_x","_x2","_commandJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","args","params","_yield$resolveCwds","cwds","isDebugMode","acceptedCwd","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","find","expectedResult","checkProblemDirIsolation","passed","exitCode","a","printDebugBanner","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","printDebugExpectationFailureBanner","e","f","_x3","_x4","_x5","_x6","_runCommandJudgeForCwd","_callee2","_options$readTestCase","_testCases$0$id","_testCases$","_options$limits$build","_options$limits","_options$limits$maxOu","_options$limits2","_options$runTimeoutSe","_languageDefinition$b","_shared","problemMarkdownFrontMatter","testCases","prebuildTestCaseId","limits","runTimeoutSeconds","staticAnalysisResult","originalMainFilePath","languageDefinition","env","mainFilePath","prebuiltMainFilePath","buildCommand","buildResult","cwdSnapshot","sharedFileInputPath","_iterator2","_step2","_testCase$input","_problemMarkdownFront","_judgeResult$stderr","testCase","timeLimitSeconds","command","stdin","runResult","outputFiles","judgeContext","baseJudgeResult","judgeResult","_options$test","extendedJudgeResult","_extendedJudgeResult$","_t2","_t3","_t4","_t5","_t6","_context2","readProblemMarkdownFrontMatter","readTestCases","readCommandTestCases","id","buildTimeoutSeconds","maxOutputLength","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","allAccepted","findEntryPointFile","decisionCode","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","BUILD_ERROR","Error","message","String","call","runBuild","snapshotWorkingDirectory","length","ACCEPTED","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","resolveInput","runCommand","RUNTIME_ERROR","errorToMessage","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","outputLimitLength","memoryLimitByte","evaluateByLimits","context","test","feedbackMarkdown","exitStatus","status","stdout","slice","undefined","timeSeconds","memoryBytes","_spawnResult$status","spawnResult","spawnSyncWithTimeout","encoding","BUILD_TIME_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","error","_x7","_readCommandTestCases","_callee3","_fileTestCases$shared","fileTestCases","commandTestCases","_context3","readFileTestCases","path","join","map","Object","assign","_spawnResult$status2","_context$context$prob","_context$context$prob2","_context$context$prob3","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","outputLimitExceeded","OUTPUT_SIZE_LIMIT_EXCEEDED","requiredOutputFileCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR"],"mappings":"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"}
{"version":3,"file":"command.js","names":["readFileTestCases"],"sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { checkProblemDirIsolation } from '../helpers/checkProblemDirIsolation.js';\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printDebugBanner } from '../helpers/printDebugBanner.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\n printDebugCwdBanner,\n printDebugExpectationFailureBanner,\n resolveCwds,\n type ResolvedCwd,\n} from '../helpers/resolveCwds.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ntype JudgeParams = z.infer<typeof judgeParamsSchema>;\n\ninterface BaseCommandTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\ntype CommandJudgeCaseResult = Pick<TestCaseResult, 'decisionCode' | 'feedbackMarkdown' | 'stderr'>;\n\nexport interface CommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n outputLimitExceeded?: boolean;\n}\n\ninterface CommandJudgeContext {\n timeLimitSeconds: number;\n outputLimitLength: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\nexport interface CommandJudgeLimits {\n buildTimeoutSeconds: number;\n maxOutputLength: number;\n}\n\nexport interface CommandJudgePresetOptions<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<TRunResult> | TRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: TRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\n * Run without a cwd argument to judge each `<problemDir>/model_answers/*` directory\n * for debugging. A prominent banner is printed for each run.\n * ```bash\n * bun judge.ts\n * ```\n */\nexport async function commandJudgePreset<\n TTestCase extends BaseCommandTestCase = BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(problemDir: string, options: CommandJudgePresetOptions<TTestCase, TRunResult>): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n if (isDebugMode) {\n const acceptedCwd = cwds.find((cwd) => cwd.expectedResult === 'accepted');\n if (acceptedCwd) {\n const isolationCheckResult = await checkProblemDirIsolation(problemDir, acceptedCwd, params);\n if (!isolationCheckResult.passed) {\n process.exitCode = 1;\n return;\n }\n } else {\n printDebugBanner([\n '[DEBUG MODE] isolated problem directory check skipped',\n '',\n 'No accepted model answer is available for checking that the copied judge still accepts a valid submission.',\n ]);\n }\n }\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase, TRunResult>(problemDir, resolvedCwd.cwd, params, options);\n if (isDebugMode && !matchesExpectedResult(resolvedCwd, result)) {\n process.exitCode = 1;\n printDebugExpectationFailureBanner(problemDir, resolvedCwd);\n }\n }\n}\n\nasync function runCommandJudgeForCwd<\n TTestCase extends BaseCommandTestCase,\n TRunResult extends CommandRunResult = CommandRunResult,\n>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase, TRunResult>\n): Promise<{ allAccepted: boolean }> {\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await (options.readTestCases ?? readCommandTestCases)(problemDir);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n const limits = {\n buildTimeoutSeconds: options.limits?.buildTimeoutSeconds ?? BUILD_TIMEOUT_SECONDS,\n maxOutputLength: options.limits?.maxOutputLength ?? MAX_STDOUT_LENGTH,\n };\n const runTimeoutSeconds = options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const staticAnalysisResult = await judgeByStaticAnalysis(cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return { allAccepted: false };\n }\n\n const originalMainFilePath = await findEntryPointFile(cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return { allAccepted: false };\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return { allAccepted: false };\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let mainFilePath = originalMainFilePath;\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(cwd);\n const prebuiltMainFilePath = await findEntryPointFile(cwd, params.language);\n if (prebuiltMainFilePath) mainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return { allAccepted: false };\n }\n }\n\n const buildCommand = languageDefinition.buildCommand?.(mainFilePath);\n if (buildCommand) {\n const buildResult = runBuild(buildCommand, {\n cwd,\n env,\n testCaseId: prebuildTestCaseId,\n limits,\n });\n if (buildResult) {\n printTestCaseResult(buildResult);\n return { allAccepted: false };\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n return { allAccepted: true };\n }\n\n const sharedFileInputPath = (testCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n\n for (const testCase of testCases) {\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : runTimeoutSeconds;\n\n const command = languageDefinition.command(mainFilePath);\n let stdin = testCase.input ?? '';\n let runResult: TRunResult;\n try {\n if (options.resolveInput) {\n stdin = await options.resolveInput({ testCase, cwd, env });\n }\n\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n })\n : (runCommand(command, {\n stdin,\n cwd,\n env,\n timeLimitSeconds,\n }) as TRunResult);\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n return { allAccepted: false };\n }\n\n const outputFiles = await readOutputFiles(cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: CommandJudgeContext = {\n timeLimitSeconds,\n outputLimitLength: limits.maxOutputLength,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateByLimits({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test?.({ testCase, runResult, outputFiles, context: judgeContext });\n if (extendedJudgeResult) {\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n };\n }\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n ...judgeResult,\n exitStatus: runResult.status,\n stdin: runResult.stdin,\n stdout: runResult.stdout.slice(0, limits.maxOutputLength) || undefined,\n stderr: (judgeResult.stderr ?? runResult.stderr).slice(0, limits.maxOutputLength) || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n await cleanWorkingDirectory(cwd, cwdSnapshot);\n if (judgeResult.decisionCode !== DecisionCode.ACCEPTED) return { allAccepted: false };\n }\n\n return { allAccepted: true };\n}\n\nfunction matchesExpectedResult(resolvedCwd: ResolvedCwd, result: { allAccepted: boolean }): boolean {\n return result.allAccepted === (resolvedCwd.expectedResult === 'accepted');\n}\n\nfunction runBuild(\n buildCommand: readonly [string, ...string[]],\n context: { cwd: string; env: NodeJS.ProcessEnv; testCaseId: string; limits: CommandJudgeLimits }\n): (Omit<TestCaseResult, 'testCaseId'> & { testCaseId: string }) | undefined {\n const spawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n context.limits.buildTimeoutSeconds\n );\n const exitStatus = spawnResult.status ?? undefined;\n\n if (spawnResult.status !== 0) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (spawnResult.timeSeconds > context.limits.buildTimeoutSeconds) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n if (\n spawnResult.stdout.length > context.limits.maxOutputLength ||\n spawnResult.stderr.length > context.limits.maxOutputLength\n ) {\n return {\n testCaseId: context.testCaseId,\n decisionCode: DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED,\n exitStatus,\n stdout: spawnResult.stdout.slice(0, context.limits.maxOutputLength),\n stderr: spawnResult.stderr.slice(0, context.limits.maxOutputLength),\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n }\n\n return;\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction toCommandTestCase(value: {\n id: string;\n input?: string;\n fileInputPath?: string;\n fileOutputPath?: string;\n output?: string;\n}): BaseCommandTestCase {\n return { id: value.id, input: value.input, fileInputPath: value.fileInputPath };\n}\n\nasync function readCommandTestCases<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string\n): Promise<readonly TTestCase[]> {\n const fileTestCases = await readFileTestCases(path.join(problemDir, 'test_cases'));\n const commandTestCases = fileTestCases.map((testCase) => toCommandTestCase(testCase) as TTestCase);\n if (fileTestCases.shared?.fileInputPath) {\n return Object.assign(commandTestCases, { shared: { fileInputPath: fileTestCases.shared.fileInputPath } });\n }\n return commandTestCases;\n}\n\nfunction runCommand(\n command: readonly [string, ...string[]],\n context: {\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }\n): CommandRunResult {\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: context.cwd, encoding: 'utf8', input: context.stdin, env: context.env },\n context.timeLimitSeconds\n );\n\n return {\n stdin: context.stdin,\n stdout: spawnResult.stdout,\n stderr: spawnResult.stderr,\n status: spawnResult.status ?? undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n };\n}\n\nfunction evaluateByLimits(context: {\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n}): CommandJudgeCaseResult {\n if (context.runResult.status !== 0) {\n return { decisionCode: DecisionCode.RUNTIME_ERROR, stderr: context.runResult.stderr };\n }\n\n if (context.runResult.timeSeconds > context.context.timeLimitSeconds) {\n return { decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return { decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n if (\n context.runResult.outputLimitExceeded ||\n context.runResult.stdout.length > context.context.outputLimitLength ||\n context.runResult.stderr.length > context.context.outputLimitLength\n ) {\n return { decisionCode: DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED, stderr: context.runResult.stderr };\n }\n\n const requiredOutputFileCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFileCount) {\n return { decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n"],"mappings":"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"}

@@ -1,2 +0,4 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:child_process"),r=require("node:fs/promises"),t=require("node:os"),i=require("node:path"),s=require("node:timers/promises"),a=require("zod"),o=require("../helpers/cleanWorkingDirectory.cjs"),c=require("../helpers/copyTestCaseFileInput.cjs"),u=require("../helpers/findEntryPointFile.cjs"),d=require("../helpers/findLanguageDefinitionByPath.cjs"),l=require("../helpers/judgeByStaticAnalysis.cjs"),p=require("../helpers/parseArgs.cjs"),f=require("../helpers/printTestCaseResult.cjs"),m=require("../helpers/readOutputFiles.cjs"),h=require("../helpers/readProblemMarkdownFrontMatter.cjs"),g=require("../helpers/readTestCases.cjs"),v=require("../helpers/spawnSyncWithTimeout.cjs"),w=require("../types/decisionCode.cjs"),b=require("../types/language.cjs"),C=["darwin"===t.platform()?"gtime":"/usr/bin/time","--format","%e %M"],y=a.z.object({language:a.z.union([a.z.string(),a.z.array(a.z.string())]).optional()});function k(){return(k=e.asyncToGenerator(e.regenerator().m(function n(r,t){var i,s,a,g,v,b,C,k,R,F,P,_,L,j,q,x,B,N,A,G,W,z,X,Y,H,Q,V,K,J,$,Z,ee,ne,re,te,ie,se,ae,oe,ce,ue,de,le,pe,fe,me,he,ge,ve,we,be,Ce,ye,ke,Ie,Re,Ee,Se,Te,De,Fe,Me,Pe,_e,Le,Oe,je,qe,xe,Be,Ne,Ae;return e.regenerator().w(function(n){for(;;)switch(n.p=n.n){case 0:if((C=p.parseArgs(process.argv)).cwd){n.n=1;break}throw new Error("cwd argument required");case 1:return k=y.parse(C.params),n.n=2,h.readProblemMarkdownFrontMatter(r);case 2:return R=n.v,n.n=3,(null!=(i=t.readTestCases)?i:D)(r);case 3:return F=n.v,P=F.length>0?F:[{id:"default"}],_=null!=(s=null==(a=P[0])?void 0:a.id)?s:"prebuild",n.n=4,l.judgeByStaticAnalysis(C.cwd,R);case 4:if(!(L=n.v)){n.n=5;break}return f.printTestCaseResult(e.objectSpread2({testCaseId:_},L)),n.a(2);case 5:if(null==(g=t.mainFilePath)){n.n=6;break}Fe=g,n.n=8;break;case 6:return n.n=7,u.findEntryPointFile(C.cwd,k.language);case 7:Fe=n.v;case 8:if(j=Fe){n.n=9;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 9:if(q=d.findLanguageDefinitionByPath(j)){n.n=10;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),n.a(2);case 10:return x=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),n.n=11,I({cwd:C.cwd,language:k.language,configuredMainFilePath:t.mainFilePath});case 11:if(B=n.v,!q.prebuild){n.n=16;break}return n.p=12,n.n=13,q.prebuild(C.cwd);case 13:return n.n=14,I({cwd:C.cwd,language:null!=(N=k.language)?N:E(j),configuredMainFilePath:t.mainFilePath,allowConfiguredPathFallback:!0});case 14:(A=n.v)&&(B=A),n.n=16;break;case 15:return n.p=15,Me=n.v,f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.BUILD_ERROR,stderr:U(Me)}),n.a(2);case 16:if(B){n.n=17;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 17:return n.n=18,null==(b=t.prepare)?void 0:b.call(t,{cwd:C.cwd,env:x,mainFilePath:B,problemMarkdownFrontMatter:R});case 18:if(null==(v=n.v)){n.n=19;break}Pe=v,n.n=20;break;case 19:Pe=S({cwd:C.cwd,env:x,mainFilePath:B,languageDefinition:q});case 20:if(!(G=Pe)){n.n=21;break}return f.printTestCaseResult({testCaseId:_,decisionCode:null!=(W=G.decisionCode)?W:w.DecisionCode.BUILD_ERROR,feedbackMarkdown:G.feedbackMarkdown,stderr:G.stderr,stdout:G.stdout,outputFiles:G.outputFiles}),n.a(2);case 21:return n.n=22,o.snapshotWorkingDirectory(C.cwd);case 22:if(z=n.v,Y=_,n.p=23,!t.runCommand){n.n=24;break}_e=void 0,n.n=26;break;case 24:return n.n=25,O();case 25:_e=n.v;case 26:X=_e,V=null==(Q=F.shared)?void 0:Q.fileInputPath,K=e.createForOfIteratorHelper(P),n.p=27,K.s();case 28:if((J=K.n()).done){n.n=54;break}if(ue=J.value,Y=ue.id,!V){n.n=29;break}return n.n=29,c.copyTestCaseFileInput(V,C.cwd);case 29:if(!ue.fileInputPath){n.n=30;break}return n.n=30,c.copyTestCaseFileInput(ue.fileInputPath,C.cwd);case 30:return de="number"==typeof R.timeLimitMs?R.timeLimitMs/1e3:null!=($=t.runTimeoutSeconds)?$:5,le=X?e.objectSpread2(e.objectSpread2({},x),{},{DISPLAY:X.display}):x,n.n=31,null==(ne=t.resolveInput)?void 0:ne.call(t,{testCase:ue,cwd:C.cwd,env:le});case 31:if(null==(ee=n.v)){n.n=32;break}Le=ee,n.n=33;break;case 32:Le=ue.input;case 33:if(null==(Z=Le)){n.n=34;break}Oe=Z,n.n=35;break;case 34:Oe="";case 35:return H=pe=Oe,n.n=36,null==(te=t.command)?void 0:te.call(t,{testCase:ue,cwd:C.cwd,env:le,mainFilePath:B});case 36:if(null==(re=n.v)){n.n=37;break}je=re,n.n=38;break;case 37:je=q.command(B);case 38:if(fe=je,me=void 0,n.p=39,!t.runCommand){n.n=41;break}return n.n=40,t.runCommand({testCase:ue,command:fe,stdin:pe,cwd:C.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(he=t.screenshotWaitSeconds)?he:.3,stopDetectionThreshold:null!=(ge=t.stopDetectionThreshold)?ge:5});case 40:qe=n.v,n.n=43;break;case 41:return n.n=42,M({command:fe,stdin:pe,cwd:C.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(ve=t.screenshotWaitSeconds)?ve:.3,stopDetectionThreshold:null!=(we=t.stopDetectionThreshold)?we:5});case 42:qe=n.v;case 43:me=qe,n.n=46;break;case 44:return n.p=44,xe=n.v,f.printTestCaseResult({testCaseId:ue.id,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:pe,stderr:U(xe)}),n.n=45,o.cleanWorkingDirectory(C.cwd,z);case 45:return n.a(2);case 46:return n.n=47,m.readOutputFiles(C.cwd,null!=(ie=R.requiredOutputFilePaths)?ie:[]);case 47:if(be=n.v,Ce={timeLimitSeconds:de,problemMarkdownFrontMatter:{memoryLimitByte:R.memoryLimitByte,requiredOutputFilePaths:R.requiredOutputFilePaths}},ye=T({runResult:me,outputFiles:be,context:Ce}),ke=ye,ye.decisionCode!==w.DecisionCode.ACCEPTED){n.n=51;break}return n.p=48,n.n=49,t.test({testCase:ue,runResult:me,outputFiles:be,context:Ce});case 49:Re=n.v,ke={decisionCode:null!=(Ie=Re.decisionCode)?Ie:ye.decisionCode,feedbackMarkdown:Re.feedbackMarkdown,stderr:Re.stderr,stdout:Re.stdout,outputFiles:Re.outputFiles},n.n=51;break;case 50:n.p=50,Be=n.v,ke={decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:U(Be)};case 51:return Ee=null!=(se=ke.decisionCode)?se:w.DecisionCode.ACCEPTED,Se=null!=(ae=ke.stdout)?ae:me.stdout,Te=null!=(oe=ke.stderr)?oe:me.stderr,f.printTestCaseResult({testCaseId:ue.id,decisionCode:Ee,exitStatus:me.status,stdin:me.stdin||void 0,stdout:Se||void 0,stderr:Te||void 0,timeSeconds:me.timeSeconds,memoryBytes:me.memoryBytes,feedbackMarkdown:ke.feedbackMarkdown,outputFiles:null!=(ce=ke.outputFiles)?ce:be.length>0?be:void 0}),n.n=52,o.cleanWorkingDirectory(C.cwd,z);case 52:if(Ee===w.DecisionCode.ACCEPTED){n.n=53;break}return n.a(3,54);case 53:n.n=28;break;case 54:n.n=56;break;case 55:n.p=55,Ne=n.v,K.e(Ne);case 56:return n.p=56,K.f(),n.f(56);case 57:n.n=59;break;case 58:return n.p=58,Ae=n.v,f.printTestCaseResult({testCaseId:Y,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:H,stderr:U(Ae)}),n.n=59,o.cleanWorkingDirectory(C.cwd,z);case 59:return n.p=59,n.n=60,null==(De=X)?void 0:De.dispose();case 60:return n.f(59);case 61:return n.a(2)}},n,null,[[48,50],[39,44],[27,55,56,57],[23,58,59,61],[12,15]])}))).apply(this,arguments)}function I(e){return R.apply(this,arguments)}function R(){return(R=e.asyncToGenerator(e.regenerator().m(function n(r){var t;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(!r.configuredMainFilePath){e.n=3;break}return t=i.join(r.cwd,r.configuredMainFilePath),e.n=1,A(t);case 1:if(!e.v){e.n=2;break}return e.a(2,r.configuredMainFilePath);case 2:if(r.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,u.findEntryPointFile(r.cwd,r.language);case 4:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function E(n){var r=Object.entries(b.languageIdToDefinition).filter(function(r){return e.slicedToArray(r,2)[1].fileExtensions.some(function(e){return n.endsWith(e)})}).map(function(n){return e.slicedToArray(n,1)[0]});return r.length>0?r:void 0}function S(e){var n,r,t=null==(n=(r=e.languageDefinition).buildCommand)?void 0:n.call(r,e.mainFilePath);if(t){var i=v.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:w.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:w.DecisionCode.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function T(e){var n,r,t;if("timeout"===e.runResult.stopReason)return{decisionCode:w.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:w.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(r=null==(t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:t.length)?r:0;return e.outputFiles.length<i?{decisionCode:w.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:w.DecisionCode.ACCEPTED}}function D(e){return F.apply(this,arguments)}function F(){return(F=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,g.readTestCases(i.join(r,"test_cases"));case 1:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function M(e){return P.apply(this,arguments)}function P(){return(P=e.asyncToGenerator(e.regenerator().m(function r(t){var i,a,o,c,u,d,l,p,f,m,h,g,v,w,b,y;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:i=["timeout",t.timeLimitSeconds.toFixed(3)].concat(C,e.toConsumableArray(t.command)),(a=n.spawn(i[0],i.slice(1),{cwd:t.cwd,env:t.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),a.stderr.setEncoding("utf8"),o="",c="",l="process_exit",p=[],f=[],m=Date.now()/1e3,h=0,a.stdout.on("data",function(e){o+=e}),a.stderr.on("data",function(e){c+=e}),a.on("error",function(e){d=e,u=1}),a.on("close",function(e,n){return 124===e?(l="timeout",void(u=0)):n?(u=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(u=null!=e?e:1)}),t.stdin&&a.stdin.write(t.stdin),a.stdin.end(),g=e.regenerator().m(function n(){var r,i;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,s.setTimeout(1e3*t.screenshotWaitSeconds);case 1:if(h=Math.max(h,B(a.pid)),r=_(t.env.DISPLAY),!((f=r.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(i=f.map(function(e){return e.data}).toSorted(),p.unshift(i),p.length=Math.min(p.length,t.stopDetectionThreshold),p.length!==t.stopDetectionThreshold||!p.every(function(e){return e.length===i.length&&e.every(function(e,n){return e===i[n]})})){e.n=2;break}return l="stable_screenshot",u=0,e.a(2,0);case 2:if(!(Date.now()/1e3-m>t.timeLimitSeconds)){e.n=3;break}return l="timeout",u=0,e.a(2,0);case 3:return e.a(2)}},n)});case 1:if(void 0!==u){r.n=4;break}return r.d(e.regeneratorValues(g()),2);case 2:if(0!==r.v){r.n=3;break}return r.a(3,4);case 3:r.n=1;break;case 4:return"process_exit"!==l&&null===a.exitCode&&(a.removeAllListeners("close"),a.removeAllListeners("error")),r.n=5,q(a);case 5:if(!d){r.n=6;break}throw d;case 6:return v=L(c,m,h),w=v.memoryBytes,b=v.stderr,y=v.timeSeconds,r.a(2,{stdin:t.stdin,stdout:o.trimEnd(),stderr:b,status:u,timeSeconds:y,memoryBytes:w,screenshots:f,stopReason:l})}},r)}))).apply(this,arguments)}function _(r){var t=r?e.objectSpread2(e.objectSpread2({},process.env),{},{DISPLAY:r}):process.env,i=n.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:t});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,o=function(n){var r,t=[],i=n.split("\n"),s=e.createForOfIteratorHelper(i);try{for(s.s();!(r=s.n()).done;){var a=r.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&t.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return t}(i.stdout);a<o.length;a++){var c=o[a],u=n.spawnSync("maim",["-i",c],{env:t});if(u.error)throw u.error;if(0===u.status&&0!==u.stdout.length){var d=n.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:t});if(d.error)throw d.error;var l=d.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(l||"window","_").concat(c,".png"),data:u.stdout.toString("base64"),encoding:"base64"})}}return s}function L(e,n,r){var t=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=t?e.slice(0,t.index).trimEnd():e.trimEnd(),s=1024*Number(null==t?void 0:t[2])||0;return{stderr:i,timeSeconds:Number(null==t?void 0:t[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,r)}}function O(){return j.apply(this,arguments)}function j(){return j=e.asyncToGenerator(e.regenerator().m(function r(){var t,i,a;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:if("linux"===process.platform){r.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:t=e.regenerator().m(function r(){var t,i,o;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:return t=":".concat(a),(o=n.spawn("Xvfb",[t,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),r.n=1,s.setTimeout(300);case 1:if(!i){r.n=2;break}throw i;case 2:if(null===o.exitCode){r.n=3;break}return r.a(2,0);case 3:return r.a(2,{v:{display:t,dispose:function(){var n=e.asyncToGenerator(e.regenerator().m(function n(){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(o.killed){e.n=2;break}return o.kill("SIGTERM"),e.n=1,s.setTimeout(100);case 1:null===o.exitCode&&o.kill("SIGKILL");case 2:return e.a(2)}},n)}));return function(){return n.apply(this,arguments)}}()}})}},r)}),a=90;case 2:if(!(a<100)){r.n=6;break}return r.d(e.regeneratorValues(t()),3);case 3:if(0!==(i=r.v)){r.n=4;break}return r.a(3,5);case 4:if(!i){r.n=5;break}return r.a(2,i.v);case 5:a++,r.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return r.a(2)}},r)})),j.apply(this,arguments)}function q(e){return x.apply(this,arguments)}function x(){return(x=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(r.pid){e.n=1;break}return e.a(2);case 1:return N(r.pid,"SIGTERM"),e.n=2,s.setTimeout(200);case 2:null===r.exitCode&&N(r.pid,"SIGKILL");case 3:return e.a(2)}},n)}))).apply(this,arguments)}function B(e){if(!e||"linux"!==process.platform)return 0;var r=n.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return r.error||0!==r.status||!r.stdout?0:r.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function N(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function A(e){return G.apply(this,arguments)}function G(){return(G=e.asyncToGenerator(e.regenerator().m(function n(t){return e.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,r.access(t);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function U(e){return e instanceof Error?e.message:String(e)}exports.guiCommandJudgePreset=function(e,n){return k.apply(this,arguments)};
//# sourceMappingURL=guiCommand.cjs.map
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/parseArgs.cjs"),n=require("../helpers/printTestCaseResult.cjs"),r=require("../types/language.cjs"),i=require("../types/decisionCode.cjs"),a=require("../helpers/cleanWorkingDirectory.cjs"),o=require("../helpers/copyTestCaseFileInput.cjs"),s=require("../helpers/findEntryPointFile.cjs"),c=require("../helpers/findLanguageDefinitionByPath.cjs"),l=require("../helpers/judgeByStaticAnalysis.cjs"),u=require("../helpers/readOutputFiles.cjs"),d=require("../helpers/readProblemMarkdownFrontMatter.cjs"),f=require("../helpers/readTestCases.cjs"),p=require("../helpers/spawnSyncWithTimeout.cjs");let m=require("zod"),h=require("node:child_process");h=e.__toESM(h,1);let g=require("node:fs/promises");g=e.__toESM(g,1);let _=require("node:os");_=e.__toESM(_,1);let v=require("node:path");v=e.__toESM(v,1);let y=require("node:timers/promises");const b=.3,x=[_.default.platform()===`darwin`?`gtime`:`/usr/bin/time`,`--format`,`%e %M`],S=m.z.object({language:m.z.union([m.z.string(),m.z.array(m.z.string())]).optional()});async function C(e,r){let f=t.parseArgs(process.argv);if(!f.cwd)throw Error(`cwd argument required`);let p=S.parse(f.params),m=await d.readProblemMarkdownFrontMatter(e),h=await(r.readTestCases??O)(e),g=h.length>0?h:[{id:`default`}],_=g[0]?.id??`prebuild`,v=await l.judgeByStaticAnalysis(f.cwd,m);if(v){n.printTestCaseResult({testCaseId:_,...v});return}let y=r.mainFilePath??await s.findEntryPointFile(f.cwd,p.language);if(!y){n.printTestCaseResult({testCaseId:_,decisionCode:i.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:r.mainFilePath?`required main file not found: ${r.mainFilePath}`:`main file not found${p.language?`: language: ${p.language}`:``}`});return}let x=c.findLanguageDefinitionByPath(y);if(!x){n.printTestCaseResult({testCaseId:_,decisionCode:i.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`});return}let C={...process.env,CI:``,FORCE_COLOR:`0`},A=await w({cwd:f.cwd,language:p.language,configuredMainFilePath:r.mainFilePath});if(x.prebuild)try{await x.prebuild(f.cwd);let e=await w({cwd:f.cwd,language:p.language??T(y),configuredMainFilePath:r.mainFilePath,allowConfiguredPathFallback:!0});e&&(A=e)}catch(e){n.printTestCaseResult({testCaseId:_,decisionCode:i.DecisionCode.BUILD_ERROR,stderr:R(e)});return}if(!A){n.printTestCaseResult({testCaseId:_,decisionCode:i.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:r.mainFilePath?`required main file not found: ${r.mainFilePath}`:`main file not found${p.language?`: language: ${p.language}`:``}`});return}let j=await r.prepare?.({cwd:f.cwd,env:C,mainFilePath:A,problemMarkdownFrontMatter:m})??E({cwd:f.cwd,env:C,mainFilePath:A,languageDefinition:x});if(j){n.printTestCaseResult({testCaseId:_,decisionCode:j.decisionCode??i.DecisionCode.BUILD_ERROR,feedbackMarkdown:j.feedbackMarkdown,stderr:j.stderr,stdout:j.stdout,outputFiles:j.outputFiles});return}let M=await a.snapshotWorkingDirectory(f.cwd),P,F=_,I;try{P=r.runCommand?void 0:await N();let e=h.shared?.fileInputPath;for(let t of g){F=t.id,e&&await o.copyTestCaseFileInput(e,f.cwd),t.fileInputPath&&await o.copyTestCaseFileInput(t.fileInputPath,f.cwd);let s=typeof m.timeLimitMs==`number`?m.timeLimitMs/1e3:r.runTimeoutSeconds??5,c=P?{...C,DISPLAY:P.display}:C,l=await r.resolveInput?.({testCase:t,cwd:f.cwd,env:c})??t.input??``;I=l;let d=await r.command?.({testCase:t,cwd:f.cwd,env:c,mainFilePath:A})??x.command(A),p;try{p=r.runCommand?await r.runCommand({testCase:t,command:d,stdin:l,cwd:f.cwd,env:c,timeLimitSeconds:s,screenshotWaitSeconds:r.screenshotWaitSeconds??b,stopDetectionThreshold:r.stopDetectionThreshold??5}):await k({command:d,stdin:l,cwd:f.cwd,env:c,timeLimitSeconds:s,screenshotWaitSeconds:r.screenshotWaitSeconds??b,stopDetectionThreshold:r.stopDetectionThreshold??5})}catch(e){n.printTestCaseResult({testCaseId:t.id,decisionCode:i.DecisionCode.RUNTIME_ERROR,stdin:l,stderr:R(e)}),await a.cleanWorkingDirectory(f.cwd,M);return}let h=await u.readOutputFiles(f.cwd,m.requiredOutputFilePaths??[]),g={timeLimitSeconds:s,problemMarkdownFrontMatter:{memoryLimitByte:m.memoryLimitByte,requiredOutputFilePaths:m.requiredOutputFilePaths}},_=D({runResult:p,outputFiles:h,context:g}),v=_;if(_.decisionCode===i.DecisionCode.ACCEPTED)try{let e=await r.test({testCase:t,runResult:p,outputFiles:h,context:g});v={decisionCode:e.decisionCode??_.decisionCode,feedbackMarkdown:e.feedbackMarkdown,stderr:e.stderr,stdout:e.stdout,outputFiles:e.outputFiles}}catch(e){v={decisionCode:i.DecisionCode.RUNTIME_ERROR,stderr:R(e)}}let y=v.decisionCode??i.DecisionCode.ACCEPTED,S=v.stdout??p.stdout,w=v.stderr??p.stderr;if(n.printTestCaseResult({testCaseId:t.id,decisionCode:y,exitStatus:p.status,stdin:p.stdin||void 0,stdout:S||void 0,stderr:w||void 0,timeSeconds:p.timeSeconds,memoryBytes:p.memoryBytes,feedbackMarkdown:v.feedbackMarkdown,outputFiles:v.outputFiles??(h.length>0?h:void 0)}),await a.cleanWorkingDirectory(f.cwd,M),y!==i.DecisionCode.ACCEPTED)break}}catch(e){n.printTestCaseResult({testCaseId:F,decisionCode:i.DecisionCode.RUNTIME_ERROR,stdin:I,stderr:R(e)}),await a.cleanWorkingDirectory(f.cwd,M)}finally{await P?.dispose()}}async function w(e){if(e.configuredMainFilePath){if(await L(v.default.join(e.cwd,e.configuredMainFilePath)))return e.configuredMainFilePath;if(!e.allowConfiguredPathFallback)return}return await s.findEntryPointFile(e.cwd,e.language)}function T(e){let t=Object.entries(r.languageIdToDefinition).filter(([,t])=>t.fileExtensions.some(t=>e.endsWith(t))).map(([e])=>e);return t.length>0?t:void 0}function E(e){let t=e.languageDefinition.buildCommand?.(e.mainFilePath);if(!t)return;let n=p.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:e.cwd,encoding:`utf8`,env:e.env},10);if(n.timeSeconds>10)return{decisionCode:i.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,stderr:n.stderr||void 0};if(n.status!==0)return{decisionCode:i.DecisionCode.BUILD_ERROR,stderr:n.stderr||n.stdout||void 0}}function D(e){if(e.runResult.stopReason===`timeout`)return{decisionCode:i.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.status!==0)return{decisionCode:i.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(e.context.problemMarkdownFrontMatter.memoryLimitByte??1/0))return{decisionCode:i.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};let t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length??0;return e.outputFiles.length<t?{decisionCode:i.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:i.DecisionCode.ACCEPTED}}async function O(e){return await f.readTestCases(v.default.join(e,`test_cases`))}async function k(e){let t=[`timeout`,e.timeLimitSeconds.toFixed(3),...x,...e.command],n=h.default.spawn(t[0],t.slice(1),{cwd:e.cwd,env:e.env,detached:process.platform!==`win32`,stdio:[`pipe`,`pipe`,`pipe`]});n.stdout.setEncoding(`utf8`),n.stderr.setEncoding(`utf8`);let r=``,i=``,a,o,s=`process_exit`,c=[],l=[],u=Date.now()/1e3,d=0;for(n.stdout.on(`data`,e=>{r+=e}),n.stderr.on(`data`,e=>{i+=e}),n.on(`error`,e=>{o=e,a=1}),n.on(`close`,(e,t)=>{if(e===124){s=`timeout`,a=0;return}if(t){a=1,i=i?`${i}\nprocess terminated by signal: ${t}`:`process terminated by signal: ${t}`;return}a=e??1}),e.stdin&&n.stdin.write(e.stdin),n.stdin.end();a===void 0;){if(await(0,y.setTimeout)(e.screenshotWaitSeconds*1e3),d=Math.max(d,F(n.pid)),l=A(e.env.DISPLAY).toSorted((e,t)=>e.data.length-t.data.length),l.length>0){let t=l.map(e=>e.data).toSorted();if(c.unshift(t),c.length=Math.min(c.length,e.stopDetectionThreshold),c.length===e.stopDetectionThreshold&&c.every(e=>e.length===t.length&&e.every((e,n)=>e===t[n]))){s=`stable_screenshot`,a=0;break}}if(Date.now()/1e3-u>e.timeLimitSeconds){s=`timeout`,a=0;break}}if(s!==`process_exit`&&n.exitCode===null&&(n.removeAllListeners(`close`),n.removeAllListeners(`error`)),await P(n),o)throw o;let{memoryBytes:f,stderr:p,timeSeconds:m}=M(i,u,d);return{stdin:e.stdin,stdout:r.trimEnd(),stderr:p,status:a,timeSeconds:m,memoryBytes:f,screenshots:l,stopReason:s}}function A(e){let t=e?{...process.env,DISPLAY:e}:process.env,n=h.default.spawnSync(`xwininfo`,[`-root`,`-tree`],{encoding:`utf8`,env:t});if(n.error)throw n.error;if(n.status!==0||!n.stdout)return[];let r=[];for(let e of j(n.stdout)){let n=h.default.spawnSync(`maim`,[`-i`,e],{env:t});if(n.error)throw n.error;if(n.status!==0||n.stdout.length===0)continue;let i=h.default.spawnSync(`xdotool`,[`getwindowname`,e],{encoding:`utf8`,env:t});if(i.error)throw i.error;let a=i.stdout.trim().replaceAll(/[\s/]/g,`_`);r.push({path:`${a||`window`}_${e}.png`,data:n.stdout.toString(`base64`),encoding:`base64`})}return r}function j(e){let t=[],n=e.split(`
`);for(let e of n){if(e.includes(`Root window id:`)||e.includes(`Parent window id:`)||e.includes(`()`))continue;let n=/^\s{5}(0x[\da-f]+) /.exec(e);n?.[1]&&t.push(Number.parseInt(n[1],16).toString())}return t}function M(e,t,n){let r=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=r?e.slice(0,r.index).trimEnd():e.trimEnd(),a=Number(r?.[2])*1024||0;return{stderr:i,timeSeconds:Number(r?.[1])||Date.now()/1e3-t,memoryBytes:Math.max(a,n)}}async function N(){if(process.platform!==`linux`)throw Error(`GUI screenshot capture is supported only on Linux.`);for(let e=90;e<100;e++){let t=`:${e}`,n,r=h.default.spawn(`Xvfb`,[t,`-screen`,`0`,`1280x1024x24`,`-ac`],{stdio:`ignore`});if(r.on(`error`,e=>{n=e}),await(0,y.setTimeout)(.3*1e3),n)throw n;if(r.exitCode===null)return{display:t,dispose:async()=>{r.killed||(r.kill(`SIGTERM`),await(0,y.setTimeout)(.1*1e3),r.exitCode===null&&r.kill(`SIGKILL`))}}}throw Error(`Xvfb could not be started.`)}async function P(e){e.pid&&(I(e.pid,`SIGTERM`),await(0,y.setTimeout)(.2*1e3),e.exitCode===null&&I(e.pid,`SIGKILL`))}function F(e){if(!e||process.platform!==`linux`)return 0;let t=h.default.spawnSync(`ps`,[`-o`,`rss=`,`--no-headers`,`--pgroup`,String(e)],{encoding:`utf8`});return t.error||t.status!==0||!t.stdout?0:t.stdout.split(`
`).map(e=>Number(e.trim())).filter(e=>Number.isFinite(e)&&e>0).reduce((e,t)=>e+t*1024,0)}function I(e,t){try{if(process.platform!==`win32`){process.kill(-e,t);return}}catch{}try{process.kill(e,t)}catch{}}async function L(e){try{return await g.default.access(e),!0}catch{return!1}}function R(e){return e instanceof Error?e.message:String(e)}exports.guiCommandJudgePreset=C;
//# sourceMappingURL=guiCommand.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"guiCommand.cjs","sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["TIME_COMMAND","os","platform","judgeParamsSchema","z","object","language","union","string","array","optional","_guiCommandJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$mainFilePath","_yield$options$prepar","_options$prepare","args","params","problemMarkdownFrontMatter","configuredTestCases","testCases","prebuildTestCaseId","staticAnalysisResult","initialMainFilePath","languageDefinition","env","resolvedMainFilePath","_params$language","prebuiltMainFilePath","prepareResult","_prepareResult$decisi","cwdSnapshot","displayServer","currentTestCaseId","currentStdin","_shared","sharedFileInputPath","_iterator2","_step2","_options$runTimeoutSe","_ref5","_yield$options$resolv","_options$resolveInput","_yield$options$comman","_options$command","_problemMarkdownFront","_judgeResult$decision","_judgeResult$stdout","_judgeResult$stderr","_judgeResult$outputFi","testCase","timeLimitSeconds","runEnv","stdin","command","runResult","_options$screenshotWa","_options$stopDetectio","_options$screenshotWa2","_options$stopDetectio2","outputFiles","judgeContext","baseJudgeResult","judgeResult","_extendedJudgeResult$","extendedJudgeResult","decisionCode","stdout","stderr","_displayServer","_t","_t2","_t4","_t5","_t7","_t9","_t1","_t10","_t11","_t12","_t13","_t14","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","readGuiTestCases","length","id","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","a","mainFilePath","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","resolveMainFilePath","configuredMainFilePath","prebuild","inferLanguageIdsByPath","allowConfiguredPathFallback","BUILD_ERROR","errorToMessage","prepare","call","runDefaultPrepare","feedbackMarkdown","snapshotWorkingDirectory","runCommand","undefined","ensureDisplayServer","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","runTimeoutSeconds","DISPLAY","display","resolveInput","input","screenshotWaitSeconds","stopDetectionThreshold","spawnGuiProgram","RUNTIME_ERROR","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","memoryLimitByte","evaluateGuiRunResult","context","ACCEPTED","test","exitStatus","status","timeSeconds","memoryBytes","e","f","dispose","apply","this","arguments","_x3","_resolveMainFilePath","_callee2","resolvedPath","_context2","path","join","pathExists","filePath","languageIds","Object","entries","languageIdToDefinition","filter","_ref","_slicedToArray","fileExtensions","some","ext","endsWith","map","_ref3","_context$languageDefi","_context$languageDefi2","buildCommand","buildResult","spawnSyncWithTimeout","slice","encoding","BUILD_TIME_LIMIT_EXCEEDED","_context$context$prob","_context$context$prob2","_context$context$prob3","stopReason","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","requiredOutputFilesCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x4","_readGuiTestCases","_callee3","_context3","readFileTestCases","_x5","_spawnGuiProgram","_callee4","wrappedCommand","child","exitCode","spawnError","screenshotSignaturesHistory","screenshots","startTimeSeconds","sampledMemoryBytes","_loop","_parseTimedStderr","normalizedStderr","_context5","toFixed","_toConsumableArray","childProcess","spawn","detached","stdio","setEncoding","Date","now","on","chunk","error","code","signal","write","end","currentScreenshots","screenshotSignatures","_context4","wait","Math","max","readProcessGroupMemoryBytes","pid","takeScreenshots","toSorted","b","data","file","unshift","min","every","files","index","d","_regeneratorValues","removeAllListeners","stopProcess","parseTimedStderr","trimEnd","xwininfo","spawnSync","_i","_extractTopLevelWindo","_step","windowIds","lines","split","_iterator","line","includes","match","exec","push","parseInt","toString","err","extractTopLevelWindowIds","windowId","screenshot","windowNameResult","windowName","trim","replaceAll","parsedMemoryBytes","_ensureDisplayServer","_callee6","_loop2","_ret2","displayNumber","_context8","xvfb","_context7","XVFB_STARTUP_WAIT_SECONDS","_dispose","_callee5","_context6","killed","kill","XVFB_SHUTDOWN_WAIT_SECONDS","_x6","_stopProcess","_callee7","_context9","killProcessGroup","PROCESS_SHUTDOWN_WAIT_SECONDS","processGroupId","result","String","isFinite","reduce","sum","_unused","_unused2","_x7","_pathExists","_callee8","_context0","fs","access","message","_x","_x2"],"mappings":"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"}
{"version":3,"file":"guiCommand.cjs","names":["os","z","parseArgs","readProblemMarkdownFrontMatter","judgeByStaticAnalysis","findEntryPointFile","DecisionCode","findLanguageDefinitionByPath","snapshotWorkingDirectory","copyTestCaseFileInput","cleanWorkingDirectory","readOutputFiles","path","languageIdToDefinition","spawnSyncWithTimeout","readFileTestCases","childProcess","fs"],"sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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"}

@@ -1,2 +0,4 @@

import{asyncToGenerator as e,regenerator as n,createForOfIteratorHelper as r,objectSpread2 as t,slicedToArray as i,regeneratorValues as s,toConsumableArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"node:child_process";import u from"node:fs/promises";import c from"node:os";import d from"node:path";import{setTimeout as l}from"node:timers/promises";import{z as f}from"zod";import{cleanWorkingDirectory as p,snapshotWorkingDirectory as m}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as h}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as v}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as w}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as b}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as g}from"../helpers/parseArgs.js";import{printTestCaseResult as k}from"../helpers/printTestCaseResult.js";import{readOutputFiles as C}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as I}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as y}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as E}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as R}from"../types/decisionCode.js";import{languageIdToDefinition as S}from"../types/language.js";var F=["darwin"===c.platform()?"gtime":"/usr/bin/time","--format","%e %M"],M=f.object({language:f.union([f.string(),f.array(f.string())]).optional()});function P(e,n){return _.apply(this,arguments)}function _(){return(_=e(n().m(function e(i,s){var a,o,u,c,d,l,f,y,E,S,F,P,_,T,N,U,A,G,q,X,Y,Q,H,K,V,$,J,Z,ee,ne,re,te,ie,se,ae,oe,ue,ce,de,le,fe,pe,me,he,ve,we,be,ge,ke,Ce,Ie,ye,Ee,Re,Se,Fe,Me,Pe,_e,De,Te,Le,xe,Oe,je,Ne,Be,Ue,Ae,Ge,We,qe;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if((f=g(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return y=M.parse(f.params),e.n=2,I(i);case 2:return E=e.v,e.n=3,(null!=(a=s.readTestCases)?a:j)(i);case 3:return S=e.v,F=S.length>0?S:[{id:"default"}],P=null!=(o=null==(u=F[0])?void 0:u.id)?o:"prebuild",e.n=4,b(f.cwd,E);case 4:if(!(_=e.v)){e.n=5;break}return k(t({testCaseId:P},_)),e.a(2);case 5:if(null==(c=s.mainFilePath)){e.n=6;break}Te=c,e.n=8;break;case 6:return e.n=7,v(f.cwd,y.language);case 7:Te=e.v;case 8:if(T=Te){e.n=9;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 9:if(N=w(T)){e.n=10;break}return k({testCaseId:P,decisionCode:R.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 10:return U=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),e.n=11,D({cwd:f.cwd,language:y.language,configuredMainFilePath:s.mainFilePath});case 11:if(A=e.v,!N.prebuild){e.n=16;break}return e.p=12,e.n=13,N.prebuild(f.cwd);case 13:return e.n=14,D({cwd:f.cwd,language:null!=(G=y.language)?G:L(T),configuredMainFilePath:s.mainFilePath,allowConfiguredPathFallback:!0});case 14:(q=e.v)&&(A=q),e.n=16;break;case 15:return e.p=15,Le=e.v,k({testCaseId:P,decisionCode:R.BUILD_ERROR,stderr:z(Le)}),e.a(2);case 16:if(A){e.n=17;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 17:return e.n=18,null==(l=s.prepare)?void 0:l.call(s,{cwd:f.cwd,env:U,mainFilePath:A,problemMarkdownFrontMatter:E});case 18:if(null==(d=e.v)){e.n=19;break}xe=d,e.n=20;break;case 19:xe=x({cwd:f.cwd,env:U,mainFilePath:A,languageDefinition:N});case 20:if(!(X=xe)){e.n=21;break}return k({testCaseId:P,decisionCode:null!=(Y=X.decisionCode)?Y:R.BUILD_ERROR,feedbackMarkdown:X.feedbackMarkdown,stderr:X.stderr,stdout:X.stdout,outputFiles:X.outputFiles}),e.a(2);case 21:return e.n=22,m(f.cwd);case 22:if(Q=e.v,K=P,e.p=23,!s.runCommand){e.n=24;break}Oe=void 0,e.n=26;break;case 24:return e.n=25,W();case 25:Oe=e.v;case 26:H=Oe,J=null==($=S.shared)?void 0:$.fileInputPath,Z=r(F),e.p=27,Z.s();case 28:if((ee=Z.n()).done){e.n=54;break}if(fe=ee.value,K=fe.id,!J){e.n=29;break}return e.n=29,h(J,f.cwd);case 29:if(!fe.fileInputPath){e.n=30;break}return e.n=30,h(fe.fileInputPath,f.cwd);case 30:return pe="number"==typeof E.timeLimitMs?E.timeLimitMs/1e3:null!=(ne=s.runTimeoutSeconds)?ne:5,me=H?t(t({},U),{},{DISPLAY:H.display}):U,e.n=31,null==(ie=s.resolveInput)?void 0:ie.call(s,{testCase:fe,cwd:f.cwd,env:me});case 31:if(null==(te=e.v)){e.n=32;break}je=te,e.n=33;break;case 32:je=fe.input;case 33:if(null==(re=je)){e.n=34;break}Ne=re,e.n=35;break;case 34:Ne="";case 35:return V=he=Ne,e.n=36,null==(ae=s.command)?void 0:ae.call(s,{testCase:fe,cwd:f.cwd,env:me,mainFilePath:A});case 36:if(null==(se=e.v)){e.n=37;break}Be=se,e.n=38;break;case 37:Be=N.command(A);case 38:if(ve=Be,we=void 0,e.p=39,!s.runCommand){e.n=41;break}return e.n=40,s.runCommand({testCase:fe,command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(be=s.screenshotWaitSeconds)?be:.3,stopDetectionThreshold:null!=(ge=s.stopDetectionThreshold)?ge:5});case 40:Ue=e.v,e.n=43;break;case 41:return e.n=42,B({command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(ke=s.screenshotWaitSeconds)?ke:.3,stopDetectionThreshold:null!=(Ce=s.stopDetectionThreshold)?Ce:5});case 42:Ue=e.v;case 43:we=Ue,e.n=46;break;case 44:return e.p=44,Ae=e.v,k({testCaseId:fe.id,decisionCode:R.RUNTIME_ERROR,stdin:he,stderr:z(Ae)}),e.n=45,p(f.cwd,Q);case 45:return e.a(2);case 46:return e.n=47,C(f.cwd,null!=(oe=E.requiredOutputFilePaths)?oe:[]);case 47:if(Ie=e.v,ye={timeLimitSeconds:pe,problemMarkdownFrontMatter:{memoryLimitByte:E.memoryLimitByte,requiredOutputFilePaths:E.requiredOutputFilePaths}},Ee=O({runResult:we,outputFiles:Ie,context:ye}),Re=Ee,Ee.decisionCode!==R.ACCEPTED){e.n=51;break}return e.p=48,e.n=49,s.test({testCase:fe,runResult:we,outputFiles:Ie,context:ye});case 49:Fe=e.v,Re={decisionCode:null!=(Se=Fe.decisionCode)?Se:Ee.decisionCode,feedbackMarkdown:Fe.feedbackMarkdown,stderr:Fe.stderr,stdout:Fe.stdout,outputFiles:Fe.outputFiles},e.n=51;break;case 50:e.p=50,Ge=e.v,Re={decisionCode:R.RUNTIME_ERROR,stderr:z(Ge)};case 51:return Me=null!=(ue=Re.decisionCode)?ue:R.ACCEPTED,Pe=null!=(ce=Re.stdout)?ce:we.stdout,_e=null!=(de=Re.stderr)?de:we.stderr,k({testCaseId:fe.id,decisionCode:Me,exitStatus:we.status,stdin:we.stdin||void 0,stdout:Pe||void 0,stderr:_e||void 0,timeSeconds:we.timeSeconds,memoryBytes:we.memoryBytes,feedbackMarkdown:Re.feedbackMarkdown,outputFiles:null!=(le=Re.outputFiles)?le:Ie.length>0?Ie:void 0}),e.n=52,p(f.cwd,Q);case 52:if(Me===R.ACCEPTED){e.n=53;break}return e.a(3,54);case 53:e.n=28;break;case 54:e.n=56;break;case 55:e.p=55,We=e.v,Z.e(We);case 56:return e.p=56,Z.f(),e.f(56);case 57:e.n=59;break;case 58:return e.p=58,qe=e.v,k({testCaseId:K,decisionCode:R.RUNTIME_ERROR,stdin:V,stderr:z(qe)}),e.n=59,p(f.cwd,Q);case 59:return e.p=59,e.n=60,null==(De=H)?void 0:De.dispose();case 60:return e.f(59);case 61:return e.a(2)}},e,null,[[48,50],[39,44],[27,55,56,57],[23,58,59,61],[12,15]])}))).apply(this,arguments)}function D(e){return T.apply(this,arguments)}function T(){return(T=e(n().m(function e(r){var t;return n().w(function(e){for(;;)switch(e.n){case 0:if(!r.configuredMainFilePath){e.n=3;break}return t=d.join(r.cwd,r.configuredMainFilePath),e.n=1,K(t);case 1:if(!e.v){e.n=2;break}return e.a(2,r.configuredMainFilePath);case 2:if(r.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,v(r.cwd,r.language);case 4:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function L(e){var n=Object.entries(S).filter(function(n){return i(n,2)[1].fileExtensions.some(function(n){return e.endsWith(n)})}).map(function(e){return i(e,1)[0]});return n.length>0?n:void 0}function x(e){var n,r,t=null==(n=(r=e.languageDefinition).buildCommand)?void 0:n.call(r,e.mainFilePath);if(t){var i=E(t[0],t.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:R.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:R.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function O(e){var n,r,t;if("timeout"===e.runResult.stopReason)return{decisionCode:R.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:R.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:R.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(r=null==(t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:t.length)?r:0;return e.outputFiles.length<i?{decisionCode:R.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:R.ACCEPTED}}function j(e){return N.apply(this,arguments)}function N(){return(N=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,y(d.join(r,"test_cases"));case 1:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function B(e){return U.apply(this,arguments)}function U(){return(U=e(n().m(function e(r){var t,i,u,c,d,f,p,m,h,v,w,b,g,k,C,I;return n().w(function(e){for(;;)switch(e.n){case 0:t=["timeout",r.timeLimitSeconds.toFixed(3)].concat(F,a(r.command)),(i=o.spawn(t[0],t.slice(1),{cwd:r.cwd,env:r.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),u="",c="",p="process_exit",m=[],h=[],v=Date.now()/1e3,w=0,i.stdout.on("data",function(e){u+=e}),i.stderr.on("data",function(e){c+=e}),i.on("error",function(e){f=e,d=1}),i.on("close",function(e,n){return 124===e?(p="timeout",void(d=0)):n?(d=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(d=null!=e?e:1)}),r.stdin&&i.stdin.write(r.stdin),i.stdin.end(),b=n().m(function e(){var t,s;return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,l(1e3*r.screenshotWaitSeconds);case 1:if(w=Math.max(w,Q(i.pid)),t=A(r.env.DISPLAY),!((h=t.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(s=h.map(function(e){return e.data}).toSorted(),m.unshift(s),m.length=Math.min(m.length,r.stopDetectionThreshold),m.length!==r.stopDetectionThreshold||!m.every(function(e){return e.length===s.length&&e.every(function(e,n){return e===s[n]})})){e.n=2;break}return p="stable_screenshot",d=0,e.a(2,0);case 2:if(!(Date.now()/1e3-v>r.timeLimitSeconds)){e.n=3;break}return p="timeout",d=0,e.a(2,0);case 3:return e.a(2)}},e)});case 1:if(void 0!==d){e.n=4;break}return e.d(s(b()),2);case 2:if(0!==e.v){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:return"process_exit"!==p&&null===i.exitCode&&(i.removeAllListeners("close"),i.removeAllListeners("error")),e.n=5,X(i);case 5:if(!f){e.n=6;break}throw f;case 6:return g=G(c,v,w),k=g.memoryBytes,C=g.stderr,I=g.timeSeconds,e.a(2,{stdin:r.stdin,stdout:u.trimEnd(),stderr:C,status:d,timeSeconds:I,memoryBytes:k,screenshots:h,stopReason:p})}},e)}))).apply(this,arguments)}function A(e){var n=e?t(t({},process.env),{},{DISPLAY:e}):process.env,i=o.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:n});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,u=function(e){var n,t=[],i=e.split("\n"),s=r(i);try{for(s.s();!(n=s.n()).done;){var a=n.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&t.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return t}(i.stdout);a<u.length;a++){var c=u[a],d=o.spawnSync("maim",["-i",c],{env:n});if(d.error)throw d.error;if(0===d.status&&0!==d.stdout.length){var l=o.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:n});if(l.error)throw l.error;var f=l.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(f||"window","_").concat(c,".png"),data:d.stdout.toString("base64"),encoding:"base64"})}}return s}function G(e,n,r){var t=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=t?e.slice(0,t.index).trimEnd():e.trimEnd(),s=1024*Number(null==t?void 0:t[2])||0;return{stderr:i,timeSeconds:Number(null==t?void 0:t[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,r)}}function W(){return q.apply(this,arguments)}function q(){return q=e(n().m(function r(){var t,i,a;return n().w(function(r){for(;;)switch(r.n){case 0:if("linux"===process.platform){r.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:t=n().m(function r(){var t,i,s;return n().w(function(r){for(;;)switch(r.n){case 0:return t=":".concat(a),(s=o.spawn("Xvfb",[t,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),r.n=1,l(300);case 1:if(!i){r.n=2;break}throw i;case 2:if(null===s.exitCode){r.n=3;break}return r.a(2,0);case 3:return r.a(2,{v:{display:t,dispose:function(){var r=e(n().m(function e(){return n().w(function(e){for(;;)switch(e.n){case 0:if(s.killed){e.n=2;break}return s.kill("SIGTERM"),e.n=1,l(100);case 1:null===s.exitCode&&s.kill("SIGKILL");case 2:return e.a(2)}},e)}));return function(){return r.apply(this,arguments)}}()}})}},r)}),a=90;case 2:if(!(a<100)){r.n=6;break}return r.d(s(t()),3);case 3:if(0!==(i=r.v)){r.n=4;break}return r.a(3,5);case 4:if(!i){r.n=5;break}return r.a(2,i.v);case 5:a++,r.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return r.a(2)}},r)})),q.apply(this,arguments)}function X(e){return Y.apply(this,arguments)}function Y(){return(Y=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.n){case 0:if(r.pid){e.n=1;break}return e.a(2);case 1:return H(r.pid,"SIGTERM"),e.n=2,l(200);case 2:null===r.exitCode&&H(r.pid,"SIGKILL");case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Q(e){if(!e||"linux"!==process.platform)return 0;var n=o.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return n.error||0!==n.status||!n.stdout?0:n.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function H(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function K(e){return V.apply(this,arguments)}function V(){return(V=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,u.access(r);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},e,null,[[0,2]])}))).apply(this,arguments)}function z(e){return e instanceof Error?e.message:String(e)}export{P as guiCommandJudgePreset};
//# sourceMappingURL=guiCommand.js.map
import{parseArgs as e}from"../helpers/parseArgs.js";import{printTestCaseResult as t}from"../helpers/printTestCaseResult.js";import{languageIdToDefinition as n}from"../types/language.js";import{DecisionCode as r}from"../types/decisionCode.js";import{cleanWorkingDirectory as i,snapshotWorkingDirectory as a}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as o}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as s}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as c}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as l}from"../helpers/judgeByStaticAnalysis.js";import{readOutputFiles as u}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as d}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as f}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as p}from"../helpers/spawnSyncWithTimeout.js";import{z as m}from"zod";import h from"node:child_process";import g from"node:fs/promises";import _ from"node:os";import v from"node:path";import{setTimeout as y}from"node:timers/promises";const b=.3,x=[_.platform()===`darwin`?`gtime`:`/usr/bin/time`,`--format`,`%e %M`],S=m.object({language:m.union([m.string(),m.array(m.string())]).optional()});async function C(n,f){let p=e(process.argv);if(!p.cwd)throw Error(`cwd argument required`);let m=S.parse(p.params),h=await d(n),g=await(f.readTestCases??O)(n),_=g.length>0?g:[{id:`default`}],v=_[0]?.id??`prebuild`,y=await l(p.cwd,h);if(y){t({testCaseId:v,...y});return}let x=f.mainFilePath??await s(p.cwd,m.language);if(!x){t({testCaseId:v,decisionCode:r.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:f.mainFilePath?`required main file not found: ${f.mainFilePath}`:`main file not found${m.language?`: language: ${m.language}`:``}`});return}let C=c(x);if(!C){t({testCaseId:v,decisionCode:r.WRONG_ANSWER,stderr:`unsupported language`});return}let A={...process.env,CI:``,FORCE_COLOR:`0`},j=await w({cwd:p.cwd,language:m.language,configuredMainFilePath:f.mainFilePath});if(C.prebuild)try{await C.prebuild(p.cwd);let e=await w({cwd:p.cwd,language:m.language??T(x),configuredMainFilePath:f.mainFilePath,allowConfiguredPathFallback:!0});e&&(j=e)}catch(e){t({testCaseId:v,decisionCode:r.BUILD_ERROR,stderr:R(e)});return}if(!j){t({testCaseId:v,decisionCode:r.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:f.mainFilePath?`required main file not found: ${f.mainFilePath}`:`main file not found${m.language?`: language: ${m.language}`:``}`});return}let M=await f.prepare?.({cwd:p.cwd,env:A,mainFilePath:j,problemMarkdownFrontMatter:h})??E({cwd:p.cwd,env:A,mainFilePath:j,languageDefinition:C});if(M){t({testCaseId:v,decisionCode:M.decisionCode??r.BUILD_ERROR,feedbackMarkdown:M.feedbackMarkdown,stderr:M.stderr,stdout:M.stdout,outputFiles:M.outputFiles});return}let P=await a(p.cwd),F,I=v,L;try{F=f.runCommand?void 0:await N();let e=g.shared?.fileInputPath;for(let n of _){I=n.id,e&&await o(e,p.cwd),n.fileInputPath&&await o(n.fileInputPath,p.cwd);let a=typeof h.timeLimitMs==`number`?h.timeLimitMs/1e3:f.runTimeoutSeconds??5,s=F?{...A,DISPLAY:F.display}:A,c=await f.resolveInput?.({testCase:n,cwd:p.cwd,env:s})??n.input??``;L=c;let l=await f.command?.({testCase:n,cwd:p.cwd,env:s,mainFilePath:j})??C.command(j),d;try{d=f.runCommand?await f.runCommand({testCase:n,command:l,stdin:c,cwd:p.cwd,env:s,timeLimitSeconds:a,screenshotWaitSeconds:f.screenshotWaitSeconds??b,stopDetectionThreshold:f.stopDetectionThreshold??5}):await k({command:l,stdin:c,cwd:p.cwd,env:s,timeLimitSeconds:a,screenshotWaitSeconds:f.screenshotWaitSeconds??b,stopDetectionThreshold:f.stopDetectionThreshold??5})}catch(e){t({testCaseId:n.id,decisionCode:r.RUNTIME_ERROR,stdin:c,stderr:R(e)}),await i(p.cwd,P);return}let m=await u(p.cwd,h.requiredOutputFilePaths??[]),g={timeLimitSeconds:a,problemMarkdownFrontMatter:{memoryLimitByte:h.memoryLimitByte,requiredOutputFilePaths:h.requiredOutputFilePaths}},_=D({runResult:d,outputFiles:m,context:g}),v=_;if(_.decisionCode===r.ACCEPTED)try{let e=await f.test({testCase:n,runResult:d,outputFiles:m,context:g});v={decisionCode:e.decisionCode??_.decisionCode,feedbackMarkdown:e.feedbackMarkdown,stderr:e.stderr,stdout:e.stdout,outputFiles:e.outputFiles}}catch(e){v={decisionCode:r.RUNTIME_ERROR,stderr:R(e)}}let y=v.decisionCode??r.ACCEPTED,x=v.stdout??d.stdout,S=v.stderr??d.stderr;if(t({testCaseId:n.id,decisionCode:y,exitStatus:d.status,stdin:d.stdin||void 0,stdout:x||void 0,stderr:S||void 0,timeSeconds:d.timeSeconds,memoryBytes:d.memoryBytes,feedbackMarkdown:v.feedbackMarkdown,outputFiles:v.outputFiles??(m.length>0?m:void 0)}),await i(p.cwd,P),y!==r.ACCEPTED)break}}catch(e){t({testCaseId:I,decisionCode:r.RUNTIME_ERROR,stdin:L,stderr:R(e)}),await i(p.cwd,P)}finally{await F?.dispose()}}async function w(e){if(e.configuredMainFilePath){if(await L(v.join(e.cwd,e.configuredMainFilePath)))return e.configuredMainFilePath;if(!e.allowConfiguredPathFallback)return}return await s(e.cwd,e.language)}function T(e){let t=Object.entries(n).filter(([,t])=>t.fileExtensions.some(t=>e.endsWith(t))).map(([e])=>e);return t.length>0?t:void 0}function E(e){let t=e.languageDefinition.buildCommand?.(e.mainFilePath);if(!t)return;let n=p(t[0],t.slice(1),{cwd:e.cwd,encoding:`utf8`,env:e.env},10);if(n.timeSeconds>10)return{decisionCode:r.BUILD_TIME_LIMIT_EXCEEDED,stderr:n.stderr||void 0};if(n.status!==0)return{decisionCode:r.BUILD_ERROR,stderr:n.stderr||n.stdout||void 0}}function D(e){if(e.runResult.stopReason===`timeout`)return{decisionCode:r.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(e.runResult.status!==0)return{decisionCode:r.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(e.context.problemMarkdownFrontMatter.memoryLimitByte??1/0))return{decisionCode:r.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};let t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length??0;return e.outputFiles.length<t?{decisionCode:r.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:r.ACCEPTED}}async function O(e){return await f(v.join(e,`test_cases`))}async function k(e){let t=[`timeout`,e.timeLimitSeconds.toFixed(3),...x,...e.command],n=h.spawn(t[0],t.slice(1),{cwd:e.cwd,env:e.env,detached:process.platform!==`win32`,stdio:[`pipe`,`pipe`,`pipe`]});n.stdout.setEncoding(`utf8`),n.stderr.setEncoding(`utf8`);let r=``,i=``,a,o,s=`process_exit`,c=[],l=[],u=Date.now()/1e3,d=0;for(n.stdout.on(`data`,e=>{r+=e}),n.stderr.on(`data`,e=>{i+=e}),n.on(`error`,e=>{o=e,a=1}),n.on(`close`,(e,t)=>{if(e===124){s=`timeout`,a=0;return}if(t){a=1,i=i?`${i}\nprocess terminated by signal: ${t}`:`process terminated by signal: ${t}`;return}a=e??1}),e.stdin&&n.stdin.write(e.stdin),n.stdin.end();a===void 0;){if(await y(e.screenshotWaitSeconds*1e3),d=Math.max(d,F(n.pid)),l=A(e.env.DISPLAY).toSorted((e,t)=>e.data.length-t.data.length),l.length>0){let t=l.map(e=>e.data).toSorted();if(c.unshift(t),c.length=Math.min(c.length,e.stopDetectionThreshold),c.length===e.stopDetectionThreshold&&c.every(e=>e.length===t.length&&e.every((e,n)=>e===t[n]))){s=`stable_screenshot`,a=0;break}}if(Date.now()/1e3-u>e.timeLimitSeconds){s=`timeout`,a=0;break}}if(s!==`process_exit`&&n.exitCode===null&&(n.removeAllListeners(`close`),n.removeAllListeners(`error`)),await P(n),o)throw o;let{memoryBytes:f,stderr:p,timeSeconds:m}=M(i,u,d);return{stdin:e.stdin,stdout:r.trimEnd(),stderr:p,status:a,timeSeconds:m,memoryBytes:f,screenshots:l,stopReason:s}}function A(e){let t=e?{...process.env,DISPLAY:e}:process.env,n=h.spawnSync(`xwininfo`,[`-root`,`-tree`],{encoding:`utf8`,env:t});if(n.error)throw n.error;if(n.status!==0||!n.stdout)return[];let r=[];for(let e of j(n.stdout)){let n=h.spawnSync(`maim`,[`-i`,e],{env:t});if(n.error)throw n.error;if(n.status!==0||n.stdout.length===0)continue;let i=h.spawnSync(`xdotool`,[`getwindowname`,e],{encoding:`utf8`,env:t});if(i.error)throw i.error;let a=i.stdout.trim().replaceAll(/[\s/]/g,`_`);r.push({path:`${a||`window`}_${e}.png`,data:n.stdout.toString(`base64`),encoding:`base64`})}return r}function j(e){let t=[],n=e.split(`
`);for(let e of n){if(e.includes(`Root window id:`)||e.includes(`Parent window id:`)||e.includes(`()`))continue;let n=/^\s{5}(0x[\da-f]+) /.exec(e);n?.[1]&&t.push(Number.parseInt(n[1],16).toString())}return t}function M(e,t,n){let r=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=r?e.slice(0,r.index).trimEnd():e.trimEnd(),a=Number(r?.[2])*1024||0;return{stderr:i,timeSeconds:Number(r?.[1])||Date.now()/1e3-t,memoryBytes:Math.max(a,n)}}async function N(){if(process.platform!==`linux`)throw Error(`GUI screenshot capture is supported only on Linux.`);for(let e=90;e<100;e++){let t=`:${e}`,n,r=h.spawn(`Xvfb`,[t,`-screen`,`0`,`1280x1024x24`,`-ac`],{stdio:`ignore`});if(r.on(`error`,e=>{n=e}),await y(.3*1e3),n)throw n;if(r.exitCode===null)return{display:t,dispose:async()=>{r.killed||(r.kill(`SIGTERM`),await y(.1*1e3),r.exitCode===null&&r.kill(`SIGKILL`))}}}throw Error(`Xvfb could not be started.`)}async function P(e){e.pid&&(I(e.pid,`SIGTERM`),await y(.2*1e3),e.exitCode===null&&I(e.pid,`SIGKILL`))}function F(e){if(!e||process.platform!==`linux`)return 0;let t=h.spawnSync(`ps`,[`-o`,`rss=`,`--no-headers`,`--pgroup`,String(e)],{encoding:`utf8`});return t.error||t.status!==0||!t.stdout?0:t.stdout.split(`
`).map(e=>Number(e.trim())).filter(e=>Number.isFinite(e)&&e>0).reduce((e,t)=>e+t*1024,0)}function I(e,t){try{if(process.platform!==`win32`){process.kill(-e,t);return}}catch{}try{process.kill(e,t)}catch{}}async function L(e){try{return await g.access(e),!0}catch{return!1}}function R(e){return e instanceof Error?e.message:String(e)}export{C as guiCommandJudgePreset};
//# sourceMappingURL=guiCommand.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"guiCommand.js","sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["TIME_COMMAND","os","platform","judgeParamsSchema","z","object","language","union","string","array","optional","guiCommandJudgePreset","_x","_x2","_guiCommandJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$mainFilePath","_yield$options$prepar","_options$prepare","args","params","problemMarkdownFrontMatter","configuredTestCases","testCases","prebuildTestCaseId","staticAnalysisResult","initialMainFilePath","languageDefinition","env","resolvedMainFilePath","_params$language","prebuiltMainFilePath","prepareResult","_prepareResult$decisi","cwdSnapshot","displayServer","currentTestCaseId","currentStdin","_shared","sharedFileInputPath","_iterator2","_step2","_options$runTimeoutSe","_ref5","_yield$options$resolv","_options$resolveInput","_yield$options$comman","_options$command","_problemMarkdownFront","_judgeResult$decision","_judgeResult$stdout","_judgeResult$stderr","_judgeResult$outputFi","testCase","timeLimitSeconds","runEnv","stdin","command","runResult","_options$screenshotWa","_options$stopDetectio","_options$screenshotWa2","_options$stopDetectio2","outputFiles","judgeContext","baseJudgeResult","judgeResult","_extendedJudgeResult$","extendedJudgeResult","decisionCode","stdout","stderr","_displayServer","_t","_t2","_t4","_t5","_t7","_t9","_t1","_t10","_t11","_t12","_t13","_t14","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","readGuiTestCases","length","id","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","a","mainFilePath","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","resolveMainFilePath","configuredMainFilePath","prebuild","inferLanguageIdsByPath","allowConfiguredPathFallback","BUILD_ERROR","errorToMessage","prepare","call","runDefaultPrepare","feedbackMarkdown","snapshotWorkingDirectory","runCommand","undefined","ensureDisplayServer","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","runTimeoutSeconds","DISPLAY","display","resolveInput","input","screenshotWaitSeconds","stopDetectionThreshold","spawnGuiProgram","RUNTIME_ERROR","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","memoryLimitByte","evaluateGuiRunResult","context","ACCEPTED","test","exitStatus","status","timeSeconds","memoryBytes","e","f","dispose","_x3","_resolveMainFilePath","_callee2","resolvedPath","_context2","path","join","pathExists","filePath","languageIds","Object","entries","languageIdToDefinition","filter","_ref","_slicedToArray","fileExtensions","some","ext","endsWith","map","_ref3","_context$languageDefi","_context$languageDefi2","buildCommand","buildResult","spawnSyncWithTimeout","slice","encoding","BUILD_TIME_LIMIT_EXCEEDED","_context$context$prob","_context$context$prob2","_context$context$prob3","stopReason","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","requiredOutputFilesCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x4","_readGuiTestCases","_callee3","_context3","readFileTestCases","_x5","_spawnGuiProgram","_callee4","wrappedCommand","child","exitCode","spawnError","screenshotSignaturesHistory","screenshots","startTimeSeconds","sampledMemoryBytes","_loop","_parseTimedStderr","normalizedStderr","_context5","toFixed","_toConsumableArray","childProcess","spawn","detached","stdio","setEncoding","Date","now","on","chunk","error","code","signal","write","end","currentScreenshots","screenshotSignatures","_context4","wait","Math","max","readProcessGroupMemoryBytes","pid","takeScreenshots","toSorted","b","data","file","unshift","min","every","files","index","d","_regeneratorValues","removeAllListeners","stopProcess","parseTimedStderr","trimEnd","xwininfo","spawnSync","_i","_extractTopLevelWindo","_step","windowIds","lines","split","_iterator","line","includes","match","exec","push","parseInt","toString","err","extractTopLevelWindowIds","windowId","screenshot","windowNameResult","windowName","trim","replaceAll","parsedMemoryBytes","_ensureDisplayServer","_callee6","_loop2","_ret2","displayNumber","_context8","xvfb","_context7","XVFB_STARTUP_WAIT_SECONDS","_dispose","_callee5","_context6","killed","kill","XVFB_SHUTDOWN_WAIT_SECONDS","_x6","_stopProcess","_callee7","_context9","killProcessGroup","PROCESS_SHUTDOWN_WAIT_SECONDS","processGroupId","result","String","isFinite","reduce","sum","_unused","_unused2","_x7","_pathExists","_callee8","_context0","fs","access","message"],"mappings":"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"}
{"version":3,"file":"guiCommand.js","names":["readFileTestCases","wait"],"sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),t=require("node:path"),s=require("@ai-sdk/amazon-bedrock"),n=require("@ai-sdk/google"),a=require("@ai-sdk/openai"),o=require("@ai-sdk/xai"),i=require("ai"),u=require("zod"),c=require("../helpers/parseArgs.cjs"),d=require("../helpers/printTestCaseResult.cjs"),l=require("../helpers/readTestCases.cjs"),p=require("../types/decisionCode.cjs"),C={bedrock:s.bedrock,google:n.google,openai:a.openai,xai:o.xai},m=u.z.object({model:u.z.string().min(1)});function f(){return(f=e.asyncToGenerator(e.regenerator().m(function s(n,a){var o,u,C,f,v,b,q,w,k,T,h,E,j,D,x,R,A,y,P,z;return e.regenerator().w(function(s){for(;;)switch(s.p=s.n){case 0:if((o=c.parseArgs(process.argv)).cwd){s.n=1;break}throw new Error("cwd argument required");case 1:return u=m.parse(o.params),s.n=2,l.readTestCases(t.join(n,"test_cases"));case 2:return C=s.v,s.n=3,r.promises.readFile(t.join(o.cwd,"prompt.txt"),"utf8");case 3:f=s.v,v=e.createForOfIteratorHelper(C),s.p=4,v.s();case 5:if((b=v.n()).done){s.n=12;break}return q=b.value,w=Date.now(),s.p=6,s.n=7,i.generateText({model:g(u.model),prompt:null!=(k=null==(T=a.buildPrompt)?void 0:T.call(a,{prompt:f,testCase:q}))?k:f.replaceAll("{input}",null!=(h=q.input)?h:"")});case 7:return E=s.v,j=E.text,D=Date.now(),A=e.objectSpread2,y={testCaseId:q.id,decisionCode:p.DecisionCode.ACCEPTED,stdin:q.input,stdout:j,timeSeconds:(D-w)/1e3},s.n=8,a.test({testCase:q,result:{output:j}});case 8:if(x=A(y,s.v),d.printTestCaseResult(x),x.decisionCode===p.DecisionCode.ACCEPTED){s.n=9;break}return s.a(3,12);case 9:s.n=11;break;case 10:return s.p=10,P=s.v,R=Date.now(),d.printTestCaseResult({testCaseId:q.id,decisionCode:p.DecisionCode.RUNTIME_ERROR,stdin:q.input,stderr:P instanceof Error?P.message:String(P),timeSeconds:(R-w)/1e3}),s.a(3,12);case 11:s.n=5;break;case 12:s.n=14;break;case 13:s.p=13,z=s.v,v.e(z);case 14:return s.p=14,v.f(),s.f(14);case 15:return s.a(2)}},s,null,[[6,10],[4,13,14,15]])}))).apply(this,arguments)}function g(r){var t,s=r.split("/"),n=e.slicedToArray(s,2),a=n[0],o=n[1];if(!a||!o)throw new Error("bad model: ".concat(r));var i=null==(t=C[a])?void 0:t.call(C,o);if(!i)throw new Error("model not found: ".concat(r));return i}exports.llmJudgePreset=function(e,r){return f.apply(this,arguments)};
//# sourceMappingURL=llm.cjs.map
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/parseArgs.cjs"),n=require("../helpers/printTestCaseResult.cjs"),r=require("../types/decisionCode.cjs"),i=require("../helpers/readTestCases.cjs");let a=require("zod"),o=require("node:path");o=e.__toESM(o,1);let s=require("node:fs");s=e.__toESM(s,1);let c=require("@ai-sdk/amazon-bedrock"),l=require("@ai-sdk/google"),u=require("@ai-sdk/openai"),d=require("@ai-sdk/xai"),f=require("ai");const p={bedrock:c.bedrock,google:l.google,openai:u.openai,xai:d.xai},m=a.z.object({model:a.z.string().min(1)});async function h(e,a){let c=t.parseArgs(process.argv);if(!c.cwd)throw Error(`cwd argument required`);let l=m.parse(c.params),u=await i.readTestCases(o.default.join(e,`test_cases`)),d=await s.default.promises.readFile(o.default.join(c.cwd,`prompt.txt`),`utf8`);for(let e of u){let t=Date.now();try{let{text:i}=await(0,f.generateText)({model:g(l.model),prompt:a.buildPrompt?.({prompt:d,testCase:e})??d.replaceAll(`{input}`,e.input??``)}),o=Date.now(),s={testCaseId:e.id,decisionCode:r.DecisionCode.ACCEPTED,stdin:e.input,stdout:i,timeSeconds:(o-t)/1e3,...await a.test({testCase:e,result:{output:i}})};if(n.printTestCaseResult(s),s.decisionCode!==r.DecisionCode.ACCEPTED)break}catch(i){let a=Date.now();n.printTestCaseResult({testCaseId:e.id,decisionCode:r.DecisionCode.RUNTIME_ERROR,stdin:e.input,stderr:i instanceof Error?i.message:String(i),timeSeconds:(a-t)/1e3});break}}}function g(e){let[t,n]=e.split(`/`);if(!t||!n)throw Error(`bad model: ${e}`);let r=p[t]?.(n);if(!r)throw Error(`model not found: ${e}`);return r}exports.llmJudgePreset=h;
//# sourceMappingURL=llm.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"llm.cjs","sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"names":["providerByName","bedrock","google","openai","xai","judgeParamsSchema","z","object","model","string","min","_llmJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","args","params","testCases","prompt","_iterator","_step","testCase","startTimeMilliseconds","_options$buildPrompt","_options$buildPrompt2","_testCase$input","_yield$generateText","text","stopTimeMilliseconds","testCaseResult","_stopTimeMilliseconds","_t","_t2","_t3","_t4","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readTestCases","path","join","v","fs","promises","readFile","_createForOfIteratorHelper","s","done","value","Date","now","generateText","toLanguageModel","buildPrompt","call","replaceAll","input","_objectSpread","testCaseId","id","decisionCode","DecisionCode","ACCEPTED","stdin","stdout","timeSeconds","test","result","output","printTestCaseResult","a","RUNTIME_ERROR","stderr","message","String","e","f","apply","this","arguments","_providerByName$provi","_model$split","split","_model$split2","_slicedToArray","providerId","modelId","concat","languageModel","_x","_x2"],"mappings":"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"}
{"version":3,"file":"llm.cjs","names":["z","parseArgs","readTestCases","path","fs","DecisionCode"],"sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"mappings":"4hBAiBA,MAEM,EAA8F,CAElG,QAAA,EAAA,QAEA,OAAA,EAAA,OAEA,OAAA,EAAA,OAEA,IAAA,EAAA,GACF,EAEM,EAAoBA,EAAAA,EAAE,OAAO,CACjC,MAAOA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CACzB,CAAC,EAkCD,eAAsB,EAAe,EAAoB,EAA+C,CACtG,IAAM,EAAOC,EAAAA,UAAU,QAAQ,IAAI,EACnC,GAAI,CAAC,EAAK,IAAK,MAAU,MAAM,uBAAuB,EACtD,IAAM,EAAS,EAAkB,MAAM,EAAK,MAAM,EAE5C,EAAY,MAAMC,EAAAA,cAAcC,EAAAA,QAAK,KAAK,EAAY,YAAY,CAAC,EAEnE,EAAS,MAAMC,EAAAA,QAAG,SAAS,SAASD,EAAAA,QAAK,KAAK,EAAK,IAAK,YAAe,EAAG,MAAM,EAEtF,IAAK,IAAM,KAAY,EAAW,CAChC,IAAM,EAAwB,KAAK,IAAI,EACvC,GAAI,CACF,GAAM,CAAE,QAAS,MAAA,EAAA,EAAA,aAAA,CAAmB,CAClC,MAAO,EAAgB,EAAO,KAAK,EACnC,OAAQ,EAAQ,cAAc,CAAE,SAAQ,UAAS,CAAC,GAAK,EAAO,WAAW,UAAW,EAAS,OAAS,EAAE,CAC1G,CAAC,EAEK,EAAuB,KAAK,IAAI,EAEhC,EAAiB,CACrB,WAAY,EAAS,GACrB,aAAcE,EAAAA,aAAa,SAC3B,MAAO,EAAS,MAChB,OAAQ,EACR,aAAc,EAAuB,GAAyB,IAC9D,GAAI,MAAM,EAAQ,KAAK,CAAE,WAAU,OAAQ,CAAE,OAAQ,CAAK,CAAE,CAAC,CAC/D,EAIA,GAFA,EAAA,oBAAoB,CAAc,EAE9B,EAAe,eAAiBA,EAAAA,aAAa,SAAU,KAC7D,OAAS,EAAO,CACd,IAAM,EAAuB,KAAK,IAAI,EAEtC,EAAA,oBAAoB,CAClB,WAAY,EAAS,GACrB,aAAcA,EAAAA,aAAa,cAC3B,MAAO,EAAS,MAChB,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAC7D,aAAc,EAAuB,GAAyB,GAChE,CAAC,EAED,KACF,CACF,CACF,CAEA,SAAS,EAAgB,EAA8B,CACrD,GAAM,CAAC,EAAY,GAAW,EAAM,MAAM,GAAG,EAC7C,GAAI,CAAC,GAAc,CAAC,EAAS,MAAU,MAAM,cAAc,GAAO,EAClE,IAAM,EAAgB,EAAe,EAAW,GAAG,CAAO,EAC1D,GAAI,CAAC,EAAe,MAAU,MAAM,oBAAoB,GAAO,EAC/D,OAAO,CACT"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as r,objectSpread2 as o,createForOfIteratorHelper as t,slicedToArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"node:fs";import n from"node:path";import{bedrock as i}from"@ai-sdk/amazon-bedrock";import{google as p}from"@ai-sdk/google";import{openai as c}from"@ai-sdk/openai";import{xai as d}from"@ai-sdk/xai";import{generateText as m}from"ai";import{z as l}from"zod";import{parseArgs as u}from"../helpers/parseArgs.js";import{printTestCaseResult as f}from"../helpers/printTestCaseResult.js";import{readTestCases as v}from"../helpers/readTestCases.js";import{DecisionCode as w}from"../types/decisionCode.js";var C={bedrock:i,google:p,openai:c,xai:d},b=l.object({model:l.string().min(1)});function g(e,r){return k.apply(this,arguments)}function k(){return(k=e(r().m(function e(a,i){var p,c,d,l,C,g,k,E,j,T,x,y,A,D,R,I,P,S,_,z;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:if((p=u(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return c=b.parse(p.params),e.n=2,v(n.join(a,"test_cases"));case 2:return d=e.v,e.n=3,s.promises.readFile(n.join(p.cwd,"prompt.txt"),"utf8");case 3:l=e.v,C=t(d),e.p=4,C.s();case 5:if((g=C.n()).done){e.n=12;break}return k=g.value,E=Date.now(),e.p=6,e.n=7,m({model:h(c.model),prompt:null!=(j=null==(T=i.buildPrompt)?void 0:T.call(i,{prompt:l,testCase:k}))?j:l.replaceAll("{input}",null!=(x=k.input)?x:"")});case 7:return y=e.v,A=y.text,D=Date.now(),P=o,S={testCaseId:k.id,decisionCode:w.ACCEPTED,stdin:k.input,stdout:A,timeSeconds:(D-E)/1e3},e.n=8,i.test({testCase:k,result:{output:A}});case 8:if(R=P(S,e.v),f(R),R.decisionCode===w.ACCEPTED){e.n=9;break}return e.a(3,12);case 9:e.n=11;break;case 10:return e.p=10,_=e.v,I=Date.now(),f({testCaseId:k.id,decisionCode:w.RUNTIME_ERROR,stdin:k.input,stderr:_ instanceof Error?_.message:String(_),timeSeconds:(I-E)/1e3}),e.a(3,12);case 11:e.n=5;break;case 12:e.n=14;break;case 13:e.p=13,z=e.v,C.e(z);case 14:return e.p=14,C.f(),e.f(14);case 15:return e.a(2)}},e,null,[[6,10],[4,13,14,15]])}))).apply(this,arguments)}function h(e){var r,o=e.split("/"),t=a(o,2),s=t[0],n=t[1];if(!s||!n)throw new Error("bad model: ".concat(e));var i=null==(r=C[s])?void 0:r.call(C,n);if(!i)throw new Error("model not found: ".concat(e));return i}export{g as llmJudgePreset};
//# sourceMappingURL=llm.js.map
import{parseArgs as e}from"../helpers/parseArgs.js";import{printTestCaseResult as t}from"../helpers/printTestCaseResult.js";import{DecisionCode as n}from"../types/decisionCode.js";import{readTestCases as r}from"../helpers/readTestCases.js";import{z as i}from"zod";import a from"node:path";import o from"node:fs";import{bedrock as s}from"@ai-sdk/amazon-bedrock";import{google as c}from"@ai-sdk/google";import{openai as l}from"@ai-sdk/openai";import{xai as u}from"@ai-sdk/xai";import{generateText as d}from"ai";const f={bedrock:s,google:c,openai:l,xai:u},p=i.object({model:i.string().min(1)});async function m(i,s){let c=e(process.argv);if(!c.cwd)throw Error(`cwd argument required`);let l=p.parse(c.params),u=await r(a.join(i,`test_cases`)),f=await o.promises.readFile(a.join(c.cwd,`prompt.txt`),`utf8`);for(let e of u){let r=Date.now();try{let{text:i}=await d({model:h(l.model),prompt:s.buildPrompt?.({prompt:f,testCase:e})??f.replaceAll(`{input}`,e.input??``)}),a=Date.now(),o={testCaseId:e.id,decisionCode:n.ACCEPTED,stdin:e.input,stdout:i,timeSeconds:(a-r)/1e3,...await s.test({testCase:e,result:{output:i}})};if(t(o),o.decisionCode!==n.ACCEPTED)break}catch(i){let a=Date.now();t({testCaseId:e.id,decisionCode:n.RUNTIME_ERROR,stdin:e.input,stderr:i instanceof Error?i.message:String(i),timeSeconds:(a-r)/1e3});break}}}function h(e){let[t,n]=e.split(`/`);if(!t||!n)throw Error(`bad model: ${e}`);let r=f[t]?.(n);if(!r)throw Error(`model not found: ${e}`);return r}export{m as llmJudgePreset};
//# sourceMappingURL=llm.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"llm.js","sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"names":["providerByName","bedrock","google","openai","xai","judgeParamsSchema","z","object","model","string","min","llmJudgePreset","_x","_x2","_llmJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","args","params","testCases","prompt","_iterator","_step","testCase","startTimeMilliseconds","_options$buildPrompt","_options$buildPrompt2","_testCase$input","_yield$generateText","text","stopTimeMilliseconds","testCaseResult","_stopTimeMilliseconds","_t","_t2","_t3","_t4","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readTestCases","path","join","v","fs","promises","readFile","_createForOfIteratorHelper","s","done","value","Date","now","generateText","toLanguageModel","buildPrompt","call","replaceAll","input","_objectSpread","testCaseId","id","decisionCode","DecisionCode","ACCEPTED","stdin","stdout","timeSeconds","test","result","output","printTestCaseResult","a","RUNTIME_ERROR","stderr","message","String","e","f","_providerByName$provi","_model$split","split","_model$split2","_slicedToArray","providerId","modelId","concat","languageModel"],"mappings":"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"}
{"version":3,"file":"llm.js","names":[],"sources":["../../src/presets/llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { bedrock } from '@ai-sdk/amazon-bedrock';\nimport { google } from '@ai-sdk/google';\nimport { openai } from '@ai-sdk/openai';\nimport { xai } from '@ai-sdk/xai';\nimport type { LanguageModel, ModelMessage } from 'ai';\nimport { generateText } from 'ai';\nimport { z } from 'zod';\n\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst PROMPT_FILENAME = 'prompt.txt';\n\nconst providerByName: Record<string, typeof bedrock | typeof google | typeof openai | typeof xai> = {\n // requires `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`\n bedrock,\n // requires `GOOGLE_GENERATIVE_AI_API_KEY`\n google,\n // requires `OPENAI_API_KEY`\n openai,\n // requires `XAI_API_KEY`\n xai,\n} as const;\n\nconst judgeParamsSchema = z.object({\n model: z.string().min(1),\n});\n\ninterface LlmJudgePresetOptions {\n buildPrompt?: (context: {\n prompt: string;\n testCase: { id: string; input?: string; output?: string };\n }) => string | ModelMessage[];\n test: (context: {\n testCase: { id: string; input?: string; output?: string };\n result: { output: string };\n }) => Partial<TestCaseResult> | Promise<Partial<TestCaseResult>>;\n}\n\n/**\n * A preset judge function for running and testing a user prompt in LLM.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { llmJudgePreset } from '@exercode/problem-utils/presets/llm';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await llmJudgePreset(import.meta.dirname, {\n * test: (context) {\n * return { decisionCode: context.result.output ? DecisionCode.ACCEPTED : DecisionCode.WRONG_ANSWER };\n * }\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"model\": \"gemini-2.5-flash-lite\" }'\n * ```\n */\nexport async function llmJudgePreset(problemDir: string, options: LlmJudgePresetOptions): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const prompt = await fs.promises.readFile(path.join(args.cwd, PROMPT_FILENAME), 'utf8');\n\n for (const testCase of testCases) {\n const startTimeMilliseconds = Date.now();\n try {\n const { text } = await generateText({\n model: toLanguageModel(params.model),\n prompt: options.buildPrompt?.({ prompt, testCase }) ?? prompt.replaceAll('{input}', testCase.input ?? ''),\n });\n\n const stopTimeMilliseconds = Date.now();\n\n const testCaseResult = {\n testCaseId: testCase.id,\n decisionCode: DecisionCode.ACCEPTED,\n stdin: testCase.input,\n stdout: text,\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n ...(await options.test({ testCase, result: { output: text } })),\n };\n\n printTestCaseResult(testCaseResult);\n\n if (testCaseResult.decisionCode !== DecisionCode.ACCEPTED) break;\n } catch (error) {\n const stopTimeMilliseconds = Date.now();\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: testCase.input,\n stderr: error instanceof Error ? error.message : String(error),\n timeSeconds: (stopTimeMilliseconds - startTimeMilliseconds) / 1000,\n });\n\n break;\n }\n }\n}\n\nfunction toLanguageModel(model: string): LanguageModel {\n const [providerId, modelId] = model.split('/');\n if (!providerId || !modelId) throw new Error(`bad model: ${model}`);\n const languageModel = providerByName[providerId]?.(modelId);\n if (!languageModel) throw new Error(`model not found: ${model}`);\n return languageModel;\n}\n"],"mappings":"6fAiBA,MAEM,EAA8F,CAElG,UAEA,SAEA,SAEA,KACF,EAEM,EAAoB,EAAE,OAAO,CACjC,MAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CACzB,CAAC,EAkCD,eAAsB,EAAe,EAAoB,EAA+C,CACtG,IAAM,EAAO,EAAU,QAAQ,IAAI,EACnC,GAAI,CAAC,EAAK,IAAK,MAAU,MAAM,uBAAuB,EACtD,IAAM,EAAS,EAAkB,MAAM,EAAK,MAAM,EAE5C,EAAY,MAAM,EAAc,EAAK,KAAK,EAAY,YAAY,CAAC,EAEnE,EAAS,MAAM,EAAG,SAAS,SAAS,EAAK,KAAK,EAAK,IAAK,YAAe,EAAG,MAAM,EAEtF,IAAK,IAAM,KAAY,EAAW,CAChC,IAAM,EAAwB,KAAK,IAAI,EACvC,GAAI,CACF,GAAM,CAAE,QAAS,MAAM,EAAa,CAClC,MAAO,EAAgB,EAAO,KAAK,EACnC,OAAQ,EAAQ,cAAc,CAAE,SAAQ,UAAS,CAAC,GAAK,EAAO,WAAW,UAAW,EAAS,OAAS,EAAE,CAC1G,CAAC,EAEK,EAAuB,KAAK,IAAI,EAEhC,EAAiB,CACrB,WAAY,EAAS,GACrB,aAAc,EAAa,SAC3B,MAAO,EAAS,MAChB,OAAQ,EACR,aAAc,EAAuB,GAAyB,IAC9D,GAAI,MAAM,EAAQ,KAAK,CAAE,WAAU,OAAQ,CAAE,OAAQ,CAAK,CAAE,CAAC,CAC/D,EAIA,GAFA,EAAoB,CAAc,EAE9B,EAAe,eAAiB,EAAa,SAAU,KAC7D,OAAS,EAAO,CACd,IAAM,EAAuB,KAAK,IAAI,EAEtC,EAAoB,CAClB,WAAY,EAAS,GACrB,aAAc,EAAa,cAC3B,MAAO,EAAS,MAChB,OAAQ,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAC7D,aAAc,EAAuB,GAAyB,GAChE,CAAC,EAED,KACF,CACF,CACF,CAEA,SAAS,EAAgB,EAA8B,CACrD,GAAM,CAAC,EAAY,GAAW,EAAM,MAAM,GAAG,EAC7C,GAAI,CAAC,GAAc,CAAC,EAAS,MAAU,MAAM,cAAc,GAAO,EAClE,IAAM,EAAgB,EAAe,EAAW,GAAG,CAAO,EAC1D,GAAI,CAAC,EAAe,MAAU,MAAM,oBAAoB,GAAO,EAC/D,OAAO,CACT"}

@@ -1,2 +0,2 @@

"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),t=require("node:path"),s=require("zod"),n=require("../helpers/cleanWorkingDirectory.cjs"),i=require("../helpers/compareStdoutAsSpaceSeparatedTokens.cjs"),a=require("../helpers/copyTestCaseFileInput.cjs"),o=require("../helpers/findEntryPointFile.cjs"),d=require("../helpers/findLanguageDefinitionByPath.cjs"),u=require("../helpers/judgeByStaticAnalysis.cjs"),c=require("../helpers/parseArgs.cjs"),l=require("../helpers/printTestCaseResult.cjs"),p=require("../helpers/readOutputFiles.cjs"),C=require("../helpers/readProblemMarkdownFrontMatter.cjs"),E=require("../helpers/readTestCases.cjs"),I=require("../helpers/spawnSyncWithTimeout.cjs"),m=require("../types/decisionCode.cjs"),D=5e4,g=s.z.object({language:s.z.union([s.z.string(),s.z.array(s.z.string())]).optional()}),b=g.extend({stdin:s.z.string().optional()});function R(){return(R=e.asyncToGenerator(e.regenerator().m(function s(b){var R,f,T,_,S,h,v,y,k,O,w,P,M,F,L,B,U,j,N,q,A,W,G,X,x,z,Q,Y,Z,H,V,J,K,$,ee,re,te,se,ne,ie,ae,oe,de,ue,ce,le,pe,Ce,Ee,Ie,me,De,ge;return e.regenerator().w(function(s){for(;;)switch(s.p=s.n){case 0:if((R=c.parseArgs(process.argv)).cwd){s.n=1;break}throw new Error("cwd argument required");case 1:return f=g.parse(R.params),s.n=2,C.readProblemMarkdownFrontMatter(b);case 2:return T=s.v,s.n=3,E.readTestCases(t.join(b,"test_cases"));case 3:return _=s.v,s.n=4,u.judgeByStaticAnalysis(R.cwd,T);case 4:if(!(S=s.v)){s.n=5;break}return l.printTestCaseResult(e.objectSpread2({testCaseId:null!=(h=null==(v=_[0])?void 0:v.id)?h:"prebuild"},S)),s.a(2);case 5:return s.n=6,o.findEntryPointFile(R.cwd,f.language);case 6:if(y=s.v){s.n=7;break}return l.printTestCaseResult({testCaseId:null!=(k=null==(O=_[0])?void 0:O.id)?k:"prebuild",decisionCode:m.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(f.language?": language: ".concat(f.language):"")}),s.a(2);case 7:if(w=d.findLanguageDefinitionByPath(y)){s.n=8;break}return l.printTestCaseResult({testCaseId:null!=(P=null==(M=_[0])?void 0:M.id)?P:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),s.a(2);case 8:if(F=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!w.prebuild){s.n=13;break}return s.p=9,s.n=10,w.prebuild(R.cwd);case 10:return s.n=11,o.findEntryPointFile(R.cwd,f.language);case 11:L=s.v,s.n=13;break;case 12:return s.p=12,Ee=s.v,console.error("prebuild error",Ee),l.printTestCaseResult({testCaseId:null!=(B=null==(U=_[0])?void 0:U.id)?B:"prebuild",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:Ee instanceof Error?Ee.message:String(Ee)}),s.a(2);case 13:if(j=null!=L?L:y,!w.buildCommand){s.n=17;break}if(s.p=14,N=w.buildCommand(j),q=I.spawnSyncWithTimeout(N[0],N.slice(1),{cwd:R.cwd,encoding:"utf8",env:F},10),A=m.DecisionCode.ACCEPTED,0!==q.status?A=m.DecisionCode.BUILD_ERROR:q.timeSeconds>10?A=m.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(q.stdout.length>D||q.stderr.length>D)&&(A=m.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),A===m.DecisionCode.ACCEPTED){s.n=15;break}return l.printTestCaseResult({testCaseId:null!=(W=null==(G=_[0])?void 0:G.id)?W:"build",decisionCode:A,exitStatus:null!=(X=q.status)?X:void 0,stdout:q.stdout.slice(0,D)||void 0,stderr:q.stderr.slice(0,D)||void 0,timeSeconds:q.timeSeconds,memoryBytes:q.memoryBytes}),s.a(2);case 15:s.n=17;break;case 16:return s.p=16,Ie=s.v,console.error("build error",Ie),l.printTestCaseResult({testCaseId:null!=(x=null==(z=_[0])?void 0:z.id)?x:"build",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:Ie instanceof Error?Ie.message:String(Ie)}),s.a(2);case 17:return s.n=18,n.snapshotWorkingDirectory(R.cwd);case 18:Q=s.v,0===_.length&&l.printTestCaseResult({testCaseId:"default",decisionCode:m.DecisionCode.ACCEPTED}),Y=e.createForOfIteratorHelper(_),s.p=19,Y.s();case 20:if((Z=Y.n()).done){s.n=45;break}if(te=Z.value,null==(H=_.shared)||!H.fileInputPath){s.n=21;break}return s.n=21,a.copyTestCaseFileInput(_.shared.fileInputPath,R.cwd);case 21:if(!te.fileInputPath){s.n=22;break}return s.n=22,a.copyTestCaseFileInput(te.fileInputPath,R.cwd);case 22:return se="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,ne=w.command(j),ie=I.spawnSyncWithTimeout(ne[0],ne.slice(1),{cwd:R.cwd,encoding:"utf8",input:te.input,env:F},se),s.n=23,p.readOutputFiles(R.cwd,null!=(V=T.requiredOutputFilePaths)?V:[]);case 23:if(ae=s.v,oe=m.DecisionCode.ACCEPTED,0===ie.status){s.n=24;break}oe=m.DecisionCode.RUNTIME_ERROR,s.n=42;break;case 24:if(!(ie.timeSeconds>se)){s.n=25;break}oe=m.DecisionCode.TIME_LIMIT_EXCEEDED,s.n=42;break;case 25:if(!(ie.memoryBytes>(null!=(J=T.memoryLimitByte)?J:Number.POSITIVE_INFINITY))){s.n=26;break}oe=m.DecisionCode.MEMORY_LIMIT_EXCEEDED,s.n=42;break;case 26:if(!(ie.stdout.length>D||ie.stderr.length>D)){s.n=27;break}oe=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED,s.n=42;break;case 27:if(!(ae.length<(null!=(K=null==($=T.requiredOutputFilePaths)?void 0:$.length)?K:0))){s.n=28;break}oe=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,s.n=42;break;case 28:if(i.compareStdoutAsSpaceSeparatedTokens(ie.stdout,null!=(ee=te.output)?ee:"")){s.n=29;break}oe=m.DecisionCode.WRONG_ANSWER,s.n=42;break;case 29:if(!te.fileOutputPath){s.n=42;break}return s.n=30,r.promises.readdir(te.fileOutputPath,{withFileTypes:!0,recursive:!0});case 30:de=s.v,ue=e.createForOfIteratorHelper(de),s.p=31,ue.s();case 32:if((ce=ue.n()).done){s.n=39;break}if((le=ce.value).isFile()){s.n=33;break}return s.a(3,38);case 33:return pe=t.relative(te.fileOutputPath,le.parentPath),s.n=34,r.promises.readFile(t.join(le.parentPath,le.name));case 34:return Ce=s.v,s.p=35,s.n=36,r.promises.readFile(t.join(R.cwd,pe,le.name));case 36:0!==s.v.compare(Ce)&&(oe=m.DecisionCode.WRONG_ANSWER),s.n=38;break;case 37:s.p=37,me=s.v,console.error(me),oe=m.DecisionCode.WRONG_ANSWER;case 38:s.n=32;break;case 39:s.n=41;break;case 40:s.p=40,De=s.v,ue.e(De);case 41:return s.p=41,ue.f(),s.f(41);case 42:return l.printTestCaseResult({testCaseId:te.id,decisionCode:oe,exitStatus:null!=(re=ie.status)?re:void 0,stdin:te.input,stdout:ie.stdout.slice(0,D)||void 0,stderr:ie.stderr.slice(0,D)||void 0,timeSeconds:ie.timeSeconds,memoryBytes:ie.memoryBytes,outputFiles:ae.length>0?ae:void 0}),s.n=43,n.cleanWorkingDirectory(R.cwd,Q);case 43:if(oe===m.DecisionCode.ACCEPTED){s.n=44;break}return s.a(3,45);case 44:s.n=20;break;case 45:s.n=47;break;case 46:s.p=46,ge=s.v,Y.e(ge);case 47:return s.p=47,Y.f(),s.f(47);case 48:return s.a(2)}},s,null,[[35,37],[31,40,41,42],[19,46,47,48],[14,16],[9,12]])}))).apply(this,arguments)}function f(){return(f=e.asyncToGenerator(e.regenerator().m(function r(t){var s,n,i,a,u,E,g,R,f,T,_,S,h,v,y,k,O,w,P,M,F,L,B,U,j;return e.regenerator().w(function(r){for(;;)switch(r.p=r.n){case 0:if((s=c.parseArgs(process.argv)).cwd){r.n=1;break}throw new Error("cwd argument required");case 1:return n=b.parse(s.params),r.n=2,C.readProblemMarkdownFrontMatter(t);case 2:return i=r.v,r.n=3,o.findEntryPointFile(s.cwd,n.language);case 3:if(a=r.v){r.n=4;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(n.language?": language: ".concat(n.language):"")}),r.a(2);case 4:if(u=d.findLanguageDefinitionByPath(a)){r.n=5;break}return l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),r.a(2);case 5:if(E=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!u.prebuild){r.n=10;break}return r.p=6,r.n=7,u.prebuild(s.cwd);case 7:return r.n=8,o.findEntryPointFile(s.cwd,n.language);case 8:g=r.v,r.n=10;break;case 9:return r.p=9,U=r.v,console.error("prebuild error",U),l.printTestCaseResult({testCaseId:"prebuild",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:U instanceof Error?U.message:String(U)}),r.a(2);case 10:if(R=null!=g?g:a,!u.buildCommand){r.n=14;break}if(r.p=11,f=u.buildCommand(R),T=I.spawnSyncWithTimeout(f[0],f.slice(1),{cwd:s.cwd,encoding:"utf8",env:E},10),_=m.DecisionCode.ACCEPTED,0!==T.status?_=m.DecisionCode.BUILD_ERROR:T.timeSeconds>10?_=m.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(T.stdout.length>D||T.stderr.length>D)&&(_=m.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),_===m.DecisionCode.ACCEPTED){r.n=12;break}return l.printTestCaseResult({testCaseId:"build",decisionCode:_,exitStatus:null!=(S=T.status)?S:void 0,stdout:T.stdout.slice(0,D)||void 0,stderr:T.stderr.slice(0,D)||void 0,timeSeconds:T.timeSeconds,memoryBytes:T.memoryBytes}),r.a(2);case 12:r.n=14;break;case 13:return r.p=13,j=r.v,console.error("build error",j),l.printTestCaseResult({testCaseId:"build",decisionCode:m.DecisionCode.BUILD_ERROR,stderr:j instanceof Error?j.message:String(j)}),r.a(2);case 14:return P=Math.max(10,(null!=(h=i.timeLimitMs)?h:0)/1e3),M=u.command(R),F=I.spawnSyncWithTimeout(M[0],M.slice(1),{cwd:s.cwd,encoding:"utf8",input:n.stdin,env:E},P),r.n=15,p.readOutputFiles(s.cwd,null!=(v=i.requiredOutputFilePaths)?v:[]);case 15:L=r.v,B=m.DecisionCode.ACCEPTED,0!==F.status?B=m.DecisionCode.RUNTIME_ERROR:F.timeSeconds>P?B=m.DecisionCode.TIME_LIMIT_EXCEEDED:F.memoryBytes>(null!=(y=i.memoryLimitByte)?y:Number.POSITIVE_INFINITY)?B=m.DecisionCode.MEMORY_LIMIT_EXCEEDED:F.stdout.length>D||F.stderr.length>D?B=m.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED:L.length<(null!=(k=null==(O=i.requiredOutputFilePaths)?void 0:O.length)?k:0)&&(B=m.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR),l.printTestCaseResult({testCaseId:"debug",decisionCode:B,exitStatus:null!=(w=F.status)?w:void 0,stdin:n.stdin,stdout:F.stdout.slice(0,D)||void 0,stderr:F.stderr.slice(0,D)||void 0,timeSeconds:F.timeSeconds,memoryBytes:F.memoryBytes,outputFiles:L.length>0?L:void 0});case 16:return r.a(2)}},r,null,[[11,13],[6,9]])}))).apply(this,arguments)}exports.stdioDebugPreset=function(e){return f.apply(this,arguments)},exports.stdioJudgePreset=function(e){return R.apply(this,arguments)};
//# sourceMappingURL=stdio.cjs.map
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/parseArgs.cjs"),n=require("../helpers/printTestCaseResult.cjs"),r=require("../types/decisionCode.cjs"),i=require("../helpers/cleanWorkingDirectory.cjs"),a=require("../helpers/copyTestCaseFileInput.cjs"),o=require("../helpers/findEntryPointFile.cjs"),s=require("../helpers/findLanguageDefinitionByPath.cjs"),c=require("../helpers/judgeByStaticAnalysis.cjs"),l=require("../helpers/readOutputFiles.cjs"),u=require("../helpers/readProblemMarkdownFrontMatter.cjs"),d=require("../helpers/readTestCases.cjs"),f=require("../helpers/spawnSyncWithTimeout.cjs"),p=require("../helpers/compareStdoutAsSpaceSeparatedTokens.cjs");let m=require("zod"),h=require("node:path");h=e.__toESM(h,1);let g=require("node:fs");g=e.__toESM(g,1);const _=5e4,v=m.z.object({language:m.z.union([m.z.string(),m.z.array(m.z.string())]).optional()}),y=v.extend({stdin:m.z.string().optional()});async function b(e){let m=t.parseArgs(process.argv);if(!m.cwd)throw Error(`cwd argument required`);let y=v.parse(m.params),b=await u.readProblemMarkdownFrontMatter(e),x=await d.readTestCases(h.default.join(e,`test_cases`)),S=await c.judgeByStaticAnalysis(m.cwd,b);if(S){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,...S});return}let C=await o.findEntryPointFile(m.cwd,y.language);if(!C){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${y.language?`: language: ${y.language}`:``}`});return}let w=s.findLanguageDefinitionByPath(C);if(!w){n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`});return}let T={...process.env,CI:``,FORCE_COLOR:`0`},E;if(w.prebuild)try{await w.prebuild(m.cwd),E=await o.findEntryPointFile(m.cwd,y.language)}catch(e){console.error(`prebuild error`,e),n.printTestCaseResult({testCaseId:x[0]?.id??`prebuild`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let D=E??C;if(w.buildCommand)try{let e=w.buildCommand(D),t=f.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:m.cwd,encoding:`utf8`,env:T},10),i=r.DecisionCode.ACCEPTED;if(t.status===0?t.timeSeconds>10?i=r.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(t.stdout.length>_||t.stderr.length>_)&&(i=r.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):i=r.DecisionCode.BUILD_ERROR,i!==r.DecisionCode.ACCEPTED){n.printTestCaseResult({testCaseId:x[0]?.id??`build`,decisionCode:i,exitStatus:t.status??void 0,stdout:t.stdout.slice(0,_)||void 0,stderr:t.stderr.slice(0,_)||void 0,timeSeconds:t.timeSeconds,memoryBytes:t.memoryBytes});return}}catch(e){console.error(`build error`,e),n.printTestCaseResult({testCaseId:x[0]?.id??`build`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let O=await i.snapshotWorkingDirectory(m.cwd);x.length===0&&n.printTestCaseResult({testCaseId:`default`,decisionCode:r.DecisionCode.ACCEPTED});for(let e of x){x.shared?.fileInputPath&&await a.copyTestCaseFileInput(x.shared.fileInputPath,m.cwd),e.fileInputPath&&await a.copyTestCaseFileInput(e.fileInputPath,m.cwd);let t=typeof b.timeLimitMs==`number`?b.timeLimitMs/1e3:2,o=w.command(D),s=f.spawnSyncWithTimeout(o[0],o.slice(1),{cwd:m.cwd,encoding:`utf8`,input:e.input,env:T},t),c=await l.readOutputFiles(m.cwd,b.requiredOutputFilePaths??[]),u=r.DecisionCode.ACCEPTED;if(s.status!==0)u=r.DecisionCode.RUNTIME_ERROR;else if(s.timeSeconds>t)u=r.DecisionCode.TIME_LIMIT_EXCEEDED;else if(s.memoryBytes>(b.memoryLimitByte??1/0))u=r.DecisionCode.MEMORY_LIMIT_EXCEEDED;else if(s.stdout.length>_||s.stderr.length>_)u=r.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;else if(c.length<(b.requiredOutputFilePaths?.length??0))u=r.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;else if(!p.compareStdoutAsSpaceSeparatedTokens(s.stdout,e.output??``))u=r.DecisionCode.WRONG_ANSWER;else if(e.fileOutputPath){let t=await g.default.promises.readdir(e.fileOutputPath,{withFileTypes:!0,recursive:!0});for(let n of t){if(!n.isFile())continue;let t=h.default.relative(e.fileOutputPath,n.parentPath),i=await g.default.promises.readFile(h.default.join(n.parentPath,n.name));try{(await g.default.promises.readFile(h.default.join(m.cwd,t,n.name))).compare(i)!==0&&(u=r.DecisionCode.WRONG_ANSWER)}catch(e){console.error(e),u=r.DecisionCode.WRONG_ANSWER}}}if(n.printTestCaseResult({testCaseId:e.id,decisionCode:u,exitStatus:s.status??void 0,stdin:e.input,stdout:s.stdout.slice(0,_)||void 0,stderr:s.stderr.slice(0,_)||void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes,outputFiles:c.length>0?c:void 0}),await i.cleanWorkingDirectory(m.cwd,O),u!==r.DecisionCode.ACCEPTED)break}}async function x(e){let i=t.parseArgs(process.argv);if(!i.cwd)throw Error(`cwd argument required`);let a=y.parse(i.params),c=await u.readProblemMarkdownFrontMatter(e),d=await o.findEntryPointFile(i.cwd,a.language);if(!d){n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${a.language?`: language: ${a.language}`:``}`});return}let p=s.findLanguageDefinitionByPath(d);if(!p){n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.WRONG_ANSWER,stderr:`unsupported language`});return}let m={...process.env,CI:``,FORCE_COLOR:`0`},h;if(p.prebuild)try{await p.prebuild(i.cwd),h=await o.findEntryPointFile(i.cwd,a.language)}catch(e){console.error(`prebuild error`,e),n.printTestCaseResult({testCaseId:`prebuild`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let g=h??d;if(p.buildCommand)try{let e=p.buildCommand(g),t=f.spawnSyncWithTimeout(e[0],e.slice(1),{cwd:i.cwd,encoding:`utf8`,env:m},10),a=r.DecisionCode.ACCEPTED;if(t.status===0?t.timeSeconds>10?a=r.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED:(t.stdout.length>_||t.stderr.length>_)&&(a=r.DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):a=r.DecisionCode.BUILD_ERROR,a!==r.DecisionCode.ACCEPTED){n.printTestCaseResult({testCaseId:`build`,decisionCode:a,exitStatus:t.status??void 0,stdout:t.stdout.slice(0,_)||void 0,stderr:t.stderr.slice(0,_)||void 0,timeSeconds:t.timeSeconds,memoryBytes:t.memoryBytes});return}}catch(e){console.error(`build error`,e),n.printTestCaseResult({testCaseId:`build`,decisionCode:r.DecisionCode.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}{let e=Math.max(10,(c.timeLimitMs??0)/1e3),t=p.command(g),o=f.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:i.cwd,encoding:`utf8`,input:a.stdin,env:m},e),s=await l.readOutputFiles(i.cwd,c.requiredOutputFilePaths??[]),u=r.DecisionCode.ACCEPTED;o.status===0?o.timeSeconds>e?u=r.DecisionCode.TIME_LIMIT_EXCEEDED:o.memoryBytes>(c.memoryLimitByte??1/0)?u=r.DecisionCode.MEMORY_LIMIT_EXCEEDED:o.stdout.length>_||o.stderr.length>_?u=r.DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED:s.length<(c.requiredOutputFilePaths?.length??0)&&(u=r.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR):u=r.DecisionCode.RUNTIME_ERROR,n.printTestCaseResult({testCaseId:`debug`,decisionCode:u,exitStatus:o.status??void 0,stdin:a.stdin,stdout:o.stdout.slice(0,_)||void 0,stderr:o.stderr.slice(0,_)||void 0,timeSeconds:o.timeSeconds,memoryBytes:o.memoryBytes,outputFiles:s.length>0?s:void 0})}}exports.stdioDebugPreset=x,exports.stdioJudgePreset=b;
//# sourceMappingURL=stdio.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"stdio.cjs","sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"names":["MAX_STDOUT_LENGTH","judgeParamsSchema","z","object","language","union","string","array","optional","debugParamsSchema","extend","stdin","_stdioJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","args","params","problemMarkdownFrontMatter","testCases","staticAnalysisTestCaseResult","_testCases$0$id","_testCases$","originalMainFilePath","_testCases$0$id2","_testCases$2","languageDefinition","_testCases$0$id3","_testCases$3","env","prebuiltMainFilePath","_testCases$0$id4","_testCases$4","mainFilePath","buildCommand","buildSpawnResult","decisionCode","_testCases$0$id5","_testCases$5","_buildSpawnResult$sta","_testCases$0$id6","_testCases$6","cwdSnapshot","_iterator","_step","_testCases$shared","_problemMarkdownFront","_problemMarkdownFront2","_problemMarkdownFront3","_problemMarkdownFront4","_testCase$output","_spawnResult$status","testCase","timeoutSeconds","command","spawnResult","outputFiles","_decisionCode","dirents","_iterator2","_step2","dirent","direntRelativePath","expected","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","id","a","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","console","error","BUILD_ERROR","message","String","spawnSyncWithTimeout","slice","encoding","ACCEPTED","status","timeSeconds","BUILD_TIME_LIMIT_EXCEEDED","stdout","length","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","exitStatus","undefined","memoryBytes","snapshotWorkingDirectory","_createForOfIteratorHelper","s","done","value","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","readOutputFiles","requiredOutputFilePaths","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","memoryLimitByte","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_OUTPUT_FILE_ERROR","compareStdoutAsSpaceSeparatedTokens","output","fileOutputPath","fs","promises","readdir","withFileTypes","recursive","isFile","relative","parentPath","readFile","name","compare","e","f","cleanWorkingDirectory","apply","this","arguments","_stdioDebugPreset","_callee2","_buildSpawnResult$sta2","_problemMarkdownFront5","_problemMarkdownFront6","_problemMarkdownFront7","_problemMarkdownFront8","_problemMarkdownFront9","_spawnResult$status2","_decisionCode2","_t6","_t7","_context2","Math","max","_x2","_x"],"mappings":"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"}
{"version":3,"file":"stdio.cjs","names":["z","parseArgs","readProblemMarkdownFrontMatter","readTestCases","path","judgeByStaticAnalysis","findEntryPointFile","DecisionCode","findLanguageDefinitionByPath","spawnSyncWithTimeout","snapshotWorkingDirectory","copyTestCaseFileInput","readOutputFiles","compareStdoutAsSpaceSeparatedTokens","fs","cleanWorkingDirectory"],"sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

import{asyncToGenerator as e,regenerator as r,objectSpread2 as t,createForOfIteratorHelper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"node:fs";import a from"node:path";import{z as i}from"zod";import{cleanWorkingDirectory as o,snapshotWorkingDirectory as d}from"../helpers/cleanWorkingDirectory.js";import{compareStdoutAsSpaceSeparatedTokens as u}from"../helpers/compareStdoutAsSpaceSeparatedTokens.js";import{copyTestCaseFileInput as l}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as c}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as p}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as m}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as E}from"../helpers/parseArgs.js";import{printTestCaseResult as I}from"../helpers/printTestCaseResult.js";import{readOutputFiles as f}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as b}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as g}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as C}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as _}from"../types/decisionCode.js";var R=5e4,v=i.object({language:i.union([i.string(),i.array(i.string())]).optional()}),h=v.extend({stdin:i.string().optional()});function S(e){return T.apply(this,arguments)}function T(){return(T=e(r().m(function e(i){var h,S,T,k,D,O,y,w,P,L,M,U,B,N,F,j,A,W,G,X,x,q,Q,Y,Z,H,V,z,J,K,$,ee,re,te,ne,se,ae,ie,oe,de,ue,le,ce,pe,me,Ee,Ie,fe,be,ge,Ce,_e,Re;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:if((h=E(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return S=v.parse(h.params),e.n=2,b(i);case 2:return T=e.v,e.n=3,g(a.join(i,"test_cases"));case 3:return k=e.v,e.n=4,m(h.cwd,T);case 4:if(!(D=e.v)){e.n=5;break}return I(t({testCaseId:null!=(O=null==(y=k[0])?void 0:y.id)?O:"prebuild"},D)),e.a(2);case 5:return e.n=6,c(h.cwd,S.language);case 6:if(w=e.v){e.n=7;break}return I({testCaseId:null!=(P=null==(L=k[0])?void 0:L.id)?P:"prebuild",decisionCode:_.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(S.language?": language: ".concat(S.language):"")}),e.a(2);case 7:if(M=p(w)){e.n=8;break}return I({testCaseId:null!=(U=null==(B=k[0])?void 0:B.id)?U:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 8:if(N=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!M.prebuild){e.n=13;break}return e.p=9,e.n=10,M.prebuild(h.cwd);case 10:return e.n=11,c(h.cwd,S.language);case 11:F=e.v,e.n=13;break;case 12:return e.p=12,be=e.v,console.error("prebuild error",be),I({testCaseId:null!=(j=null==(A=k[0])?void 0:A.id)?j:"prebuild",decisionCode:_.BUILD_ERROR,stderr:be instanceof Error?be.message:String(be)}),e.a(2);case 13:if(W=null!=F?F:w,!M.buildCommand){e.n=17;break}if(e.p=14,G=M.buildCommand(W),X=C(G[0],G.slice(1),{cwd:h.cwd,encoding:"utf8",env:N},10),x=_.ACCEPTED,0!==X.status?x=_.BUILD_ERROR:X.timeSeconds>10?x=_.BUILD_TIME_LIMIT_EXCEEDED:(X.stdout.length>R||X.stderr.length>R)&&(x=_.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),x===_.ACCEPTED){e.n=15;break}return I({testCaseId:null!=(q=null==(Q=k[0])?void 0:Q.id)?q:"build",decisionCode:x,exitStatus:null!=(Y=X.status)?Y:void 0,stdout:X.stdout.slice(0,R)||void 0,stderr:X.stderr.slice(0,R)||void 0,timeSeconds:X.timeSeconds,memoryBytes:X.memoryBytes}),e.a(2);case 15:e.n=17;break;case 16:return e.p=16,ge=e.v,console.error("build error",ge),I({testCaseId:null!=(Z=null==(H=k[0])?void 0:H.id)?Z:"build",decisionCode:_.BUILD_ERROR,stderr:ge instanceof Error?ge.message:String(ge)}),e.a(2);case 17:return e.n=18,d(h.cwd);case 18:V=e.v,0===k.length&&I({testCaseId:"default",decisionCode:_.ACCEPTED}),z=n(k),e.p=19,z.s();case 20:if((J=z.n()).done){e.n=45;break}if(ae=J.value,null==(K=k.shared)||!K.fileInputPath){e.n=21;break}return e.n=21,l(k.shared.fileInputPath,h.cwd);case 21:if(!ae.fileInputPath){e.n=22;break}return e.n=22,l(ae.fileInputPath,h.cwd);case 22:return ie="number"==typeof T.timeLimitMs?T.timeLimitMs/1e3:2,oe=M.command(W),de=C(oe[0],oe.slice(1),{cwd:h.cwd,encoding:"utf8",input:ae.input,env:N},ie),e.n=23,f(h.cwd,null!=($=T.requiredOutputFilePaths)?$:[]);case 23:if(ue=e.v,le=_.ACCEPTED,0===de.status){e.n=24;break}le=_.RUNTIME_ERROR,e.n=42;break;case 24:if(!(de.timeSeconds>ie)){e.n=25;break}le=_.TIME_LIMIT_EXCEEDED,e.n=42;break;case 25:if(!(de.memoryBytes>(null!=(ee=T.memoryLimitByte)?ee:Number.POSITIVE_INFINITY))){e.n=26;break}le=_.MEMORY_LIMIT_EXCEEDED,e.n=42;break;case 26:if(!(de.stdout.length>R||de.stderr.length>R)){e.n=27;break}le=_.OUTPUT_SIZE_LIMIT_EXCEEDED,e.n=42;break;case 27:if(!(ue.length<(null!=(re=null==(te=T.requiredOutputFilePaths)?void 0:te.length)?re:0))){e.n=28;break}le=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR,e.n=42;break;case 28:if(u(de.stdout,null!=(ne=ae.output)?ne:"")){e.n=29;break}le=_.WRONG_ANSWER,e.n=42;break;case 29:if(!ae.fileOutputPath){e.n=42;break}return e.n=30,s.promises.readdir(ae.fileOutputPath,{withFileTypes:!0,recursive:!0});case 30:ce=e.v,pe=n(ce),e.p=31,pe.s();case 32:if((me=pe.n()).done){e.n=39;break}if((Ee=me.value).isFile()){e.n=33;break}return e.a(3,38);case 33:return Ie=a.relative(ae.fileOutputPath,Ee.parentPath),e.n=34,s.promises.readFile(a.join(Ee.parentPath,Ee.name));case 34:return fe=e.v,e.p=35,e.n=36,s.promises.readFile(a.join(h.cwd,Ie,Ee.name));case 36:0!==e.v.compare(fe)&&(le=_.WRONG_ANSWER),e.n=38;break;case 37:e.p=37,Ce=e.v,console.error(Ce),le=_.WRONG_ANSWER;case 38:e.n=32;break;case 39:e.n=41;break;case 40:e.p=40,_e=e.v,pe.e(_e);case 41:return e.p=41,pe.f(),e.f(41);case 42:return I({testCaseId:ae.id,decisionCode:le,exitStatus:null!=(se=de.status)?se:void 0,stdin:ae.input,stdout:de.stdout.slice(0,R)||void 0,stderr:de.stderr.slice(0,R)||void 0,timeSeconds:de.timeSeconds,memoryBytes:de.memoryBytes,outputFiles:ue.length>0?ue:void 0}),e.n=43,o(h.cwd,V);case 43:if(le===_.ACCEPTED){e.n=44;break}return e.a(3,45);case 44:e.n=20;break;case 45:e.n=47;break;case 46:e.p=46,Re=e.v,z.e(Re);case 47:return e.p=47,z.f(),e.f(47);case 48:return e.a(2)}},e,null,[[35,37],[31,40,41,42],[19,46,47,48],[14,16],[9,12]])}))).apply(this,arguments)}function k(e){return D.apply(this,arguments)}function D(){return(D=e(r().m(function e(n){var s,a,i,o,d,u,l,m,g,v,S,T,k,D,O,y,w,P,L,M,U,B,N,F,j;return r().w(function(e){for(;;)switch(e.p=e.n){case 0:if((s=E(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return a=h.parse(s.params),e.n=2,b(n);case 2:return i=e.v,e.n=3,c(s.cwd,a.language);case 3:if(o=e.v){e.n=4;break}return I({testCaseId:"prebuild",decisionCode:_.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:"main file not found".concat(a.language?": language: ".concat(a.language):"")}),e.a(2);case 4:if(d=p(o)){e.n=5;break}return I({testCaseId:"prebuild",decisionCode:_.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 5:if(u=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),!d.prebuild){e.n=10;break}return e.p=6,e.n=7,d.prebuild(s.cwd);case 7:return e.n=8,c(s.cwd,a.language);case 8:l=e.v,e.n=10;break;case 9:return e.p=9,F=e.v,console.error("prebuild error",F),I({testCaseId:"prebuild",decisionCode:_.BUILD_ERROR,stderr:F instanceof Error?F.message:String(F)}),e.a(2);case 10:if(m=null!=l?l:o,!d.buildCommand){e.n=14;break}if(e.p=11,g=d.buildCommand(m),v=C(g[0],g.slice(1),{cwd:s.cwd,encoding:"utf8",env:u},10),S=_.ACCEPTED,0!==v.status?S=_.BUILD_ERROR:v.timeSeconds>10?S=_.BUILD_TIME_LIMIT_EXCEEDED:(v.stdout.length>R||v.stderr.length>R)&&(S=_.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED),S===_.ACCEPTED){e.n=12;break}return I({testCaseId:"build",decisionCode:S,exitStatus:null!=(T=v.status)?T:void 0,stdout:v.stdout.slice(0,R)||void 0,stderr:v.stderr.slice(0,R)||void 0,timeSeconds:v.timeSeconds,memoryBytes:v.memoryBytes}),e.a(2);case 12:e.n=14;break;case 13:return e.p=13,j=e.v,console.error("build error",j),I({testCaseId:"build",decisionCode:_.BUILD_ERROR,stderr:j instanceof Error?j.message:String(j)}),e.a(2);case 14:return L=Math.max(10,(null!=(k=i.timeLimitMs)?k:0)/1e3),M=d.command(m),U=C(M[0],M.slice(1),{cwd:s.cwd,encoding:"utf8",input:a.stdin,env:u},L),e.n=15,f(s.cwd,null!=(D=i.requiredOutputFilePaths)?D:[]);case 15:B=e.v,N=_.ACCEPTED,0!==U.status?N=_.RUNTIME_ERROR:U.timeSeconds>L?N=_.TIME_LIMIT_EXCEEDED:U.memoryBytes>(null!=(O=i.memoryLimitByte)?O:Number.POSITIVE_INFINITY)?N=_.MEMORY_LIMIT_EXCEEDED:U.stdout.length>R||U.stderr.length>R?N=_.OUTPUT_SIZE_LIMIT_EXCEEDED:B.length<(null!=(y=null==(w=i.requiredOutputFilePaths)?void 0:w.length)?y:0)&&(N=_.MISSING_REQUIRED_OUTPUT_FILE_ERROR),I({testCaseId:"debug",decisionCode:N,exitStatus:null!=(P=U.status)?P:void 0,stdin:a.stdin,stdout:U.stdout.slice(0,R)||void 0,stderr:U.stderr.slice(0,R)||void 0,timeSeconds:U.timeSeconds,memoryBytes:U.memoryBytes,outputFiles:B.length>0?B:void 0});case 16:return e.a(2)}},e,null,[[11,13],[6,9]])}))).apply(this,arguments)}export{k as stdioDebugPreset,S as stdioJudgePreset};
//# sourceMappingURL=stdio.js.map
import{parseArgs as e}from"../helpers/parseArgs.js";import{printTestCaseResult as t}from"../helpers/printTestCaseResult.js";import{DecisionCode as n}from"../types/decisionCode.js";import{cleanWorkingDirectory as r,snapshotWorkingDirectory as i}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as a}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as o}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as s}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as c}from"../helpers/judgeByStaticAnalysis.js";import{readOutputFiles as l}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as u}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as d}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as f}from"../helpers/spawnSyncWithTimeout.js";import{compareStdoutAsSpaceSeparatedTokens as p}from"../helpers/compareStdoutAsSpaceSeparatedTokens.js";import{z as m}from"zod";import h from"node:path";import g from"node:fs";const _=5e4,v=m.object({language:m.union([m.string(),m.array(m.string())]).optional()}),y=v.extend({stdin:m.string().optional()});async function b(m){let y=e(process.argv);if(!y.cwd)throw Error(`cwd argument required`);let b=v.parse(y.params),x=await u(m),S=await d(h.join(m,`test_cases`)),C=await c(y.cwd,x);if(C){t({testCaseId:S[0]?.id??`prebuild`,...C});return}let w=await o(y.cwd,b.language);if(!w){t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${b.language?`: language: ${b.language}`:``}`});return}let T=s(w);if(!T){t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.WRONG_ANSWER,stderr:`unsupported language`});return}let E={...process.env,CI:``,FORCE_COLOR:`0`},D;if(T.prebuild)try{await T.prebuild(y.cwd),D=await o(y.cwd,b.language)}catch(e){console.error(`prebuild error`,e),t({testCaseId:S[0]?.id??`prebuild`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let O=D??w;if(T.buildCommand)try{let e=T.buildCommand(O),r=f(e[0],e.slice(1),{cwd:y.cwd,encoding:`utf8`,env:E},10),i=n.ACCEPTED;if(r.status===0?r.timeSeconds>10?i=n.BUILD_TIME_LIMIT_EXCEEDED:(r.stdout.length>_||r.stderr.length>_)&&(i=n.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):i=n.BUILD_ERROR,i!==n.ACCEPTED){t({testCaseId:S[0]?.id??`build`,decisionCode:i,exitStatus:r.status??void 0,stdout:r.stdout.slice(0,_)||void 0,stderr:r.stderr.slice(0,_)||void 0,timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes});return}}catch(e){console.error(`build error`,e),t({testCaseId:S[0]?.id??`build`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let k=await i(y.cwd);S.length===0&&t({testCaseId:`default`,decisionCode:n.ACCEPTED});for(let e of S){S.shared?.fileInputPath&&await a(S.shared.fileInputPath,y.cwd),e.fileInputPath&&await a(e.fileInputPath,y.cwd);let i=typeof x.timeLimitMs==`number`?x.timeLimitMs/1e3:2,o=T.command(O),s=f(o[0],o.slice(1),{cwd:y.cwd,encoding:`utf8`,input:e.input,env:E},i),c=await l(y.cwd,x.requiredOutputFilePaths??[]),u=n.ACCEPTED;if(s.status!==0)u=n.RUNTIME_ERROR;else if(s.timeSeconds>i)u=n.TIME_LIMIT_EXCEEDED;else if(s.memoryBytes>(x.memoryLimitByte??1/0))u=n.MEMORY_LIMIT_EXCEEDED;else if(s.stdout.length>_||s.stderr.length>_)u=n.OUTPUT_SIZE_LIMIT_EXCEEDED;else if(c.length<(x.requiredOutputFilePaths?.length??0))u=n.MISSING_REQUIRED_OUTPUT_FILE_ERROR;else if(!p(s.stdout,e.output??``))u=n.WRONG_ANSWER;else if(e.fileOutputPath){let t=await g.promises.readdir(e.fileOutputPath,{withFileTypes:!0,recursive:!0});for(let r of t){if(!r.isFile())continue;let t=h.relative(e.fileOutputPath,r.parentPath),i=await g.promises.readFile(h.join(r.parentPath,r.name));try{(await g.promises.readFile(h.join(y.cwd,t,r.name))).compare(i)!==0&&(u=n.WRONG_ANSWER)}catch(e){console.error(e),u=n.WRONG_ANSWER}}}if(t({testCaseId:e.id,decisionCode:u,exitStatus:s.status??void 0,stdin:e.input,stdout:s.stdout.slice(0,_)||void 0,stderr:s.stderr.slice(0,_)||void 0,timeSeconds:s.timeSeconds,memoryBytes:s.memoryBytes,outputFiles:c.length>0?c:void 0}),await r(y.cwd,k),u!==n.ACCEPTED)break}}async function x(r){let i=e(process.argv);if(!i.cwd)throw Error(`cwd argument required`);let a=y.parse(i.params),c=await u(r),d=await o(i.cwd,a.language);if(!d){t({testCaseId:`prebuild`,decisionCode:n.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:`main file not found${a.language?`: language: ${a.language}`:``}`});return}let p=s(d);if(!p){t({testCaseId:`prebuild`,decisionCode:n.WRONG_ANSWER,stderr:`unsupported language`});return}let m={...process.env,CI:``,FORCE_COLOR:`0`},h;if(p.prebuild)try{await p.prebuild(i.cwd),h=await o(i.cwd,a.language)}catch(e){console.error(`prebuild error`,e),t({testCaseId:`prebuild`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}let g=h??d;if(p.buildCommand)try{let e=p.buildCommand(g),r=f(e[0],e.slice(1),{cwd:i.cwd,encoding:`utf8`,env:m},10),a=n.ACCEPTED;if(r.status===0?r.timeSeconds>10?a=n.BUILD_TIME_LIMIT_EXCEEDED:(r.stdout.length>_||r.stderr.length>_)&&(a=n.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED):a=n.BUILD_ERROR,a!==n.ACCEPTED){t({testCaseId:`build`,decisionCode:a,exitStatus:r.status??void 0,stdout:r.stdout.slice(0,_)||void 0,stderr:r.stderr.slice(0,_)||void 0,timeSeconds:r.timeSeconds,memoryBytes:r.memoryBytes});return}}catch(e){console.error(`build error`,e),t({testCaseId:`build`,decisionCode:n.BUILD_ERROR,stderr:e instanceof Error?e.message:String(e)});return}{let e=Math.max(10,(c.timeLimitMs??0)/1e3),r=p.command(g),o=f(r[0],r.slice(1),{cwd:i.cwd,encoding:`utf8`,input:a.stdin,env:m},e),s=await l(i.cwd,c.requiredOutputFilePaths??[]),u=n.ACCEPTED;o.status===0?o.timeSeconds>e?u=n.TIME_LIMIT_EXCEEDED:o.memoryBytes>(c.memoryLimitByte??1/0)?u=n.MEMORY_LIMIT_EXCEEDED:o.stdout.length>_||o.stderr.length>_?u=n.OUTPUT_SIZE_LIMIT_EXCEEDED:s.length<(c.requiredOutputFilePaths?.length??0)&&(u=n.MISSING_REQUIRED_OUTPUT_FILE_ERROR):u=n.RUNTIME_ERROR,t({testCaseId:`debug`,decisionCode:u,exitStatus:o.status??void 0,stdin:a.stdin,stdout:o.stdout.slice(0,_)||void 0,stderr:o.stderr.slice(0,_)||void 0,timeSeconds:o.timeSeconds,memoryBytes:o.memoryBytes,outputFiles:s.length>0?s:void 0})}}export{x as stdioDebugPreset,b as stdioJudgePreset};
//# sourceMappingURL=stdio.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"stdio.js","sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"names":["MAX_STDOUT_LENGTH","judgeParamsSchema","z","object","language","union","string","array","optional","debugParamsSchema","extend","stdin","stdioJudgePreset","_x","_stdioJudgePreset","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","problemDir","args","params","problemMarkdownFrontMatter","testCases","staticAnalysisTestCaseResult","_testCases$0$id","_testCases$","originalMainFilePath","_testCases$0$id2","_testCases$2","languageDefinition","_testCases$0$id3","_testCases$3","env","prebuiltMainFilePath","_testCases$0$id4","_testCases$4","mainFilePath","buildCommand","buildSpawnResult","decisionCode","_testCases$0$id5","_testCases$5","_buildSpawnResult$sta","_testCases$0$id6","_testCases$6","cwdSnapshot","_iterator","_step","_testCases$shared","_problemMarkdownFront","_problemMarkdownFront2","_problemMarkdownFront3","_problemMarkdownFront4","_testCase$output","_spawnResult$status","testCase","timeoutSeconds","command","spawnResult","outputFiles","_decisionCode","dirents","_iterator2","_step2","dirent","direntRelativePath","expected","_t","_t2","_t3","_t4","_t5","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","path","join","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","id","a","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","stderr","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","prebuild","console","error","BUILD_ERROR","message","String","spawnSyncWithTimeout","slice","encoding","ACCEPTED","status","timeSeconds","BUILD_TIME_LIMIT_EXCEEDED","stdout","length","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","exitStatus","undefined","memoryBytes","snapshotWorkingDirectory","_createForOfIteratorHelper","s","done","value","shared","fileInputPath","copyTestCaseFileInput","timeLimitMs","input","readOutputFiles","requiredOutputFilePaths","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","memoryLimitByte","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_OUTPUT_FILE_ERROR","compareStdoutAsSpaceSeparatedTokens","output","fileOutputPath","fs","promises","readdir","withFileTypes","recursive","isFile","relative","parentPath","readFile","name","compare","e","f","cleanWorkingDirectory","stdioDebugPreset","_x2","_stdioDebugPreset","_callee2","_buildSpawnResult$sta2","_problemMarkdownFront5","_problemMarkdownFront6","_problemMarkdownFront7","_problemMarkdownFront8","_problemMarkdownFront9","_spawnResult$status2","_decisionCode2","_t6","_t7","_context2","Math","max"],"mappings":"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"}
{"version":3,"file":"stdio.js","names":[],"sources":["../../src/presets/stdio.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { compareStdoutAsSpaceSeparatedTokens } from '../helpers/compareStdoutAsSpaceSeparatedTokens.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 2;\nconst DEBUG_DEFAULT_TIMEOUT_SECONDS = 10;\n\nconst MAX_STDOUT_LENGTH = 50_000;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nconst debugParamsSchema = judgeParamsSchema.extend({\n stdin: z.string().optional(),\n});\n\n/**\n * A preset judge function using stdin and stdout as test cases.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { stdioJudgePreset } from 'judge-utils/presets/stdio';\n *\n * await stdioJudgePreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/java\n * ```\n *\n * Run with the optional parameters:\n * ```bash\n * bun judge.ts model_answers/java '{ \"language\": \"javascript\" }'\n * ```\n */\nexport async function stdioJudgePreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const testCases = await readTestCases(path.join(problemDir, 'test_cases'));\n\n const staticAnalysisTestCaseResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisTestCaseResult) {\n printTestCaseResult({ testCaseId: testCases[0]?.id ?? 'prebuild', ...staticAnalysisTestCaseResult });\n return;\n }\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: testCases[0]?.id ?? 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n\n if (testCases.length === 0) {\n printTestCaseResult({ testCaseId: 'default', decisionCode: DecisionCode.ACCEPTED });\n }\n\n for (const testCase of testCases) {\n // prepare test case\n if (testCases.shared?.fileInputPath) await copyTestCaseFileInput(testCases.shared.fileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n // run\n const timeoutSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : JUDGE_DEFAULT_TIMEOUT_SECONDS;\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: testCase.input, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n // calculate decision\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n } else if (!compareStdoutAsSpaceSeparatedTokens(spawnResult.stdout, testCase.output ?? '')) {\n decisionCode = DecisionCode.WRONG_ANSWER;\n } else if (testCase.fileOutputPath) {\n const dirents = await fs.promises.readdir(testCase.fileOutputPath, { withFileTypes: true, recursive: true });\n for (const dirent of dirents) {\n if (!dirent.isFile()) continue;\n const direntRelativePath = path.relative(testCase.fileOutputPath, dirent.parentPath);\n const expected = await fs.promises.readFile(path.join(dirent.parentPath, dirent.name));\n try {\n const received = await fs.promises.readFile(path.join(args.cwd, direntRelativePath, dirent.name));\n if (received.compare(expected) !== 0) decisionCode = DecisionCode.WRONG_ANSWER;\n } catch (error) {\n console.error(error);\n decisionCode = DecisionCode.WRONG_ANSWER;\n }\n }\n }\n\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: testCase.input,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n\n // clean up\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n}\n\n/**\n * A preset debug function using stdin and stdout as test cases.\n *\n * @example\n * Create `debug.ts`:\n * ```ts\n * import { stdioDebugPreset } from 'judge-utils/presets/stdio';\n *\n * await stdioDebugPreset(import.meta.dirname);\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun debug.ts model_answers/java '{ \"stdin\": \"1 2\" }'\n * ```\n */\nexport async function stdioDebugPreset(problemDir: string): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = debugParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n\n const originalMainFilePath = await findEntryPointFile(args.cwd, params.language);\n if (!originalMainFilePath) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(originalMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n // `CI` changes affects Chainlit. `FORCE_COLOR` affects Bun.\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let prebuiltMainFilePath: string | undefined;\n\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n prebuiltMainFilePath = await findEntryPointFile(args.cwd, params.language);\n } catch (error) {\n console.error('prebuild error', error);\n\n printTestCaseResult({\n testCaseId: 'prebuild',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n const mainFilePath = prebuiltMainFilePath ?? originalMainFilePath;\n\n if (languageDefinition.buildCommand) {\n try {\n const buildCommand = languageDefinition.buildCommand(mainFilePath);\n\n const buildSpawnResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: args.cwd, encoding: 'utf8', env },\n BUILD_TIMEOUT_SECONDS\n );\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (buildSpawnResult.status !== 0) {\n decisionCode = DecisionCode.BUILD_ERROR;\n } else if (buildSpawnResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n decisionCode = DecisionCode.BUILD_TIME_LIMIT_EXCEEDED;\n } else if (\n buildSpawnResult.stdout.length > MAX_STDOUT_LENGTH ||\n buildSpawnResult.stderr.length > MAX_STDOUT_LENGTH\n ) {\n decisionCode = DecisionCode.BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED;\n }\n\n if (decisionCode !== DecisionCode.ACCEPTED) {\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode,\n exitStatus: buildSpawnResult.status ?? undefined,\n stdout: buildSpawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: buildSpawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: buildSpawnResult.timeSeconds,\n memoryBytes: buildSpawnResult.memoryBytes,\n });\n return;\n }\n } catch (error) {\n console.error('build error', error);\n\n printTestCaseResult({\n testCaseId: 'build',\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n }\n\n {\n const timeoutSeconds = Math.max(\n DEBUG_DEFAULT_TIMEOUT_SECONDS,\n (problemMarkdownFrontMatter.timeLimitMs ?? 0) / 1000\n );\n\n const command = languageDefinition.command(mainFilePath);\n\n const spawnResult = spawnSyncWithTimeout(\n command[0],\n command.slice(1),\n { cwd: args.cwd, encoding: 'utf8', input: params.stdin, env },\n timeoutSeconds\n );\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n\n let decisionCode: DecisionCode = DecisionCode.ACCEPTED;\n\n if (spawnResult.status !== 0) {\n decisionCode = DecisionCode.RUNTIME_ERROR;\n } else if (spawnResult.timeSeconds > timeoutSeconds) {\n decisionCode = DecisionCode.TIME_LIMIT_EXCEEDED;\n } else if (spawnResult.memoryBytes > (problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)) {\n decisionCode = DecisionCode.MEMORY_LIMIT_EXCEEDED;\n } else if (spawnResult.stdout.length > MAX_STDOUT_LENGTH || spawnResult.stderr.length > MAX_STDOUT_LENGTH) {\n decisionCode = DecisionCode.OUTPUT_SIZE_LIMIT_EXCEEDED;\n } else if (outputFiles.length < (problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0)) {\n decisionCode = DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR;\n }\n\n printTestCaseResult({\n testCaseId: 'debug',\n decisionCode,\n exitStatus: spawnResult.status ?? undefined,\n stdin: params.stdin,\n stdout: spawnResult.stdout.slice(0, MAX_STDOUT_LENGTH) || undefined,\n stderr: spawnResult.stderr.slice(0, MAX_STDOUT_LENGTH) || undefined,\n timeSeconds: spawnResult.timeSeconds,\n memoryBytes: spawnResult.memoryBytes,\n outputFiles: outputFiles.length > 0 ? outputFiles : undefined,\n });\n }\n}\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";exports.DecisionCode={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};
//# sourceMappingURL=decisionCode.cjs.map
"use strict";const e={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};exports.DecisionCode=e;
//# sourceMappingURL=decisionCode.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"decisionCode.cjs","sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"names":["WAITING_JUDGE","JUDGE_NOT_AVAILABLE","WRONG_ANSWER","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","PRESENTATION_ERROR","FORBIDDEN_PATTERNS_IN_CODE_ERROR","REQUIRED_PATTERNS_IN_CODE_ERROR","BUILD_ERROR","BUILD_TIME_LIMIT_EXCEEDED","BUILD_MEMORY_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","MISSING_REQUIRED_OUTPUT_FILE_ERROR","ACCEPTED"],"mappings":"kCAA4B,CAE1BA,cAAe,EAGfC,oBAAqB,EAGrBC,aAAc,IAGdC,cAAe,KAGfC,oBAAqB,KAGrBC,sBAAuB,KAGvBC,2BAA4B,KAG5BC,mBAAoB,KAGpBC,iCAAkC,KAGlCC,gCAAiC,KAGjCC,YAAa,KAGbC,0BAA2B,KAG3BC,4BAA6B,KAG7BC,iCAAkC,KAGlCC,uCAAwC,KAGxCC,mCAAoC,KAOpCC,SAAU"}
{"version":3,"file":"decisionCode.cjs","names":[],"sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"mappings":"aAAA,MAAa,EAAe,CAE1B,cAAe,EAGf,oBAAqB,EAGrB,aAAc,IAGd,cAAe,KAGf,oBAAqB,KAGrB,sBAAuB,KAGvB,2BAA4B,KAG5B,mBAAoB,KAGpB,iCAAkC,KAGlC,gCAAiC,KAGjC,YAAa,KAGb,0BAA2B,KAG3B,4BAA6B,KAG7B,iCAAkC,KAGlC,uCAAwC,KAGxC,mCAAoC,KAOpC,SAAU,GACZ"}

@@ -1,2 +0,2 @@

var E={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};export{E as DecisionCode};
//# sourceMappingURL=decisionCode.js.map
const e={WAITING_JUDGE:0,JUDGE_NOT_AVAILABLE:1,WRONG_ANSWER:1e3,RUNTIME_ERROR:1001,TIME_LIMIT_EXCEEDED:1002,MEMORY_LIMIT_EXCEEDED:1003,OUTPUT_SIZE_LIMIT_EXCEEDED:1004,PRESENTATION_ERROR:1005,FORBIDDEN_PATTERNS_IN_CODE_ERROR:1006,REQUIRED_PATTERNS_IN_CODE_ERROR:1007,BUILD_ERROR:1100,BUILD_TIME_LIMIT_EXCEEDED:1101,BUILD_MEMORY_LIMIT_EXCEEDED:1102,BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED:1103,MISSING_REQUIRED_SUBMISSION_FILE_ERROR:1201,MISSING_REQUIRED_OUTPUT_FILE_ERROR:1202,ACCEPTED:2e3};export{e as DecisionCode};
//# sourceMappingURL=decisionCode.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"decisionCode.js","sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"names":["DecisionCode","WAITING_JUDGE","JUDGE_NOT_AVAILABLE","WRONG_ANSWER","RUNTIME_ERROR","TIME_LIMIT_EXCEEDED","MEMORY_LIMIT_EXCEEDED","OUTPUT_SIZE_LIMIT_EXCEEDED","PRESENTATION_ERROR","FORBIDDEN_PATTERNS_IN_CODE_ERROR","REQUIRED_PATTERNS_IN_CODE_ERROR","BUILD_ERROR","BUILD_TIME_LIMIT_EXCEEDED","BUILD_MEMORY_LIMIT_EXCEEDED","BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","MISSING_REQUIRED_OUTPUT_FILE_ERROR","ACCEPTED"],"mappings":"AAAO,IAAMA,EAAe,CAE1BC,cAAe,EAGfC,oBAAqB,EAGrBC,aAAc,IAGdC,cAAe,KAGfC,oBAAqB,KAGrBC,sBAAuB,KAGvBC,2BAA4B,KAG5BC,mBAAoB,KAGpBC,iCAAkC,KAGlCC,gCAAiC,KAGjCC,YAAa,KAGbC,0BAA2B,KAG3BC,4BAA6B,KAG7BC,iCAAkC,KAGlCC,uCAAwC,KAGxCC,mCAAoC,KAOpCC,SAAU"}
{"version":3,"file":"decisionCode.js","names":[],"sources":["../../src/types/decisionCode.ts"],"sourcesContent":["export const DecisionCode = {\n /** ジャッジ待ち */\n WAITING_JUDGE: 0,\n\n /** ジャッジ利用不可 */\n JUDGE_NOT_AVAILABLE: 1,\n\n /** 不正解 */\n WRONG_ANSWER: 1000,\n\n /** 実行時エラー */\n RUNTIME_ERROR: 1001,\n\n /** 時間制限超過 */\n TIME_LIMIT_EXCEEDED: 1002,\n\n /** メモリ制限超過 */\n MEMORY_LIMIT_EXCEEDED: 1003,\n\n /** 出力サイズ制限超過 */\n OUTPUT_SIZE_LIMIT_EXCEEDED: 1004,\n\n /** 出力形式エラー */\n PRESENTATION_ERROR: 1005,\n\n /** コード中の禁止された表現 */\n FORBIDDEN_PATTERNS_IN_CODE_ERROR: 1006,\n\n /** コード中の必要な表現 */\n REQUIRED_PATTERNS_IN_CODE_ERROR: 1007,\n\n /** ビルドエラー */\n BUILD_ERROR: 1100,\n\n /** ビルド時間制限超過 */\n BUILD_TIME_LIMIT_EXCEEDED: 1101,\n\n /** ビルドメモリ制限超過 */\n BUILD_MEMORY_LIMIT_EXCEEDED: 1102,\n\n /** ビルド時の出力サイズ制限超過 */\n BUILD_OUTPUT_SIZE_LIMIT_EXCEEDED: 1103,\n\n /** 必須ファイル不足 */\n MISSING_REQUIRED_SUBMISSION_FILE_ERROR: 1201,\n\n /** 必須出力ファイル不足 */\n MISSING_REQUIRED_OUTPUT_FILE_ERROR: 1202,\n\n /**\n * 受理\n *\n * 最大の値であり、降順で取得したときに最初に見つかることが保証されている。\n */\n ACCEPTED: 2000,\n} as const;\n\nexport type DecisionCode = (typeof DecisionCode)[keyof typeof DecisionCode];\n"],"mappings":"AAAA,MAAa,EAAe,CAE1B,cAAe,EAGf,oBAAqB,EAGrB,aAAc,IAGd,cAAe,KAGf,oBAAqB,KAGrB,sBAAuB,KAGvB,2BAA4B,KAG5B,mBAAoB,KAGpB,iCAAkC,KAGlC,gCAAiC,KAGjC,YAAa,KAGb,0BAA2B,KAG3B,4BAA6B,KAG7B,iCAAkC,KAGlC,uCAAwC,KAGxC,mCAAoC,KAOpC,SAAU,GACZ"}

@@ -1,2 +0,11 @@

"use strict";var n,e,o=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:fs"),t=require("node:path"),s=require("../helpers/removeCommentsInSourceCode.cjs"),i={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},c={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},a={c:{fileExtensions:[".c"],buildCommand:function(n){return["gcc","--std=c17","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:i},cpp:{fileExtensions:[".cpp"],buildCommand:function(n){return["g++","--std=c++20","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:i},csharp:{fileExtensions:[".cs"],prebuild:(e=o.asyncToGenerator(o.regenerator().m(function n(e){return o.regenerator().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,r.promises.writeFile(t.join(e,"Main.csproj"),'<Project Sdk="Microsoft.NET.Sdk">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>');case 1:return n.a(2)}},n)})),function(n){return e.apply(this,arguments)}),buildCommand:function(){return["dotnet","build","Main.csproj","--configuration","Release","--verbosity","quiet"]},command:function(){return["dotnet","bin/Release/net8.0/Main.dll"]},grammer:i},css:{fileExtensions:[".css"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[".dart"],buildCommand:function(n){return["dart","compile","exe",n,"-o","main"]},command:function(){return["./main"]},grammer:i},java:{fileExtensions:[".java"],prebuild:(n=o.asyncToGenerator(o.regenerator().m(function n(e){var c,a,m,u,l,p,f,d,g,b,x;return o.regenerator().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=/\bpublic\s+class\s+(\w+)\b/,b=o.createForOfIteratorHelper,n.n=1,r.promises.readdir(e,{withFileTypes:!0});case 1:a=b(n.v),n.p=2,a.s();case 3:if((m=a.n()).done){n.n=7;break}if((l=m.value).isFile()&&l.name.endsWith(".java")){n.n=4;break}return n.a(3,6);case 4:return n.n=5,r.promises.readFile(t.join(e,l.name),"utf8");case 5:if(p=n.v,f=null!=(u=c.exec(s.removeCommentsInSourceCode(i,p)))?u:[],d=o.slicedToArray(f,2),!(g=d[1])){n.n=6;break}return n.n=6,r.promises.rename(t.join(e,l.name),t.join(e,"".concat(g,".java")));case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,x=n.v,a.e(x);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])})),function(e){return n.apply(this,arguments)}),buildCommand:function(n){return["javac",n]},command:function(n){return["java","-Xmx1024m",n.replace(/\.java$/,"")]},grammer:i},javascript:{fileExtensions:[".js",".cjs",".mjs"],command:function(n){return["bun",n]},grammer:c},jsp:{fileExtensions:[".jsp"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[".hs"],buildCommand:function(n){return["ghc","-o","main",n]},command:function(){return["./main"]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[".html"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[".php"],command:function(n){return["php",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[".py"],command:function(n){return["python3",n]},grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[".rb"],buildCommand:function(n){return["ruby","-c",n]},command:function(n){return["ruby","--jit",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[".rs"],buildCommand:function(n){return["rustc",n,"-o","main"]},command:function(){return["./main"]},grammer:i},zig:{fileExtensions:[".zig"],buildCommand:function(n){return["zig","build-exe",n]},command:function(n){return["./"+n.replace(/\.zig$/,"")]},grammer:i},typescript:{fileExtensions:[".ts",".cts",".mts"],command:function(n){return["bun",n]},grammer:c},text:{fileExtensions:[".txt"],command:function(n){return["cat",n]}}};exports.languageIdToDefinition=a;
//# sourceMappingURL=language.cjs.map
"use strict";const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../helpers/removeCommentsInSourceCode.cjs");let n=require("node:path");n=e.__toESM(n,1);let r=require("node:fs");r=e.__toESM(r,1);const i={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},a={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},o={c:{fileExtensions:[`.c`],buildCommand:e=>[`gcc`,`--std=c17`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},cpp:{fileExtensions:[`.cpp`],buildCommand:e=>[`g++`,`--std=c++20`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},csharp:{fileExtensions:[`.cs`],prebuild:async e=>{await r.default.promises.writeFile(n.default.join(e,`Main.csproj`),`<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AssemblyName>Main</AssemblyName>
</PropertyGroup>
</Project>`)},buildCommand:()=>[`dotnet`,`build`,`Main.csproj`,`--configuration`,`Release`,`--verbosity`,`quiet`],command:()=>[`dotnet`,`bin/Release/net8.0/Main.dll`],grammer:i},css:{fileExtensions:[`.css`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[`.dart`],buildCommand:e=>[`dart`,`compile`,`exe`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},java:{fileExtensions:[`.java`],prebuild:async e=>{let a=/\bpublic\s+class\s+(\w+)\b/;for(let o of await r.default.promises.readdir(e,{withFileTypes:!0})){if(!o.isFile()||!o.name.endsWith(`.java`))continue;let s=await r.default.promises.readFile(n.default.join(e,o.name),`utf8`),[,c]=a.exec(t.removeCommentsInSourceCode(i,s))??[];c&&await r.default.promises.rename(n.default.join(e,o.name),n.default.join(e,`${c}.java`))}},buildCommand:e=>[`javac`,e],command:e=>[`java`,`-Xmx1024m`,e.replace(/\.java$/,``)],grammer:i},javascript:{fileExtensions:[`.js`,`.cjs`,`.mjs`],command:e=>[`bun`,e],grammer:a},jsp:{fileExtensions:[`.jsp`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[`.hs`],buildCommand:e=>[`ghc`,`-o`,`main`,e],command:()=>[`./main`],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[`.html`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[`.php`],command:e=>[`php`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[`.py`],command:e=>[`python3`,e],grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[`.rb`],buildCommand:e=>[`ruby`,`-c`,e],command:e=>[`ruby`,`--jit`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[`.rs`],buildCommand:e=>[`rustc`,e,`-o`,`main`],command:()=>[`./main`],grammer:i},zig:{fileExtensions:[`.zig`],buildCommand:e=>[`zig`,`build-exe`,e],command:e=>[`./`+e.replace(/\.zig$/,``)],grammer:i},typescript:{fileExtensions:[`.ts`,`.cts`,`.mts`],command:e=>[`bun`,e],grammer:a},text:{fileExtensions:[`.txt`],command:e=>[`cat`,e]}};exports.languageIdToDefinition=o;
//# sourceMappingURL=language.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"language.cjs","sources":["../../src/types/language.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { removeCommentsInSourceCode } from '../helpers/removeCommentsInSourceCode.js';\n\nexport interface LanguageDefinition {\n /** File extensions to judge with this config. */\n fileExtensions: readonly string[];\n\n /** Function executed before the build. */\n prebuild?(cwd: string): Promise<void>;\n\n /** Returns the command to build a user program. */\n buildCommand?(filePath: string): [string, ...string[]];\n\n /** Returns the command to run a user program. */\n command(filePath: string): [string, ...string[]];\n\n /** Grammer definition for static analysis. */\n grammer?: {\n strings?: readonly { open: RegExp; close: RegExp }[];\n comments?: readonly { open: RegExp; close?: RegExp }[];\n };\n}\n\nconst cLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nconst javaScriptLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n { open: /`/, close: /(?<!\\\\)(?:\\\\{2})*`/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nexport const languageIdToDefinition: Readonly<Record<string, Readonly<LanguageDefinition>>> = {\n c: {\n fileExtensions: ['.c'],\n buildCommand: (filePath) => ['gcc', '--std=c17', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n cpp: {\n fileExtensions: ['.cpp'],\n buildCommand: (filePath) => ['g++', '--std=c++20', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n csharp: {\n fileExtensions: ['.cs'],\n prebuild: async (cwd) => {\n await fs.promises.writeFile(\n path.join(cwd, 'Main.csproj'),\n `<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>`\n );\n },\n buildCommand: () => ['dotnet', 'build', 'Main.csproj', '--configuration', 'Release', '--verbosity', 'quiet'],\n command: () => ['dotnet', 'bin/Release/net8.0/Main.dll'],\n grammer: cLikeGrammer,\n },\n\n css: {\n fileExtensions: ['.css'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }],\n },\n },\n\n dart: {\n fileExtensions: ['.dart'],\n buildCommand: (filePath) => ['dart', 'compile', 'exe', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n java: {\n fileExtensions: ['.java'],\n prebuild: async (cwd) => {\n const publicClassRegex = /\\bpublic\\s+class\\s+(\\w+)\\b/;\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile() || !dirent.name.endsWith('.java')) continue;\n const data = await fs.promises.readFile(path.join(cwd, dirent.name), 'utf8');\n const [, className] = publicClassRegex.exec(removeCommentsInSourceCode(cLikeGrammer, data)) ?? [];\n if (className) await fs.promises.rename(path.join(cwd, dirent.name), path.join(cwd, `${className}.java`));\n }\n },\n buildCommand: (fileName) => ['javac', fileName],\n // For example, Problem 7-3 in WillBooster's Java lecture uses at least 256MB.\n command: (fileName) => ['java', '-Xmx1024m', fileName.replace(/\\.java$/, '')],\n grammer: cLikeGrammer,\n },\n\n javascript: {\n fileExtensions: ['.js', '.cjs', '.mjs'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n jsp: {\n fileExtensions: ['.jsp'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*<!--/, close: /-->/ },\n { open: /\\n?[ \\t]*<%--/, close: /--%>/ },\n { open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// },\n { open: /\\n?[ \\t]*\\/\\// },\n ],\n },\n },\n\n haskell: {\n fileExtensions: ['.hs'],\n buildCommand: (filePath) => ['ghc', '-o', 'main', filePath],\n command: () => ['./main'],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\{-/, close: /-\\}/ }, { open: /\\n?[ \\t]*--/ }],\n },\n },\n\n html: {\n fileExtensions: ['.html'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*<!--/, close: /-->/ }],\n },\n },\n\n php: {\n fileExtensions: ['.php'],\n command: (fileName) => ['php', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n python: {\n fileExtensions: ['.py'],\n command: (fileName) => ['python3', fileName],\n grammer: {\n strings: [\n { open: /'''/, close: /(?<!\\\\)(?:\\\\{2})*'''/ },\n { open: /\"\"\"/, close: /(?<!\\\\)(?:\\\\{2})*\"\"\"/ },\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*'''/, close: /'''/ },\n { open: /\\n?[ \\t]*\"\"\"/, close: /\"\"\"/ },\n { open: /\\n?[ \\t]*#/ },\n ],\n },\n },\n\n ruby: {\n fileExtensions: ['.rb'],\n buildCommand: (fileName) => ['ruby', '-c', fileName],\n command: (fileName) => ['ruby', '--jit', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*=begin/, close: /=end/ }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n rust: {\n fileExtensions: ['.rs'],\n buildCommand: (filePath) => ['rustc', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n zig: {\n fileExtensions: ['.zig'],\n buildCommand: (filePath) => ['zig', 'build-exe', filePath],\n command: (filePath) => ['./' + filePath.replace(/\\.zig$/, '')],\n grammer: cLikeGrammer,\n },\n\n typescript: {\n fileExtensions: ['.ts', '.cts', '.mts'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n text: {\n fileExtensions: ['.txt'],\n command: (fileName) => ['cat', fileName],\n },\n} as const;\n"],"names":["_prebuild2","_prebuild","cLikeGrammer","strings","open","close","comments","javaScriptLikeGrammer","languageIdToDefinition","c","fileExtensions","buildCommand","filePath","command","grammer","cpp","csharp","prebuild","_asyncToGenerator","_regenerator","m","_callee","cwd","w","_context","n","fs","promises","writeFile","path","join","a","_x","apply","this","arguments","css","dart","java","_callee2","publicClassRegex","_iterator","_step","_publicClassRegex$exe","dirent","data","_ref","_ref2","className","_t","_t2","_context2","p","_createForOfIteratorHelper","readdir","withFileTypes","v","s","done","value","isFile","name","endsWith","readFile","exec","removeCommentsInSourceCode","_slicedToArray","rename","concat","e","f","_x2","fileName","replace","javascript","jsp","haskell","html","php","python","ruby","rust","zig","typescript","text"],"mappings":"iBAoGYA,EAzCAC,4JAlCNC,EAAe,CACnBC,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,gBAAiBC,MAAO,QAAU,CAAED,KAAM,mBAGzDG,EAAwB,CAC5BJ,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,gBAAiBC,MAAO,QAAU,CAAED,KAAM,mBAGlDI,EAAiF,CAC5FC,EAAG,CACDC,eAAgB,CAAC,MACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,MAAO,YAAa,MAAOA,EAAU,KAAM,OAAO,EAC/EC,QAAS,WAAF,MAAQ,CAAC,SAAS,EACzBC,QAASZ,GAGXa,IAAK,CACHL,eAAgB,CAAC,QACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,MAAO,cAAe,MAAOA,EAAU,KAAM,OAAO,EACjFC,QAAS,WAAF,MAAQ,CAAC,SAAS,EACzBC,QAASZ,GAGXc,OAAQ,CACNN,eAAgB,CAAC,OACjBO,UAAQhB,EAAAiB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAE,SAAAC,EAAOC,GAAG,OAAAH,gBAAAI,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,OAAAD,EAAAC,EAAA,EACZC,EAAGC,SAASC,UAChBC,EAAKC,KAAKR,EAAK,8VAWhB,KAAA,EAAA,OAAAE,EAAAO,EAAA,GAAA,EAAAV,EAAA,IACF,SAdOW,GAAA,OAAA/B,EAAAgC,MAAAC,KAAAC,UAAA,GAeRxB,aAAc,WAAF,MAAQ,CAAC,SAAU,QAAS,cAAe,kBAAmB,UAAW,cAAe,QAAQ,EAC5GE,QAAS,WAAF,MAAQ,CAAC,SAAU,8BAA8B,EACxDC,QAASZ,GAGXkC,IAAK,CACH1B,eAAgB,CAAC,QACjBG,QAAS,WAAF,MAAQ,CAAC,OAAQ,GAAG,EAC3BC,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,gBAAiBC,MAAO,WAI/CgC,KAAM,CACJ3B,eAAgB,CAAC,SACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,OAAQ,UAAW,MAAOA,EAAU,KAAM,OAAO,EAC9EC,QAAS,WAAF,MAAQ,CAAC,SAAS,EACzBC,QAASZ,GAGXoC,KAAM,CACJ5B,eAAgB,CAAC,SACjBO,UAAQjB,EAAAkB,EAAAA,iBAAAC,EAAAA,cAAAC,EAAE,SAAAmB,EAAOjB,GAAG,IAAAkB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA/B,gBAAAI,EAAA,SAAA4B,GAAA,cAAAA,EAAAC,EAAAD,EAAA1B,GAAA,KAAA,EACmC,OAA/Ce,EAAmB,6BAA4BS,EAAAI,EAAAA,0BAAAF,EAAA1B,EAAA,EAC1BC,EAAGC,SAAS2B,QAAQhC,EAAK,CAAEiC,eAAe,IAAO,KAAA,EAAAd,EAAAQ,EAAAE,EAAAK,GAAAL,EAAAC,EAAA,EAAAX,EAAAgB,IAAA,KAAA,EAAA,IAAAf,EAAAD,EAAAhB,KAAAiC,KAAA,CAAAP,EAAA1B,EAAA,EAAA,KAAA,CAA3D,IAANmB,EAAMF,EAAAiB,OACHC,UAAahB,EAAOiB,KAAKC,SAAS,SAAQ,CAAAX,EAAA1B,EAAA,EAAA,KAAA,CAAA,OAAA0B,EAAApB,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAoB,EAAA1B,EAAA,EACnCC,EAAGC,SAASoC,SAASlC,EAAKC,KAAKR,EAAKsB,EAAOiB,MAAO,QAAO,KAAA,EAC1D,GADZhB,EAAIM,EAAAK,EAAAV,EACiF,OADjFH,EACYH,EAAiBwB,KAAKC,EAAAA,2BAA2B/D,EAAc2C,KAAMF,EAAI,GAAEI,EAAAmB,gBAAApB,EAAA,KAAxFE,EAASD,EAAA,IACL,CAAAI,EAAA1B,EAAA,EAAA,KAAA,CAAA,OAAA0B,EAAA1B,EAAA,EAAQC,EAAGC,SAASwC,OAAOtC,EAAKC,KAAKR,EAAKsB,EAAOiB,MAAOhC,EAAKC,KAAKR,EAAG,GAAA8C,OAAKpB,EAAS,WAAS,KAAA,EAAAG,EAAA1B,EAAA,EAAA,MAAA,KAAA,EAAA0B,EAAA1B,EAAA,EAAA,MAAA,KAAA,EAAA0B,EAAAC,EAAA,EAAAF,EAAAC,EAAAK,EAAAf,EAAA4B,EAAAnB,GAAA,KAAA,EAAA,OAAAC,EAAAC,EAAA,EAAAX,EAAA6B,IAAAnB,EAAAmB,EAAA,GAAA,KAAA,GAAA,OAAAnB,EAAApB,EAAA,GAAA,EAAAQ,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,KAAA,IAE5G,SAROgC,GAAA,OAAAvE,EAAAiC,MAAAC,KAAAC,UAAA,GASRxB,aAAc,SAAC6D,GAAQ,MAAK,CAAC,QAASA,EAAS,EAE/C3D,QAAS,SAAC2D,GAAQ,MAAK,CAAC,OAAQ,YAAaA,EAASC,QAAQ,UAAW,IAAI,EAC7E3D,QAASZ,GAGXwE,WAAY,CACVhE,eAAgB,CAAC,MAAO,OAAQ,QAChCG,QAAS,SAAC2D,GAAQ,MAAK,CAAC,MAAOA,EAAS,EACxC1D,QAASP,GAGXoE,IAAK,CACHjE,eAAgB,CAAC,QACjBG,QAAS,WAAF,MAAQ,CAAC,OAAQ,GAAG,EAC3BC,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CACR,CAAEF,KAAM,gBAAiBC,MAAO,OAChC,CAAED,KAAM,gBAAiBC,MAAO,QAChC,CAAED,KAAM,gBAAiBC,MAAO,QAChC,CAAED,KAAM,oBAKdwE,QAAS,CACPlE,eAAgB,CAAC,OACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,MAAO,KAAM,OAAQA,EAAS,EAC3DC,QAAS,WAAF,MAAQ,CAAC,SAAS,EACzBC,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,eAAgBC,MAAO,OAAS,CAAED,KAAM,kBAI/DyE,KAAM,CACJnE,eAAgB,CAAC,SACjBG,QAAS,WAAF,MAAQ,CAAC,OAAQ,GAAG,EAC3BC,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,gBAAiBC,MAAO,UAI/CyE,IAAK,CACHpE,eAAgB,CAAC,QACjBG,QAAS,SAAC2D,GAAQ,MAAK,CAAC,MAAOA,EAAS,EACxC1D,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,gBAAiBC,MAAO,QAAU,CAAED,KAAM,iBAAmB,CAAEA,KAAM,iBAI5F2E,OAAQ,CACNrE,eAAgB,CAAC,OACjBG,QAAS,SAAC2D,GAAQ,MAAK,CAAC,UAAWA,EAAS,EAC5C1D,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,MAAOC,MAAO,wBACtB,CAAED,KAAM,MAAOC,MAAO,wBACtB,CAAED,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CACR,CAAEF,KAAM,eAAgBC,MAAO,OAC/B,CAAED,KAAM,eAAgBC,MAAO,OAC/B,CAAED,KAAM,iBAKd4E,KAAM,CACJtE,eAAgB,CAAC,OACjBC,aAAc,SAAC6D,GAAQ,MAAK,CAAC,OAAQ,KAAMA,EAAS,EACpD3D,QAAS,SAAC2D,GAAQ,MAAK,CAAC,OAAQ,QAASA,EAAS,EAClD1D,QAAS,CACPX,QAAS,CACP,CAAEC,KAAM,IAAKC,MAAO,sBACpB,CAAED,KAAM,IAAKC,MAAO,uBAEtBC,SAAU,CAAC,CAAEF,KAAM,kBAAmBC,MAAO,QAAU,CAAED,KAAM,iBAInE6E,KAAM,CACJvE,eAAgB,CAAC,OACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,QAASA,EAAU,KAAM,OAAO,EAC7DC,QAAS,WAAF,MAAQ,CAAC,SAAS,EACzBC,QAASZ,GAGXgF,IAAK,CACHxE,eAAgB,CAAC,QACjBC,aAAc,SAACC,GAAQ,MAAK,CAAC,MAAO,YAAaA,EAAS,EAC1DC,QAAS,SAACD,GAAQ,MAAK,CAAC,KAAOA,EAAS6D,QAAQ,SAAU,IAAI,EAC9D3D,QAASZ,GAGXiF,WAAY,CACVzE,eAAgB,CAAC,MAAO,OAAQ,QAChCG,QAAS,SAAC2D,GAAQ,MAAK,CAAC,MAAOA,EAAS,EACxC1D,QAASP,GAGX6E,KAAM,CACJ1E,eAAgB,CAAC,QACjBG,QAAS,SAAC2D,GAAQ,MAAK,CAAC,MAAOA,EAAS"}
{"version":3,"file":"language.cjs","names":["fs","path","removeCommentsInSourceCode"],"sources":["../../src/types/language.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { removeCommentsInSourceCode } from '../helpers/removeCommentsInSourceCode.js';\n\nexport interface LanguageDefinition {\n /** File extensions to judge with this config. */\n fileExtensions: readonly string[];\n\n /** Function executed before the build. */\n prebuild?(cwd: string): Promise<void>;\n\n /** Returns the command to build a user program. */\n buildCommand?(filePath: string): [string, ...string[]];\n\n /** Returns the command to run a user program. */\n command(filePath: string): [string, ...string[]];\n\n /** Grammer definition for static analysis. */\n grammer?: {\n strings?: readonly { open: RegExp; close: RegExp }[];\n comments?: readonly { open: RegExp; close?: RegExp }[];\n };\n}\n\nconst cLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nconst javaScriptLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n { open: /`/, close: /(?<!\\\\)(?:\\\\{2})*`/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nexport const languageIdToDefinition: Readonly<Record<string, Readonly<LanguageDefinition>>> = {\n c: {\n fileExtensions: ['.c'],\n buildCommand: (filePath) => ['gcc', '--std=c17', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n cpp: {\n fileExtensions: ['.cpp'],\n buildCommand: (filePath) => ['g++', '--std=c++20', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n csharp: {\n fileExtensions: ['.cs'],\n prebuild: async (cwd) => {\n await fs.promises.writeFile(\n path.join(cwd, 'Main.csproj'),\n `<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>`\n );\n },\n buildCommand: () => ['dotnet', 'build', 'Main.csproj', '--configuration', 'Release', '--verbosity', 'quiet'],\n command: () => ['dotnet', 'bin/Release/net8.0/Main.dll'],\n grammer: cLikeGrammer,\n },\n\n css: {\n fileExtensions: ['.css'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }],\n },\n },\n\n dart: {\n fileExtensions: ['.dart'],\n buildCommand: (filePath) => ['dart', 'compile', 'exe', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n java: {\n fileExtensions: ['.java'],\n prebuild: async (cwd) => {\n const publicClassRegex = /\\bpublic\\s+class\\s+(\\w+)\\b/;\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile() || !dirent.name.endsWith('.java')) continue;\n const data = await fs.promises.readFile(path.join(cwd, dirent.name), 'utf8');\n const [, className] = publicClassRegex.exec(removeCommentsInSourceCode(cLikeGrammer, data)) ?? [];\n if (className) await fs.promises.rename(path.join(cwd, dirent.name), path.join(cwd, `${className}.java`));\n }\n },\n buildCommand: (fileName) => ['javac', fileName],\n // For example, Problem 7-3 in WillBooster's Java lecture uses at least 256MB.\n command: (fileName) => ['java', '-Xmx1024m', fileName.replace(/\\.java$/, '')],\n grammer: cLikeGrammer,\n },\n\n javascript: {\n fileExtensions: ['.js', '.cjs', '.mjs'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n jsp: {\n fileExtensions: ['.jsp'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*<!--/, close: /-->/ },\n { open: /\\n?[ \\t]*<%--/, close: /--%>/ },\n { open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// },\n { open: /\\n?[ \\t]*\\/\\// },\n ],\n },\n },\n\n haskell: {\n fileExtensions: ['.hs'],\n buildCommand: (filePath) => ['ghc', '-o', 'main', filePath],\n command: () => ['./main'],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\{-/, close: /-\\}/ }, { open: /\\n?[ \\t]*--/ }],\n },\n },\n\n html: {\n fileExtensions: ['.html'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*<!--/, close: /-->/ }],\n },\n },\n\n php: {\n fileExtensions: ['.php'],\n command: (fileName) => ['php', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n python: {\n fileExtensions: ['.py'],\n command: (fileName) => ['python3', fileName],\n grammer: {\n strings: [\n { open: /'''/, close: /(?<!\\\\)(?:\\\\{2})*'''/ },\n { open: /\"\"\"/, close: /(?<!\\\\)(?:\\\\{2})*\"\"\"/ },\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*'''/, close: /'''/ },\n { open: /\\n?[ \\t]*\"\"\"/, close: /\"\"\"/ },\n { open: /\\n?[ \\t]*#/ },\n ],\n },\n },\n\n ruby: {\n fileExtensions: ['.rb'],\n buildCommand: (fileName) => ['ruby', '-c', fileName],\n command: (fileName) => ['ruby', '--jit', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*=begin/, close: /=end/ }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n rust: {\n fileExtensions: ['.rs'],\n buildCommand: (filePath) => ['rustc', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n zig: {\n fileExtensions: ['.zig'],\n buildCommand: (filePath) => ['zig', 'build-exe', filePath],\n command: (filePath) => ['./' + filePath.replace(/\\.zig$/, '')],\n grammer: cLikeGrammer,\n },\n\n typescript: {\n fileExtensions: ['.ts', '.cts', '.mts'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n text: {\n fileExtensions: ['.txt'],\n command: (fileName) => ['cat', fileName],\n },\n} as const;\n"],"mappings":"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"}

@@ -1,2 +0,11 @@

import{asyncToGenerator as n,regenerator as e,slicedToArray as o,createForOfIteratorHelper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"node:fs";import s from"node:path";import{removeCommentsInSourceCode as i}from"../helpers/removeCommentsInSourceCode.js";var c,m,a={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},l={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},u={c:{fileExtensions:[".c"],buildCommand:function(n){return["gcc","--std=c17","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:a},cpp:{fileExtensions:[".cpp"],buildCommand:function(n){return["g++","--std=c++20","-O2",n,"-o","main"]},command:function(){return["./main"]},grammer:a},csharp:{fileExtensions:[".cs"],prebuild:(m=n(e().m(function n(o){return e().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,t.promises.writeFile(s.join(o,"Main.csproj"),'<Project Sdk="Microsoft.NET.Sdk">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>');case 1:return n.a(2)}},n)})),function(n){return m.apply(this,arguments)}),buildCommand:function(){return["dotnet","build","Main.csproj","--configuration","Release","--verbosity","quiet"]},command:function(){return["dotnet","bin/Release/net8.0/Main.dll"]},grammer:a},css:{fileExtensions:[".css"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[".dart"],buildCommand:function(n){return["dart","compile","exe",n,"-o","main"]},command:function(){return["./main"]},grammer:a},java:{fileExtensions:[".java"],prebuild:(c=n(e().m(function n(c){var m,l,u,p,f,d,g,b,x,j,h;return e().w(function(n){for(;;)switch(n.p=n.n){case 0:return m=/\bpublic\s+class\s+(\w+)\b/,j=r,n.n=1,t.promises.readdir(c,{withFileTypes:!0});case 1:l=j(n.v),n.p=2,l.s();case 3:if((u=l.n()).done){n.n=7;break}if((f=u.value).isFile()&&f.name.endsWith(".java")){n.n=4;break}return n.a(3,6);case 4:return n.n=5,t.promises.readFile(s.join(c,f.name),"utf8");case 5:if(d=n.v,g=null!=(p=m.exec(i(a,d)))?p:[],b=o(g,2),!(x=b[1])){n.n=6;break}return n.n=6,t.promises.rename(s.join(c,f.name),s.join(c,"".concat(x,".java")));case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,l.e(h);case 9:return n.p=9,l.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])})),function(n){return c.apply(this,arguments)}),buildCommand:function(n){return["javac",n]},command:function(n){return["java","-Xmx1024m",n.replace(/\.java$/,"")]},grammer:a},javascript:{fileExtensions:[".js",".cjs",".mjs"],command:function(n){return["bun",n]},grammer:l},jsp:{fileExtensions:[".jsp"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[".hs"],buildCommand:function(n){return["ghc","-o","main",n]},command:function(){return["./main"]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[".html"],command:function(){return["echo",""]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[".php"],command:function(n){return["php",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[".py"],command:function(n){return["python3",n]},grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[".rb"],buildCommand:function(n){return["ruby","-c",n]},command:function(n){return["ruby","--jit",n]},grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[".rs"],buildCommand:function(n){return["rustc",n,"-o","main"]},command:function(){return["./main"]},grammer:a},zig:{fileExtensions:[".zig"],buildCommand:function(n){return["zig","build-exe",n]},command:function(n){return["./"+n.replace(/\.zig$/,"")]},grammer:a},typescript:{fileExtensions:[".ts",".cts",".mts"],command:function(n){return["bun",n]},grammer:l},text:{fileExtensions:[".txt"],command:function(n){return["cat",n]}}};export{u as languageIdToDefinition};
//# sourceMappingURL=language.js.map
import{removeCommentsInSourceCode as e}from"../helpers/removeCommentsInSourceCode.js";import t from"node:path";import n from"node:fs";const r={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},i={strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/},{open:/`/,close:/(?<!\\)(?:\\{2})*`/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]},a={c:{fileExtensions:[`.c`],buildCommand:e=>[`gcc`,`--std=c17`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:r},cpp:{fileExtensions:[`.cpp`],buildCommand:e=>[`g++`,`--std=c++20`,`-O2`,e,`-o`,`main`],command:()=>[`./main`],grammer:r},csharp:{fileExtensions:[`.cs`],prebuild:async e=>{await n.promises.writeFile(t.join(e,`Main.csproj`),`<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AssemblyName>Main</AssemblyName>
</PropertyGroup>
</Project>`)},buildCommand:()=>[`dotnet`,`build`,`Main.csproj`,`--configuration`,`Release`,`--verbosity`,`quiet`],command:()=>[`dotnet`,`bin/Release/net8.0/Main.dll`],grammer:r},css:{fileExtensions:[`.css`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//}]}},dart:{fileExtensions:[`.dart`],buildCommand:e=>[`dart`,`compile`,`exe`,e,`-o`,`main`],command:()=>[`./main`],grammer:r},java:{fileExtensions:[`.java`],prebuild:async i=>{let a=/\bpublic\s+class\s+(\w+)\b/;for(let o of await n.promises.readdir(i,{withFileTypes:!0})){if(!o.isFile()||!o.name.endsWith(`.java`))continue;let s=await n.promises.readFile(t.join(i,o.name),`utf8`),[,c]=a.exec(e(r,s))??[];c&&await n.promises.rename(t.join(i,o.name),t.join(i,`${c}.java`))}},buildCommand:e=>[`javac`,e],command:e=>[`java`,`-Xmx1024m`,e.replace(/\.java$/,``)],grammer:r},javascript:{fileExtensions:[`.js`,`.cjs`,`.mjs`],command:e=>[`bun`,e],grammer:i},jsp:{fileExtensions:[`.jsp`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/},{open:/\n?[ \t]*<%--/,close:/--%>/},{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//}]}},haskell:{fileExtensions:[`.hs`],buildCommand:e=>[`ghc`,`-o`,`main`,e],command:()=>[`./main`],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\{-/,close:/-\}/},{open:/\n?[ \t]*--/}]}},html:{fileExtensions:[`.html`],command:()=>[`echo`,``],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*<!--/,close:/-->/}]}},php:{fileExtensions:[`.php`],command:e=>[`php`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*\/\*/,close:/\*\//},{open:/\n?[ \t]*\/\//},{open:/\n?[ \t]*#/}]}},python:{fileExtensions:[`.py`],command:e=>[`python3`,e],grammer:{strings:[{open:/'''/,close:/(?<!\\)(?:\\{2})*'''/},{open:/"""/,close:/(?<!\\)(?:\\{2})*"""/},{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*'''/,close:/'''/},{open:/\n?[ \t]*"""/,close:/"""/},{open:/\n?[ \t]*#/}]}},ruby:{fileExtensions:[`.rb`],buildCommand:e=>[`ruby`,`-c`,e],command:e=>[`ruby`,`--jit`,e],grammer:{strings:[{open:/'/,close:/(?<!\\)(?:\\{2})*'/},{open:/"/,close:/(?<!\\)(?:\\{2})*"/}],comments:[{open:/\n?[ \t]*=begin/,close:/=end/},{open:/\n?[ \t]*#/}]}},rust:{fileExtensions:[`.rs`],buildCommand:e=>[`rustc`,e,`-o`,`main`],command:()=>[`./main`],grammer:r},zig:{fileExtensions:[`.zig`],buildCommand:e=>[`zig`,`build-exe`,e],command:e=>[`./`+e.replace(/\.zig$/,``)],grammer:r},typescript:{fileExtensions:[`.ts`,`.cts`,`.mts`],command:e=>[`bun`,e],grammer:i},text:{fileExtensions:[`.txt`],command:e=>[`cat`,e]}};export{a as languageIdToDefinition};
//# sourceMappingURL=language.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"language.js","sources":["../../src/types/language.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { removeCommentsInSourceCode } from '../helpers/removeCommentsInSourceCode.js';\n\nexport interface LanguageDefinition {\n /** File extensions to judge with this config. */\n fileExtensions: readonly string[];\n\n /** Function executed before the build. */\n prebuild?(cwd: string): Promise<void>;\n\n /** Returns the command to build a user program. */\n buildCommand?(filePath: string): [string, ...string[]];\n\n /** Returns the command to run a user program. */\n command(filePath: string): [string, ...string[]];\n\n /** Grammer definition for static analysis. */\n grammer?: {\n strings?: readonly { open: RegExp; close: RegExp }[];\n comments?: readonly { open: RegExp; close?: RegExp }[];\n };\n}\n\nconst cLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nconst javaScriptLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n { open: /`/, close: /(?<!\\\\)(?:\\\\{2})*`/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nexport const languageIdToDefinition: Readonly<Record<string, Readonly<LanguageDefinition>>> = {\n c: {\n fileExtensions: ['.c'],\n buildCommand: (filePath) => ['gcc', '--std=c17', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n cpp: {\n fileExtensions: ['.cpp'],\n buildCommand: (filePath) => ['g++', '--std=c++20', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n csharp: {\n fileExtensions: ['.cs'],\n prebuild: async (cwd) => {\n await fs.promises.writeFile(\n path.join(cwd, 'Main.csproj'),\n `<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>`\n );\n },\n buildCommand: () => ['dotnet', 'build', 'Main.csproj', '--configuration', 'Release', '--verbosity', 'quiet'],\n command: () => ['dotnet', 'bin/Release/net8.0/Main.dll'],\n grammer: cLikeGrammer,\n },\n\n css: {\n fileExtensions: ['.css'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }],\n },\n },\n\n dart: {\n fileExtensions: ['.dart'],\n buildCommand: (filePath) => ['dart', 'compile', 'exe', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n java: {\n fileExtensions: ['.java'],\n prebuild: async (cwd) => {\n const publicClassRegex = /\\bpublic\\s+class\\s+(\\w+)\\b/;\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile() || !dirent.name.endsWith('.java')) continue;\n const data = await fs.promises.readFile(path.join(cwd, dirent.name), 'utf8');\n const [, className] = publicClassRegex.exec(removeCommentsInSourceCode(cLikeGrammer, data)) ?? [];\n if (className) await fs.promises.rename(path.join(cwd, dirent.name), path.join(cwd, `${className}.java`));\n }\n },\n buildCommand: (fileName) => ['javac', fileName],\n // For example, Problem 7-3 in WillBooster's Java lecture uses at least 256MB.\n command: (fileName) => ['java', '-Xmx1024m', fileName.replace(/\\.java$/, '')],\n grammer: cLikeGrammer,\n },\n\n javascript: {\n fileExtensions: ['.js', '.cjs', '.mjs'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n jsp: {\n fileExtensions: ['.jsp'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*<!--/, close: /-->/ },\n { open: /\\n?[ \\t]*<%--/, close: /--%>/ },\n { open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// },\n { open: /\\n?[ \\t]*\\/\\// },\n ],\n },\n },\n\n haskell: {\n fileExtensions: ['.hs'],\n buildCommand: (filePath) => ['ghc', '-o', 'main', filePath],\n command: () => ['./main'],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\{-/, close: /-\\}/ }, { open: /\\n?[ \\t]*--/ }],\n },\n },\n\n html: {\n fileExtensions: ['.html'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*<!--/, close: /-->/ }],\n },\n },\n\n php: {\n fileExtensions: ['.php'],\n command: (fileName) => ['php', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n python: {\n fileExtensions: ['.py'],\n command: (fileName) => ['python3', fileName],\n grammer: {\n strings: [\n { open: /'''/, close: /(?<!\\\\)(?:\\\\{2})*'''/ },\n { open: /\"\"\"/, close: /(?<!\\\\)(?:\\\\{2})*\"\"\"/ },\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*'''/, close: /'''/ },\n { open: /\\n?[ \\t]*\"\"\"/, close: /\"\"\"/ },\n { open: /\\n?[ \\t]*#/ },\n ],\n },\n },\n\n ruby: {\n fileExtensions: ['.rb'],\n buildCommand: (fileName) => ['ruby', '-c', fileName],\n command: (fileName) => ['ruby', '--jit', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*=begin/, close: /=end/ }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n rust: {\n fileExtensions: ['.rs'],\n buildCommand: (filePath) => ['rustc', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n zig: {\n fileExtensions: ['.zig'],\n buildCommand: (filePath) => ['zig', 'build-exe', filePath],\n command: (filePath) => ['./' + filePath.replace(/\\.zig$/, '')],\n grammer: cLikeGrammer,\n },\n\n typescript: {\n fileExtensions: ['.ts', '.cts', '.mts'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n text: {\n fileExtensions: ['.txt'],\n command: (fileName) => ['cat', fileName],\n },\n} as const;\n"],"names":["_prebuild2","_prebuild","cLikeGrammer","strings","open","close","comments","javaScriptLikeGrammer","languageIdToDefinition","c","fileExtensions","buildCommand","filePath","command","grammer","cpp","csharp","prebuild","_asyncToGenerator","_regenerator","m","_callee","cwd","w","_context","n","fs","promises","writeFile","path","join","a","_x","apply","this","arguments","css","dart","java","_callee2","publicClassRegex","_iterator","_step","_publicClassRegex$exe","dirent","data","_ref","_ref2","className","_t","_t2","_context2","p","_createForOfIteratorHelper","readdir","withFileTypes","v","s","done","value","isFile","name","endsWith","readFile","exec","removeCommentsInSourceCode","_slicedToArray","rename","concat","e","f","_x2","fileName","replace","javascript","jsp","haskell","html","php","python","ruby","rust","zig","typescript","text"],"mappings":"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"}
{"version":3,"file":"language.js","names":[],"sources":["../../src/types/language.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { removeCommentsInSourceCode } from '../helpers/removeCommentsInSourceCode.js';\n\nexport interface LanguageDefinition {\n /** File extensions to judge with this config. */\n fileExtensions: readonly string[];\n\n /** Function executed before the build. */\n prebuild?(cwd: string): Promise<void>;\n\n /** Returns the command to build a user program. */\n buildCommand?(filePath: string): [string, ...string[]];\n\n /** Returns the command to run a user program. */\n command(filePath: string): [string, ...string[]];\n\n /** Grammer definition for static analysis. */\n grammer?: {\n strings?: readonly { open: RegExp; close: RegExp }[];\n comments?: readonly { open: RegExp; close?: RegExp }[];\n };\n}\n\nconst cLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nconst javaScriptLikeGrammer = {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n { open: /`/, close: /(?<!\\\\)(?:\\\\{2})*`/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }],\n} as const satisfies LanguageDefinition['grammer'];\n\nexport const languageIdToDefinition: Readonly<Record<string, Readonly<LanguageDefinition>>> = {\n c: {\n fileExtensions: ['.c'],\n buildCommand: (filePath) => ['gcc', '--std=c17', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n cpp: {\n fileExtensions: ['.cpp'],\n buildCommand: (filePath) => ['g++', '--std=c++20', '-O2', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n csharp: {\n fileExtensions: ['.cs'],\n prebuild: async (cwd) => {\n await fs.promises.writeFile(\n path.join(cwd, 'Main.csproj'),\n `<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net8.0</TargetFramework>\n <ImplicitUsings>enable</ImplicitUsings>\n <Nullable>enable</Nullable>\n <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n <AssemblyName>Main</AssemblyName>\n </PropertyGroup>\n</Project>`\n );\n },\n buildCommand: () => ['dotnet', 'build', 'Main.csproj', '--configuration', 'Release', '--verbosity', 'quiet'],\n command: () => ['dotnet', 'bin/Release/net8.0/Main.dll'],\n grammer: cLikeGrammer,\n },\n\n css: {\n fileExtensions: ['.css'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }],\n },\n },\n\n dart: {\n fileExtensions: ['.dart'],\n buildCommand: (filePath) => ['dart', 'compile', 'exe', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n java: {\n fileExtensions: ['.java'],\n prebuild: async (cwd) => {\n const publicClassRegex = /\\bpublic\\s+class\\s+(\\w+)\\b/;\n for (const dirent of await fs.promises.readdir(cwd, { withFileTypes: true })) {\n if (!dirent.isFile() || !dirent.name.endsWith('.java')) continue;\n const data = await fs.promises.readFile(path.join(cwd, dirent.name), 'utf8');\n const [, className] = publicClassRegex.exec(removeCommentsInSourceCode(cLikeGrammer, data)) ?? [];\n if (className) await fs.promises.rename(path.join(cwd, dirent.name), path.join(cwd, `${className}.java`));\n }\n },\n buildCommand: (fileName) => ['javac', fileName],\n // For example, Problem 7-3 in WillBooster's Java lecture uses at least 256MB.\n command: (fileName) => ['java', '-Xmx1024m', fileName.replace(/\\.java$/, '')],\n grammer: cLikeGrammer,\n },\n\n javascript: {\n fileExtensions: ['.js', '.cjs', '.mjs'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n jsp: {\n fileExtensions: ['.jsp'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*<!--/, close: /-->/ },\n { open: /\\n?[ \\t]*<%--/, close: /--%>/ },\n { open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// },\n { open: /\\n?[ \\t]*\\/\\// },\n ],\n },\n },\n\n haskell: {\n fileExtensions: ['.hs'],\n buildCommand: (filePath) => ['ghc', '-o', 'main', filePath],\n command: () => ['./main'],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\{-/, close: /-\\}/ }, { open: /\\n?[ \\t]*--/ }],\n },\n },\n\n html: {\n fileExtensions: ['.html'],\n command: () => ['echo', ''],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*<!--/, close: /-->/ }],\n },\n },\n\n php: {\n fileExtensions: ['.php'],\n command: (fileName) => ['php', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*\\/\\*/, close: /\\*\\// }, { open: /\\n?[ \\t]*\\/\\// }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n python: {\n fileExtensions: ['.py'],\n command: (fileName) => ['python3', fileName],\n grammer: {\n strings: [\n { open: /'''/, close: /(?<!\\\\)(?:\\\\{2})*'''/ },\n { open: /\"\"\"/, close: /(?<!\\\\)(?:\\\\{2})*\"\"\"/ },\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [\n { open: /\\n?[ \\t]*'''/, close: /'''/ },\n { open: /\\n?[ \\t]*\"\"\"/, close: /\"\"\"/ },\n { open: /\\n?[ \\t]*#/ },\n ],\n },\n },\n\n ruby: {\n fileExtensions: ['.rb'],\n buildCommand: (fileName) => ['ruby', '-c', fileName],\n command: (fileName) => ['ruby', '--jit', fileName],\n grammer: {\n strings: [\n { open: /'/, close: /(?<!\\\\)(?:\\\\{2})*'/ },\n { open: /\"/, close: /(?<!\\\\)(?:\\\\{2})*\"/ },\n ],\n comments: [{ open: /\\n?[ \\t]*=begin/, close: /=end/ }, { open: /\\n?[ \\t]*#/ }],\n },\n },\n\n rust: {\n fileExtensions: ['.rs'],\n buildCommand: (filePath) => ['rustc', filePath, '-o', 'main'],\n command: () => ['./main'],\n grammer: cLikeGrammer,\n },\n\n zig: {\n fileExtensions: ['.zig'],\n buildCommand: (filePath) => ['zig', 'build-exe', filePath],\n command: (filePath) => ['./' + filePath.replace(/\\.zig$/, '')],\n grammer: cLikeGrammer,\n },\n\n typescript: {\n fileExtensions: ['.ts', '.cts', '.mts'],\n command: (fileName) => ['bun', fileName],\n grammer: javaScriptLikeGrammer,\n },\n\n text: {\n fileExtensions: ['.txt'],\n command: (fileName) => ['cat', fileName],\n },\n} as const;\n"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";var i=require("zod"),r=i.z.object({timeLimitMs:i.z.number().int().min(0).optional(),memoryLimitByte:i.z.number().int().min(0).optional(),requiredRegExpsInCode:i.z.array(i.z.string().min(1)).optional(),forbiddenRegExpsInCode:i.z.array(i.z.string().min(1)).optional(),forbiddenTextsInCode:i.z.array(i.z.string().min(1)).optional(),isManualScoringRequired:i.z.boolean().optional(),requiredEnvironmentVariables:i.z.array(i.z.string().min(1)).optional(),requiredOutputFilePaths:i.z.array(i.z.string().min(1)).optional(),requiredSubmissionFilePaths:i.z.array(i.z.string().min(1)).optional()});exports.problemMarkdownFrontMatterSchema=r;
//# sourceMappingURL=problem.cjs.map
"use strict";let e=require("zod");const t=e.z.object({timeLimitMs:e.z.number().int().min(0).optional(),memoryLimitByte:e.z.number().int().min(0).optional(),requiredRegExpsInCode:e.z.array(e.z.string().min(1)).optional(),forbiddenRegExpsInCode:e.z.array(e.z.string().min(1)).optional(),forbiddenTextsInCode:e.z.array(e.z.string().min(1)).optional(),isManualScoringRequired:e.z.boolean().optional(),requiredEnvironmentVariables:e.z.array(e.z.string().min(1)).optional(),requiredOutputFilePaths:e.z.array(e.z.string().min(1)).optional(),requiredSubmissionFilePaths:e.z.array(e.z.string().min(1)).optional()});exports.problemMarkdownFrontMatterSchema=t;
//# sourceMappingURL=problem.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"problem.cjs","sources":["../../src/types/problem.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const problemMarkdownFrontMatterSchema = z.object({\n timeLimitMs: z.number().int().min(0).optional(),\n memoryLimitByte: z.number().int().min(0).optional(),\n requiredRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenTextsInCode: z.array(z.string().min(1)).optional(),\n isManualScoringRequired: z.boolean().optional(),\n requiredEnvironmentVariables: z.array(z.string().min(1)).optional(),\n requiredOutputFilePaths: z.array(z.string().min(1)).optional(),\n requiredSubmissionFilePaths: z.array(z.string().min(1)).optional(),\n});\n\nexport type ProblemMarkdownFrontMatter = z.infer<typeof problemMarkdownFrontMatterSchema>;\n"],"names":["problemMarkdownFrontMatterSchema","z","object","timeLimitMs","number","min","optional","memoryLimitByte","requiredRegExpsInCode","array","string","forbiddenRegExpsInCode","forbiddenTextsInCode","isManualScoringRequired","requiredEnvironmentVariables","requiredOutputFilePaths","requiredSubmissionFilePaths"],"mappings":"kCAEaA,EAAmCC,EAAAA,EAAEC,OAAO,CACvDC,YAAaF,EAAAA,EAAEG,SAAQ,MAAOC,IAAI,GAAGC,WACrCC,gBAAiBN,EAAAA,EAAEG,SAAQ,MAAOC,IAAI,GAAGC,WACzCE,sBAAuBP,EAAAA,EAAEQ,MAAMR,IAAES,SAASL,IAAI,IAAIC,WAClDK,uBAAwBV,EAAAA,EAAEQ,MAAMR,IAAES,SAASL,IAAI,IAAIC,WACnDM,qBAAsBX,EAAAA,EAAEQ,MAAMR,IAAES,SAASL,IAAI,IAAIC,WACjDO,wBAAyBZ,EAAAA,EAAC,UAAWK,WACrCQ,6BAA8Bb,EAAAA,EAAEQ,MAAMR,IAAES,SAASL,IAAI,IAAIC,WACzDS,wBAAyBd,EAAAA,EAAEQ,MAAMR,IAAES,SAASL,IAAI,IAAIC,WACpDU,4BAA6Bf,EAAAA,EAAEQ,MAAMR,EAAAA,EAAES,SAASL,IAAI,IAAIC"}
{"version":3,"file":"problem.cjs","names":["z"],"sources":["../../src/types/problem.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const problemMarkdownFrontMatterSchema = z.object({\n timeLimitMs: z.number().int().min(0).optional(),\n memoryLimitByte: z.number().int().min(0).optional(),\n requiredRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenTextsInCode: z.array(z.string().min(1)).optional(),\n isManualScoringRequired: z.boolean().optional(),\n requiredEnvironmentVariables: z.array(z.string().min(1)).optional(),\n requiredOutputFilePaths: z.array(z.string().min(1)).optional(),\n requiredSubmissionFilePaths: z.array(z.string().min(1)).optional(),\n});\n\nexport type ProblemMarkdownFrontMatter = z.infer<typeof problemMarkdownFrontMatterSchema>;\n"],"mappings":"kCAEA,MAAa,EAAmCA,EAAAA,EAAE,OAAO,CACvD,YAAaA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC9C,gBAAiBA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAClD,sBAAuBA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,uBAAwBA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC5D,qBAAsBA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC1D,wBAAyBA,EAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS,EAC9C,6BAA8BA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAClE,wBAAyBA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC7D,4BAA6BA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC"}

@@ -1,2 +0,2 @@

import{z as i}from"zod";var n=i.object({timeLimitMs:i.number().int().min(0).optional(),memoryLimitByte:i.number().int().min(0).optional(),requiredRegExpsInCode:i.array(i.string().min(1)).optional(),forbiddenRegExpsInCode:i.array(i.string().min(1)).optional(),forbiddenTextsInCode:i.array(i.string().min(1)).optional(),isManualScoringRequired:i.boolean().optional(),requiredEnvironmentVariables:i.array(i.string().min(1)).optional(),requiredOutputFilePaths:i.array(i.string().min(1)).optional(),requiredSubmissionFilePaths:i.array(i.string().min(1)).optional()});export{n as problemMarkdownFrontMatterSchema};
//# sourceMappingURL=problem.js.map
import{z as e}from"zod";const t=e.object({timeLimitMs:e.number().int().min(0).optional(),memoryLimitByte:e.number().int().min(0).optional(),requiredRegExpsInCode:e.array(e.string().min(1)).optional(),forbiddenRegExpsInCode:e.array(e.string().min(1)).optional(),forbiddenTextsInCode:e.array(e.string().min(1)).optional(),isManualScoringRequired:e.boolean().optional(),requiredEnvironmentVariables:e.array(e.string().min(1)).optional(),requiredOutputFilePaths:e.array(e.string().min(1)).optional(),requiredSubmissionFilePaths:e.array(e.string().min(1)).optional()});export{t as problemMarkdownFrontMatterSchema};
//# sourceMappingURL=problem.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"problem.js","sources":["../../src/types/problem.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const problemMarkdownFrontMatterSchema = z.object({\n timeLimitMs: z.number().int().min(0).optional(),\n memoryLimitByte: z.number().int().min(0).optional(),\n requiredRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenTextsInCode: z.array(z.string().min(1)).optional(),\n isManualScoringRequired: z.boolean().optional(),\n requiredEnvironmentVariables: z.array(z.string().min(1)).optional(),\n requiredOutputFilePaths: z.array(z.string().min(1)).optional(),\n requiredSubmissionFilePaths: z.array(z.string().min(1)).optional(),\n});\n\nexport type ProblemMarkdownFrontMatter = z.infer<typeof problemMarkdownFrontMatterSchema>;\n"],"names":["problemMarkdownFrontMatterSchema","z","object","timeLimitMs","number","min","optional","memoryLimitByte","requiredRegExpsInCode","array","string","forbiddenRegExpsInCode","forbiddenTextsInCode","isManualScoringRequired","requiredEnvironmentVariables","requiredOutputFilePaths","requiredSubmissionFilePaths"],"mappings":"4BAEaA,EAAmCC,EAAEC,OAAO,CACvDC,YAAaF,EAAEG,SAAQ,MAAOC,IAAI,GAAGC,WACrCC,gBAAiBN,EAAEG,SAAQ,MAAOC,IAAI,GAAGC,WACzCE,sBAAuBP,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC,WAClDK,uBAAwBV,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC,WACnDM,qBAAsBX,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC,WACjDO,wBAAyBZ,EAAC,UAAWK,WACrCQ,6BAA8Bb,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC,WACzDS,wBAAyBd,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC,WACpDU,4BAA6Bf,EAAEQ,MAAMR,EAAES,SAASL,IAAI,IAAIC"}
{"version":3,"file":"problem.js","names":[],"sources":["../../src/types/problem.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const problemMarkdownFrontMatterSchema = z.object({\n timeLimitMs: z.number().int().min(0).optional(),\n memoryLimitByte: z.number().int().min(0).optional(),\n requiredRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenRegExpsInCode: z.array(z.string().min(1)).optional(),\n forbiddenTextsInCode: z.array(z.string().min(1)).optional(),\n isManualScoringRequired: z.boolean().optional(),\n requiredEnvironmentVariables: z.array(z.string().min(1)).optional(),\n requiredOutputFilePaths: z.array(z.string().min(1)).optional(),\n requiredSubmissionFilePaths: z.array(z.string().min(1)).optional(),\n});\n\nexport type ProblemMarkdownFrontMatter = z.infer<typeof problemMarkdownFrontMatterSchema>;\n"],"mappings":"wBAEA,MAAa,EAAmC,EAAE,OAAO,CACvD,YAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC9C,gBAAiB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAClD,sBAAuB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,uBAAwB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC5D,qBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC1D,wBAAyB,EAAE,QAAQ,CAAC,CAAC,SAAS,EAC9C,6BAA8B,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAClE,wBAAyB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAC7D,4BAA6B,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC"}

@@ -1,2 +0,2 @@

"use strict";var t=require("zod"),e=t.z.object({path:t.z.string(),data:t.z.string(),encoding:t.z.literal("base64").optional()}),o=t.z.object({testCaseId:t.z.string(),decisionCode:t.z.number().int(),exitStatus:t.z.number().int().optional(),stdin:t.z.string().optional(),stdout:t.z.string().optional(),stderr:t.z.string().optional(),timeSeconds:t.z.number().optional(),memoryBytes:t.z.number().optional(),feedbackMarkdown:t.z.string().optional(),outputFiles:t.z.array(e).optional()});exports.TEST_CASE_RESULT_PREFIX="TEST_CASE_RESULT ",exports.testCaseResultSchema=o;
//# sourceMappingURL=testCaseResult.cjs.map
"use strict";let e=require("zod");const t=e.z.object({path:e.z.string(),data:e.z.string(),encoding:e.z.literal(`base64`).optional()}),n=e.z.object({testCaseId:e.z.string(),decisionCode:e.z.number().int(),exitStatus:e.z.number().int().optional(),stdin:e.z.string().optional(),stdout:e.z.string().optional(),stderr:e.z.string().optional(),timeSeconds:e.z.number().optional(),memoryBytes:e.z.number().optional(),feedbackMarkdown:e.z.string().optional(),outputFiles:e.z.array(t).optional()});exports.TEST_CASE_RESULT_PREFIX=`TEST_CASE_RESULT `,exports.testCaseResultSchema=n;
//# sourceMappingURL=testCaseResult.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":"testCaseResult.cjs","sources":["../../src/types/testCaseResult.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TEST_CASE_RESULT_PREFIX = 'TEST_CASE_RESULT ';\n\nconst testCaseResultOutputFileSchema = z.object({\n path: z.string(),\n data: z.string(),\n encoding: z.literal('base64').optional(),\n});\n\nexport const testCaseResultSchema = z.object({\n testCaseId: z.string(),\n decisionCode: z.number().int(),\n exitStatus: z.number().int().optional(),\n stdin: z.string().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n timeSeconds: z.number().optional(),\n memoryBytes: z.number().optional(),\n feedbackMarkdown: z.string().optional(),\n outputFiles: z.array(testCaseResultOutputFileSchema).optional(),\n});\n\nexport type TestCaseResult = z.infer<typeof testCaseResultSchema>;\n"],"names":["testCaseResultOutputFileSchema","z","object","path","string","data","encoding","literal","optional","testCaseResultSchema","testCaseId","decisionCode","number","exitStatus","stdin","stdout","stderr","timeSeconds","memoryBytes","feedbackMarkdown","outputFiles","array"],"mappings":"kCAIMA,EAAiCC,EAAAA,EAAEC,OAAO,CAC9CC,KAAMF,EAAAA,EAAEG,SACRC,KAAMJ,EAAAA,EAAEG,SACRE,SAAUL,EAAAA,EAAEM,QAAQ,UAAUC,aAGnBC,EAAuBR,EAAAA,EAAEC,OAAO,CAC3CQ,WAAYT,EAAAA,EAAEG,SACdO,aAAcV,EAAAA,EAAEW,SAAQ,MACxBC,WAAYZ,EAAAA,EAAEW,SAAQ,MAAOJ,WAC7BM,MAAOb,EAAAA,EAAEG,SAASI,WAClBO,OAAQd,EAAAA,EAAEG,SAASI,WACnBQ,OAAQf,EAAAA,EAAEG,SAASI,WACnBS,YAAahB,EAAAA,EAAEW,SAASJ,WACxBU,YAAajB,EAAAA,EAAEW,SAASJ,WACxBW,iBAAkBlB,EAAAA,EAAEG,SAASI,WAC7BY,YAAanB,EAAAA,EAAEoB,MAAMrB,GAAgCQ,6CAlBhB"}
{"version":3,"file":"testCaseResult.cjs","names":["z"],"sources":["../../src/types/testCaseResult.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TEST_CASE_RESULT_PREFIX = 'TEST_CASE_RESULT ';\n\nconst testCaseResultOutputFileSchema = z.object({\n path: z.string(),\n data: z.string(),\n encoding: z.literal('base64').optional(),\n});\n\nexport const testCaseResultSchema = z.object({\n testCaseId: z.string(),\n decisionCode: z.number().int(),\n exitStatus: z.number().int().optional(),\n stdin: z.string().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n timeSeconds: z.number().optional(),\n memoryBytes: z.number().optional(),\n feedbackMarkdown: z.string().optional(),\n outputFiles: z.array(testCaseResultOutputFileSchema).optional(),\n});\n\nexport type TestCaseResult = z.infer<typeof testCaseResultSchema>;\n"],"mappings":"kCAEA,MAEM,EAAiCA,EAAAA,EAAE,OAAO,CAC9C,KAAMA,EAAAA,EAAE,OAAO,EACf,KAAMA,EAAAA,EAAE,OAAO,EACf,SAAUA,EAAAA,EAAE,QAAQ,QAAQ,CAAC,CAAC,SAAS,CACzC,CAAC,EAEY,EAAuBA,EAAAA,EAAE,OAAO,CAC3C,WAAYA,EAAAA,EAAE,OAAO,EACrB,aAAcA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,EAC7B,WAAYA,EAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EACtC,MAAOA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EAC3B,OAAQA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EAC5B,OAAQA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EAC5B,YAAaA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EACjC,YAAaA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EACjC,iBAAkBA,EAAAA,EAAE,OAAO,CAAC,CAAC,SAAS,EACtC,YAAaA,EAAAA,EAAE,MAAM,CAA8B,CAAC,CAAC,SAAS,CAChE,CAAC"}

@@ -1,2 +0,2 @@

import{z as t}from"zod";var o="TEST_CASE_RESULT ",n=t.object({path:t.string(),data:t.string(),encoding:t.literal("base64").optional()}),i=t.object({testCaseId:t.string(),decisionCode:t.number().int(),exitStatus:t.number().int().optional(),stdin:t.string().optional(),stdout:t.string().optional(),stderr:t.string().optional(),timeSeconds:t.number().optional(),memoryBytes:t.number().optional(),feedbackMarkdown:t.string().optional(),outputFiles:t.array(n).optional()});export{o as TEST_CASE_RESULT_PREFIX,i as testCaseResultSchema};
//# sourceMappingURL=testCaseResult.js.map
import{z as e}from"zod";const t=`TEST_CASE_RESULT `,n=e.object({path:e.string(),data:e.string(),encoding:e.literal(`base64`).optional()}),r=e.object({testCaseId:e.string(),decisionCode:e.number().int(),exitStatus:e.number().int().optional(),stdin:e.string().optional(),stdout:e.string().optional(),stderr:e.string().optional(),timeSeconds:e.number().optional(),memoryBytes:e.number().optional(),feedbackMarkdown:e.string().optional(),outputFiles:e.array(n).optional()});export{t as TEST_CASE_RESULT_PREFIX,r as testCaseResultSchema};
//# sourceMappingURL=testCaseResult.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"testCaseResult.js","sources":["../../src/types/testCaseResult.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TEST_CASE_RESULT_PREFIX = 'TEST_CASE_RESULT ';\n\nconst testCaseResultOutputFileSchema = z.object({\n path: z.string(),\n data: z.string(),\n encoding: z.literal('base64').optional(),\n});\n\nexport const testCaseResultSchema = z.object({\n testCaseId: z.string(),\n decisionCode: z.number().int(),\n exitStatus: z.number().int().optional(),\n stdin: z.string().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n timeSeconds: z.number().optional(),\n memoryBytes: z.number().optional(),\n feedbackMarkdown: z.string().optional(),\n outputFiles: z.array(testCaseResultOutputFileSchema).optional(),\n});\n\nexport type TestCaseResult = z.infer<typeof testCaseResultSchema>;\n"],"names":["TEST_CASE_RESULT_PREFIX","testCaseResultOutputFileSchema","z","object","path","string","data","encoding","literal","optional","testCaseResultSchema","testCaseId","decisionCode","number","exitStatus","stdin","stdout","stderr","timeSeconds","memoryBytes","feedbackMarkdown","outputFiles","array"],"mappings":"wBAEO,IAAMA,EAA0B,oBAEjCC,EAAiCC,EAAEC,OAAO,CAC9CC,KAAMF,EAAEG,SACRC,KAAMJ,EAAEG,SACRE,SAAUL,EAAEM,QAAQ,UAAUC,aAGnBC,EAAuBR,EAAEC,OAAO,CAC3CQ,WAAYT,EAAEG,SACdO,aAAcV,EAAEW,SAAQ,MACxBC,WAAYZ,EAAEW,SAAQ,MAAOJ,WAC7BM,MAAOb,EAAEG,SAASI,WAClBO,OAAQd,EAAEG,SAASI,WACnBQ,OAAQf,EAAEG,SAASI,WACnBS,YAAahB,EAAEW,SAASJ,WACxBU,YAAajB,EAAEW,SAASJ,WACxBW,iBAAkBlB,EAAEG,SAASI,WAC7BY,YAAanB,EAAEoB,MAAMrB,GAAgCQ"}
{"version":3,"file":"testCaseResult.js","names":[],"sources":["../../src/types/testCaseResult.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TEST_CASE_RESULT_PREFIX = 'TEST_CASE_RESULT ';\n\nconst testCaseResultOutputFileSchema = z.object({\n path: z.string(),\n data: z.string(),\n encoding: z.literal('base64').optional(),\n});\n\nexport const testCaseResultSchema = z.object({\n testCaseId: z.string(),\n decisionCode: z.number().int(),\n exitStatus: z.number().int().optional(),\n stdin: z.string().optional(),\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n timeSeconds: z.number().optional(),\n memoryBytes: z.number().optional(),\n feedbackMarkdown: z.string().optional(),\n outputFiles: z.array(testCaseResultOutputFileSchema).optional(),\n});\n\nexport type TestCaseResult = z.infer<typeof testCaseResultSchema>;\n"],"mappings":"wBAEA,MAAa,EAA0B,oBAEjC,EAAiC,EAAE,OAAO,CAC9C,KAAM,EAAE,OAAO,EACf,KAAM,EAAE,OAAO,EACf,SAAU,EAAE,QAAQ,QAAQ,CAAC,CAAC,SAAS,CACzC,CAAC,EAEY,EAAuB,EAAE,OAAO,CAC3C,WAAY,EAAE,OAAO,EACrB,aAAc,EAAE,OAAO,CAAC,CAAC,IAAI,EAC7B,WAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EACtC,MAAO,EAAE,OAAO,CAAC,CAAC,SAAS,EAC3B,OAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,EAC5B,OAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,EAC5B,YAAa,EAAE,OAAO,CAAC,CAAC,SAAS,EACjC,YAAa,EAAE,OAAO,CAAC,CAAC,SAAS,EACjC,iBAAkB,EAAE,OAAO,CAAC,CAAC,SAAS,EACtC,YAAa,EAAE,MAAM,CAA8B,CAAC,CAAC,SAAS,CAChE,CAAC"}
{
"name": "@exercode/problem-utils",
"version": "1.16.6",
"version": "1.16.7",
"description": ":100: A set of utilities for judging programs on Exercode (https://exercode.willbooster.com/).",

@@ -53,7 +53,7 @@ "keywords": [

"dependencies": {
"@ai-sdk/amazon-bedrock": "4.0.120",
"@ai-sdk/google": "3.0.83",
"@ai-sdk/openai": "3.0.74",
"@ai-sdk/xai": "3.0.96",
"ai": "6.0.208",
"@ai-sdk/amazon-bedrock": "4.0.124",
"@ai-sdk/google": "3.0.86",
"@ai-sdk/openai": "3.0.77",
"@ai-sdk/xai": "3.0.100",
"ai": "6.0.214",
"front-matter": "4.0.2",

@@ -67,15 +67,15 @@ "zod": "4.4.3"

"@types/node": "24.13.2",
"@typescript/native-preview": "7.0.0-dev.20260622.1",
"@typescript/native-preview": "7.0.0-dev.20260628.1",
"@willbooster/oxfmt-config": "1.2.2",
"@willbooster/oxlint-config": "1.4.8",
"@willbooster/prettier-config": "10.4.0",
"@willbooster/wb": "13.22.18",
"build-ts": "17.1.26",
"@willbooster/wb": "13.22.19",
"build-ts": "17.1.30",
"conventional-changelog-conventionalcommits": "9.3.1",
"lefthook": "2.1.9",
"oxfmt": "0.56.0",
"oxlint": "1.71.0",
"oxlint-tsgolint": "0.23.0",
"prettier": "3.8.4",
"prettier-plugin-java": "2.9.7",
"oxfmt": "0.57.0",
"oxlint": "1.72.0",
"oxlint-tsgolint": "0.24.0",
"prettier": "3.9.1",
"prettier-plugin-java": "2.10.1",
"puppeteer": "24.43.1",

@@ -82,0 +82,0 @@ "semantic-release": "25.0.5",

"use strict";function r(r,t){(null==t||t>r.length)&&(t=r.length);for(var e=0,n=Array(t);e<t;e++)n[e]=r[e];return n}function t(r){if(Array.isArray(r))return r}function e(t){if(Array.isArray(t))return r(t)}function n(r,t,e,n,o,i,a){try{var u=r[i](a),f=u.value}catch(r){return void e(r)}u.done?t(f):Promise.resolve(f).then(n,o)}function o(r,t,e){return(t=b(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}function i(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function a(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var n,o,i,a,u=[],f=!0,c=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;f=!1}else for(;!(f=(n=i.call(e)).done)&&(u.push(n.value),u.length!==t);f=!0);}catch(r){c=!0,o=r}finally{try{if(!f&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}function u(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),e.push.apply(e,n)}return e}function l(r,t){if(null==r)return{};var e={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(-1!==t.indexOf(n))continue;e[n]=r[n]}return e}function y(){
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
var r,t,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var f=n&&n.prototype instanceof u?n:u,c=Object.create(f.prototype);return p(c,"_invoke",function(e,n,o){var i,u,f,c=0,l=o||[],y=!1,p={p:0,n:0,v:r,a:s,f:s.bind(r,4),d:function(t,e){return i=t,u=0,f=r,p.n=e,a}};function s(e,n){for(u=e,f=n,t=0;!y&&c&&!o&&t<l.length;t++){var o,i=l[t],s=p.p,b=i[2];e>3?(o=b===n)&&(f=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=r):i[0]<=s&&((o=e<2&&s<i[1])?(u=0,p.v=n,p.n=i[1]):s<b&&(o=e<3||i[0]>n||n>b)&&(i[4]=e,i[5]=n,p.n=b,u=0))}if(o||e>1)return a;throw y=!0,n}return function(o,l,b){if(c>1)throw TypeError("Generator is already running");for(y&&1===l&&s(l,b),u=l,f=b;(t=u<2?r:f)||!y;){i||(u?u<3?(u>1&&(p.n=-1),s(u,f)):p.n=f:p.v=f);try{if(c=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,f)))throw TypeError("iterator result is not an object");if(!t.done)return t;f=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(f=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=r}else if((t=(y=p.n<0)?f:e.call(n,p))!==a)break}catch(t){i=r,u=1,f=t}finally{c=1}}return{value:t,done:y}}}(e,o,i),!0),c}var a={};function u(){}function f(){}function c(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(p(t={},n,function(){return this}),t),s=c.prototype=u.prototype=Object.create(l);function b(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,c):(r.__proto__=c,p(r,o,"GeneratorFunction")),r.prototype=Object.create(s),r}return f.prototype=c,p(s,"constructor",c),p(c,"constructor",f),f.displayName="GeneratorFunction",p(c,o,"GeneratorFunction"),p(s),p(s,o,"Generator"),p(s,n,function(){return this}),p(s,"toString",function(){return"[object Generator]"}),(y=function(){return{w:i,m:b}})()}function p(r,t,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(r){o=0}p=function(r,t,e,n){function i(t,e){p(r,t,function(r){return this._invoke(t,e,r)})}t?o?o(r,t,{value:e,enumerable:!n,configurable:!n,writable:!n}):r[t]=e:(i("next",0),i("throw",1),i("return",2))},p(r,t,e,n)}function s(r,t){if("object"!=typeof r||!r)return r;var e=r[Symbol.toPrimitive];if(void 0!==e){var n=e.call(r,t);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(r)}function b(r){var t=s(r,"string");return"symbol"==typeof t?t:t+""}function v(r){"@babel/helpers - typeof";return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},v(r)}function m(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}exports.arrayLikeToArray=r,exports.arrayWithHoles=t,exports.arrayWithoutHoles=e,exports.asyncToGenerator=function(r){return function(){var t=this,e=arguments;return new Promise(function(o,i){var a=r.apply(t,e);function u(r){n(a,o,i,u,f,"next",r)}function f(r){n(a,o,i,u,f,"throw",r)}u(void 0)})}},exports.createForOfIteratorHelper=function(r,t){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!e){if(Array.isArray(r)||(e=m(r))||t&&r&&"number"==typeof r.length){e&&(r=e);var n=0,o=function(){};return{s:o,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(r)},n:function(){var r=e.next();return a=r.done,r},e:function(r){u=!0,i=r},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}},exports.defineProperty=o,exports.iterableToArray=i,exports.iterableToArrayLimit=a,exports.nonIterableRest=u,exports.nonIterableSpread=f,exports.objectSpread2=function(r){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?c(Object(e),!0).forEach(function(t){o(r,t,e[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):c(Object(e)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(e,t))})}return r},exports.objectWithoutProperties=function(r,t){if(null==r)return{};var e,n,o=l(r,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(n=0;n<i.length;n++)e=i[n],-1===t.indexOf(e)&&{}.propertyIsEnumerable.call(r,e)&&(o[e]=r[e])}return o},exports.objectWithoutPropertiesLoose=l,exports.regenerator=y,exports.regeneratorDefine=p,exports.regeneratorValues=function(r){if(null!=r){var t=r["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],e=0;if(t)return t.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length))return{next:function(){return r&&e>=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}}}throw new TypeError(typeof r+" is not iterable")},exports.slicedToArray=function(r,e){return t(r)||a(r,e)||m(r,e)||u()},exports.toConsumableArray=function(r){return e(r)||i(r)||m(r)||f()},exports.toPrimitive=s,exports.toPropertyKey=b,exports.typeof=v,exports.unsupportedIterableToArray=m;
//# sourceMappingURL=_rollupPluginBabelHelpers.cjs.map
{"version":3,"file":"_rollupPluginBabelHelpers.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
function r(r,t){(null==t||t>r.length)&&(t=r.length);for(var e=0,n=Array(t);e<t;e++)n[e]=r[e];return n}function t(r){if(Array.isArray(r))return r}function e(t){if(Array.isArray(t))return r(t)}function n(r,t,e,n,o,i,a){try{var u=r[i](a),f=u.value}catch(r){return void e(r)}u.done?t(f):Promise.resolve(f).then(n,o)}function o(r){return function(){var t=this,e=arguments;return new Promise(function(o,i){var a=r.apply(t,e);function u(r){n(a,o,i,u,f,"next",r)}function f(r){n(a,o,i,u,f,"throw",r)}u(void 0)})}}function i(r,t){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!e){if(Array.isArray(r)||(e=S(r))||t&&r&&"number"==typeof r.length){e&&(r=e);var n=0,o=function(){};return{s:o,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(r)},n:function(){var r=e.next();return a=r.done,r},e:function(r){u=!0,i=r},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}}function a(r,t,e){return(t=j(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}function u(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function f(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var n,o,i,a,u=[],f=!0,c=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;f=!1}else for(;!(f=(n=i.call(e)).done)&&(u.push(n.value),u.length!==t);f=!0);}catch(r){c=!0,o=r}finally{try{if(!f&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}function c(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function y(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable})),e.push.apply(e,n)}return e}function s(r){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?y(Object(e),!0).forEach(function(t){a(r,t,e[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):y(Object(e)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(e,t))})}return r}function p(r,t){if(null==r)return{};var e,n,o=b(r,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(n=0;n<i.length;n++)e=i[n],-1===t.indexOf(e)&&{}.propertyIsEnumerable.call(r,e)&&(o[e]=r[e])}return o}function b(r,t){if(null==r)return{};var e={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(-1!==t.indexOf(n))continue;e[n]=r[n]}return e}function v(){
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
var r,t,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var f=n&&n.prototype instanceof u?n:u,c=Object.create(f.prototype);return m(c,"_invoke",function(e,n,o){var i,u,f,c=0,l=o||[],y=!1,s={p:0,n:0,v:r,a:p,f:p.bind(r,4),d:function(t,e){return i=t,u=0,f=r,s.n=e,a}};function p(e,n){for(u=e,f=n,t=0;!y&&c&&!o&&t<l.length;t++){var o,i=l[t],p=s.p,b=i[2];e>3?(o=b===n)&&(f=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=r):i[0]<=p&&((o=e<2&&p<i[1])?(u=0,s.v=n,s.n=i[1]):p<b&&(o=e<3||i[0]>n||n>b)&&(i[4]=e,i[5]=n,s.n=b,u=0))}if(o||e>1)return a;throw y=!0,n}return function(o,l,b){if(c>1)throw TypeError("Generator is already running");for(y&&1===l&&p(l,b),u=l,f=b;(t=u<2?r:f)||!y;){i||(u?u<3?(u>1&&(s.n=-1),p(u,f)):s.n=f:s.v=f);try{if(c=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,f)))throw TypeError("iterator result is not an object");if(!t.done)return t;f=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(f=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=r}else if((t=(y=s.n<0)?f:e.call(n,s))!==a)break}catch(t){i=r,u=1,f=t}finally{c=1}}return{value:t,done:y}}}(e,o,i),!0),c}var a={};function u(){}function f(){}function c(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(m(t={},n,function(){return this}),t),y=c.prototype=u.prototype=Object.create(l);function s(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,c):(r.__proto__=c,m(r,o,"GeneratorFunction")),r.prototype=Object.create(y),r}return f.prototype=c,m(y,"constructor",c),m(c,"constructor",f),f.displayName="GeneratorFunction",m(c,o,"GeneratorFunction"),m(y),m(y,o,"Generator"),m(y,n,function(){return this}),m(y,"toString",function(){return"[object Generator]"}),(v=function(){return{w:i,m:s}})()}function m(r,t,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(r){o=0}m=function(r,t,e,n){function i(t,e){m(r,t,function(r){return this._invoke(t,e,r)})}t?o?o(r,t,{value:e,enumerable:!n,configurable:!n,writable:!n}):r[t]=e:(i("next",0),i("throw",1),i("return",2))},m(r,t,e,n)}function h(r){if(null!=r){var t=r["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],e=0;if(t)return t.call(r);if("function"==typeof r.next)return r;if(!isNaN(r.length))return{next:function(){return r&&e>=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}}}throw new TypeError(typeof r+" is not iterable")}function d(r,e){return t(r)||f(r,e)||S(r,e)||c()}function O(r){return e(r)||u(r)||S(r)||l()}function g(r,t){if("object"!=typeof r||!r)return r;var e=r[Symbol.toPrimitive];if(void 0!==e){var n=e.call(r,t);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(r)}function j(r){var t=g(r,"string");return"symbol"==typeof t?t:t+""}function w(r){"@babel/helpers - typeof";return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},w(r)}function S(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}export{r as arrayLikeToArray,t as arrayWithHoles,e as arrayWithoutHoles,o as asyncToGenerator,i as createForOfIteratorHelper,a as defineProperty,u as iterableToArray,f as iterableToArrayLimit,c as nonIterableRest,l as nonIterableSpread,s as objectSpread2,p as objectWithoutProperties,b as objectWithoutPropertiesLoose,v as regenerator,m as regeneratorDefine,h as regeneratorValues,d as slicedToArray,O as toConsumableArray,g as toPrimitive,j as toPropertyKey,w as typeof,S as unsupportedIterableToArray};
//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
{"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}