@exercode/problem-utils 1.13.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "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),c=u.value}catch(r){return void e(r)}u.done?t(c):Promise.resolve(c).then(n,o)}function o(r,t,e){return(t=s(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=[],c=!0,f=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;c=!1}else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(r){f=!0,o=r}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)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 c(){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 f(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(){
1
+ "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(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var r,t,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return y(f,"_invoke",function(e,n,o){var i,u,c,f=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,c=r,p.n=e,a}};function s(e,n){for(u=e,c=n,t=0;!y&&f&&!o&&t<l.length;t++){var o,i=l[t],s=p.p,b=i[2];e>3?(o=b===n)&&(c=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(f>1)throw TypeError("Generator is already running");for(y&&1===l&&s(l,b),u=l,c=b;(t=u<2?r:c)||!y;){i||(u?u<3?(u>1&&(p.n=-1),s(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=r}else if((t=(y=p.n<0)?c:e.call(n,p))!==a)break}catch(t){i=r,u=1,c=t}finally{f=1}}return{value:t,done:y}}}(e,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var p=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(p);function b(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,f):(r.__proto__=f,y(r,o,"GeneratorFunction")),r.prototype=Object.create(s),r}return c.prototype=f,y(s,"constructor",f),y(f,"constructor",c),c.displayName="GeneratorFunction",y(f,o,"GeneratorFunction"),y(s),y(s,o,"Generator"),y(s,n,function(){return this}),y(s,"toString",function(){return"[object Generator]"}),(l=function(){return{w:i,m:b}})()}function y(r,t,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(r){o=0}y=function(r,t,e,n){function i(t,e){y(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))},y(r,t,e,n)}function p(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 s(r){var t=p(r,"string");return"symbol"==typeof t?t:t+""}function b(r){"@babel/helpers - typeof";return b="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},b(r)}function v(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,c,"next",r)}function c(r){n(a,o,i,u,c,"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=v(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=c,exports.objectSpread2=function(r){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?f(Object(e),!0).forEach(function(t){o(r,t,e[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):f(Object(e)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(e,t))})}return r},exports.regenerator=l,exports.regeneratorDefine=y,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)||v(r,e)||u()},exports.toConsumableArray=function(r){return e(r)||i(r)||v(r)||c()},exports.toPrimitive=p,exports.toPropertyKey=s,exports.typeof=b,exports.unsupportedIterableToArray=v;
3
+ 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;
4
4
  //# sourceMappingURL=_rollupPluginBabelHelpers.cjs.map
@@ -1,4 +1,4 @@
1
- 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),c=u.value}catch(r){return void e(r)}u.done?t(c):Promise.resolve(c).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,c,"next",r)}function c(r){n(a,o,i,u,c,"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=j(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=g(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 c(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;c=!1}else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(r){f=!0,o=r}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}function f(){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(){
1
+ 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(){
2
2
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
3
- var r,t,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return b(f,"_invoke",function(e,n,o){var i,u,c,f=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,c=r,s.n=e,a}};function p(e,n){for(u=e,c=n,t=0;!y&&f&&!o&&t<l.length;t++){var o,i=l[t],p=s.p,b=i[2];e>3?(o=b===n)&&(c=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(f>1)throw TypeError("Generator is already running");for(y&&1===l&&p(l,b),u=l,c=b;(t=u<2?r:c)||!y;){i||(u?u<3?(u>1&&(s.n=-1),p(u,c)):s.n=c:s.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=r}else if((t=(y=s.n<0)?c:e.call(n,s))!==a)break}catch(t){i=r,u=1,c=t}finally{f=1}}return{value:t,done:y}}}(e,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(b(t={},n,function(){return this}),t),y=f.prototype=u.prototype=Object.create(l);function s(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,f):(r.__proto__=f,b(r,o,"GeneratorFunction")),r.prototype=Object.create(y),r}return c.prototype=f,b(y,"constructor",f),b(f,"constructor",c),c.displayName="GeneratorFunction",b(f,o,"GeneratorFunction"),b(y),b(y,o,"Generator"),b(y,n,function(){return this}),b(y,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:s}})()}function b(r,t,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(r){o=0}b=function(r,t,e,n){function i(t,e){b(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))},b(r,t,e,n)}function v(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 m(r,e){return t(r)||c(r,e)||j(r,e)||f()}function d(r){return e(r)||u(r)||j(r)||l()}function h(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 g(r){var t=h(r,"string");return"symbol"==typeof t?t:t+""}function O(r){"@babel/helpers - typeof";return O="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},O(r)}function j(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,c as iterableToArrayLimit,f as nonIterableRest,l as nonIterableSpread,s as objectSpread2,p as regenerator,b as regeneratorDefine,v as regeneratorValues,m as slicedToArray,d as toConsumableArray,h as toPrimitive,g as toPropertyKey,O as typeof,j as unsupportedIterableToArray};
3
+ 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};
4
4
  //# sourceMappingURL=_rollupPluginBabelHelpers.js.map
@@ -0,0 +1,2 @@
1
+ "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))}))};
2
+ //# sourceMappingURL=runPythonInTemporaryUvProject.cjs.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,10 @@
1
+ import { type PackageManagerCommandRunResult, type RunCommandInTemporaryPackageManagerProjectOptions } from './runCommandInTemporaryPackageManagerProject.js';
2
+ export interface RunPythonInTemporaryUvProjectOptions extends Omit<RunCommandInTemporaryPackageManagerProjectOptions, 'command' | 'packageManager'> {
3
+ pythonArgs?: readonly [string, ...string[]];
4
+ uvArgs?: readonly string[];
5
+ }
6
+ /**
7
+ * Runs a Python command inside a temporary uv project created from a submission
8
+ * directory and the problem's `pyproject.toml` / `uv.lock`.
9
+ */
10
+ export declare function runPythonInTemporaryUvProject(options: RunPythonInTemporaryUvProjectOptions): Promise<PackageManagerCommandRunResult>;
@@ -0,0 +1,2 @@
1
+ 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};
2
+ //# sourceMappingURL=runPythonInTemporaryUvProject.js.map
@@ -0,0 +1 @@
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"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
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/sourceCodeGrammars.cjs"),a=require("./helpers/startHttpServer.cjs"),n=require("./types/decisionCode.cjs"),c=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.languageIdToSourceCodeGrammar=t.languageIdToSourceCodeGrammar,exports.startHttpServer=a.startHttpServer,exports.DecisionCode=n.DecisionCode,exports.TEST_CASE_RESULT_PREFIX=c.TEST_CASE_RESULT_PREFIX,exports.testCaseResultSchema=c.testCaseResultSchema;
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;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './helpers/parseArgs.js';
2
2
  export * from './helpers/printTestCaseResult.js';
3
3
  export * from './helpers/removeCommentsInSourceCode.js';
4
4
  export * from './helpers/runCommandInTemporaryPackageManagerProject.js';
5
+ export * from './helpers/runPythonInTemporaryUvProject.js';
5
6
  export * from './helpers/sourceCodeGrammars.js';
6
7
  export * from './helpers/startHttpServer.js';
7
8
  export * from './types/decisionCode.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
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{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";
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";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.cjs","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\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<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<CommandRunResult> | CommandRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\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<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string,\n options: CommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase>(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<TTestCase extends BaseCommandTestCase>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase>\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: CommandRunResult;\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 });\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","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","exitCode","printDebugExpectationFailureBanner","e","f","a","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","expectedResult","_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":"qtBA6BMA,EAAoBC,EAAAA,EAAEC,OAAO,CACjCC,SAAUF,EAAAA,EAAEG,MAAM,CAACH,EAAAA,EAAEI,SAAUJ,IAAEK,MAAML,EAAAA,EAAEI,YAAYE,aA0GtD,SAAAC,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAjBM,SAAAC,EACLC,EACAC,GAA6C,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAd,gBAAAe,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAGM,OAD7Cb,EAAOc,EAAAA,UAAUC,QAAQC,MACzBf,EAAShB,EAAkBgC,MAAMjB,EAAKC,QAAOU,EAAAE,EAAA,EAEfK,cAAYpB,EAAYE,EAAKmB,KAAI,KAAA,EAAAjB,EAAAS,EAAAS,EAA7DjB,EAAID,EAAJC,KAAMC,EAAWF,EAAXE,YAAWC,EAAAgB,EAAAA,0BAEClB,GAAIQ,EAAAC,EAAA,EAAAP,EAAAiB,IAAA,KAAA,EAAA,IAAAhB,EAAAD,EAAAQ,KAAAU,KAAA,CAAAZ,EAAAE,EAAA,EAAA,KAAA,CACkC,OADrDN,EAAWD,EAAAkB,MAChBpB,GAAaqB,EAAAA,oBAAoB3B,EAAYS,GAAaI,EAAAE,EAAA,EACzCa,EAAiC5B,EAAYS,EAAYY,IAAKlB,EAAQF,GAAQ,KAAA,EAA7FS,EAAMG,EAAAS,EACRhB,IAAgBuB,EAAsBpB,EAAaC,KACrDO,QAAQa,SAAW,EACnBC,EAAAA,mCAAmC/B,EAAYS,IAChD,KAAA,EAAAI,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAAF,EAAAC,EAAA,EAAAH,EAAAE,EAAAS,EAAAf,EAAAyB,EAAArB,GAAA,KAAA,EAAA,OAAAE,EAAAC,EAAA,EAAAP,EAAA0B,IAAApB,EAAAoB,EAAA,GAAA,KAAA,EAAA,OAAApB,EAAAqB,EAAA,GAAA,EAAAnC,EAAA,KAAA,CAAA,CAAA,EAAA,EAAA,EAAA,IAAA,KAEJoC,MAAAC,KAAAC,UAAA,CAAA,SAEcT,EAAqBU,EAAAC,EAAAC,EAAAC,GAAA,OAAAC,EAAAP,MAAAC,KAAAC,UAAA,CAAA,SAAAK,IA4KnC,OA5KmCA,EAAA9C,EAAAA,iBAAAC,EAAAA,cAAAC,EAApC,SAAA6C,EACE3C,EACAqB,EACAlB,EACAF,GAA6C,IAAA2C,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA,OAAA7F,gBAAAe,EAAA,SAAA+E,GAAA,cAAAA,EAAA7E,EAAA6E,EAAA5E,GAAA,KAAA,EAAA,OAAA4E,EAAA5E,EAAA,EAEJ6E,EAAAA,+BAA+B5F,GAAW,KAAA,EAAnD,OAA1BsD,EAA0BqC,EAAArE,EAAAqE,EAAA5E,EAAA,GACc,OAAtB6B,EAAC3C,EAAQ4F,eAAajD,EAAIkD,GAAsB9F,GAAW,KAAA,EAMC,OAN9EuD,EAASoC,EAAArE,EACTkC,EAAqC,OAAnBX,EAAe,OAAfC,EAAGS,EAAU,SAAE,EAAZT,EAAciD,IAAElD,EAAI,WACzCY,EAAS,CACbuC,oBAAwD,OAArCjD,EAAgB,OAAhBC,EAAE/C,EAAQwD,aAAM,EAAdT,EAAgBgD,qBAAmBjD,EA3H9B,GA4H1BkD,gBAAgD,OAAjChD,EAAgB,OAAhBC,EAAEjD,EAAQwD,aAAM,EAAdP,EAAgB+C,iBAAehD,EA1H1B,KA4HlBS,EAA6C,OAA5BP,EAAGlD,EAAQyD,mBAAiBP,EA7Hf,EA6HgDwC,EAAA5E,EAAA,EAEjDmF,EAAAA,sBAAsB7E,EAAKiC,GAA2B,KAAA,EAA/D,KAApBK,EAAoBgC,EAAArE,GACF,CAAAqE,EAAA5E,EAAA,EAAA,KAAA,CAC2D,OAAjFoF,EAAAA,oBAAmBC,EAAAA,cAAA,CAAGC,WAAY7C,GAAuBG,IAAwBgC,EAAAzD,EAAA,EAC1E,CAAEoE,aAAa,IAAO,KAAA,EAAA,OAAAX,EAAA5E,EAAA,EAGIwF,qBAAmBlF,EAAKlB,EAAOb,UAAS,KAAA,EAAjD,GAApBsE,EAAoB+B,EAAArE,EACD,CAAAqE,EAAA5E,EAAA,EAAA,KAAA,CAKpB,OAJHoF,sBAAoB,CAClBE,WAAY7C,EACZgD,aAAcC,EAAAA,aAAaC,uCAC3BC,OAAM,sBAAAC,OAAwBzG,EAAOb,SAAQ,eAAAsH,OAAkBzG,EAAOb,UAAa,MAClFqG,EAAAzD,EAAA,EACI,CAAEoE,aAAa,IAAO,KAAA,EAG8C,GAAvEzC,EAAqBgD,EAAAA,6BAA6BjD,GACjC,CAAA+B,EAAA5E,EAAA,EAAA,KAAA,CAKlB,OAJHoF,sBAAoB,CAClBE,WAAY7C,EACZgD,aAAcC,EAAAA,aAAaK,aAC3BH,OAAQ,yBACPhB,EAAAzD,EAAA,EACI,CAAEoE,aAAa,IAAO,KAAA,EAMQ,GAFjCxC,EAAGsC,EAAAA,cAAAA,gBAAA,CAAA,EAAQnF,QAAQ6C,KAAG,GAAA,CAAEiD,GAAI,GAAIC,YAAa,MAE/CjD,EAAeH,GACfC,EAAmBoD,SAAQ,CAAAtB,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA7E,EAAA,EAAA6E,EAAA5E,EAAA,EAErB8C,EAAmBoD,SAAS5F,GAAI,KAAA,EAAA,OAAAsE,EAAA5E,EAAA,GACHwF,qBAAmBlF,EAAKlB,EAAOb,UAAS,KAAA,IAArE0E,EAAoB2B,EAAArE,KACAyC,EAAeC,GAAqB2B,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAM3D,OAN2D4E,EAAA7E,EAAA,GAAAwE,GAAAK,EAAArE,EAE9D6E,sBAAoB,CAClBE,WAAY7C,EACZgD,aAAcC,EAAAA,aAAaS,YAC3BP,OAAQrB,cAAiB6B,MAAQ7B,GAAM8B,QAAUC,OAAM/B,MACtDK,EAAAzD,EAAA,EACI,CAAEoE,aAAa,IAAO,KAAA,GAImC,KAA9DrC,EAA8C,OAAlCb,EAAGS,EAAmBI,mBAAY,EAA/Bb,EAAAkE,KAAAzD,EAAkCE,IACvC,CAAA4B,EAAA5E,EAAA,GAAA,KAAA,CAMZ,KALImD,EAAcqD,EAAStD,EAAc,CACzC5C,IAAAA,EACAyC,IAAAA,EACAuC,WAAY7C,EACZC,OAAAA,KAEa,CAAAkC,EAAA5E,EAAA,GAAA,KAAA,CACoB,OAAjCoF,EAAAA,oBAAoBjC,GAAayB,EAAAzD,EAAA,EAC1B,CAAEoE,aAAa,IAAO,KAAA,GAAA,OAAAX,EAAA5E,EAAA,GAIPyG,EAAAA,yBAAyBnG,GAAI,KAAA,GAAtC,GAAX8C,EAAWwB,EAAArE,EAEQ,IAArBiC,EAAUkE,OAAY,CAAA9B,EAAA5E,EAAA,GAAA,KAAA,CAC4D,OAApFoF,sBAAoB,CAAEE,WAAY,UAAWG,aAAcC,EAAAA,aAAaiB,WAAY/B,EAAAzD,EAAA,EAC7E,CAAEoE,aAAa,IAAM,KAAA,GAGxBlC,EAAmF,OAAhEf,EAAIE,EAAsDoE,aAAM,EAA7DtE,EAA+DuE,cAAavD,EAAA9C,EAAAA,0BAEjFgC,GAASoC,EAAA7E,EAAA,GAAAuD,EAAA7C,IAAA,KAAA,GAAA,IAAA8C,EAAAD,EAAAtD,KAAAU,KAAA,CAAAkE,EAAA5E,EAAA,GAAA,KAAA,CAAb,GAAR2D,EAAQJ,EAAA5C,OACb0C,EAAmB,CAAAuB,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA5E,EAAA,GAAQ8G,EAAAA,sBAAsBzD,EAAqB/C,GAAI,KAAA,GAAA,IAC1EqD,EAASkD,cAAa,CAAAjC,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA5E,EAAA,GAAQ8G,wBAAsBnD,EAASkD,cAAevG,GAAI,KAAA,GASrD,GAPzBsD,EAC8C,iBAA3CrB,EAA2BwE,YAC9BxE,EAA2BwE,YAAc,IACzCpE,EAEAkB,EAAUf,EAAmBe,QAAQb,GACvCc,EAAsB,OAAjBN,EAAGG,EAASqD,OAAKxD,EAAI,GAC1BO,QAA2B,EAAAa,EAAA7E,EAAA,IAEzBb,EAAQ+H,aAAY,CAAArC,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA5E,EAAA,GACRd,EAAQ+H,aAAa,CAAEtD,SAAAA,EAAUrD,IAAAA,EAAKyC,IAAAA,IAAM,KAAA,GAA1De,EAAKc,EAAArE,EAAA,KAAA,GAAA,IAGKrB,EAAQgI,WAAU,CAAAtC,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA5E,EAAA,GACpBd,EAAQgI,WAAW,CACvBvD,SAAAA,EACAE,QAAAA,EACAC,MAAAA,EACAxD,IAAAA,EACAyC,IAAAA,EACAa,iBAAAA,IACA,KAAA,GAAAY,GAAAI,EAAArE,EAAAqE,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAAAwE,GACF0C,EAAWrD,EAAS,CAClBC,MAAAA,EACAxD,IAAAA,EACAyC,IAAAA,EACAa,iBAAAA,IACA,KAAA,GAdNG,GAASS,GAAAI,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAqBN,OArBM4E,EAAA7E,EAAA,GAAA0E,GAAAG,EAAArE,EAgBT6E,sBAAoB,CAClBE,WAAY3B,EAASqB,GACrBS,aAAcC,EAAAA,aAAayB,cAC3BrD,MAAAA,EACA8B,OAAQwB,EAAc3C,MACrBG,EAAA5E,EAAA,GACGqH,EAAAA,sBAAsB/G,EAAK8C,GAAY,KAAA,GAAA,OAAAwB,EAAAzD,EAAA,EACtC,CAAEoE,aAAa,IAAO,KAAA,GAAA,OAAAX,EAAA5E,EAAA,GAGLsH,EAAAA,gBAAgBhH,EAAuD,OAApDmD,EAAElB,EAA2BgF,yBAAuB9D,EAAI,IAAG,KAAA,GAUvE,GAV3BO,GAAWY,EAAArE,EACX0D,GAAoC,CACxCL,iBAAAA,EACA4D,kBAAmB9E,EAAOwC,gBAC1B3C,2BAA4B,CAC1BkF,gBAAiBlF,EAA2BkF,gBAC5CF,wBAAyBhF,EAA2BgF,0BAGlDrD,GAAkBwD,EAAiB,CAAE3D,UAAAA,GAAWC,YAAAA,GAAa2D,QAAS1D,KACxEE,GAAcD,GACdA,GAAgBuB,eAAiBC,EAAAA,aAAaiB,SAAQ,CAAA/B,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAA7E,EAAA,GAAA6E,EAAA5E,EAAA,GAER,OAFQoE,GAEpBlF,EAAQ0I,aAARxD,GAAAmC,KAAArH,EAAe,CAAEyE,SAAAA,EAAUI,UAAAA,GAAWC,YAAAA,GAAa2D,QAAS1D,KAAe,KAAA,IAAvGI,GAAmBO,EAAArE,KAEvB4D,GAAc,CACZsB,aAA8C,OAAlCnB,GAAED,GAAoBoB,cAAYnB,GAAIJ,GAAgBuB,aAClEoC,iBAAkBxD,GAAoBwD,iBACtCjC,OAAQvB,GAAoBuB,SAE/BhB,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAAA4E,EAAA7E,EAAA,GAAA2E,GAAAE,EAAArE,EAED4D,GAAc,CACZsB,aAAcC,EAAAA,aAAayB,cAC3BvB,OAAQwB,EAAc1C,KACtB,KAAA,GAcH,OAVHU,EAAAA,oBAAmBC,EAAAA,cAAAA,gBAAA,CACjBC,WAAY3B,EAASqB,IAClBb,IAAW,GAAA,CACd2D,WAAY/D,GAAUgE,OACtBjE,MAAOC,GAAUD,MACjBkE,OAAQjE,GAAUiE,OAAOC,MAAM,EAAGvF,EAAOwC,uBAAoBgD,EAC7DtC,QAA2B,OAAnBlC,EAACS,GAAYyB,QAAMlC,EAAIK,GAAU6B,QAAQqC,MAAM,EAAGvF,EAAOwC,uBAAoBgD,EACrFC,YAAapE,GAAUoE,YACvBC,YAAarE,GAAUqE,YACvBpE,YAAaA,GAAY0C,OAAS,EAAI1C,QAAckE,KACnDtD,EAAA5E,EAAA,GAEGqH,EAAAA,sBAAsB/G,EAAK8C,GAAY,KAAA,GAAA,GACzCe,GAAYsB,eAAiBC,EAAAA,aAAaiB,SAAQ,CAAA/B,EAAA5E,EAAA,GAAA,KAAA,CAAA,OAAA4E,EAAAzD,EAAA,EAAS,CAAEoE,aAAa,IAAO,KAAA,GAAAX,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAAA4E,EAAA5E,EAAA,GAAA,MAAA,KAAA,GAAA4E,EAAA7E,EAAA,GAAA4E,GAAAC,EAAArE,EAAA+C,EAAArC,EAAA0D,IAAA,KAAA,GAAA,OAAAC,EAAA7E,EAAA,GAAAuD,EAAApC,IAAA0D,EAAA1D,EAAA,IAAA,KAAA,GAAA,OAAA0D,EAAAzD,EAAA,EAGhF,CAAEoE,aAAa,IAAM,EAAA3D,EAAA,KAAA,CAAA,CAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,EAAA,KAAA,KAC7BR,MAAAC,KAAAC,UAAA,CAED,SAASR,EAAsBpB,EAA0BC,GACvD,OAAOA,EAAO4F,eAAgD,aAA/B7F,EAAY2I,eAC7C,CAEA,SAAS7B,EACPtD,EACAyE,GAC2E,IAAAW,EACrEC,EAAcC,EAAAA,qBAClBtF,EAAa,GACbA,EAAa+E,MAAM,GACnB,CAAE3H,IAAKqH,EAAQrH,IAAKmI,SAAU,OAAQ1F,IAAK4E,EAAQ5E,KACnD4E,EAAQjF,OAAOuC,qBAEX6C,EAA+B,OAArBQ,EAAGC,EAAYR,QAAMO,OAAIJ,EAEzC,OAA2B,IAAvBK,EAAYR,OACP,CACLzC,WAAYqC,EAAQrC,WACpBG,aAAcC,EAAAA,aAAaS,YAC3B2B,WAAAA,EACAE,OAAQO,EAAYP,OAAOC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDU,OAAQ2C,EAAY3C,OAAOqC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDiD,YAAaI,EAAYJ,YACzBC,YAAaG,EAAYH,aAIzBG,EAAYJ,YAAcR,EAAQjF,OAAOuC,oBACpC,CACLK,WAAYqC,EAAQrC,WACpBG,aAAcC,EAAAA,aAAagD,0BAC3BZ,WAAAA,EACAE,OAAQO,EAAYP,OAAOC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDU,OAAQ2C,EAAY3C,OAAOqC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDiD,YAAaI,EAAYJ,YACzBC,YAAaG,EAAYH,aAK3BG,EAAYP,OAAOtB,OAASiB,EAAQjF,OAAOwC,iBAC3CqD,EAAY3C,OAAOc,OAASiB,EAAQjF,OAAOwC,gBAEpC,CACLI,WAAYqC,EAAQrC,WACpBG,aAAcC,EAAAA,aAAaiD,iCAC3Bb,WAAAA,EACAE,OAAQO,EAAYP,OAAOC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDU,OAAQ2C,EAAY3C,OAAOqC,MAAM,EAAGN,EAAQjF,OAAOwC,iBACnDiD,YAAaI,EAAYJ,YACzBC,YAAaG,EAAYH,kBAX7B,CAgBF,CAEA,SAAShB,EAAewB,GACtB,OAAOA,aAAiBxC,MAAQwC,EAAMvC,QAAUC,OAAOsC,EACzD,CAUC,SAEc7D,EAAoB8D,GAAA,OAAAC,EAAA1H,MAAAC,KAAAC,UAAA,CAAA,SAAAwH,IASlC,OATkCA,EAAAjK,EAAAA,iBAAAC,EAAAA,cAAAC,EAAnC,SAAAgK,EACE9J,GAAkB,IAAA+J,EAAAC,EAAAC,EAAA,OAAApK,gBAAAe,EAAA,SAAAsJ,GAAA,cAAAA,EAAAnJ,GAAA,KAAA,EAAA,OAAAmJ,EAAAnJ,EAAA,EAEUoJ,EAAAA,cAAkBC,EAAKC,KAAKrK,EAAY,eAAc,KAAA,EACgB,GAD5FgK,EAAaE,EAAA5I,EACb2I,EAAmBD,EAAcM,IAAI,SAAC5F,GAAQ,MAP7C,CAAEqB,IAPgBrE,EAckDgD,GAPxDqB,GAAIgC,MAAOrG,EAAMqG,MAAOH,cAAelG,EAAMkG,eAPlE,IAA2BlG,CAc2D,GAC5D,OAD0EqI,EAC9FC,EAAcrC,UAAdoC,EAAsBnC,cAAa,CAAAsC,EAAAnJ,EAAA,EAAA,KAAA,CAAA,OAAAmJ,EAAAhI,EAAA,EAC9BqI,OAAOC,OAAOP,EAAkB,CAAEtC,OAAQ,CAAEC,cAAeoC,EAAcrC,OAAOC,kBAAkB,KAAA,EAAA,OAAAsC,EAAAhI,EAAA,EAEpG+H,GAAgB,EAAAH,EAAA,KACxB3H,MAAAC,KAAAC,UAAA,CAED,SAAS4F,EACPrD,EACA8D,GAMkB,IAAA+B,EACZnB,EAAcC,EAAAA,qBAClB3E,EAAQ,GACRA,EAAQoE,MAAM,GACd,CAAE3H,IAAKqH,EAAQrH,IAAKmI,SAAU,OAAQzB,MAAOW,EAAQ7D,MAAOf,IAAK4E,EAAQ5E,KACzE4E,EAAQ/D,kBAGV,MAAO,CACLE,MAAO6D,EAAQ7D,MACfkE,OAAQO,EAAYP,OACpBpC,OAAQ2C,EAAY3C,OACpBmC,OAA0B,OAApB2B,EAAEnB,EAAYR,QAAM2B,OAAIxB,EAC9BC,YAAaI,EAAYJ,YACzBC,YAAaG,EAAYH,YAE7B,CAEA,SAASV,EAAiBC,GAIC,IAAAgC,EAAAC,EAAAC,EACzB,GAAiC,IAA7BlC,EAAQ5D,UAAUgE,OACpB,MAAO,CAAEtC,aAAcC,EAAAA,aAAayB,cAAevB,OAAQ+B,EAAQ5D,UAAU6B,QAG/E,GAAI+B,EAAQ5D,UAAUoE,YAAcR,EAAQA,QAAQ/D,iBAClD,MAAO,CAAE6B,aAAcC,EAAAA,aAAaoE,oBAAqBlE,OAAQ+B,EAAQ5D,UAAU6B,QAGrF,GACE+B,EAAQ5D,UAAUqE,aACyC,OAD9BuB,EAC5BhC,EAAQA,QAAQpF,2BAA2BkF,iBAAekC,EAAII,OAAOC,mBAEtE,MAAO,CAAEvE,aAAcC,EAAAA,aAAauE,sBAAuBrE,OAAQ+B,EAAQ5D,UAAU6B,QAGvF,GACE+B,EAAQ5D,UAAUmG,qBAClBvC,EAAQ5D,UAAUiE,OAAOtB,OAASiB,EAAQA,QAAQH,mBAClDG,EAAQ5D,UAAU6B,OAAOc,OAASiB,EAAQA,QAAQH,kBAElD,MAAO,CAAE/B,aAAcC,EAAAA,aAAayE,2BAA4BvE,OAAQ+B,EAAQ5D,UAAU6B,QAG5F,IAAMwE,EAAoG,OAA7ER,SAAAC,EAAGlC,EAAQA,QAAQpF,2BAA2BgF,gCAA3CsC,EAAoEnD,QAAMkD,EAAI,EAC9G,OAAIjC,EAAQ3D,YAAY0C,OAAS0D,EACxB,CAAE3E,aAAcC,EAAAA,aAAa2E,oCAG/B,CAAE5E,aAAcC,EAAAA,aAAaiB,SACtC,4BAhVA,SAAwC2D,EAAAC,GAAA,OAAA3L,EAAAwC,MAAAC,KAAAC,UAAA"}
1
+ {"version":3,"file":"command.cjs","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\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 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","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","exitCode","printDebugExpectationFailureBanner","e","f","a","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","expectedResult","_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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"}
@@ -24,7 +24,7 @@ export interface CommandJudgeLimits {
24
24
  buildTimeoutSeconds: number;
25
25
  maxOutputLength: number;
26
26
  }
27
- export interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> {
27
+ export interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase = BaseCommandTestCase, TRunResult extends CommandRunResult = CommandRunResult> {
28
28
  limits?: CommandJudgeLimits;
29
29
  runTimeoutSeconds?: number;
30
30
  readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;
@@ -40,10 +40,10 @@ export interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase
40
40
  cwd: string;
41
41
  env: NodeJS.ProcessEnv;
42
42
  timeLimitSeconds: number;
43
- }) => Promise<CommandRunResult> | CommandRunResult;
43
+ }) => Promise<TRunResult> | TRunResult;
44
44
  test?: (context: {
45
45
  testCase: TTestCase;
46
- runResult: CommandRunResult;
46
+ runResult: TRunResult;
47
47
  outputFiles: NonNullable<TestCaseResult['outputFiles']>;
48
48
  context: CommandJudgeContext;
49
49
  }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;
@@ -82,5 +82,5 @@ export interface CommandJudgePresetOptions<TTestCase extends BaseCommandTestCase
82
82
  * bun judge.ts
83
83
  * ```
84
84
  */
85
- export declare function commandJudgePreset<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(problemDir: string, options: CommandJudgePresetOptions<TTestCase>): Promise<void>;
85
+ export declare function commandJudgePreset<TTestCase extends BaseCommandTestCase = BaseCommandTestCase, TRunResult extends CommandRunResult = CommandRunResult>(problemDir: string, options: CommandJudgePresetOptions<TTestCase, TRunResult>): Promise<void>;
86
86
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\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<TTestCase extends BaseCommandTestCase = BaseCommandTestCase> {\n limits?: CommandJudgeLimits;\n runTimeoutSeconds?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n }) => Promise<CommandRunResult> | CommandRunResult;\n test?: (context: {\n testCase: TTestCase;\n runResult: CommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: CommandJudgeContext;\n }) => Promise<Partial<CommandJudgeCaseResult>> | Partial<CommandJudgeCaseResult> | undefined;\n}\n\n/**\n * A preset function for judging by executable command.\n *\n * Keep problem-specific logic in `resolveInput` and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { commandJudgePreset } from '@exercode/problem-utils/presets/command';\n * import { DecisionCode } from '@exercode/problem-utils';\n *\n * await commandJudgePreset(import.meta.dirname, {\n * readTestCases: async () => [\n * { id: '01', input: '1 2' },\n * ],\n * test: ({ runResult }) => {\n * return runResult.stdout.trim() === '3'\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n *\n * Run with the required parameters:\n * ```bash\n * bun judge.ts model_answers/python '{ \"language\": \"python\" }'\n * ```\n *\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<TTestCase extends BaseCommandTestCase = BaseCommandTestCase>(\n problemDir: string,\n options: CommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const { cwds, isDebugMode } = await resolveCwds(problemDir, args.cwd);\n\n for (const resolvedCwd of cwds) {\n if (isDebugMode) printDebugCwdBanner(problemDir, resolvedCwd);\n const result = await runCommandJudgeForCwd<TTestCase>(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<TTestCase extends BaseCommandTestCase>(\n problemDir: string,\n cwd: string,\n params: JudgeParams,\n options: CommandJudgePresetOptions<TTestCase>\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: CommandRunResult;\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 });\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","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","exitCode","printDebugExpectationFailureBanner","e","f","a","_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","expectedResult","_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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"}
1
+ {"version":3,"file":"command.js","sources":["../../src/presets/command.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport {\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 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","_iterator","_step","resolvedCwd","result","_t","w","_context","p","n","parseArgs","process","argv","parse","resolveCwds","cwd","v","_createForOfIteratorHelper","s","done","value","printDebugCwdBanner","runCommandJudgeForCwd","matchesExpectedResult","exitCode","printDebugExpectationFailureBanner","e","f","a","_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","expectedResult","_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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exercode/problem-utils",
3
- "version": "1.13.1",
3
+ "version": "1.15.0",
4
4
  "description": ":100: A set of utilities for judging programs on Exercode (https://exercode.willbooster.com/).",
5
5
  "keywords": [
6
6
  "exercode",
@@ -76,7 +76,7 @@
76
76
  "oxlint": "1.65.0",
77
77
  "oxlint-tsgolint": "0.22.1",
78
78
  "prettier": "3.8.3",
79
- "prettier-plugin-java": "2.8.1",
79
+ "prettier-plugin-java": "2.9.2",
80
80
  "puppeteer": "24.43.1",
81
81
  "semantic-release": "25.0.3",
82
82
  "sort-package-json": "3.6.1",