diff --git a/.eslintrc.js b/.eslintrc.js index 7fbb5bd94..485cdfd98 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,6 +20,7 @@ module.exports = { 'guard-for-in': 'off', 'implicit-arrow-linebreak': 'off', 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', 'import/no-named-as-default-member': 'off', 'import/prefer-default-export': 'off', indent: ['warn', 4], diff --git a/packages/fps-importer/handler.ts b/packages/fps-importer/handler.ts index 89ca165a7..7eac3fbeb 100644 --- a/packages/fps-importer/handler.ts +++ b/packages/fps-importer/handler.ts @@ -4,7 +4,7 @@ import os from 'os'; import fs from 'fs-extra'; import AdmZip from 'adm-zip'; import xml2js from 'xml2js'; -import { ObjectID } from 'mongodb'; +import { ObjectID } from 'bson'; import { LocalProblemConfig } from 'hydrooj'; import { Route, Handler, param, Types, @@ -25,7 +25,7 @@ class FpsProblemImportHandler extends Handler { } else this.response.template = 'problem_import_fps.html'; } - @param('input', Types.String, true) + @param('input', Types.String) async post(domainId: string, input: string) { const result = await xml2js.parseStringPromise(input); const problem = global.Hydro.model.problem; @@ -80,10 +80,17 @@ class FpsProblemImportHandler extends Handler { memory: p.memory_limit[0]._ + p.memory_limit[0].$.unit, }; const pid = await problem.add(domainId, null, p.title.join(' '), content.join('\n'), this.user._id, p.source, []); - testdata.addFile('config.yaml', Buffer.from(`time:${config.time}\nmemory:${config.memory}`)); - for (let i = 0; i < p.test_input.length; i++) { - testdata.addFile(`${i + 1}.in`, Buffer.from(p.test_input[i])); - testdata.addFile(`${i + 1}.out`, Buffer.from(p.test_output[i])); + testdata.addFile('config.yaml', Buffer.from(`time: ${config.time}\nmemory: ${config.memory}`)); + if (p.test_output) { + for (let i = 0; i < p.test_input.length; i++) { + testdata.addFile(`${i + 1}.in`, Buffer.from(p.test_input[i])); + testdata.addFile(`${i + 1}.out`, Buffer.from(p.test_output[i])); + } + } else { + for (let i = 0; i < p.test_input.length / 2; i++) { + testdata.addFile(`${i + 1}.in`, Buffer.from(p.test_input[2 * i])); + testdata.addFile(`${i + 1}.out`, Buffer.from(p.test_input[2 * i + 1])); + } } const f = path.resolve(os.tmpdir(), 'hydro', `${Math.random()}.zip`); await new Promise((resolve, reject) => { diff --git a/packages/fps-importer/package.json b/packages/fps-importer/package.json index 9ca7fb0fc..16c1e5226 100644 --- a/packages/fps-importer/package.json +++ b/packages/fps-importer/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/fps-importer", - "version": "1.0.6", + "version": "1.0.7", "description": "Import FPS problems", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", @@ -9,12 +9,14 @@ "dependencies": { "adm-zip": "^0.4.16", "fs-extra": "^9.0.1", - "hydrooj": "^2.12.22", - "mongodb": "^3.6.1", "xml2js": "^0.4.23" }, "devDependencies": { - "@types/xml2js": "^0.4.5" + "@types/xml2js": "^0.4.5", + "bson": "^4.1.0" + }, + "peerDependencies": { + "hydrooj": "^2.12.22" }, "scripts": { "build": "tsc", diff --git a/packages/fps-importer/template/problem_import_fps.html b/packages/fps-importer/template/problem_import_fps.html index e35667c05..7df08766f 100644 --- a/packages/fps-importer/template/problem_import_fps.html +++ b/packages/fps-importer/template/problem_import_fps.html @@ -21,11 +21,11 @@ -