🚀 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
73
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.0
to
1.16.1
+1
-1
dist/helpers/runCommandInTemporaryPackageManagerProject.cjs

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

"use strict";var e,r,t=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:child_process"),o=require("node:fs/promises"),a=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","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.yml",".yarn"]},s=(e="darwin"===a.platform()?"gtime":"/usr/bin/time",(r=n.spawnSync(e,["--version"],{stdio:"ignore"})).error||0!==r.status?void 0:[e,"--format","%e %M"]);function u(){return u=t.asyncToGenerator(t.regenerator().m(function e(r){var n,c,s,u,d,m,l,y,g;return t.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,o.mkdtemp(i.join(a.tmpdir(),null!=(n=r.tempDirPrefix)?n:"exercode-"));case 1:return c=e.v,e.p=2,e.n=3,o.cp(r.cwd,c,{recursive:!0});case 3:return e.n=4,p({packageManager:r.packageManager,projectDir:r.projectDir,runDir:c,projectFilePaths:r.projectFilePaths});case 4:return m="function"==typeof r.command?r.command({runDir:c}):r.command,l=Date.now(),e.n=5,f(m,{cwd:c,env:r.env?t.objectSpread2(t.objectSpread2({},process.env),r.env):process.env,outputLimitBytes:null!=(s=r.outputLimitBytes)?s:52428800,stdin:null!=(u=r.stdin)?u:"",timeLimitSeconds:r.timeLimitSeconds});case 5:return y=e.v,g=(Date.now()-l)/1e3,e.a(2,{stdin:null!=(d=r.stdin)?d:"",stdout:y.stdout,stderr:y.stderr,status:y.timedOut||y.outputLimitExceeded?0:y.status,timeSeconds:y.timedOut?r.timeLimitSeconds+.001:y.timeSeconds||g,memoryBytes:y.memoryBytes,timedOut:y.timedOut,signal:y.signal,outputLimitExceeded:y.outputLimitExceeded});case 6:return e.p=6,e.n=7,o.rm(c,{force:!0,recursive:!0});case 7:return e.f(6);case 8:return e.a(2)}},e,null,[[2,,6,8]])})),u.apply(this,arguments)}function p(e){return d.apply(this,arguments)}function d(){return(d=t.asyncToGenerator(t.regenerator().m(function e(r){var n,o,a,s,u;return t.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:o=t.createForOfIteratorHelper(null!=(n=r.projectFilePaths)?n:c[r.packageManager]),e.p=1,o.s();case 2:if((a=o.n()).done){e.n=4;break}return s=a.value,e.n=3,m(i.join(r.projectDir,s),i.join(r.runDir,s));case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,u=e.v,o.e(u);case 6:return e.p=6,o.f(),e.f(6);case 7:return e.a(2)}},e,null,[[1,5,6,7]])}))).apply(this,arguments)}function m(e,r){return l.apply(this,arguments)}function l(){return(l=t.asyncToGenerator(t.regenerator().m(function e(r,n){var a;return t.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,o.cp(r,n,{recursive:!0});case 1:e.n=3;break;case 2:if(e.p=2,a=e.v,"ENOENT"===("object"===t.typeof(a)&&null!==a&&"code"in a?a.code:void 0)){e.n=3;break}throw a;case 3:return e.a(2)}},e,null,[[0,2]])}))).apply(this,arguments)}function f(e,r){return y.apply(this,arguments)}function y(){return y=t.asyncToGenerator(t.regenerator().m(function e(r,o){var a,c,u,p,d,m,l,f,y,b,k,w,h,L,j,S,B,E;return t.regenerator().w(function(e){for(;;)switch(e.n){case 0:return a=void 0===s?void 0:i.join(o.cwd,".exercode-time-result"),c=void 0===s?r:[].concat(t.toConsumableArray(s),["--output=".concat(a)],t.toConsumableArray(r)),u=n.spawn(c[0],c.slice(1),{cwd:o.cwd,detached:"win32"!==process.platform,env:o.env,stdio:["pipe","pipe","pipe"]}),p=[],d=[],m=0,l=!1,f=!1,y=function(e,r){if(m>=o.outputLimitBytes)r.byteLength>0&&(f=!0,g(u,"SIGKILL"));else{var t=o.outputLimitBytes-m,n=r.byteLength>t?r.subarray(0,t):r;e.push(n),m+=n.byteLength,r.byteLength>t&&(f=!0,g(u,"SIGKILL"))}},u.stdout.on("data",function(e){return y(p,e)}),u.stderr.on("data",function(e){return y(d,e)}),b=setTimeout(function(){l=!0,g(u,"SIGTERM")},1e3*o.timeLimitSeconds),(k=setTimeout(function(){l&&g(u,"SIGKILL")},1e3*o.timeLimitSeconds+1e3)).unref(),e.n=1,new Promise(function(e,r){var t,n=!1,a=function(e){n||(t=e,g(u,"SIGKILL"),void 0===u.pid&&(n=!0,r(e)))};u.on("error",a),u.stdin.on("error",function(e){"EPIPE"!==e.code&&a(e)}),u.on("close",function(o,a){n||(n=!0,t?r(t):e({status:null!=o?o:void 0,signal:null!=a?a:void 0}))}),u.stdin.end(o.stdin)}).finally(function(){clearTimeout(b),clearTimeout(k)});case 1:if(w=e.v,h=w.status,L=w.signal,void 0!==a){e.n=2;break}E={timeSeconds:0,memoryBytes:0},e.n=4;break;case 2:return e.n=3,v(a);case 3:E=e.v;case 4:return S=(j=E).timeSeconds,B=j.memoryBytes,e.a(2,{stdout:Buffer.concat(p).toString(),stderr:Buffer.concat(d).toString(),status:h,timeSeconds:S,memoryBytes:B,timedOut:l,signal:L,outputLimitExceeded:f})}},e)})),y.apply(this,arguments)}function g(e,r){if(void 0!==e.pid)try{if("win32"===process.platform)return void e.kill(r);process.kill(-e.pid,r)}catch(e){var n="object"===t.typeof(e)&&null!==e&&"code"in e?e.code:void 0;if("ESRCH"!==n&&"EPERM"!==n)throw e}}function v(e){return b.apply(this,arguments)}function b(){return(b=t.asyncToGenerator(t.regenerator().m(function e(r){var n,a,i;return t.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,o.readFile(r,"utf8");case 1:n=e.v,e.n=4;break;case 2:if(e.p=2,i=e.v,"ENOENT"===("object"===t.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(a=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(n)){e.n=5;break}return e.a(2,{timeSeconds:0,memoryBytes:0});case 5:return e.a(2,{timeSeconds:Number(a[1].replace(",",".")),memoryBytes:1024*Number(a[2])})}},e,null,[[0,2]])}))).apply(this,arguments)}exports.copyPackageManagerProjectFiles=p,exports.runCommandInTemporaryPackageManagerProject=function(e){return u.apply(this,arguments)};
"use strict";var e,t,n=require("../_virtual/_rollupPluginBabelHelpers.cjs"),r=require("node:child_process"),o=require("node:fs/promises"),i=require("node:os"),a=require("node:path"),s={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","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.yml",".yarn"]},u={bun:["bun","install","--silent"],npm:["npm","install","--silent"],pnpm:["pnpm","install","--silent"],yarn:["yarn","install","--silent"]},c=(e="darwin"===i.platform()?"gtime":"/usr/bin/time",(t=r.spawnSync(e,["--version"],{stdio:"ignore"})).error||0!==t.status?void 0:[e,"--format","%e %M"]);function l(){return l=n.asyncToGenerator(n.regenerator().m(function e(t){var r,s,u,c,l,y,g,v,k,S,w,h,L,j,B,E,T,x,P,D,G;return n.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,o.mkdtemp(a.join(i.tmpdir(),null!=(r=t.tempDirPrefix)?r:"exercode-"));case 1:return s=e.v,e.p=2,e.n=3,o.cp(t.cwd,s,{recursive:!0});case 3:return e.n=4,f({packageManager:t.packageManager,projectDir:t.projectDir,runDir:s,projectFilePaths:t.projectFilePaths});case 4:if(l=t.env?n.objectSpread2(n.objectSpread2({},process.env),t.env):process.env,y=m(t,s),g="function"==typeof t.command?t.command({runDir:s}):t.command,v=Date.now(),k=null!=(u=t.outputLimitBytes)?u:52428800,!y){e.n=6;break}return e.n=5,b(y,{cwd:s,env:l,outputLimitBytes:k,stdin:"",timeLimitSeconds:t.timeLimitSeconds});case 5:if(!p(S=e.v)){e.n=6;break}return e.a(2,d({elapsedTimeSeconds:(Date.now()-v)/1e3,options:t,result:S}));case 6:if(!((w=t.timeLimitSeconds-(Date.now()-v)/1e3)<=0)){e.n=7;break}return e.a(2,{stdin:null!=(h=t.stdin)?h:"",stdout:null!=(L=null==(j=S)?void 0:j.stdout)?L:"",stderr:null!=(B=null==(E=S)?void 0:E.stderr)?B:"",status:0,timeSeconds:t.timeLimitSeconds+.001,memoryBytes:null!=(T=null==(x=S)?void 0:x.memoryBytes)?T:0,timedOut:!0,signal:null==(P=S)?void 0:P.signal,outputLimitExceeded:!1});case 7:return e.n=8,b(g,{cwd:s,env:l,outputLimitBytes:k,stdin:null!=(c=t.stdin)?c:"",timeLimitSeconds:w});case 8:if(D=e.v,G=(Date.now()-v)/1e3,!S){e.n=9;break}return e.a(2,d({elapsedTimeSeconds:G,options:t,result:n.objectSpread2(n.objectSpread2({},D),{},{timeSeconds:S.timeSeconds+D.timeSeconds,memoryBytes:Math.max(S.memoryBytes,D.memoryBytes)})}));case 9:return e.a(2,d({elapsedTimeSeconds:G,options:t,result:D}));case 10:return e.p=10,e.n=11,o.rm(s,{force:!0,recursive:!0});case 11:return e.f(10);case 12:return e.a(2)}},e,null,[[2,,10,12]])})),l.apply(this,arguments)}function d(e){var t;return{stdin:null!=(t=e.options.stdin)?t:"",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 m(e,t){if(e.install){if(!0===e.install){var n=u[e.packageManager];if(void 0===n)throw new Error("No default install command is available for package manager: ".concat(e.packageManager));return n}return"function"==typeof e.install?e.install({runDir:t}):e.install}}function p(e){return 0!==e.status||e.timedOut||e.outputLimitExceeded}function f(e){return y.apply(this,arguments)}function y(){return(y=n.asyncToGenerator(n.regenerator().m(function e(t){var r,o,i,u,c;return n.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:o=n.createForOfIteratorHelper(null!=(r=t.projectFilePaths)?r:s[t.packageManager]),e.p=1,o.s();case 2:if((i=o.n()).done){e.n=4;break}return u=i.value,e.n=3,g(a.join(t.projectDir,u),a.join(t.runDir,u));case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,c=e.v,o.e(c);case 6:return e.p=6,o.f(),e.f(6);case 7:return e.a(2)}},e,null,[[1,5,6,7]])}))).apply(this,arguments)}function g(e,t){return v.apply(this,arguments)}function v(){return(v=n.asyncToGenerator(n.regenerator().m(function e(t,r){var i;return n.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,o.cp(t,r,{recursive:!0});case 1:e.n=3;break;case 2:if(e.p=2,i=e.v,"ENOENT"===("object"===n.typeof(i)&&null!==i&&"code"in i?i.code:void 0)){e.n=3;break}throw i;case 3:return e.a(2)}},e,null,[[0,2]])}))).apply(this,arguments)}function b(e,t){return k.apply(this,arguments)}function k(){return k=n.asyncToGenerator(n.regenerator().m(function e(t,o){var i,s,u,l,d,m,p,f,y,g,v,b,k,h,L,j,B,E;return n.regenerator().w(function(e){for(;;)switch(e.n){case 0:return i=void 0===c?void 0:a.join(o.cwd,".exercode-time-result"),s=void 0===c?t:[].concat(n.toConsumableArray(c),["--output=".concat(i)],n.toConsumableArray(t)),u=r.spawn(s[0],s.slice(1),{cwd:o.cwd,detached:"win32"!==process.platform,env:o.env,stdio:["pipe","pipe","pipe"]}),l=[],d=[],m=0,p=!1,f=!1,y=function(e,t){if(m>=o.outputLimitBytes)t.byteLength>0&&(f=!0,S(u,"SIGKILL"));else{var n=o.outputLimitBytes-m,r=t.byteLength>n?t.subarray(0,n):t;e.push(r),m+=r.byteLength,t.byteLength>n&&(f=!0,S(u,"SIGKILL"))}},u.stdout.on("data",function(e){return y(l,e)}),u.stderr.on("data",function(e){return y(d,e)}),g=setTimeout(function(){p=!0,S(u,"SIGTERM")},1e3*o.timeLimitSeconds),(v=setTimeout(function(){p&&S(u,"SIGKILL")},1e3*o.timeLimitSeconds+1e3)).unref(),e.n=1,new Promise(function(e,t){var n,r=!1,i=function(e){r||(n=e,S(u,"SIGKILL"),void 0===u.pid&&(r=!0,t(e)))};u.on("error",i),u.stdin.on("error",function(e){"EPIPE"!==e.code&&i(e)}),u.on("close",function(o,i){r||(r=!0,n?t(n):e({status:null!=o?o:void 0,signal:null!=i?i:void 0}))}),u.stdin.end(o.stdin)}).finally(function(){clearTimeout(g),clearTimeout(v)});case 1:if(b=e.v,k=b.status,h=b.signal,void 0!==i){e.n=2;break}E={timeSeconds:0,memoryBytes:0},e.n=4;break;case 2:return e.n=3,w(i);case 3:E=e.v;case 4:return j=(L=E).timeSeconds,B=L.memoryBytes,e.a(2,{stdout:Buffer.concat(l).toString(),stderr:Buffer.concat(d).toString(),status:k,timeSeconds:j,memoryBytes:B,timedOut:p,signal:h,outputLimitExceeded:f})}},e)})),k.apply(this,arguments)}function S(e,t){if(void 0!==e.pid)try{if("win32"===process.platform)return void e.kill(t);process.kill(-e.pid,t)}catch(e){var r="object"===n.typeof(e)&&null!==e&&"code"in e?e.code:void 0;if("ESRCH"!==r&&"EPERM"!==r)throw e}}function w(e){return h.apply(this,arguments)}function h(){return(h=n.asyncToGenerator(n.regenerator().m(function e(t){var r,i,a;return n.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,o.readFile(t,"utf8");case 1:r=e.v,e.n=4;break;case 2:if(e.p=2,a=e.v,"ENOENT"===("object"===n.typeof(a)&&null!==a&&"code"in a?a.code:void 0)){e.n=3;break}throw a;case 3:return e.a(2,{timeSeconds:0,memoryBytes:0});case 4:if(i=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(r)){e.n=5;break}return e.a(2,{timeSeconds:0,memoryBytes:0});case 5:return e.a(2,{timeSeconds:Number(i[1].replace(",",".")),memoryBytes:1024*Number(i[2])})}},e,null,[[0,2]])}))).apply(this,arguments)}exports.copyPackageManagerProjectFiles=f,exports.runCommandInTemporaryPackageManagerProject=function(e){return l.apply(this,arguments)};
//# 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';\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',\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.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\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, runs a command, and then\n * 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 command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env: options.env ? { ...process.env, ...options.env } : process.env,\n outputLimitBytes: options.outputLimitBytes ?? defaultOutputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n return {\n stdin: options.stdin ?? '',\n stdout: result.stdout,\n stderr: result.stderr,\n status: result.timedOut || result.outputLimitExceeded ? 0 : result.status,\n timeSeconds: result.timedOut ? options.timeLimitSeconds + 1e-3 : result.timeSeconds || elapsedTimeSeconds,\n memoryBytes: result.memoryBytes,\n timedOut: result.timedOut,\n signal: result.signal,\n outputLimitExceeded: result.outputLimitExceeded,\n };\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\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","timeCommand","os","platform","childProcess","spawnSync","stdio","error","status","_runCommandInTemporaryPackageManagerProject","_asyncToGenerator","_regenerator","m","_callee","options","_options$tempDirPrefi","runDir","_options$outputLimitB","_options$stdin","_options$stdin2","startedAt","elapsedTimeSeconds","w","_context","p","n","fs","mkdtemp","path","join","tmpdir","tempDirPrefix","v","cp","cwd","recursive","copyPackageManagerProjectFiles","packageManager","projectDir","projectFilePaths","Date","now","spawnWithInput","env","_objectSpread","process","outputLimitBytes","stdin","timeLimitSeconds","a","stdout","stderr","timedOut","outputLimitExceeded","timeSeconds","memoryBytes","signal","rm","force","f","apply","this","arguments","_x2","_copyPackageManagerProjectFiles","_callee2","_options$projectFileP","_iterator","_step","projectFilePath","_t","_context2","_createForOfIteratorHelper","s","done","value","copyPathIfExists","e","_x3","_x4","_copyPathIfExists","_callee3","sourcePath","destinationPath","_t2","_context3","_typeof","code","undefined","_x5","_x6","_spawnWithInput","_callee4","context","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t3","_context4","concat","_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","_x7","_readTimeResult","_callee5","content","match","_t4","_context5","readFile","exec","Number","replace","_x"],"mappings":"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"}
{"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';\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 install?:\n | boolean\n | readonly [string, ...string[]]\n | ((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',\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.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommands: Partial<Record<PackageManager, readonly [string, ...string[]]>> = {\n bun: ['bun', 'install', '--silent'],\n npm: ['npm', 'install', '--silent'],\n pnpm: ['pnpm', 'install', '--silent'],\n yarn: ['yarn', 'install', '--silent'],\n};\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, optionally installs\n * dependencies, 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 = resolveInstallCommand(options, 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 options: RunCommandInTemporaryPackageManagerProjectOptions,\n runDir: string\n): readonly [string, ...string[]] | undefined {\n if (!options.install) return undefined;\n if (options.install === true) {\n const installCommand = packageManagerInstallCommands[options.packageManager];\n if (installCommand === undefined) {\n throw new Error(`No default install command is available for package manager: ${options.packageManager}`);\n }\n return installCommand;\n }\n return typeof options.install === 'function' ? options.install({ runDir }) : options.install;\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\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","packageManagerInstallCommands","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","apply","this","arguments","context","_context$options$stdi","install","undefined","Error","concat","_x2","_copyPackageManagerProjectFiles","_callee2","_options$projectFileP","_iterator","_step","projectFilePath","_t","_context2","_createForOfIteratorHelper","s","done","value","copyPathIfExists","e","_x3","_x4","_copyPathIfExists","_callee3","sourcePath","destinationPath","_t2","_context3","_typeof","code","_x5","_x6","_spawnWithInput","_callee4","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t3","_context4","_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","_x7","_readTimeResult","_callee5","content","match","_t4","_context5","readFile","exec","Number","replace","_x"],"mappings":"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"}

