@juki-team/commons 0.1.46 → 0.1.48
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.
- package/dist/{types/constants → constants}/commons.d.ts +1 -1
- package/dist/constants/commons.js +648 -0
- package/dist/{types/constants → constants}/contest.d.ts +1 -1
- package/dist/constants/contest.js +28 -0
- package/dist/{types/constants → constants}/course.d.ts +1 -1
- package/dist/constants/course.js +12 -0
- package/dist/constants/date.js +23 -0
- package/dist/constants/email.js +34 -0
- package/dist/{types/constants → constants}/entity.d.ts +1 -1
- package/dist/constants/entity.js +18 -0
- package/dist/{types/constants → constants}/file.d.ts +1 -1
- package/dist/constants/file.js +45 -0
- package/dist/constants/index.d.ts +18 -0
- package/dist/constants/index.js +18 -0
- package/dist/{types/constants → constants}/judge.d.ts +1 -1
- package/dist/constants/judge.js +225 -0
- package/dist/{types/constants → constants}/organization.d.ts +1 -1
- package/dist/constants/organization.js +24 -0
- package/dist/{types/constants → constants}/problem.d.ts +1 -1
- package/dist/constants/problem.js +69 -0
- package/dist/constants/routing.js +7 -0
- package/dist/{types/constants → constants}/services.d.ts +1 -1
- package/dist/constants/services.js +157 -0
- package/dist/{types/constants → constants}/system.d.ts +1 -1
- package/dist/constants/system.js +9 -0
- package/dist/{types/constants → constants}/teams.d.ts +1 -1
- package/dist/constants/teams.js +17 -0
- package/dist/constants/time.js +9 -0
- package/dist/{types/constants → constants}/user.d.ts +2 -2
- package/dist/constants/user.js +40 -0
- package/dist/{types/constants → constants}/websocket.d.ts +7 -3
- package/dist/constants/websocket.js +56 -0
- package/dist/{types/constants → constants}/worksheet.d.ts +1 -1
- package/dist/constants/worksheet.js +66 -0
- package/dist/{types/dto → dto}/class.d.ts +3 -3
- package/dist/dto/class.js +1 -0
- package/dist/{types/dto → dto}/code.d.ts +1 -1
- package/dist/dto/code.js +1 -0
- package/dist/{types/dto → dto}/comments.d.ts +1 -1
- package/dist/dto/comments.js +1 -0
- package/dist/{types/dto → dto}/contest.d.ts +4 -4
- package/dist/dto/contest.js +7 -0
- package/dist/{types/dto → dto}/course.d.ts +4 -4
- package/dist/dto/course.js +1 -0
- package/dist/{types/dto → dto}/entity.d.ts +2 -2
- package/dist/dto/entity.js +5 -0
- package/dist/{types/dto → dto}/excalidraw.d.ts +3 -3
- package/dist/dto/excalidraw.js +1 -0
- package/dist/{types/dto → dto}/file.d.ts +2 -2
- package/dist/dto/file.js +1 -0
- package/dist/dto/image.js +1 -0
- package/dist/dto/index.d.ts +25 -0
- package/dist/dto/index.js +25 -0
- package/dist/{types/dto → dto}/judge.d.ts +1 -1
- package/dist/dto/judge.js +1 -0
- package/dist/{types/dto → dto}/markdown.d.ts +3 -3
- package/dist/dto/markdown.js +1 -0
- package/dist/{types/dto → dto}/mermaid.d.ts +3 -3
- package/dist/dto/mermaid.js +1 -0
- package/dist/{types/dto → dto}/organization.d.ts +3 -3
- package/dist/dto/organization.js +1 -0
- package/dist/{types/dto → dto}/problem.d.ts +3 -3
- package/dist/dto/problem.js +1 -0
- package/dist/{types/dto → dto}/scoreboard.d.ts +2 -2
- package/dist/dto/scoreboard.js +1 -0
- package/dist/{types/dto → dto}/session.d.ts +2 -2
- package/dist/dto/session.js +1 -0
- package/dist/{types/dto → dto}/socket.d.ts +5 -5
- package/dist/dto/socket.js +1 -0
- package/dist/{types/dto → dto}/statistics.d.ts +1 -1
- package/dist/dto/statistics.js +1 -0
- package/dist/{types/dto → dto}/submission.d.ts +3 -3
- package/dist/dto/submission.js +1 -0
- package/dist/{types/dto → dto}/system.d.ts +1 -1
- package/dist/dto/system.js +1 -0
- package/dist/dto/url.js +1 -0
- package/dist/{types/dto → dto}/user.d.ts +3 -3
- package/dist/dto/user.js +1 -0
- package/dist/{types/dto → dto}/virtual-user.d.ts +1 -1
- package/dist/dto/virtual-user.js +1 -0
- package/dist/{types/dto → dto}/worksheet-submissions.d.ts +3 -3
- package/dist/dto/worksheet-submissions.js +1 -0
- package/dist/{types/dto → dto}/worksheet.d.ts +3 -3
- package/dist/dto/worksheet.js +1 -0
- package/dist/{types/helpers → helpers}/class.d.ts +1 -1
- package/dist/helpers/class.js +10 -0
- package/dist/helpers/comments.js +4 -0
- package/dist/{types/helpers → helpers}/commons.d.ts +1 -1
- package/dist/helpers/commons.js +187 -0
- package/dist/{types/helpers → helpers}/contest.d.ts +1 -1
- package/dist/helpers/contest.js +21 -0
- package/dist/helpers/date.js +181 -0
- package/dist/{types/helpers → helpers}/document.d.ts +2 -2
- package/dist/helpers/document.js +51 -0
- package/dist/{types/helpers → helpers}/errors.d.ts +1 -1
- package/dist/helpers/errors.js +17 -0
- package/dist/helpers/file.js +4 -0
- package/dist/helpers/index.d.ts +17 -0
- package/dist/helpers/index.js +17 -0
- package/dist/helpers/interval.js +24 -0
- package/dist/{types/helpers → helpers}/judging.d.ts +1 -1
- package/dist/helpers/judging.js +124 -0
- package/dist/helpers/number.js +2 -0
- package/dist/helpers/object.js +33 -0
- package/dist/{types/helpers → helpers}/responses.d.ts +2 -2
- package/dist/helpers/responses.js +95 -0
- package/dist/{types/helpers → helpers}/socket.d.ts +3 -3
- package/dist/helpers/socket.js +279 -0
- package/dist/{types/helpers → helpers}/time.d.ts +1 -1
- package/dist/helpers/time.js +69 -0
- package/dist/{types/helpers → helpers}/user.d.ts +1 -1
- package/dist/helpers/user.js +14 -0
- package/dist/{types/helpers → helpers}/worksheet.d.ts +1 -1
- package/dist/helpers/worksheet.js +107 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/types/account.js +10 -0
- package/dist/types/{types/class.d.ts → class.d.ts} +2 -2
- package/dist/types/class.js +7 -0
- package/dist/types/comments.js +1 -0
- package/dist/types/{types/commons.d.ts → commons.d.ts} +1 -1
- package/dist/types/commons.js +69 -0
- package/dist/types/{types/contest.d.ts → contest.d.ts} +4 -4
- package/dist/types/contest.js +27 -0
- package/dist/types/{types/course.d.ts → course.d.ts} +1 -1
- package/dist/types/course.js +1 -0
- package/dist/types/entity.js +50 -0
- package/dist/types/{types/excalidraw.d.ts → excalidraw.d.ts} +1 -1
- package/dist/types/excalidraw.js +1 -0
- package/dist/types/{types/file.d.ts → file.d.ts} +2 -2
- package/dist/types/file.js +19 -0
- package/dist/types/{types/group.d.ts → group.d.ts} +1 -1
- package/dist/types/group.js +5 -0
- package/dist/types/index.d.ts +27 -4
- package/dist/types/index.js +27 -0
- package/dist/types/{types/judge.d.ts → judge.d.ts} +2 -2
- package/dist/types/judge.js +49 -0
- package/dist/types/{types/markdown.d.ts → markdown.d.ts} +1 -1
- package/dist/types/markdown.js +1 -0
- package/dist/types/{types/mermaid.d.ts → mermaid.d.ts} +1 -1
- package/dist/types/mermaid.js +1 -0
- package/dist/types/notification.js +8 -0
- package/dist/types/organization.js +14 -0
- package/dist/types/{types/prisma.d.ts → prisma.d.ts} +1 -1
- package/dist/types/prisma.js +106 -0
- package/dist/types/{types/problems.d.ts → problems.d.ts} +3 -3
- package/dist/types/problems.js +28 -0
- package/dist/types/scoreboard.js +1 -0
- package/dist/types/{types/services.d.ts → services.d.ts} +1 -1
- package/dist/types/services.js +152 -0
- package/dist/types/{types/sheet.d.ts → sheet.d.ts} +2 -2
- package/dist/types/sheet.js +16 -0
- package/dist/types/{types/socket.d.ts → socket.d.ts} +3 -2
- package/dist/types/socket.js +76 -0
- package/dist/types/submission.js +1 -0
- package/dist/types/system.js +1 -0
- package/dist/types/{types/teams.d.ts → teams.d.ts} +2 -2
- package/dist/types/teams.js +1 -0
- package/dist/types/{types/users.d.ts → users.d.ts} +2 -2
- package/dist/types/users.js +23 -0
- package/dist/types/virtual-user.js +8 -0
- package/dist/types/{types/worksheet.d.ts → worksheet.d.ts} +3 -3
- package/dist/types/worksheet.js +11 -0
- package/package.json +8 -11
- package/dist/cjs/index.cjs +0 -3695
- package/dist/esm/index.js +0 -3415
- package/dist/types/constants/index.d.ts +0 -18
- package/dist/types/dto/index.d.ts +0 -25
- package/dist/types/helpers/index.d.ts +0 -17
- package/dist/types/types/index.d.ts +0 -27
- /package/dist/{types/constants → constants}/date.d.ts +0 -0
- /package/dist/{types/constants → constants}/email.d.ts +0 -0
- /package/dist/{types/constants → constants}/routing.d.ts +0 -0
- /package/dist/{types/constants → constants}/time.d.ts +0 -0
- /package/dist/{types/dto → dto}/image.d.ts +0 -0
- /package/dist/{types/dto → dto}/url.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/comments.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/date.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/file.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/interval.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/number.d.ts +0 -0
- /package/dist/{types/helpers → helpers}/object.d.ts +0 -0
- /package/dist/types/{types/account.d.ts → account.d.ts} +0 -0
- /package/dist/types/{types/comments.d.ts → comments.d.ts} +0 -0
- /package/dist/types/{types/entity.d.ts → entity.d.ts} +0 -0
- /package/dist/types/{types/notification.d.ts → notification.d.ts} +0 -0
- /package/dist/types/{types/organization.d.ts → organization.d.ts} +0 -0
- /package/dist/types/{types/scoreboard.d.ts → scoreboard.d.ts} +0 -0
- /package/dist/types/{types/submission.d.ts → submission.d.ts} +0 -0
- /package/dist/types/{types/system.d.ts → system.d.ts} +0 -0
- /package/dist/types/{types/virtual-user.d.ts → virtual-user.d.ts} +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EntityAccess, EntityMembersRank, } from '../types/index.js';
|
|
2
|
+
export const getDocumentAccess = (document) => {
|
|
3
|
+
switch (true) {
|
|
4
|
+
case (document?.members?.rankAdministrators === EntityMembersRank.NONE || document?.members?.rankAdministrators === EntityMembersRank.CLOSE)
|
|
5
|
+
&& document?.members?.rankManagers === EntityMembersRank.OPEN
|
|
6
|
+
&& (document?.members?.rankGuests === EntityMembersRank.NONE || document?.members?.rankGuests === EntityMembersRank.CLOSE || document?.members?.rankGuests === EntityMembersRank.OPEN)
|
|
7
|
+
&& document?.members?.rankSpectators === EntityMembersRank.OPEN
|
|
8
|
+
&& (document?.members?.rankParticipants === EntityMembersRank.NONE || document?.members?.rankParticipants === EntityMembersRank.CLOSE || document?.members?.rankParticipants === EntityMembersRank.OPEN):
|
|
9
|
+
return EntityAccess.EXPOSED;
|
|
10
|
+
case (document?.members?.rankAdministrators === EntityMembersRank.NONE || document?.members?.rankAdministrators === EntityMembersRank.CLOSE)
|
|
11
|
+
&& document?.members?.rankManagers === EntityMembersRank.CLOSE
|
|
12
|
+
&& (document?.members?.rankGuests === EntityMembersRank.NONE || document?.members?.rankGuests === EntityMembersRank.CLOSE || document?.members?.rankGuests === EntityMembersRank.OPEN)
|
|
13
|
+
&& document?.members?.rankSpectators === EntityMembersRank.OPEN
|
|
14
|
+
&& (document?.members?.rankParticipants === EntityMembersRank.NONE || document?.members?.rankParticipants === EntityMembersRank.CLOSE || document?.members?.rankParticipants === EntityMembersRank.OPEN):
|
|
15
|
+
return EntityAccess.PUBLIC;
|
|
16
|
+
case (document?.members?.rankAdministrators === EntityMembersRank.NONE || document?.members?.rankAdministrators === EntityMembersRank.CLOSE)
|
|
17
|
+
&& document?.members?.rankManagers === EntityMembersRank.CLOSE
|
|
18
|
+
&& (document?.members?.rankGuests === EntityMembersRank.NONE || document?.members?.rankGuests === EntityMembersRank.CLOSE || document?.members?.rankGuests === EntityMembersRank.OPEN)
|
|
19
|
+
&& document?.members?.rankSpectators === EntityMembersRank.CLOSE
|
|
20
|
+
&& (document?.members?.rankParticipants === EntityMembersRank.NONE || document?.members?.rankParticipants === EntityMembersRank.CLOSE || document?.members?.rankParticipants === EntityMembersRank.OPEN):
|
|
21
|
+
return EntityAccess.RESTRICTED;
|
|
22
|
+
case document?.members?.rankAdministrators === EntityMembersRank.NONE
|
|
23
|
+
&& document?.members?.rankManagers === EntityMembersRank.NONE
|
|
24
|
+
&& document?.members?.rankGuests === EntityMembersRank.NONE
|
|
25
|
+
&& document?.members?.rankSpectators === EntityMembersRank.NONE
|
|
26
|
+
&& document?.members?.rankParticipants === EntityMembersRank.NONE:
|
|
27
|
+
return EntityAccess.PRIVATE;
|
|
28
|
+
default:
|
|
29
|
+
return EntityAccess.PRIVATE;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export const isUserMember = (member) => {
|
|
33
|
+
return typeof member.userId === 'string';
|
|
34
|
+
};
|
|
35
|
+
export const isTeamMember = (member) => {
|
|
36
|
+
return typeof member.teamId === 'string';
|
|
37
|
+
};
|
|
38
|
+
export const toEntityMembersDto = (members) => {
|
|
39
|
+
return {
|
|
40
|
+
rankAdministrators: members.rankAdministrators,
|
|
41
|
+
administrators: Object.keys(members.administrators),
|
|
42
|
+
rankManagers: members.rankManagers,
|
|
43
|
+
managers: Object.keys(members.managers),
|
|
44
|
+
rankParticipants: members.rankParticipants,
|
|
45
|
+
participants: Object.keys(members.participants),
|
|
46
|
+
rankGuests: members.rankGuests,
|
|
47
|
+
guests: Object.keys(members.guests),
|
|
48
|
+
rankSpectators: members.rankSpectators,
|
|
49
|
+
spectators: Object.keys(members.spectators),
|
|
50
|
+
};
|
|
51
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ERROR } from '../constants/services.js';
|
|
2
|
+
export class JkError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
data;
|
|
5
|
+
constructor(code, custom) {
|
|
6
|
+
const message = custom?.message || ERROR[code].message;
|
|
7
|
+
super(message);
|
|
8
|
+
this.message = message;
|
|
9
|
+
this.code = code;
|
|
10
|
+
if (custom?.stack) {
|
|
11
|
+
this.stack = custom.stack;
|
|
12
|
+
}
|
|
13
|
+
if (custom?.data) {
|
|
14
|
+
this.data = custom.data;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './class.js';
|
|
2
|
+
export * from './comments.js';
|
|
3
|
+
export * from './commons.js';
|
|
4
|
+
export * from './contest.js';
|
|
5
|
+
export * from './date.js';
|
|
6
|
+
export * from './document.js';
|
|
7
|
+
export * from './errors.js';
|
|
8
|
+
export * from './file.js';
|
|
9
|
+
export * from './interval.js';
|
|
10
|
+
export * from './judging.js';
|
|
11
|
+
export * from './number.js';
|
|
12
|
+
export * from './object.js';
|
|
13
|
+
export * from './responses.js';
|
|
14
|
+
export * from './socket.js';
|
|
15
|
+
export * from './time.js';
|
|
16
|
+
export * from './user.js';
|
|
17
|
+
export * from './worksheet.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './class.js';
|
|
2
|
+
export * from './comments.js';
|
|
3
|
+
export * from './commons.js';
|
|
4
|
+
export * from './contest.js';
|
|
5
|
+
export * from './date.js';
|
|
6
|
+
export * from './document.js';
|
|
7
|
+
export * from './errors.js';
|
|
8
|
+
export * from './file.js';
|
|
9
|
+
export * from './interval.js';
|
|
10
|
+
export * from './judging.js';
|
|
11
|
+
export * from './number.js';
|
|
12
|
+
export * from './object.js';
|
|
13
|
+
export * from './responses.js';
|
|
14
|
+
export * from './socket.js';
|
|
15
|
+
export * from './time.js';
|
|
16
|
+
export * from './user.js';
|
|
17
|
+
export * from './worksheet.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// https://dev.to/jsmccrumb/asynchronous-setinterval-4j69
|
|
2
|
+
const asyncIntervals = [];
|
|
3
|
+
const runAsyncInterval = async (cb, interval, intervalIndex) => {
|
|
4
|
+
await cb();
|
|
5
|
+
if (asyncIntervals[intervalIndex]) {
|
|
6
|
+
setTimeout(() => runAsyncInterval(cb, interval, intervalIndex), interval);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export const setAsyncInterval = (cb, interval) => {
|
|
10
|
+
if (cb && typeof cb === 'function') {
|
|
11
|
+
const intervalIndex = asyncIntervals.length;
|
|
12
|
+
asyncIntervals.push(true);
|
|
13
|
+
void runAsyncInterval(cb, interval, intervalIndex);
|
|
14
|
+
return intervalIndex;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
throw new Error('Callback must be a function');
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export const clearAsyncInterval = (intervalIndex) => {
|
|
21
|
+
if (asyncIntervals[intervalIndex]) {
|
|
22
|
+
asyncIntervals[intervalIndex] = false;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CodeEditorTestCase, DataLog, ProblemVerdict, SubmissionTestCase, TestCaseVerdict } from '../types';
|
|
1
|
+
import { CodeEditorTestCase, DataLog, ProblemVerdict, SubmissionTestCase, TestCaseVerdict } from '../types/index.js';
|
|
2
2
|
export declare const getDataOfTestCase: (testCase: SubmissionTestCase, timeLimit: number, memoryLimit: number) => {
|
|
3
3
|
compilationError: boolean;
|
|
4
4
|
timeUsed: number;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { ProblemVerdict, SubmissionRunStatus, } from '../types/index.js';
|
|
2
|
+
export const getDataOfTestCase = (testCase, timeLimit, memoryLimit) => {
|
|
3
|
+
const { timeUsed, memoryUsed, exitCode } = getDataLog(testCase?.log);
|
|
4
|
+
const timeLimitExceeded = timeUsed > timeLimit;
|
|
5
|
+
const memoryLimitExceeded = memoryUsed > memoryLimit;
|
|
6
|
+
const runtimeError = exitCode !== 0;
|
|
7
|
+
const compilationError = testCase?.status === SubmissionRunStatus.COMPILATION_ERROR;
|
|
8
|
+
return {
|
|
9
|
+
compilationError,
|
|
10
|
+
timeUsed,
|
|
11
|
+
timeLimitExceeded: timeLimitExceeded,
|
|
12
|
+
memoryUsed,
|
|
13
|
+
memoryLimitExceeded: memoryLimitExceeded,
|
|
14
|
+
exitCode,
|
|
15
|
+
runtimeError,
|
|
16
|
+
failed: !!testCase?.log && (timeLimitExceeded || memoryLimitExceeded || runtimeError),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export const getVerdictFromTestCase = (testCaseValue, timeLimit, memoryLimit) => {
|
|
20
|
+
const { compilationError, timeLimitExceeded, memoryLimitExceeded, runtimeError, timeUsed, memoryUsed, exitCode, } = getDataOfTestCase(testCaseValue, timeLimit, memoryLimit);
|
|
21
|
+
return {
|
|
22
|
+
verdict: compilationError
|
|
23
|
+
? ProblemVerdict.CE
|
|
24
|
+
: timeLimitExceeded
|
|
25
|
+
? ProblemVerdict.TLE
|
|
26
|
+
: memoryLimitExceeded
|
|
27
|
+
? ProblemVerdict.MLE
|
|
28
|
+
: runtimeError
|
|
29
|
+
? ProblemVerdict.RE
|
|
30
|
+
: testCaseValue.out === testCaseValue.testOut
|
|
31
|
+
? ProblemVerdict.AC
|
|
32
|
+
: testCaseValue.withPE && testCaseValue.out.split(' ').join('').split('\n').join('') === testCaseValue.testOut.split(' ').join('').split('\n').join('')
|
|
33
|
+
? ProblemVerdict.PE
|
|
34
|
+
: !testCaseValue.withPE && testCaseValue.out.split(' ').join('').split('\n').join('') === testCaseValue.testOut.split(' ').join('').split('\n').join('')
|
|
35
|
+
? ProblemVerdict.AC
|
|
36
|
+
: ProblemVerdict.WA,
|
|
37
|
+
timeUsed,
|
|
38
|
+
memoryUsed,
|
|
39
|
+
exitCode,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export const mergeVerdicts = (first, second) => {
|
|
43
|
+
let verdict = first.verdict;
|
|
44
|
+
if (second.verdict === ProblemVerdict.RE) {
|
|
45
|
+
verdict = ProblemVerdict.RE;
|
|
46
|
+
}
|
|
47
|
+
else if (second.verdict === ProblemVerdict.TLE && verdict != ProblemVerdict.RE) {
|
|
48
|
+
verdict = ProblemVerdict.TLE;
|
|
49
|
+
}
|
|
50
|
+
else if (second.verdict === ProblemVerdict.MLE
|
|
51
|
+
&& verdict !== ProblemVerdict.TLE
|
|
52
|
+
&& verdict !== ProblemVerdict.RE) {
|
|
53
|
+
verdict = ProblemVerdict.MLE;
|
|
54
|
+
}
|
|
55
|
+
else if (second.verdict === ProblemVerdict.WA
|
|
56
|
+
&& verdict !== ProblemVerdict.MLE
|
|
57
|
+
&& verdict !== ProblemVerdict.TLE
|
|
58
|
+
&& verdict !== ProblemVerdict.RE) {
|
|
59
|
+
verdict = ProblemVerdict.WA;
|
|
60
|
+
}
|
|
61
|
+
else if (second.verdict === ProblemVerdict.PE
|
|
62
|
+
&& verdict !== ProblemVerdict.WA
|
|
63
|
+
&& verdict !== ProblemVerdict.MLE
|
|
64
|
+
&& verdict !== ProblemVerdict.TLE
|
|
65
|
+
&& verdict !== ProblemVerdict.RE) {
|
|
66
|
+
verdict = ProblemVerdict.PE;
|
|
67
|
+
}
|
|
68
|
+
else if (second.verdict === ProblemVerdict.PA
|
|
69
|
+
&& verdict !== ProblemVerdict.PE
|
|
70
|
+
&& verdict !== ProblemVerdict.WA
|
|
71
|
+
&& verdict !== ProblemVerdict.MLE
|
|
72
|
+
&& verdict !== ProblemVerdict.TLE
|
|
73
|
+
&& verdict !== ProblemVerdict.RE) {
|
|
74
|
+
verdict = ProblemVerdict.PA;
|
|
75
|
+
}
|
|
76
|
+
else if (second.verdict === ProblemVerdict.AC
|
|
77
|
+
&& verdict !== ProblemVerdict.PA
|
|
78
|
+
&& verdict !== ProblemVerdict.PE
|
|
79
|
+
&& verdict !== ProblemVerdict.WA
|
|
80
|
+
&& verdict !== ProblemVerdict.MLE
|
|
81
|
+
&& verdict !== ProblemVerdict.TLE
|
|
82
|
+
&& verdict !== ProblemVerdict.RE) {
|
|
83
|
+
verdict = ProblemVerdict.AC;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
timeUsed: Math.max(first.timeUsed, second.timeUsed),
|
|
87
|
+
memoryUsed: Math.max(first.memoryUsed, second.memoryUsed),
|
|
88
|
+
exitCode: first.exitCode || second.exitCode,
|
|
89
|
+
verdict,
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export const getDataLog = (log) => {
|
|
93
|
+
const lines = log?.split?.('\n') || [];
|
|
94
|
+
let timeUsed = 0;
|
|
95
|
+
let memoryUsed = 0;
|
|
96
|
+
let exitCode = -1;
|
|
97
|
+
if (lines.length > 4) {
|
|
98
|
+
for (const line of lines) {
|
|
99
|
+
if (line.startsWith('time:')) {
|
|
100
|
+
timeUsed = +line.split(':')[1];
|
|
101
|
+
if (Number.isNaN(timeUsed)) {
|
|
102
|
+
timeUsed = 0;
|
|
103
|
+
}
|
|
104
|
+
timeUsed *= 1000;
|
|
105
|
+
}
|
|
106
|
+
else if (line.startsWith('max-rss:')) {
|
|
107
|
+
memoryUsed = parseInt(line.split(':')[1], 10); // en KB
|
|
108
|
+
}
|
|
109
|
+
else if (line.startsWith('exitcode:')) {
|
|
110
|
+
exitCode = parseInt(line.split(':')[1], 10);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (lines.length >= 3) {
|
|
115
|
+
timeUsed = +lines[0];
|
|
116
|
+
memoryUsed = +lines[1];
|
|
117
|
+
exitCode = +lines[2];
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
timeUsed: Number.isNaN(timeUsed) ? 0 : timeUsed,
|
|
121
|
+
memoryUsed: Number.isNaN(memoryUsed) ? 0 : memoryUsed,
|
|
122
|
+
exitCode: Number.isNaN(exitCode) ? -1 : exitCode,
|
|
123
|
+
};
|
|
124
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function memorySizeOf(obj) {
|
|
2
|
+
let bytes = 0;
|
|
3
|
+
function sizeOf(obj) {
|
|
4
|
+
if (obj !== null && obj !== undefined) {
|
|
5
|
+
switch (typeof obj) {
|
|
6
|
+
case "number":
|
|
7
|
+
bytes += 8;
|
|
8
|
+
break;
|
|
9
|
+
case "string":
|
|
10
|
+
bytes += obj.length * 2;
|
|
11
|
+
break;
|
|
12
|
+
case "boolean":
|
|
13
|
+
bytes += 4;
|
|
14
|
+
break;
|
|
15
|
+
case "object":
|
|
16
|
+
const objClass = Object.prototype.toString.call(obj).slice(8, -1);
|
|
17
|
+
if (objClass === "Object" || objClass === "Array") {
|
|
18
|
+
for (const key in obj) {
|
|
19
|
+
if (!obj.hasOwnProperty(key))
|
|
20
|
+
continue;
|
|
21
|
+
bytes += key.length * 2;
|
|
22
|
+
sizeOf(obj[key]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else
|
|
26
|
+
bytes += obj.toString().length * 2;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return bytes;
|
|
31
|
+
}
|
|
32
|
+
return sizeOf(obj);
|
|
33
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { JkError } from './errors';
|
|
2
|
-
import { ContentResponse, ContentsMeta, ContentsResponse, ErrorResponse } from '../types';
|
|
1
|
+
import { JkError } from './errors.js';
|
|
2
|
+
import { ContentResponse, ContentsMeta, ContentsResponse, ErrorResponse } from '../types/index.js';
|
|
3
3
|
export declare function toJkError(err: any): JkError;
|
|
4
4
|
export declare function errorsResponse(message: string, ...errors: JkError[]): ErrorResponse;
|
|
5
5
|
export declare function contentResponse<T>(message: string, content: T): ContentResponse<T>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ERROR } from '../constants/index.js';
|
|
2
|
+
import { JkError } from './errors.js';
|
|
3
|
+
import { ErrorCode } from '../types/index.js';
|
|
4
|
+
import { consoleError, isStringJson } from './commons.js';
|
|
5
|
+
export function toJkError(err) {
|
|
6
|
+
const error = new Error();
|
|
7
|
+
let code = err?.code;
|
|
8
|
+
if (!(code in ErrorCode)) {
|
|
9
|
+
code = ErrorCode.ERR500;
|
|
10
|
+
}
|
|
11
|
+
return new JkError(code, {
|
|
12
|
+
message: err?.message || error.message,
|
|
13
|
+
stack: err?.stack || error.stack,
|
|
14
|
+
data: err?.data || null,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function errorsResponse(message, ...errors) {
|
|
18
|
+
return {
|
|
19
|
+
success: false,
|
|
20
|
+
message: message,
|
|
21
|
+
errors: errors.map(error => ({
|
|
22
|
+
code: error.code,
|
|
23
|
+
message: error.message,
|
|
24
|
+
detail: error.stack || new Error().stack || '',
|
|
25
|
+
data: error.data,
|
|
26
|
+
})),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function contentResponse(message, content) {
|
|
30
|
+
return {
|
|
31
|
+
success: true,
|
|
32
|
+
message,
|
|
33
|
+
content,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function contentsResponse(message, contents, meta) {
|
|
37
|
+
return {
|
|
38
|
+
success: true,
|
|
39
|
+
message,
|
|
40
|
+
contents,
|
|
41
|
+
meta,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export const cleanRequest = (responseText) => {
|
|
45
|
+
if (!isStringJson(responseText)) {
|
|
46
|
+
// this occurs when the endpoint don't exits or server is down
|
|
47
|
+
const response = {
|
|
48
|
+
success: false,
|
|
49
|
+
message: ERROR[ErrorCode.ERR9999].message,
|
|
50
|
+
errors: [{ code: ErrorCode.ERR9999, detail: '', message: ERROR[ErrorCode.ERR9999].message }],
|
|
51
|
+
};
|
|
52
|
+
consoleError({ message: 'response is not string json, success false on cleaning request', responseText, response });
|
|
53
|
+
// jukiApiManager.reportError({ message: 'success false on cleaning request', responseText, response });
|
|
54
|
+
return response;
|
|
55
|
+
}
|
|
56
|
+
const responseJson = JSON.parse(responseText);
|
|
57
|
+
if (typeof responseJson.success === 'boolean') {
|
|
58
|
+
if (responseJson.success === true && typeof responseJson.message === 'string' && responseJson.content) { // V1
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
message: responseJson.message,
|
|
62
|
+
content: responseJson.content,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
else if (responseJson.success === true && typeof responseJson.message === 'string' && Array.isArray(responseJson.contents) && responseJson.meta) { // V1
|
|
66
|
+
return {
|
|
67
|
+
success: true,
|
|
68
|
+
message: responseJson.message,
|
|
69
|
+
contents: responseJson.contents,
|
|
70
|
+
meta: responseJson.meta,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
else if (responseJson.success === false && typeof responseJson.message === 'string' && Array.isArray(responseJson.errors)) { // V1
|
|
74
|
+
const response = {
|
|
75
|
+
success: false,
|
|
76
|
+
message: responseJson.message,
|
|
77
|
+
errors: responseJson.errors,
|
|
78
|
+
};
|
|
79
|
+
consoleError({ message: 'success false on cleaning request', responseText, response });
|
|
80
|
+
// jukiApiManager.reportError({ message: 'success false on cleaning request', responseText, response });
|
|
81
|
+
return response;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const response = {
|
|
85
|
+
success: false,
|
|
86
|
+
message: ERROR[ErrorCode.ERR9998].message,
|
|
87
|
+
errors: [{ code: ErrorCode.ERR9998, detail: '', message: ERROR[ErrorCode.ERR9998].message }],
|
|
88
|
+
};
|
|
89
|
+
consoleError({ message: 'success false on cleaning request', responseText, response });
|
|
90
|
+
// jukiApiManager.reportError({ message: 'success false on cleaning request', responseText, response });
|
|
91
|
+
return response;
|
|
92
|
+
};
|
|
93
|
+
export const getDefaultMeta = (contents, sort) => {
|
|
94
|
+
return { sort: sort ?? [], page: 1, size: contents.length, totalElements: contents.length, filter: {} };
|
|
95
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CodeRunStatusWebSocketResponseEventDto, ContestChangesWebSocketResponseEventDto, ProblemCrawledWebSocketResponseEventDto, SendDataEc2InstancesListWebSocketResponseEventDto, SendDataEcsTaskDefinitionListWebSocketResponseEventDto, SendDataEcsTasksListWebSocketResponseEventDto, SendDataRunCommandWebSocketResponseEventDto, SendDataSsmSessionsListWebSocketResponseEventDto, SendDataWebSocketResponseEventDto, SubmissionJudgingWebSocketResponseEventDto, SubmissionRunStatusWebSocketResponseEventDto, SubmissionsCrawlWebSocketResponseEventDto, SubmissionsJudgingScope, SubscribeCodeRunStatusWebSocketEventDto, SubscribeContestChangesWebSocketEventDto, SubscribeGetDataWebSocketEventDto, SubscribeProblemCrawledWebSocketEventDto, SubscribeSubmissionRunStatusWebSocketEventDto, SubscribeSubmissionsCrawlWebSocketEventDto, SubscribeSubmissionsJudgingWebSocketEventDto, SubscribeUserNotificationWebsocketEventDto, UnsubscribeCodeRunStatusWebSocketEventDto, UnsubscribeContestChangesWebSocketEventDto, UnsubscribeGetDataWebSocketEventDto, UnsubscribeProblemCrawledWebSocketEventDto, UnsubscribeSubmissionRunStatusWebSocketEventDto, UnsubscribeSubmissionsCrawlWebSocketEventDto, UnsubscribeSubmissionsJudgingWebSocketEventDto, UnsubscribeUserNotificationWebSocketEventDto, UserMessageWebSocketResponseEventDto, UserNotificationContestClarificationWebSocketResponseEventDto, UserNotificationSubmissionWebSocketResponseEventDto, UserNotificationWebSocketResponseEventDto, WebSocketChannelsMessageDto, WebSocketResponseEventDto, WebSocketSubscribeEventDto, WebSocketUnsubscribeEventDto } from '../dto';
|
|
2
|
-
import { ClientId, WebSocketResponseEvent, WebSocketResponseEventKey } from '../types';
|
|
1
|
+
import { CodeRunStatusWebSocketResponseEventDto, ContestChangesWebSocketResponseEventDto, ProblemCrawledWebSocketResponseEventDto, SendDataEc2InstancesListWebSocketResponseEventDto, SendDataEcsTaskDefinitionListWebSocketResponseEventDto, SendDataEcsTasksListWebSocketResponseEventDto, SendDataRunCommandWebSocketResponseEventDto, SendDataSsmSessionsListWebSocketResponseEventDto, SendDataWebSocketResponseEventDto, SubmissionJudgingWebSocketResponseEventDto, SubmissionRunStatusWebSocketResponseEventDto, SubmissionsCrawlWebSocketResponseEventDto, SubmissionsJudgingScope, SubscribeCodeRunStatusWebSocketEventDto, SubscribeContestChangesWebSocketEventDto, SubscribeGetDataWebSocketEventDto, SubscribeProblemCrawledWebSocketEventDto, SubscribeSubmissionRunStatusWebSocketEventDto, SubscribeSubmissionsCrawlWebSocketEventDto, SubscribeSubmissionsJudgingWebSocketEventDto, SubscribeUserNotificationWebsocketEventDto, UnsubscribeCodeRunStatusWebSocketEventDto, UnsubscribeContestChangesWebSocketEventDto, UnsubscribeGetDataWebSocketEventDto, UnsubscribeProblemCrawledWebSocketEventDto, UnsubscribeSubmissionRunStatusWebSocketEventDto, UnsubscribeSubmissionsCrawlWebSocketEventDto, UnsubscribeSubmissionsJudgingWebSocketEventDto, UnsubscribeUserNotificationWebSocketEventDto, UserMessageWebSocketResponseEventDto, UserNotificationContestClarificationWebSocketResponseEventDto, UserNotificationSubmissionWebSocketResponseEventDto, UserNotificationWebSocketResponseEventDto, WebSocketChannelsMessageDto, WebSocketResponseEventDto, WebSocketSubscribeEventDto, WebSocketUnsubscribeEventDto } from '../dto/index.js';
|
|
2
|
+
import { ClientId, WebSocketResponseEvent, WebSocketResponseEventKey } from '../types/index.js';
|
|
3
3
|
export declare const isWebsocketSubscription: (event: any) => event is WebSocketSubscribeEventDto | WebSocketUnsubscribeEventDto;
|
|
4
4
|
export declare const isSubscribeCodeRunStatusWebSocketEventDto: (event: any) => event is SubscribeCodeRunStatusWebSocketEventDto;
|
|
5
5
|
export declare const isUnsubscribeCodeRunStatusWebSocketEventDto: (event: any) => event is UnsubscribeCodeRunStatusWebSocketEventDto;
|
|
@@ -16,7 +16,7 @@ export declare const isUnsubscribeContestChangesWebSocketEventDto: (event: any)
|
|
|
16
16
|
export declare const isSubscribeUserNotificationWebSocketEventDto: (event: any) => event is SubscribeUserNotificationWebsocketEventDto;
|
|
17
17
|
export declare const isUnsubscribeUserNotificationWebSocketEventDto: (event: any) => event is UnsubscribeUserNotificationWebSocketEventDto;
|
|
18
18
|
/**
|
|
19
|
-
* Exactly one of `problemKey` / `contestKey` / `
|
|
19
|
+
* Exactly one of `problemKey` / `contestKey` / `userKey` is set.
|
|
20
20
|
*/
|
|
21
21
|
export declare const isSubmissionsJudgingScope: (scope: any) => scope is SubmissionsJudgingScope;
|
|
22
22
|
export declare const isSubscribeSubmissionsJudgingWebSocketEventDto: (event: any) => event is SubscribeSubmissionsJudgingWebSocketEventDto;
|