dev: always select highest version of the specified language

This commit is contained in:
KernelDeimos 2025-01-29 10:31:58 -05:00
parent dcd47bc4cf
commit 77d6bb2d8c
3 changed files with 55 additions and 1 deletions

View File

@ -2,6 +2,7 @@ const putility = require("@heyputer/putility");
const BaseService = require("../../services/BaseService");
const { Judge0Client } = require("./Judge0Client");
const { Context } = require("../../util/context");
const { find_highest_version } = require("../../util/versionutil");
class Judge0Service extends BaseService {
_construct () {
@ -46,7 +47,9 @@ class Judge0Service extends BaseService {
return lang.judge0_id;
}
}
let lang = this.languages.find((lang) => lang.language === runtime);
const matchingLangs = this.languages.filter((lang) => lang.language === runtime);
const lang = find_highest_version(matchingLangs);
if ( lang ) {
return lang.judge0_id;
}

View File

@ -0,0 +1,33 @@
/**
* Select the object with the highest version.
* Objects are of the form:
* { version: '1.2.0' }
*
* Semver is assumed.
*
* @param {*} objects
*/
const find_highest_version = (objects) => {
let highest = [0,0,0];
let highest_obj = null;
for ( const obj of objects ) {
const parts = obj.version.split('.');
for ( let i = 0; i < 3; i++ ) {
const part = parseInt(parts[i]);
if ( part > highest[i] ) {
highest = parts;
highest_obj = obj;
break;
} else if ( part < highest[i] ) {
break;
}1
}
}
return highest_obj;
};
module.exports = {
find_highest_version,
};

View File

@ -0,0 +1,18 @@
const { expect } = require('chai');
describe('versionutil', () => {
it('works', () => {
const objects = [
{ version: '1.2.0' },
{ version: '3.0.2' },
{ version: '1.2.1' },
{ version: '1.2.0' },
{ version: '3.1.0', h: true },
{ version: '1.2.2' },
];
const { find_highest_version } = require('./versionutil');
const highest_object = find_highest_version(objects);
expect(highest_object).to.deep.equal({ version: '3.1.0', h: true });
});
});