@@ -20,2 +20,5 @@ export type PackageManager = 'bun' | 'cargo' | 'go' | 'gradle' | 'maven' | 'npm' | 'pnpm' | 'ruby' | 'uv' | 'yarn';

}) => readonly [string, ...string[]]);
install?: boolean | readonly [string, ...string[]] | ((context: {
runDir: string;
}) => readonly [string, ...string[]]);
stdin?: string;

@@ -30,4 +33,4 @@ env?: NodeJS.ProcessEnv;

* Copies a submission directory to a temporary directory, overlays package
* manager project files from the problem directory, runs a command, and then
* removes the temporary directory.
* manager project files from the problem directory, optionally installs
* dependencies, runs a command, and then removes the temporary directory.
*/

@@ -34,0 +37,0 @@ export declare function runCommandInTemporaryPackageManagerProject(options: RunCommandInTemporaryPackageManagerProjectOptions): Promise<PackageManagerCommandRunResult>;

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

import{asyncToGenerator as e,regenerator as t,objectSpread2 as n,createForOfIteratorHelper as r,typeof as o,toConsumableArray as i}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"node:child_process";import s from"node:fs/promises";import c from"node:os";import u from"node:path";var p,m,d={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","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.yml",".yarn"]},l=(p="darwin"===c.platform()?"gtime":"/usr/bin/time",(m=a.spawnSync(p,["--version"],{stdio:"ignore"})).error||0!==m.status?void 0:[p,"--format","%e %M"]);function f(e){return y.apply(this,arguments)}function y(){return y=e(t().m(function e(r){var o,i,a,p,m,d,l,f,y;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,s.mkdtemp(u.join(c.tmpdir(),null!=(o=r.tempDirPrefix)?o:"exercode-"));case 1:return i=e.v,e.p=2,e.n=3,s.cp(r.cwd,i,{recursive:!0});case 3:return e.n=4,v({packageManager:r.packageManager,projectDir:r.projectDir,runDir:i,projectFilePaths:r.projectFilePaths});case 4:return d="function"==typeof r.command?r.command({runDir:i}):r.command,l=Date.now(),e.n=5,w(d,{cwd:i,env:r.env?n(n({},process.env),r.env):process.env,outputLimitBytes:null!=(a=r.outputLimitBytes)?a:52428800,stdin:null!=(p=r.stdin)?p:"",timeLimitSeconds:r.timeLimitSeconds});case 5:return f=e.v,y=(Date.now()-l)/1e3,e.a(2,{stdin:null!=(m=r.stdin)?m:"",stdout:f.stdout,stderr:f.stderr,status:f.timedOut||f.outputLimitExceeded?0:f.status,timeSeconds:f.timedOut?r.timeLimitSeconds+.001:f.timeSeconds||y,memoryBytes:f.memoryBytes,timedOut:f.timedOut,signal:f.signal,outputLimitExceeded:f.outputLimitExceeded});case 6:return e.p=6,e.n=7,s.rm(i,{force:!0,recursive:!0});case 7:return e.f(6);case 8:return e.a(2)}},e,null,[[2,,6,8]])})),y.apply(this,arguments)}function v(e){return g.apply(this,arguments)}function g(){return(g=e(t().m(function e(n){var o,i,a,s,c;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:i=r(null!=(o=n.projectFilePaths)?o:d[n.packageManager]),e.p=1,i.s();case 2:if((a=i.n()).done){e.n=4;break}return s=a.value,e.n=3,b(u.join(n.projectDir,s),u.join(n.runDir,s));case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,c=e.v,i.e(c);case 6:return e.p=6,i.f(),e.f(6);case 7:return e.a(2)}},e,null,[[1,5,6,7]])}))).apply(this,arguments)}function b(e,t){return k.apply(this,arguments)}function k(){return(k=e(t().m(function e(n,r){var i;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,s.cp(n,r,{recursive:!0});case 1:e.n=3;break;case 2:if(e.p=2,i=e.v,"ENOENT"===("object"===o(i)&&null!==i&&"code"in i?i.code:void 0)){e.n=3;break}throw i;case 3:return e.a(2)}},e,null,[[0,2]])}))).apply(this,arguments)}function w(e,t){return h.apply(this,arguments)}function h(){return h=e(t().m(function e(n,r){var o,s,c,p,m,d,f,y,v,g,b,k,w,h,j,B,E,I;return t().w(function(e){for(;;)switch(e.n){case 0:return o=void 0===l?void 0:u.join(r.cwd,".exercode-time-result"),s=void 0===l?n:[].concat(i(l),["--output=".concat(o)],i(n)),c=a.spawn(s[0],s.slice(1),{cwd:r.cwd,detached:"win32"!==process.platform,env:r.env,stdio:["pipe","pipe","pipe"]}),p=[],m=[],d=0,f=!1,y=!1,v=function(e,t){if(d>=r.outputLimitBytes)t.byteLength>0&&(y=!0,L(c,"SIGKILL"));else{var n=r.outputLimitBytes-d,o=t.byteLength>n?t.subarray(0,n):t;e.push(o),d+=o.byteLength,t.byteLength>n&&(y=!0,L(c,"SIGKILL"))}},c.stdout.on("data",function(e){return v(p,e)}),c.stderr.on("data",function(e){return v(m,e)}),g=setTimeout(function(){f=!0,L(c,"SIGTERM")},1e3*r.timeLimitSeconds),(b=setTimeout(function(){f&&L(c,"SIGKILL")},1e3*r.timeLimitSeconds+1e3)).unref(),e.n=1,new Promise(function(e,t){var n,o=!1,i=function(e){o||(n=e,L(c,"SIGKILL"),void 0===c.pid&&(o=!0,t(e)))};c.on("error",i),c.stdin.on("error",function(e){"EPIPE"!==e.code&&i(e)}),c.on("close",function(r,i){o||(o=!0,n?t(n):e({status:null!=r?r:void 0,signal:null!=i?i:void 0}))}),c.stdin.end(r.stdin)}).finally(function(){clearTimeout(g),clearTimeout(b)});case 1:if(k=e.v,w=k.status,h=k.signal,void 0!==o){e.n=2;break}I={timeSeconds:0,memoryBytes:0},e.n=4;break;case 2:return e.n=3,S(o);case 3:I=e.v;case 4:return B=(j=I).timeSeconds,E=j.memoryBytes,e.a(2,{stdout:Buffer.concat(p).toString(),stderr:Buffer.concat(m).toString(),status:w,timeSeconds:B,memoryBytes:E,timedOut:f,signal:h,outputLimitExceeded:y})}},e)})),h.apply(this,arguments)}function L(e,t){if(void 0!==e.pid)try{if("win32"===process.platform)return void e.kill(t);process.kill(-e.pid,t)}catch(e){var n="object"===o(e)&&null!==e&&"code"in e?e.code:void 0;if("ESRCH"!==n&&"EPERM"!==n)throw e}}function S(e){return j.apply(this,arguments)}function j(){return(j=e(t().m(function e(n){var r,i,a;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,s.readFile(n,"utf8");case 1:r=e.v,e.n=4;break;case 2:if(e.p=2,a=e.v,"ENOENT"===("object"===o(a)&&null!==a&&"code"in a?a.code:void 0)){e.n=3;break}throw a;case 3:return e.a(2,{timeSeconds:0,memoryBytes:0});case 4:if(i=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(r)){e.n=5;break}return e.a(2,{timeSeconds:0,memoryBytes:0});case 5:return e.a(2,{timeSeconds:Number(i[1].replace(",",".")),memoryBytes:1024*Number(i[2])})}},e,null,[[0,2]])}))).apply(this,arguments)}export{v as copyPackageManagerProjectFiles,f as runCommandInTemporaryPackageManagerProject};
import{asyncToGenerator as e,regenerator as t,objectSpread2 as n,createForOfIteratorHelper as r,typeof as i,toConsumableArray as o}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"node:child_process";import a from"node:fs/promises";import u from"node:os";import c from"node:path";var l,m,d={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","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.yml",".yarn"]},p={bun:["bun","install","--silent"],npm:["npm","install","--silent"],pnpm:["pnpm","install","--silent"],yarn:["yarn","install","--silent"]},f=(l="darwin"===u.platform()?"gtime":"/usr/bin/time",(m=s.spawnSync(l,["--version"],{stdio:"ignore"})).error||0!==m.status?void 0:[l,"--format","%e %M"]);function y(e){return v.apply(this,arguments)}function v(){return v=e(t().m(function e(r){var i,o,s,l,m,d,p,f,y,v,S,h,L,B,E,x,D,T,I,O,M;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,a.mkdtemp(c.join(u.tmpdir(),null!=(i=r.tempDirPrefix)?i:"exercode-"));case 1:return o=e.v,e.p=2,e.n=3,a.cp(r.cwd,o,{recursive:!0});case 3:return e.n=4,w({packageManager:r.packageManager,projectDir:r.projectDir,runDir:o,projectFilePaths:r.projectFilePaths});case 4:if(m=r.env?n(n({},process.env),r.env):process.env,d=b(r,o),p="function"==typeof r.command?r.command({runDir:o}):r.command,f=Date.now(),y=null!=(s=r.outputLimitBytes)?s:52428800,!d){e.n=6;break}return e.n=5,j(d,{cwd:o,env:m,outputLimitBytes:y,stdin:"",timeLimitSeconds:r.timeLimitSeconds});case 5:if(!k(v=e.v)){e.n=6;break}return e.a(2,g({elapsedTimeSeconds:(Date.now()-f)/1e3,options:r,result:v}));case 6:if(!((S=r.timeLimitSeconds-(Date.now()-f)/1e3)<=0)){e.n=7;break}return e.a(2,{stdin:null!=(h=r.stdin)?h:"",stdout:null!=(L=null==(B=v)?void 0:B.stdout)?L:"",stderr:null!=(E=null==(x=v)?void 0:x.stderr)?E:"",status:0,timeSeconds:r.timeLimitSeconds+.001,memoryBytes:null!=(D=null==(T=v)?void 0:T.memoryBytes)?D:0,timedOut:!0,signal:null==(I=v)?void 0:I.signal,outputLimitExceeded:!1});case 7:return e.n=8,j(p,{cwd:o,env:m,outputLimitBytes:y,stdin:null!=(l=r.stdin)?l:"",timeLimitSeconds:S});case 8:if(O=e.v,M=(Date.now()-f)/1e3,!v){e.n=9;break}return e.a(2,g({elapsedTimeSeconds:M,options:r,result:n(n({},O),{},{timeSeconds:v.timeSeconds+O.timeSeconds,memoryBytes:Math.max(v.memoryBytes,O.memoryBytes)})}));case 9:return e.a(2,g({elapsedTimeSeconds:M,options:r,result:O}));case 10:return e.p=10,e.n=11,a.rm(o,{force:!0,recursive:!0});case 11:return e.f(10);case 12:return e.a(2)}},e,null,[[2,,10,12]])})),v.apply(this,arguments)}function g(e){var t;return{stdin:null!=(t=e.options.stdin)?t:"",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 b(e,t){if(e.install){if(!0===e.install){var n=p[e.packageManager];if(void 0===n)throw new Error("No default install command is available for package manager: ".concat(e.packageManager));return n}return"function"==typeof e.install?e.install({runDir:t}):e.install}}function k(e){return 0!==e.status||e.timedOut||e.outputLimitExceeded}function w(e){return S.apply(this,arguments)}function S(){return(S=e(t().m(function e(n){var i,o,s,a,u;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:o=r(null!=(i=n.projectFilePaths)?i:d[n.packageManager]),e.p=1,o.s();case 2:if((s=o.n()).done){e.n=4;break}return a=s.value,e.n=3,h(c.join(n.projectDir,a),c.join(n.runDir,a));case 3:e.n=2;break;case 4:e.n=6;break;case 5:e.p=5,u=e.v,o.e(u);case 6:return e.p=6,o.f(),e.f(6);case 7:return e.a(2)}},e,null,[[1,5,6,7]])}))).apply(this,arguments)}function h(e,t){return L.apply(this,arguments)}function L(){return(L=e(t().m(function e(n,r){var o;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,a.cp(n,r,{recursive:!0});case 1:e.n=3;break;case 2:if(e.p=2,o=e.v,"ENOENT"===("object"===i(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 j(e,t){return B.apply(this,arguments)}function B(){return B=e(t().m(function e(n,r){var i,a,u,l,m,d,p,y,v,g,b,k,w,S,h,L,j,B;return t().w(function(e){for(;;)switch(e.n){case 0:return i=void 0===f?void 0:c.join(r.cwd,".exercode-time-result"),a=void 0===f?n:[].concat(o(f),["--output=".concat(i)],o(n)),u=s.spawn(a[0],a.slice(1),{cwd:r.cwd,detached:"win32"!==process.platform,env:r.env,stdio:["pipe","pipe","pipe"]}),l=[],m=[],d=0,p=!1,y=!1,v=function(e,t){if(d>=r.outputLimitBytes)t.byteLength>0&&(y=!0,E(u,"SIGKILL"));else{var n=r.outputLimitBytes-d,i=t.byteLength>n?t.subarray(0,n):t;e.push(i),d+=i.byteLength,t.byteLength>n&&(y=!0,E(u,"SIGKILL"))}},u.stdout.on("data",function(e){return v(l,e)}),u.stderr.on("data",function(e){return v(m,e)}),g=setTimeout(function(){p=!0,E(u,"SIGTERM")},1e3*r.timeLimitSeconds),(b=setTimeout(function(){p&&E(u,"SIGKILL")},1e3*r.timeLimitSeconds+1e3)).unref(),e.n=1,new Promise(function(e,t){var n,i=!1,o=function(e){i||(n=e,E(u,"SIGKILL"),void 0===u.pid&&(i=!0,t(e)))};u.on("error",o),u.stdin.on("error",function(e){"EPIPE"!==e.code&&o(e)}),u.on("close",function(r,o){i||(i=!0,n?t(n):e({status:null!=r?r:void 0,signal:null!=o?o:void 0}))}),u.stdin.end(r.stdin)}).finally(function(){clearTimeout(g),clearTimeout(b)});case 1:if(k=e.v,w=k.status,S=k.signal,void 0!==i){e.n=2;break}B={timeSeconds:0,memoryBytes:0},e.n=4;break;case 2:return e.n=3,x(i);case 3:B=e.v;case 4:return L=(h=B).timeSeconds,j=h.memoryBytes,e.a(2,{stdout:Buffer.concat(l).toString(),stderr:Buffer.concat(m).toString(),status:w,timeSeconds:L,memoryBytes:j,timedOut:p,signal:S,outputLimitExceeded:y})}},e)})),B.apply(this,arguments)}function E(e,t){if(void 0!==e.pid)try{if("win32"===process.platform)return void e.kill(t);process.kill(-e.pid,t)}catch(e){var n="object"===i(e)&&null!==e&&"code"in e?e.code:void 0;if("ESRCH"!==n&&"EPERM"!==n)throw e}}function x(e){return D.apply(this,arguments)}function D(){return(D=e(t().m(function e(n){var r,o,s;return t().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,a.readFile(n,"utf8");case 1:r=e.v,e.n=4;break;case 2:if(e.p=2,s=e.v,"ENOENT"===("object"===i(s)&&null!==s&&"code"in s?s.code:void 0)){e.n=3;break}throw s;case 3:return e.a(2,{timeSeconds:0,memoryBytes:0});case 4:if(o=/(\d+(?:[.,]\d+)?) (\d+)\s*$/.exec(r)){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)}export{w as copyPackageManagerProjectFiles,y 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';\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',\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.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\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, runs a command, and then\n * 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 command = typeof options.command === 'function' ? options.command({ runDir }) : options.command;\n const startedAt = Date.now();\n const result = await spawnWithInput(command, {\n cwd: runDir,\n env: options.env ? { ...process.env, ...options.env } : process.env,\n outputLimitBytes: options.outputLimitBytes ?? defaultOutputLimitBytes,\n stdin: options.stdin ?? '',\n timeLimitSeconds: options.timeLimitSeconds,\n });\n const elapsedTimeSeconds = (Date.now() - startedAt) / 1000;\n\n return {\n stdin: options.stdin ?? '',\n stdout: result.stdout,\n stderr: result.stderr,\n status: result.timedOut || result.outputLimitExceeded ? 0 : result.status,\n timeSeconds: result.timedOut ? options.timeLimitSeconds + 1e-3 : result.timeSeconds || elapsedTimeSeconds,\n memoryBytes: result.memoryBytes,\n timedOut: result.timedOut,\n signal: result.signal,\n outputLimitExceeded: result.outputLimitExceeded,\n };\n } finally {\n await fs.rm(runDir, { force: true, recursive: true });\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","timeCommand","os","platform","childProcess","spawnSync","stdio","error","status","runCommandInTemporaryPackageManagerProject","_x","_runCommandInTemporaryPackageManagerProject","apply","this","arguments","_asyncToGenerator","_regenerator","m","_callee","options","_options$tempDirPrefi","runDir","_options$outputLimitB","_options$stdin","_options$stdin2","startedAt","elapsedTimeSeconds","w","_context","p","n","fs","mkdtemp","path","join","tmpdir","tempDirPrefix","v","cp","cwd","recursive","copyPackageManagerProjectFiles","packageManager","projectDir","projectFilePaths","Date","now","spawnWithInput","env","_objectSpread","process","outputLimitBytes","stdin","timeLimitSeconds","a","stdout","stderr","timedOut","outputLimitExceeded","timeSeconds","memoryBytes","signal","rm","force","f","_x2","_copyPackageManagerProjectFiles","_callee2","_options$projectFileP","_iterator","_step","projectFilePath","_t","_context2","_createForOfIteratorHelper","s","done","value","copyPathIfExists","e","_x3","_x4","_copyPathIfExists","_callee3","sourcePath","destinationPath","_t2","_context3","_typeof","code","undefined","_x5","_x6","_spawnWithInput","_callee4","context","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t3","_context4","concat","_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","_x7","_readTimeResult","_callee5","content","match","_t4","_context5","readFile","exec","Number","replace"],"mappings":"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"}
{"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';\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 install?:\n | boolean\n | readonly [string, ...string[]]\n | ((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',\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.yml', '.yarn'],\n} as const satisfies Record<PackageManager, readonly string[]>;\n\nconst packageManagerInstallCommands: Partial<Record<PackageManager, readonly [string, ...string[]]>> = {\n bun: ['bun', 'install', '--silent'],\n npm: ['npm', 'install', '--silent'],\n pnpm: ['pnpm', 'install', '--silent'],\n yarn: ['yarn', 'install', '--silent'],\n};\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, optionally installs\n * dependencies, 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 = resolveInstallCommand(options, 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 options: RunCommandInTemporaryPackageManagerProjectOptions,\n runDir: string\n): readonly [string, ...string[]] | undefined {\n if (!options.install) return undefined;\n if (options.install === true) {\n const installCommand = packageManagerInstallCommands[options.packageManager];\n if (installCommand === undefined) {\n throw new Error(`No default install command is available for package manager: ${options.packageManager}`);\n }\n return installCommand;\n }\n return typeof options.install === 'function' ? options.install({ runDir }) : options.install;\n}\n\nfunction isFailedSpawnResult(result: Awaited<ReturnType<typeof spawnWithInput>>): boolean {\n return result.status !== 0 || result.timedOut || result.outputLimitExceeded;\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","packageManagerInstallCommands","timeCommand","os","platform","childProcess","spawnSync","stdio","error","status","runCommandInTemporaryPackageManagerProject","_x","_runCommandInTemporaryPackageManagerProject","apply","this","arguments","_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","install","undefined","Error","concat","_x2","_copyPackageManagerProjectFiles","_callee2","_options$projectFileP","_iterator","_step","projectFilePath","_t","_context2","_createForOfIteratorHelper","s","done","value","copyPathIfExists","e","_x3","_x4","_copyPathIfExists","_callee3","sourcePath","destinationPath","_t2","_context3","_typeof","code","_x5","_x6","_spawnWithInput","_callee4","timeOutputPath","spawnedCommand","subprocess","stdoutChunks","stderrChunks","outputBytes","appendOutputChunk","timeout","killTimeout","_yield$Promise$finall","_ref","_t3","_context4","_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","_x7","_readTimeResult","_callee5","content","match","_t4","_context5","readFile","exec","Number","replace"],"mappings":"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"}
{
"name": "@exercode/problem-utils",
"version": "1.16.0",
"version": "1.16.1",
"description": ":100: A set of utilities for judging programs on Exercode (https://exercode.willbooster.com/).",

@@ -5,0 +5,0 @@ "keywords": [