@juki-team/commons 0.1.31
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/README.md +3 -0
- package/biome.shared.json +102 -0
- package/dist/constants/commons.d.ts +62 -0
- package/dist/constants/commons.js +658 -0
- package/dist/constants/company.d.ts +9 -0
- package/dist/constants/company.js +24 -0
- package/dist/constants/contest.d.ts +15 -0
- package/dist/constants/contest.js +29 -0
- package/dist/constants/course.d.ts +8 -0
- package/dist/constants/course.js +12 -0
- package/dist/constants/date.d.ts +9 -0
- package/dist/constants/date.js +23 -0
- package/dist/constants/email.d.ts +2 -0
- package/dist/constants/email.js +34 -0
- package/dist/constants/entity.d.ts +3 -0
- package/dist/constants/entity.js +18 -0
- package/dist/constants/file.d.ts +28 -0
- package/dist/constants/file.js +46 -0
- package/dist/constants/index.d.ts +18 -0
- package/dist/constants/index.js +18 -0
- package/dist/constants/judge.d.ts +37 -0
- package/dist/constants/judge.js +221 -0
- package/dist/constants/problem.d.ts +37 -0
- package/dist/constants/problem.js +72 -0
- package/dist/constants/routing.d.ts +7 -0
- package/dist/constants/routing.js +7 -0
- package/dist/constants/services.d.ts +5 -0
- package/dist/constants/services.js +131 -0
- package/dist/constants/system.d.ts +8 -0
- package/dist/constants/system.js +9 -0
- package/dist/constants/teams.d.ts +15 -0
- package/dist/constants/teams.js +18 -0
- package/dist/constants/time.d.ts +9 -0
- package/dist/constants/time.js +9 -0
- package/dist/constants/user.d.ts +10 -0
- package/dist/constants/user.js +35 -0
- package/dist/constants/websocket.d.ts +6 -0
- package/dist/constants/websocket.js +5 -0
- package/dist/constants/worksheet.d.ts +11 -0
- package/dist/constants/worksheet.js +66 -0
- package/dist/dto/class.d.ts +115 -0
- package/dist/dto/class.js +1 -0
- package/dist/dto/code.d.ts +13 -0
- package/dist/dto/code.js +1 -0
- package/dist/dto/comments.d.ts +21 -0
- package/dist/dto/comments.js +1 -0
- package/dist/dto/contest.d.ts +95 -0
- package/dist/dto/contest.js +7 -0
- package/dist/dto/course.d.ts +34 -0
- package/dist/dto/course.js +1 -0
- package/dist/dto/entity.d.ts +92 -0
- package/dist/dto/entity.js +5 -0
- package/dist/dto/excalidraw.d.ts +12 -0
- package/dist/dto/excalidraw.js +1 -0
- package/dist/dto/file.d.ts +34 -0
- package/dist/dto/file.js +1 -0
- package/dist/dto/image.d.ts +6 -0
- package/dist/dto/image.js +1 -0
- package/dist/dto/index.d.ts +24 -0
- package/dist/dto/index.js +24 -0
- package/dist/dto/judge.d.ts +16 -0
- package/dist/dto/judge.js +1 -0
- package/dist/dto/markdown.d.ts +12 -0
- package/dist/dto/markdown.js +1 -0
- package/dist/dto/mermaid.d.ts +12 -0
- package/dist/dto/mermaid.js +1 -0
- package/dist/dto/organization.d.ts +102 -0
- package/dist/dto/organization.js +1 -0
- package/dist/dto/problem.d.ts +67 -0
- package/dist/dto/problem.js +1 -0
- package/dist/dto/scoreboard.d.ts +35 -0
- package/dist/dto/scoreboard.js +1 -0
- package/dist/dto/session.d.ts +15 -0
- package/dist/dto/session.js +1 -0
- package/dist/dto/socket.d.ts +257 -0
- package/dist/dto/socket.js +1 -0
- package/dist/dto/statistics.d.ts +43 -0
- package/dist/dto/statistics.js +1 -0
- package/dist/dto/submission.d.ts +95 -0
- package/dist/dto/submission.js +1 -0
- package/dist/dto/system.d.ts +91 -0
- package/dist/dto/system.js +1 -0
- package/dist/dto/url.d.ts +8 -0
- package/dist/dto/url.js +1 -0
- package/dist/dto/user.d.ts +109 -0
- package/dist/dto/user.js +1 -0
- package/dist/dto/virtual-user.d.ts +39 -0
- package/dist/dto/virtual-user.js +1 -0
- package/dist/dto/worksheet-submissions.d.ts +64 -0
- package/dist/dto/worksheet-submissions.js +1 -0
- package/dist/dto/worksheet.d.ts +39 -0
- package/dist/dto/worksheet.js +1 -0
- package/dist/helpers/class.d.ts +4 -0
- package/dist/helpers/class.js +10 -0
- package/dist/helpers/comments.d.ts +4 -0
- package/dist/helpers/comments.js +4 -0
- package/dist/helpers/commons.d.ts +33 -0
- package/dist/helpers/commons.js +191 -0
- package/dist/helpers/contest.d.ts +5 -0
- package/dist/helpers/contest.js +21 -0
- package/dist/helpers/document.d.ts +14 -0
- package/dist/helpers/document.js +38 -0
- package/dist/helpers/file.d.ts +1 -0
- package/dist/helpers/file.js +4 -0
- package/dist/helpers/index.d.ts +14 -0
- package/dist/helpers/index.js +14 -0
- package/dist/helpers/interval.d.ts +2 -0
- package/dist/helpers/interval.js +22 -0
- package/dist/helpers/judging.d.ts +25 -0
- package/dist/helpers/judging.js +107 -0
- package/dist/helpers/object.d.ts +1 -0
- package/dist/helpers/object.js +32 -0
- package/dist/helpers/responses.d.ts +8 -0
- package/dist/helpers/responses.js +78 -0
- package/dist/helpers/socket.d.ts +45 -0
- package/dist/helpers/socket.js +238 -0
- package/dist/helpers/time.d.ts +13 -0
- package/dist/helpers/time.js +101 -0
- package/dist/helpers/user.d.ts +11 -0
- package/dist/helpers/user.js +14 -0
- package/dist/helpers/worksheet.d.ts +10 -0
- package/dist/helpers/worksheet.js +131 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/prisma/enums/AssignmentClassType.d.ts +7 -0
- package/dist/prisma/enums/AssignmentClassType.js +6 -0
- package/dist/prisma/enums/ContestEventAction.d.ts +10 -0
- package/dist/prisma/enums/ContestEventAction.js +9 -0
- package/dist/prisma/enums/ContestProblemPrerequisiteType.d.ts +5 -0
- package/dist/prisma/enums/ContestProblemPrerequisiteType.js +4 -0
- package/dist/prisma/enums/ContestRole.d.ts +11 -0
- package/dist/prisma/enums/ContestRole.js +10 -0
- package/dist/prisma/enums/ContestStatus.d.ts +6 -0
- package/dist/prisma/enums/ContestStatus.js +5 -0
- package/dist/prisma/enums/CourseRole.d.ts +12 -0
- package/dist/prisma/enums/CourseRole.js +11 -0
- package/dist/prisma/enums/EntityObjectType.d.ts +13 -0
- package/dist/prisma/enums/EntityObjectType.js +12 -0
- package/dist/prisma/enums/EntityRole.d.ts +8 -0
- package/dist/prisma/enums/EntityRole.js +7 -0
- package/dist/prisma/enums/EntitySubjectType.d.ts +7 -0
- package/dist/prisma/enums/EntitySubjectType.js +6 -0
- package/dist/prisma/enums/FileRole.d.ts +9 -0
- package/dist/prisma/enums/FileRole.js +8 -0
- package/dist/prisma/enums/FileType.d.ts +5 -0
- package/dist/prisma/enums/FileType.js +4 -0
- package/dist/prisma/enums/GroupType.d.ts +5 -0
- package/dist/prisma/enums/GroupType.js +4 -0
- package/dist/prisma/enums/JudgeType.d.ts +12 -0
- package/dist/prisma/enums/JudgeType.js +11 -0
- package/dist/prisma/enums/OrganizationPlan.d.ts +7 -0
- package/dist/prisma/enums/OrganizationPlan.js +6 -0
- package/dist/prisma/enums/ProblemRole.d.ts +11 -0
- package/dist/prisma/enums/ProblemRole.js +10 -0
- package/dist/prisma/enums/ProblemScoringMode.d.ts +6 -0
- package/dist/prisma/enums/ProblemScoringMode.js +5 -0
- package/dist/prisma/enums/ProblemType.d.ts +6 -0
- package/dist/prisma/enums/ProblemType.js +5 -0
- package/dist/prisma/enums/ProblemVerdict.d.ts +14 -0
- package/dist/prisma/enums/ProblemVerdict.js +13 -0
- package/dist/prisma/enums/ShareLinkVisibility.d.ts +5 -0
- package/dist/prisma/enums/ShareLinkVisibility.js +4 -0
- package/dist/prisma/enums/SubmissionRunStatus.d.ts +18 -0
- package/dist/prisma/enums/SubmissionRunStatus.js +17 -0
- package/dist/prisma/enums/SystemRole.d.ts +9 -0
- package/dist/prisma/enums/SystemRole.js +8 -0
- package/dist/prisma/enums/TeamRole.d.ts +9 -0
- package/dist/prisma/enums/TeamRole.js +8 -0
- package/dist/prisma/enums/TelemetryType.d.ts +9 -0
- package/dist/prisma/enums/TelemetryType.js +8 -0
- package/dist/prisma/enums/UserRole.d.ts +10 -0
- package/dist/prisma/enums/UserRole.js +9 -0
- package/dist/prisma/enums/WorkingIn.d.ts +8 -0
- package/dist/prisma/enums/WorkingIn.js +7 -0
- package/dist/prisma/enums/WorksheetContentType.d.ts +10 -0
- package/dist/prisma/enums/WorksheetContentType.js +9 -0
- package/dist/prisma/enums/index.d.ts +26 -0
- package/dist/prisma/enums/index.js +26 -0
- package/dist/prototypes/Date.d.ts +62 -0
- package/dist/prototypes/Date.js +218 -0
- package/dist/prototypes/Error.d.ts +10 -0
- package/dist/prototypes/Error.js +17 -0
- package/dist/prototypes/Number.d.ts +7 -0
- package/dist/prototypes/Number.js +8 -0
- package/dist/prototypes/index.d.ts +3 -0
- package/dist/prototypes/index.js +3 -0
- package/dist/types/account.d.ts +9 -0
- package/dist/types/account.js +10 -0
- package/dist/types/class.d.ts +67 -0
- package/dist/types/class.js +7 -0
- package/dist/types/comments.d.ts +17 -0
- package/dist/types/comments.js +1 -0
- package/dist/types/commons.d.ts +84 -0
- package/dist/types/commons.js +69 -0
- package/dist/types/company.d.ts +6 -0
- package/dist/types/company.js +7 -0
- package/dist/types/contest.d.ts +144 -0
- package/dist/types/contest.js +6 -0
- package/dist/types/course.d.ts +13 -0
- package/dist/types/course.js +1 -0
- package/dist/types/entity.d.ts +116 -0
- package/dist/types/entity.js +50 -0
- package/dist/types/excalidraw.d.ts +9 -0
- package/dist/types/excalidraw.js +1 -0
- package/dist/types/file.d.ts +22 -0
- package/dist/types/file.js +13 -0
- package/dist/types/group.d.ts +9 -0
- package/dist/types/group.js +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.js +23 -0
- package/dist/types/judge.d.ts +46 -0
- package/dist/types/judge.js +17 -0
- package/dist/types/markdown.d.ts +8 -0
- package/dist/types/markdown.js +1 -0
- package/dist/types/mermaid.d.ts +8 -0
- package/dist/types/mermaid.js +1 -0
- package/dist/types/notification.d.ts +7 -0
- package/dist/types/notification.js +8 -0
- package/dist/types/problems.d.ts +93 -0
- package/dist/types/problems.js +16 -0
- package/dist/types/services.d.ts +214 -0
- package/dist/types/services.js +147 -0
- package/dist/types/sheet.d.ts +104 -0
- package/dist/types/sheet.js +16 -0
- package/dist/types/socket.d.ts +49 -0
- package/dist/types/socket.js +49 -0
- package/dist/types/submission.d.ts +5 -0
- package/dist/types/submission.js +1 -0
- package/dist/types/teams.d.ts +96 -0
- package/dist/types/teams.js +28 -0
- package/dist/types/users.d.ts +65 -0
- package/dist/types/users.js +33 -0
- package/dist/types/worksheet.d.ts +42 -0
- package/dist/types/worksheet.js +11 -0
- package/package.json +42 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
function sizeOfObject(obj) {
|
|
2
|
+
const objClass = Object.prototype.toString.call(obj).slice(8, -1);
|
|
3
|
+
if (objClass !== 'Object' && objClass !== 'Array') {
|
|
4
|
+
return obj.toString().length * 2;
|
|
5
|
+
}
|
|
6
|
+
let bytes = 0;
|
|
7
|
+
for (const key in obj) {
|
|
8
|
+
if (!Object.hasOwn(obj, key))
|
|
9
|
+
continue;
|
|
10
|
+
bytes += key.length * 2 + sizeOf(obj[key]);
|
|
11
|
+
}
|
|
12
|
+
return bytes;
|
|
13
|
+
}
|
|
14
|
+
function sizeOf(obj) {
|
|
15
|
+
if (obj === null || obj === undefined)
|
|
16
|
+
return 0;
|
|
17
|
+
switch (typeof obj) {
|
|
18
|
+
case 'number':
|
|
19
|
+
return 8;
|
|
20
|
+
case 'string':
|
|
21
|
+
return obj.length * 2;
|
|
22
|
+
case 'boolean':
|
|
23
|
+
return 4;
|
|
24
|
+
case 'object':
|
|
25
|
+
return sizeOfObject(obj);
|
|
26
|
+
default:
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function memorySizeOf(obj) {
|
|
31
|
+
return sizeOf(obj);
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JkError } from '../prototypes/index.js';
|
|
2
|
+
import { type ContentResponse, type ContentsMeta, type ContentsResponse, type ErrorResponse } from '../types/index.js';
|
|
3
|
+
export declare function toJkError(err: unknown): JkError;
|
|
4
|
+
export declare function errorsResponse(message: string, ...errors: JkError[]): ErrorResponse;
|
|
5
|
+
export declare function contentResponse<T>(message: string, content: T): ContentResponse<T>;
|
|
6
|
+
export declare function contentsResponse<T>(message: string, contents: T[], meta: ContentsMeta): ContentsResponse<T>;
|
|
7
|
+
export declare const cleanRequest: <T extends ContentResponse<unknown> | ContentsResponse<unknown>>(responseText: string) => ErrorResponse | T;
|
|
8
|
+
export declare const getDefaultMeta: (contents: unknown[], sort?: ContentsMeta["sort"]) => ContentsMeta;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { getErrorMessage } from '../constants/index.js';
|
|
2
|
+
import { JkError } from '../prototypes/index.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 (!Object.values(ErrorCode).includes(code)) {
|
|
9
|
+
code = ErrorCode.INTERNAL_SERVER_ERROR;
|
|
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
|
+
function parseSuccessJson(responseJson) {
|
|
45
|
+
if (responseJson.success === true && typeof responseJson.message === 'string') {
|
|
46
|
+
if (responseJson.content) {
|
|
47
|
+
return { success: true, message: responseJson.message, content: responseJson.content };
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(responseJson.contents) && responseJson.meta) {
|
|
50
|
+
return { success: true, message: responseJson.message, contents: responseJson.contents, meta: responseJson.meta };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
export const cleanRequest = (responseText) => {
|
|
56
|
+
if (!isStringJson(responseText)) {
|
|
57
|
+
const response = errorsResponse(getErrorMessage(ErrorCode.SERVICE_NOT_FOUND), new JkError(ErrorCode.SERVICE_NOT_FOUND));
|
|
58
|
+
consoleError({ message: 'response is not string json, success false on cleaning request', responseText, response });
|
|
59
|
+
return response;
|
|
60
|
+
}
|
|
61
|
+
const responseJson = JSON.parse(responseText);
|
|
62
|
+
if (typeof responseJson.success === 'boolean') {
|
|
63
|
+
const success = parseSuccessJson(responseJson);
|
|
64
|
+
if (success)
|
|
65
|
+
return success;
|
|
66
|
+
if (responseJson.success === false && typeof responseJson.message === 'string' && Array.isArray(responseJson.errors)) {
|
|
67
|
+
const response = { success: false, message: responseJson.message, errors: responseJson.errors };
|
|
68
|
+
consoleError({ message: 'success false on cleaning request', responseText, response });
|
|
69
|
+
return response;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const response = errorsResponse(getErrorMessage(ErrorCode.ERROR_ON_RESPONSE), new JkError(ErrorCode.ERROR_ON_RESPONSE));
|
|
73
|
+
consoleError({ message: 'success false on cleaning request', responseText, response });
|
|
74
|
+
return response;
|
|
75
|
+
};
|
|
76
|
+
export const getDefaultMeta = (contents, sort) => {
|
|
77
|
+
return { sort: sort ?? [], page: 1, size: contents.length, total: contents.length, filter: {} };
|
|
78
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ChatCompletionsWebSocketEventDTO, ClientTrackDeviceWebSocketEventDTO, ClientTrackLocationWebSocketEventDTO, ClientTrackScreenshotWebSocketEventDTO, ClientTrackWebSocketResponseEventDTO, CodeRunStatusWebSocketResponseEventDTO, ContestChangesWebSocketResponseEventDTO, PingWebSocketEventDTO, PongWebSocketResponseEventDTO, ProblemCrawledWebSocketResponseEventDTO, SendDataChatCompletionsWebSocketResponseEventDTO, SendDataClientTrackWebSocketResponseEventDTO, SendDataEc2InstancesListWebSocketResponseEventDTO, SendDataEcsTaskDefinitionListWebSocketResponseEventDTO, SendDataEcsTasksListWebSocketResponseEventDTO, SendDataRunCommandWebSocketResponseEventDTO, SendDataSsmSessionsListWebSocketResponseEventDTO, SendDataWebSocketResponseEventDTO, SubmissionRunStatusWebSocketResponseEventDTO, SubmissionsCrawlWebSocketResponseEventDTO, SubscribeClientTrackWebSocketEventDTO, SubscribeCodeRunStatusWebSocketEventDTO, SubscribeContestChangesWebSocketEventDTO, SubscribeGetDataWebSocketEventDTO, SubscribeProblemCrawledWebSocketEventDTO, SubscribeSubmissionRunStatusWebSocketEventDTO, SubscribeSubmissionsCrawlWebSocketEventDTO, SubscribeUserNotificationWebsocketEventDTO, UnsubscribeClientTrackWebSocketEventDTO, UnsubscribeCodeRunStatusWebSocketEventDTO, UnsubscribeContestChangesWebSocketEventDTO, UnsubscribeGetDataWebSocketEventDTO, UnsubscribeProblemCrawledWebSocketEventDTO, UnsubscribeSubmissionRunStatusWebSocketEventDTO, UnsubscribeSubmissionsCrawlWebSocketEventDTO, UnsubscribeUserNotificationWebSocketEventDTO, UserMessageWebSocketResponseEventDTO, UserNotificationContestClarificationWebSocketResponseEventDTO, UserNotificationSubmissionWebSocketResponseEventDTO, UserNotificationWebSocketResponseEventDTO, WebSocketMessageEventDTO, WebSocketResponseEventDTO, WebSocketSubscribeEventDTO, WebSocketUnsubscribeEventDTO } from '../dto/index.js';
|
|
2
|
+
import { type ClientId, WebSocketResponseEvent, type WebSocketResponseEventKey } from '../types/index.js';
|
|
3
|
+
export declare const isWebsocketSubscription: (event: unknown) => event is WebSocketSubscribeEventDTO | WebSocketUnsubscribeEventDTO | WebSocketMessageEventDTO;
|
|
4
|
+
export declare const isPingWebSocketEventDTO: (event: unknown) => event is PingWebSocketEventDTO;
|
|
5
|
+
export declare const isClientTrackLocationWebSocketEventDTO: (event: unknown) => event is ClientTrackLocationWebSocketEventDTO;
|
|
6
|
+
export declare const isClientTrackScreenshotWebSocketEventDTO: (event: unknown) => event is ClientTrackScreenshotWebSocketEventDTO;
|
|
7
|
+
export declare const isClientTrackDeviceWebSocketEventDTO: (event: unknown) => event is ClientTrackDeviceWebSocketEventDTO;
|
|
8
|
+
export declare const isChatCompletionsWebSocketEventDTO: (event: unknown) => event is ChatCompletionsWebSocketEventDTO;
|
|
9
|
+
export declare const isSubscribeCodeRunStatusWebSocketEventDTO: (event: unknown) => event is SubscribeCodeRunStatusWebSocketEventDTO;
|
|
10
|
+
export declare const isUnsubscribeCodeRunStatusWebSocketEventDTO: (event: unknown) => event is UnsubscribeCodeRunStatusWebSocketEventDTO;
|
|
11
|
+
export declare const isSubscribeSubmissionRunStatusWebSocketEventDTO: (event: unknown) => event is SubscribeSubmissionRunStatusWebSocketEventDTO;
|
|
12
|
+
export declare const isUnsubscribeSubmissionRunStatusWebSocketEventDTO: (event: unknown) => event is UnsubscribeSubmissionRunStatusWebSocketEventDTO;
|
|
13
|
+
export declare const isSubscribeGetDataWebSocketEventDTO: (event: unknown) => event is SubscribeGetDataWebSocketEventDTO;
|
|
14
|
+
export declare const isUnsubscribeGetDataWebSocketEventDTO: (event: unknown) => event is UnsubscribeGetDataWebSocketEventDTO;
|
|
15
|
+
export declare const isSubscribeProblemCrawledWebSocketEventDTO: (event: unknown) => event is SubscribeProblemCrawledWebSocketEventDTO;
|
|
16
|
+
export declare const isUnsubscribeProblemCrawledWebSocketEventDTO: (event: unknown) => event is UnsubscribeProblemCrawledWebSocketEventDTO;
|
|
17
|
+
export declare const isSubscribeSubmissionsCrawlWebSocketEventDTO: (event: unknown) => event is SubscribeSubmissionsCrawlWebSocketEventDTO;
|
|
18
|
+
export declare const isUnsubscribeSubmissionsCrawlWebSocketEventDTO: (event: unknown) => event is UnsubscribeSubmissionsCrawlWebSocketEventDTO;
|
|
19
|
+
export declare const isSubscribeContestChangesWebSocketEventDTO: (event: unknown) => event is SubscribeContestChangesWebSocketEventDTO;
|
|
20
|
+
export declare const isUnsubscribeContestChangesWebSocketEventDTO: (event: unknown) => event is UnsubscribeContestChangesWebSocketEventDTO;
|
|
21
|
+
export declare const isSubscribeClientTrackWebSocketEventDTO: (event: unknown) => event is SubscribeClientTrackWebSocketEventDTO;
|
|
22
|
+
export declare const isUnsubscribeClientTrackWebSocketEventDTO: (event: unknown) => event is UnsubscribeClientTrackWebSocketEventDTO;
|
|
23
|
+
export declare const isSubscribeUserNotificationWebSocketEventDTO: (event: unknown) => event is SubscribeUserNotificationWebsocketEventDTO;
|
|
24
|
+
export declare const isUnsubscribeUserNotificationWebSocketEventDTO: (event: unknown) => event is UnsubscribeUserNotificationWebSocketEventDTO;
|
|
25
|
+
export declare const isWebSocketResponseEventDTO: (event: unknown) => event is WebSocketResponseEventDTO;
|
|
26
|
+
export declare const isPongWebSocketResponseEventDTO: (event: unknown) => event is PongWebSocketResponseEventDTO;
|
|
27
|
+
export declare const isCodeRunStatusMessageWebSocketResponseEventDTO: (event: unknown) => event is CodeRunStatusWebSocketResponseEventDTO;
|
|
28
|
+
export declare const isSubmissionRunStatusMessageWebSocketResponseEventDTO: (event: unknown) => event is SubmissionRunStatusWebSocketResponseEventDTO;
|
|
29
|
+
export declare const isUserMessageWebSocketResponseEventDTO: (event: unknown) => event is UserMessageWebSocketResponseEventDTO;
|
|
30
|
+
export declare const isSendDataWebSocketResponseEventDTO: (event: unknown) => event is SendDataWebSocketResponseEventDTO;
|
|
31
|
+
export declare const isSendDataEcsTaskDefinitionListWebSocketResponseEventDTO: (event: unknown) => event is SendDataEcsTaskDefinitionListWebSocketResponseEventDTO;
|
|
32
|
+
export declare const isSendDataEc2InstancesListWebSocketResponseEventDTO: (event: unknown) => event is SendDataEc2InstancesListWebSocketResponseEventDTO;
|
|
33
|
+
export declare const isSendDataEcsTasksListWebSocketResponseEventDTO: (event: unknown) => event is SendDataEcsTasksListWebSocketResponseEventDTO;
|
|
34
|
+
export declare const isSendDataSsmSessionsListWebSocketResponseEventDTO: (event: unknown) => event is SendDataSsmSessionsListWebSocketResponseEventDTO;
|
|
35
|
+
export declare const isSendDataRunCommandWebSocketResponseEventDTO: (event: unknown) => event is SendDataRunCommandWebSocketResponseEventDTO;
|
|
36
|
+
export declare const isSendDataClientTrackWebSocketResponseEventDTO: (event: unknown) => event is SendDataClientTrackWebSocketResponseEventDTO;
|
|
37
|
+
export declare const isSenDataChatCompletionsWebSocketResponseEventDTO: (event: unknown) => event is SendDataChatCompletionsWebSocketResponseEventDTO;
|
|
38
|
+
export declare const isProblemCrawledWebSocketResponseEventDTO: (event: unknown) => event is ProblemCrawledWebSocketResponseEventDTO;
|
|
39
|
+
export declare const isSubmissionsCrawlWebSocketResponseEventDTO: (event: unknown) => event is SubmissionsCrawlWebSocketResponseEventDTO;
|
|
40
|
+
export declare const isContestChangesWebSocketResponseEventDTO: (event: unknown) => event is ContestChangesWebSocketResponseEventDTO;
|
|
41
|
+
export declare const isClientTrackWebSocketResponseEventDTO: (event: unknown) => event is ClientTrackWebSocketResponseEventDTO;
|
|
42
|
+
export declare const isUserNotificationWebSocketResponseEventDTO: (event: unknown) => event is UserNotificationWebSocketResponseEventDTO;
|
|
43
|
+
export declare const isUserNotificationSubmissionWebSocketResponseEventDTO: (event: unknown) => event is UserNotificationSubmissionWebSocketResponseEventDTO;
|
|
44
|
+
export declare const isUserNotificationContestClarificationWebSocketResponseEventDTO: (event: unknown) => event is UserNotificationContestClarificationWebSocketResponseEventDTO;
|
|
45
|
+
export declare const getWebSocketResponseEventKey: (event: WebSocketResponseEvent, clientId: ClientId, id: string) => WebSocketResponseEventKey;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { ProblemVerdict, SubmissionRunStatus } from '../prisma/enums/index.js';
|
|
2
|
+
import { WebSocketMessageEvent, WebSocketResponseEvent, WebSocketSubscriptionEvent, } from '../types/index.js';
|
|
3
|
+
export const isWebsocketSubscription = (event) => {
|
|
4
|
+
if (typeof event !== 'object' || event === null)
|
|
5
|
+
return false;
|
|
6
|
+
const v = event;
|
|
7
|
+
return ((Object.values(WebSocketSubscriptionEvent).includes(v.event) ||
|
|
8
|
+
Object.values(WebSocketMessageEvent).includes(v.event)) &&
|
|
9
|
+
typeof v.clientId === 'string' &&
|
|
10
|
+
!!v.clientId);
|
|
11
|
+
};
|
|
12
|
+
// Custom CHANNEL_PUBLISH_MESSAGES
|
|
13
|
+
export const isPingWebSocketEventDTO = (event) => {
|
|
14
|
+
return isWebsocketSubscription(event) && event.event === WebSocketMessageEvent.PING;
|
|
15
|
+
};
|
|
16
|
+
export const isClientTrackLocationWebSocketEventDTO = (event) => {
|
|
17
|
+
return isWebsocketSubscription(event) && event.event === WebSocketMessageEvent.CLIENT_TRACK_LOCATION;
|
|
18
|
+
};
|
|
19
|
+
export const isClientTrackScreenshotWebSocketEventDTO = (event) => {
|
|
20
|
+
return isWebsocketSubscription(event) && event.event === WebSocketMessageEvent.CLIENT_TRACK_SCREENSHOT;
|
|
21
|
+
};
|
|
22
|
+
export const isClientTrackDeviceWebSocketEventDTO = (event) => {
|
|
23
|
+
return isWebsocketSubscription(event) && event.event === WebSocketMessageEvent.CLIENT_TRACK_DEVICE;
|
|
24
|
+
};
|
|
25
|
+
export const isChatCompletionsWebSocketEventDTO = (event) => {
|
|
26
|
+
return isWebsocketSubscription(event) && event.event === WebSocketMessageEvent.CHAT_COMPLETIONS;
|
|
27
|
+
};
|
|
28
|
+
// CHANNEL_PUBLISH_SUBSCRIPTIONS
|
|
29
|
+
export const isSubscribeCodeRunStatusWebSocketEventDTO = (event) => {
|
|
30
|
+
if (!isWebsocketSubscription(event))
|
|
31
|
+
return false;
|
|
32
|
+
const v = event;
|
|
33
|
+
return event.event === WebSocketSubscriptionEvent.SUBSCRIBE_CODE_RUN_STATUS && typeof v.runId === 'string' && !!v.runId;
|
|
34
|
+
};
|
|
35
|
+
export const isUnsubscribeCodeRunStatusWebSocketEventDTO = (event) => {
|
|
36
|
+
if (!isWebsocketSubscription(event))
|
|
37
|
+
return false;
|
|
38
|
+
const v = event;
|
|
39
|
+
return event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_CODE_RUN_STATUS && typeof v.runId === 'string' && !!v.runId;
|
|
40
|
+
};
|
|
41
|
+
export const isSubscribeSubmissionRunStatusWebSocketEventDTO = (event) => {
|
|
42
|
+
if (!isWebsocketSubscription(event))
|
|
43
|
+
return false;
|
|
44
|
+
const v = event;
|
|
45
|
+
return (event.event === WebSocketSubscriptionEvent.SUBSCRIBE_SUBMISSION_RUN_STATUS && typeof v.submitId === 'string' && !!v.submitId);
|
|
46
|
+
};
|
|
47
|
+
export const isUnsubscribeSubmissionRunStatusWebSocketEventDTO = (event) => {
|
|
48
|
+
if (!isWebsocketSubscription(event))
|
|
49
|
+
return false;
|
|
50
|
+
const v = event;
|
|
51
|
+
return (event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_SUBMISSION_RUN_STATUS &&
|
|
52
|
+
typeof v.submitId === 'string' &&
|
|
53
|
+
!!v.submitId);
|
|
54
|
+
};
|
|
55
|
+
export const isSubscribeGetDataWebSocketEventDTO = (event) => {
|
|
56
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_GET_DATA;
|
|
57
|
+
};
|
|
58
|
+
export const isUnsubscribeGetDataWebSocketEventDTO = (event) => {
|
|
59
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_GET_DATA;
|
|
60
|
+
};
|
|
61
|
+
export const isSubscribeProblemCrawledWebSocketEventDTO = (event) => {
|
|
62
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_PROBLEM_CRAWLED;
|
|
63
|
+
};
|
|
64
|
+
export const isUnsubscribeProblemCrawledWebSocketEventDTO = (event) => {
|
|
65
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_PROBLEM_CRAWLED;
|
|
66
|
+
};
|
|
67
|
+
export const isSubscribeSubmissionsCrawlWebSocketEventDTO = (event) => {
|
|
68
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_SUBMISSIONS_CRAWL;
|
|
69
|
+
};
|
|
70
|
+
export const isUnsubscribeSubmissionsCrawlWebSocketEventDTO = (event) => {
|
|
71
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_SUBMISSIONS_CRAWL;
|
|
72
|
+
};
|
|
73
|
+
export const isSubscribeContestChangesWebSocketEventDTO = (event) => {
|
|
74
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_CONTEST_CHANGES;
|
|
75
|
+
};
|
|
76
|
+
export const isUnsubscribeContestChangesWebSocketEventDTO = (event) => {
|
|
77
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_CONTEST_CHANGES;
|
|
78
|
+
};
|
|
79
|
+
export const isSubscribeClientTrackWebSocketEventDTO = (event) => {
|
|
80
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_CLIENT_TRACK;
|
|
81
|
+
};
|
|
82
|
+
export const isUnsubscribeClientTrackWebSocketEventDTO = (event) => {
|
|
83
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_CLIENT_TRACK;
|
|
84
|
+
};
|
|
85
|
+
export const isSubscribeUserNotificationWebSocketEventDTO = (event) => {
|
|
86
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.SUBSCRIBE_USER_NOTIFICATION;
|
|
87
|
+
};
|
|
88
|
+
export const isUnsubscribeUserNotificationWebSocketEventDTO = (event) => {
|
|
89
|
+
return isWebsocketSubscription(event) && event.event === WebSocketSubscriptionEvent.UNSUBSCRIBE_USER_NOTIFICATION;
|
|
90
|
+
};
|
|
91
|
+
// is WebSocketResponseEventDTO, CHANNEL_SUBSCRIBE_CLIENT
|
|
92
|
+
export const isWebSocketResponseEventDTO = (event) => {
|
|
93
|
+
if (typeof event !== 'object' || event === null)
|
|
94
|
+
return false;
|
|
95
|
+
const v = event;
|
|
96
|
+
return (Object.values(WebSocketResponseEvent).includes(v.event) &&
|
|
97
|
+
typeof v.key === 'string' &&
|
|
98
|
+
typeof v.connectionId === 'string' &&
|
|
99
|
+
typeof v.messageTimestamp === 'number' &&
|
|
100
|
+
!!v.messageTimestamp);
|
|
101
|
+
};
|
|
102
|
+
export const isPongWebSocketResponseEventDTO = (event) => {
|
|
103
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
104
|
+
return false;
|
|
105
|
+
const v = event;
|
|
106
|
+
return event.event === WebSocketResponseEvent.PONG && !!v.data;
|
|
107
|
+
};
|
|
108
|
+
export const isCodeRunStatusMessageWebSocketResponseEventDTO = (event) => {
|
|
109
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
110
|
+
return false;
|
|
111
|
+
const v = event;
|
|
112
|
+
return (event.event === WebSocketResponseEvent.CODE_RUN_STATUS &&
|
|
113
|
+
typeof v.runId === 'string' &&
|
|
114
|
+
!!v.runId &&
|
|
115
|
+
v.status in SubmissionRunStatus);
|
|
116
|
+
};
|
|
117
|
+
export const isSubmissionRunStatusMessageWebSocketResponseEventDTO = (event) => {
|
|
118
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
119
|
+
return false;
|
|
120
|
+
const v = event;
|
|
121
|
+
return (event.event === WebSocketResponseEvent.SUBMISSION_RUN_STATUS &&
|
|
122
|
+
typeof v.submitId === 'string' &&
|
|
123
|
+
!!v.submitId &&
|
|
124
|
+
v.status in SubmissionRunStatus &&
|
|
125
|
+
v.verdict in ProblemVerdict &&
|
|
126
|
+
typeof v.points === 'number');
|
|
127
|
+
};
|
|
128
|
+
export const isUserMessageWebSocketResponseEventDTO = (event) => {
|
|
129
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
130
|
+
return false;
|
|
131
|
+
const v = event;
|
|
132
|
+
const user = v.user;
|
|
133
|
+
const company = user?.company;
|
|
134
|
+
return (event.event === WebSocketResponseEvent.USER_MESSAGE &&
|
|
135
|
+
typeof user?.nickname === 'string' &&
|
|
136
|
+
!!user.nickname &&
|
|
137
|
+
typeof user?.imageUrl === 'string' &&
|
|
138
|
+
!!user.imageUrl &&
|
|
139
|
+
typeof company?.key === 'string' &&
|
|
140
|
+
!!company.key &&
|
|
141
|
+
!!v.content);
|
|
142
|
+
};
|
|
143
|
+
export const isSendDataWebSocketResponseEventDTO = (event) => {
|
|
144
|
+
if (typeof event !== 'object' || event === null)
|
|
145
|
+
return false;
|
|
146
|
+
const v = event;
|
|
147
|
+
return ([
|
|
148
|
+
WebSocketResponseEvent.SEND_DATA_ECS_TASK_DEFINITIONS_LIST,
|
|
149
|
+
WebSocketResponseEvent.SEND_DATA_EC2_INSTANCES_LIST,
|
|
150
|
+
WebSocketResponseEvent.SEND_DATA_ECS_TASKS_LIST,
|
|
151
|
+
WebSocketResponseEvent.SEND_DATA_SSM_SESSIONS_LIST,
|
|
152
|
+
WebSocketResponseEvent.SEND_DATA_RUN_COMMAND,
|
|
153
|
+
WebSocketResponseEvent.SEND_DATA_CLIENT_TRACK,
|
|
154
|
+
WebSocketResponseEvent.SEND_DATA_CHAT_COMPLETIONS,
|
|
155
|
+
].includes(v.event) &&
|
|
156
|
+
typeof v.dataId === 'string' &&
|
|
157
|
+
!!v.dataId &&
|
|
158
|
+
!!v.content);
|
|
159
|
+
};
|
|
160
|
+
export const isSendDataEcsTaskDefinitionListWebSocketResponseEventDTO = (event) => {
|
|
161
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
162
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
163
|
+
event.event === WebSocketResponseEvent.SEND_DATA_ECS_TASK_DEFINITIONS_LIST);
|
|
164
|
+
};
|
|
165
|
+
export const isSendDataEc2InstancesListWebSocketResponseEventDTO = (event) => {
|
|
166
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
167
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
168
|
+
event.event === WebSocketResponseEvent.SEND_DATA_EC2_INSTANCES_LIST);
|
|
169
|
+
};
|
|
170
|
+
export const isSendDataEcsTasksListWebSocketResponseEventDTO = (event) => {
|
|
171
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
172
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
173
|
+
event.event === WebSocketResponseEvent.SEND_DATA_ECS_TASKS_LIST);
|
|
174
|
+
};
|
|
175
|
+
export const isSendDataSsmSessionsListWebSocketResponseEventDTO = (event) => {
|
|
176
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
177
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
178
|
+
event.event === WebSocketResponseEvent.SEND_DATA_SSM_SESSIONS_LIST);
|
|
179
|
+
};
|
|
180
|
+
export const isSendDataRunCommandWebSocketResponseEventDTO = (event) => {
|
|
181
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
182
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
183
|
+
event.event === WebSocketResponseEvent.SEND_DATA_RUN_COMMAND);
|
|
184
|
+
};
|
|
185
|
+
export const isSendDataClientTrackWebSocketResponseEventDTO = (event) => {
|
|
186
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
187
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
188
|
+
event.event === WebSocketResponseEvent.SEND_DATA_CLIENT_TRACK);
|
|
189
|
+
};
|
|
190
|
+
export const isSenDataChatCompletionsWebSocketResponseEventDTO = (event) => {
|
|
191
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
192
|
+
isSendDataWebSocketResponseEventDTO(event) &&
|
|
193
|
+
event.event === WebSocketResponseEvent.SEND_DATA_CHAT_COMPLETIONS);
|
|
194
|
+
};
|
|
195
|
+
export const isProblemCrawledWebSocketResponseEventDTO = (event) => {
|
|
196
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
197
|
+
return false;
|
|
198
|
+
const v = event;
|
|
199
|
+
return event.event === WebSocketResponseEvent.PROBLEM_CRAWLED && !!v.content;
|
|
200
|
+
};
|
|
201
|
+
export const isSubmissionsCrawlWebSocketResponseEventDTO = (event) => {
|
|
202
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
203
|
+
return false;
|
|
204
|
+
const v = event;
|
|
205
|
+
return event.event === WebSocketResponseEvent.SUBMISSIONS_CRAWL && !!v.content;
|
|
206
|
+
};
|
|
207
|
+
export const isContestChangesWebSocketResponseEventDTO = (event) => {
|
|
208
|
+
if (!isWebSocketResponseEventDTO(event))
|
|
209
|
+
return false;
|
|
210
|
+
const v = event;
|
|
211
|
+
return event.event === WebSocketResponseEvent.CONTEST_CHANGES && !!v.content;
|
|
212
|
+
};
|
|
213
|
+
export const isClientTrackWebSocketResponseEventDTO = (event) => {
|
|
214
|
+
return isWebSocketResponseEventDTO(event) && event.event === WebSocketResponseEvent.CLIENT_TRACK;
|
|
215
|
+
};
|
|
216
|
+
export const isUserNotificationWebSocketResponseEventDTO = (event) => {
|
|
217
|
+
if (typeof event !== 'object' || event === null)
|
|
218
|
+
return false;
|
|
219
|
+
const v = event;
|
|
220
|
+
return ([
|
|
221
|
+
WebSocketResponseEvent.USER_NOTIFICATION_SUBMISSION,
|
|
222
|
+
WebSocketResponseEvent.USER_NOTIFICATION_CONTEST_CLARIFICATION,
|
|
223
|
+
].includes(v.event) && !!v.content);
|
|
224
|
+
};
|
|
225
|
+
export const isUserNotificationSubmissionWebSocketResponseEventDTO = (event) => {
|
|
226
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
227
|
+
isUserNotificationWebSocketResponseEventDTO(event) &&
|
|
228
|
+
event.event === WebSocketResponseEvent.USER_NOTIFICATION_SUBMISSION);
|
|
229
|
+
};
|
|
230
|
+
export const isUserNotificationContestClarificationWebSocketResponseEventDTO = (event) => {
|
|
231
|
+
return (isWebSocketResponseEventDTO(event) &&
|
|
232
|
+
isUserNotificationWebSocketResponseEventDTO(event) &&
|
|
233
|
+
event.event === WebSocketResponseEvent.USER_NOTIFICATION_CONTEST_CLARIFICATION);
|
|
234
|
+
};
|
|
235
|
+
// generic
|
|
236
|
+
export const getWebSocketResponseEventKey = (event, clientId, id) => {
|
|
237
|
+
return `${event}-${clientId}-${id}`;
|
|
238
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SplitTime } from '../types/index.js';
|
|
2
|
+
export declare function splitTime(timeRemaining: number): [SplitTime, SplitTime, SplitTime, SplitTime, SplitTime, SplitTime];
|
|
3
|
+
export declare function normalizeToLocalStartOfDay(timestamp: number | Date): Date;
|
|
4
|
+
export declare function normalizeToLocalStartOfHour(timestamp: number | Date): Date;
|
|
5
|
+
export declare function normalizeToLocalStartOfMinutes(timestamp: number | Date): Date;
|
|
6
|
+
export declare function normalizeToLocalStartOfSeconds(timestamp: number | Date): Date;
|
|
7
|
+
export declare const getYears: (d: Date) => number;
|
|
8
|
+
export declare const getMonths: (d: Date) => number;
|
|
9
|
+
export declare const getDays: (d: Date) => number;
|
|
10
|
+
export declare const getHours: (d: Date) => number;
|
|
11
|
+
export declare const getMinutes: (d: Date) => number;
|
|
12
|
+
export declare const getSeconds: (d: Date) => number;
|
|
13
|
+
export declare const getMilliseconds: (d: Date) => number;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ONE_DAY, ONE_HOUR, ONE_MINUTE } from '../constants/index.js';
|
|
2
|
+
export function splitTime(timeRemaining) {
|
|
3
|
+
const remaining = [];
|
|
4
|
+
// const aYearMilliseconds = 1000 * 60 * 60 * 24 * 365;
|
|
5
|
+
// const remainingYears = Math.floor(timeRemaining / aYearMilliseconds);
|
|
6
|
+
// remaining.push({ remaining: remainingYears, label: 'years', milliseconds: aYearMilliseconds });
|
|
7
|
+
// const aWeekMilliseconds = 1000 * 60 * 60 * 24 * 7;
|
|
8
|
+
// const remainingWeeks = Math.floor((timeRemaining % aYearMilliseconds) / aWeekMilliseconds);
|
|
9
|
+
// remaining.push({ remaining: remainingWeeks, label: 'weeks', milliseconds: aWeekMilliseconds });
|
|
10
|
+
const aSecondMilliseconds = 1000;
|
|
11
|
+
const aMinuteMilliseconds = aSecondMilliseconds * 60;
|
|
12
|
+
const aHourMilliseconds = aMinuteMilliseconds * 60;
|
|
13
|
+
const aDayMilliseconds = aHourMilliseconds * 24;
|
|
14
|
+
const aWeekMilliseconds = aDayMilliseconds * 7;
|
|
15
|
+
const remainingWeeks = Math.floor(timeRemaining / aWeekMilliseconds);
|
|
16
|
+
remaining.push({
|
|
17
|
+
remaining: remainingWeeks,
|
|
18
|
+
label: remainingWeeks === 1 ? 'week' : 'weeks',
|
|
19
|
+
abbreviatedLabel: 'w',
|
|
20
|
+
milliseconds: aWeekMilliseconds,
|
|
21
|
+
digits: 2,
|
|
22
|
+
});
|
|
23
|
+
const remainingDays = Math.floor((timeRemaining % aWeekMilliseconds) / aDayMilliseconds);
|
|
24
|
+
remaining.push({
|
|
25
|
+
remaining: remainingDays,
|
|
26
|
+
label: remainingDays === 1 ? 'day' : 'days',
|
|
27
|
+
abbreviatedLabel: 'd',
|
|
28
|
+
milliseconds: aDayMilliseconds,
|
|
29
|
+
digits: 2,
|
|
30
|
+
});
|
|
31
|
+
const remainingHours = Math.floor((timeRemaining % aDayMilliseconds) / aHourMilliseconds);
|
|
32
|
+
remaining.push({
|
|
33
|
+
remaining: remainingHours,
|
|
34
|
+
label: remainingHours === 1 ? 'hour' : 'hours',
|
|
35
|
+
abbreviatedLabel: 'h',
|
|
36
|
+
milliseconds: aHourMilliseconds,
|
|
37
|
+
digits: 2,
|
|
38
|
+
});
|
|
39
|
+
const remainingMinutes = Math.floor((timeRemaining % aHourMilliseconds) / aMinuteMilliseconds);
|
|
40
|
+
remaining.push({
|
|
41
|
+
remaining: remainingMinutes,
|
|
42
|
+
label: remainingMinutes === 1 ? 'minute' : 'minutes',
|
|
43
|
+
abbreviatedLabel: 'm',
|
|
44
|
+
milliseconds: aMinuteMilliseconds,
|
|
45
|
+
digits: 2,
|
|
46
|
+
});
|
|
47
|
+
const remainingSeconds = Math.floor((timeRemaining % aMinuteMilliseconds) / aSecondMilliseconds);
|
|
48
|
+
remaining.push({
|
|
49
|
+
remaining: remainingSeconds,
|
|
50
|
+
label: remainingSeconds === 1 ? 'second' : 'seconds',
|
|
51
|
+
abbreviatedLabel: 's',
|
|
52
|
+
milliseconds: aSecondMilliseconds,
|
|
53
|
+
digits: 2,
|
|
54
|
+
});
|
|
55
|
+
const remainingMilliseconds = Math.floor(timeRemaining % aSecondMilliseconds);
|
|
56
|
+
remaining.push({
|
|
57
|
+
remaining: remainingMilliseconds,
|
|
58
|
+
label: remainingMilliseconds === 1 ? 'millisecond' : 'milliseconds',
|
|
59
|
+
abbreviatedLabel: 'ms',
|
|
60
|
+
milliseconds: 1,
|
|
61
|
+
digits: 3,
|
|
62
|
+
});
|
|
63
|
+
// while (remaining[0].remaining <= 0) {
|
|
64
|
+
// remaining.shift();
|
|
65
|
+
// if (remaining.length === 3) {
|
|
66
|
+
// break;
|
|
67
|
+
// }
|
|
68
|
+
// }
|
|
69
|
+
return remaining;
|
|
70
|
+
}
|
|
71
|
+
export function normalizeToLocalStartOfDay(timestamp) {
|
|
72
|
+
const date = new Date(timestamp);
|
|
73
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
74
|
+
}
|
|
75
|
+
export function normalizeToLocalStartOfHour(timestamp) {
|
|
76
|
+
const date = new Date(timestamp);
|
|
77
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());
|
|
78
|
+
}
|
|
79
|
+
export function normalizeToLocalStartOfMinutes(timestamp) {
|
|
80
|
+
const date = new Date(timestamp);
|
|
81
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
|
|
82
|
+
}
|
|
83
|
+
export function normalizeToLocalStartOfSeconds(timestamp) {
|
|
84
|
+
const date = new Date(timestamp);
|
|
85
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
|
|
86
|
+
}
|
|
87
|
+
export const getYears = (d) => d.getFullYear();
|
|
88
|
+
export const getMonths = (d) => d.getFullYear() * 12 + d.getMonth();
|
|
89
|
+
export const getDays = (d) => {
|
|
90
|
+
return Math.floor(normalizeToLocalStartOfDay(d).getTime() / ONE_DAY);
|
|
91
|
+
};
|
|
92
|
+
export const getHours = (d) => {
|
|
93
|
+
return Math.floor(normalizeToLocalStartOfHour(d).getTime() / ONE_HOUR);
|
|
94
|
+
};
|
|
95
|
+
export const getMinutes = (d) => {
|
|
96
|
+
return Math.floor(normalizeToLocalStartOfMinutes(d).getTime() / ONE_MINUTE);
|
|
97
|
+
};
|
|
98
|
+
export const getSeconds = (d) => {
|
|
99
|
+
return Math.floor(normalizeToLocalStartOfSeconds(d).getTime() / 1000);
|
|
100
|
+
};
|
|
101
|
+
export const getMilliseconds = (d) => d.getTime();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ClientId, RecordId } from '../types/index.js';
|
|
2
|
+
export declare const getUserKey: (userNickname: string, userCompanyKey: string) => string;
|
|
3
|
+
export declare const getParamsOfUserKey: (userKey: string) => {
|
|
4
|
+
userNickname: string;
|
|
5
|
+
userCompanyKey: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const getClientId: (sessionId: RecordId, uiId: string) => ClientId;
|
|
8
|
+
export declare const getParamsOfClientId: (clientId: ClientId) => {
|
|
9
|
+
sessionId: RecordId;
|
|
10
|
+
uiId: string;
|
|
11
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const getUserKey = (userNickname, userCompanyKey) => {
|
|
2
|
+
return `${userNickname}|${userCompanyKey}`;
|
|
3
|
+
};
|
|
4
|
+
export const getParamsOfUserKey = (userKey) => {
|
|
5
|
+
const [userNickname, userCompanyKey] = userKey.split('|');
|
|
6
|
+
return { userNickname, userCompanyKey };
|
|
7
|
+
};
|
|
8
|
+
export const getClientId = (sessionId, uiId) => {
|
|
9
|
+
return `${sessionId}|${uiId}`;
|
|
10
|
+
};
|
|
11
|
+
export const getParamsOfClientId = (clientId) => {
|
|
12
|
+
const [sessionId, uiId] = clientId.split('|');
|
|
13
|
+
return { sessionId, uiId };
|
|
14
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type BasicWorksheet, type BodyWorksheet, type CodeEditorSheet, type JkmdSheet, type QuizOptionsSheet, type QuizProblemSheet, type QuizTextSheet, type SummaryWorksheetsInPages, type WorksheetsInPages } from '../types/index.js';
|
|
2
|
+
export declare const getWorksheetsInPages: (initialSheets: BodyWorksheet[]) => WorksheetsInPages;
|
|
3
|
+
export declare const getSummaryWorksheetsInPages: (initialSheets: BodyWorksheet[]) => SummaryWorksheetsInPages;
|
|
4
|
+
export declare const getTotalExercisesOfSummaryWorksheetsInPages: (content: SummaryWorksheetsInPages) => number;
|
|
5
|
+
export declare const isBasicWorksheet: (value: unknown) => value is BasicWorksheet;
|
|
6
|
+
export declare const isJkmdSheet: (value: unknown) => value is JkmdSheet;
|
|
7
|
+
export declare const isCodeEditorSheet: (value: unknown) => value is CodeEditorSheet;
|
|
8
|
+
export declare const isQuizProblemSheet: (value: unknown) => value is QuizProblemSheet;
|
|
9
|
+
export declare const isQuizOptionsSheet: (value: unknown) => value is QuizOptionsSheet;
|
|
10
|
+
export declare const isQuizTextSheet: (value: unknown) => value is QuizTextSheet;
|