course-format-ts 1.0.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.
Files changed (239) hide show
  1. package/.idea/edu-format-ts.iml +10 -0
  2. package/.idea/inspectionProfiles/Project_Default.xml +28 -0
  3. package/.idea/misc.xml +4 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/vcs.xml +6 -0
  6. package/AGENTS.md +1 -0
  7. package/dist/courseFormat/AnswerPlaceholder.d.ts +37 -0
  8. package/dist/courseFormat/AnswerPlaceholder.js +101 -0
  9. package/dist/courseFormat/AnswerPlaceholderComparator.d.ts +4 -0
  10. package/dist/courseFormat/AnswerPlaceholderComparator.js +8 -0
  11. package/dist/courseFormat/AnswerPlaceholderDependency.d.ts +19 -0
  12. package/dist/courseFormat/AnswerPlaceholderDependency.js +91 -0
  13. package/dist/courseFormat/CheckFeedback.d.ts +20 -0
  14. package/dist/courseFormat/CheckFeedback.js +58 -0
  15. package/dist/courseFormat/CheckResult.d.ts +33 -0
  16. package/dist/courseFormat/CheckResult.js +58 -0
  17. package/dist/courseFormat/CheckResultSeverity.d.ts +7 -0
  18. package/dist/courseFormat/CheckResultSeverity.js +17 -0
  19. package/dist/courseFormat/CheckStatus.d.ts +5 -0
  20. package/dist/courseFormat/CheckStatus.js +9 -0
  21. package/dist/courseFormat/Course.d.ts +68 -0
  22. package/dist/courseFormat/Course.js +165 -0
  23. package/dist/courseFormat/CourseMode.d.ts +4 -0
  24. package/dist/courseFormat/CourseMode.js +8 -0
  25. package/dist/courseFormat/CourseVisibility.d.ts +4 -0
  26. package/dist/courseFormat/CourseVisibility.js +8 -0
  27. package/dist/courseFormat/CourseraCourse.d.ts +5 -0
  28. package/dist/courseFormat/CourseraCourse.js +15 -0
  29. package/dist/courseFormat/DescriptionFormat.d.ts +5 -0
  30. package/dist/courseFormat/DescriptionFormat.js +9 -0
  31. package/dist/courseFormat/EduCourse.d.ts +17 -0
  32. package/dist/courseFormat/EduCourse.js +42 -0
  33. package/dist/courseFormat/EduFile.d.ts +22 -0
  34. package/dist/courseFormat/EduFile.js +110 -0
  35. package/dist/courseFormat/EduFileErrorHighlightLevel.d.ts +5 -0
  36. package/dist/courseFormat/EduFileErrorHighlightLevel.js +9 -0
  37. package/dist/courseFormat/EduFormatNames.d.ts +75 -0
  38. package/dist/courseFormat/EduFormatNames.js +80 -0
  39. package/dist/courseFormat/EduTestInfo.d.ts +28 -0
  40. package/dist/courseFormat/EduTestInfo.js +68 -0
  41. package/dist/courseFormat/EduVersions.d.ts +2 -0
  42. package/dist/courseFormat/EduVersions.js +5 -0
  43. package/dist/courseFormat/FileContents.d.ts +36 -0
  44. package/dist/courseFormat/FileContents.js +67 -0
  45. package/dist/courseFormat/FileContentsFactory.d.ts +17 -0
  46. package/dist/courseFormat/FileContentsFactory.js +2 -0
  47. package/dist/courseFormat/FrameworkLesson.d.ts +9 -0
  48. package/dist/courseFormat/FrameworkLesson.js +28 -0
  49. package/dist/courseFormat/ItemContainer.d.ts +13 -0
  50. package/dist/courseFormat/ItemContainer.js +45 -0
  51. package/dist/courseFormat/JBAccountUserInfo.d.ts +9 -0
  52. package/dist/courseFormat/JBAccountUserInfo.js +20 -0
  53. package/dist/courseFormat/Language.d.ts +4 -0
  54. package/dist/courseFormat/Language.js +33 -0
  55. package/dist/courseFormat/Lesson.d.ts +20 -0
  56. package/dist/courseFormat/Lesson.js +56 -0
  57. package/dist/courseFormat/LessonContainer.d.ts +16 -0
  58. package/dist/courseFormat/LessonContainer.js +54 -0
  59. package/dist/courseFormat/PluginInfo.d.ts +7 -0
  60. package/dist/courseFormat/PluginInfo.js +15 -0
  61. package/dist/courseFormat/Section.d.ts +8 -0
  62. package/dist/courseFormat/Section.js +27 -0
  63. package/dist/courseFormat/StudyItem.d.ts +20 -0
  64. package/dist/courseFormat/StudyItem.js +47 -0
  65. package/dist/courseFormat/Tags.d.ts +16 -0
  66. package/dist/courseFormat/Tags.js +42 -0
  67. package/dist/courseFormat/TaskFile.d.ts +26 -0
  68. package/dist/courseFormat/TaskFile.js +72 -0
  69. package/dist/courseFormat/UserInfo.d.ts +3 -0
  70. package/dist/courseFormat/UserInfo.js +2 -0
  71. package/dist/courseFormat/Vendor.d.ts +7 -0
  72. package/dist/courseFormat/Vendor.js +14 -0
  73. package/dist/courseFormat/attempts/Attempt.d.ts +12 -0
  74. package/dist/courseFormat/attempts/Attempt.js +25 -0
  75. package/dist/courseFormat/attempts/AttemptBase.d.ts +9 -0
  76. package/dist/courseFormat/attempts/AttemptBase.js +28 -0
  77. package/dist/courseFormat/attempts/DataTaskAttempt.d.ts +6 -0
  78. package/dist/courseFormat/attempts/DataTaskAttempt.js +24 -0
  79. package/dist/courseFormat/attempts/Dataset.d.ts +12 -0
  80. package/dist/courseFormat/attempts/Dataset.js +21 -0
  81. package/dist/courseFormat/fileUtils.d.ts +5 -0
  82. package/dist/courseFormat/fileUtils.js +32 -0
  83. package/dist/courseFormat/hyperskill/HyperskillCourse.d.ts +13 -0
  84. package/dist/courseFormat/hyperskill/HyperskillCourse.js +25 -0
  85. package/dist/courseFormat/hyperskill/HyperskillProject.d.ts +10 -0
  86. package/dist/courseFormat/hyperskill/HyperskillProject.js +16 -0
  87. package/dist/courseFormat/hyperskill/HyperskillStage.d.ts +8 -0
  88. package/dist/courseFormat/hyperskill/HyperskillStage.js +20 -0
  89. package/dist/courseFormat/hyperskill/HyperskillTaskType.d.ts +4 -0
  90. package/dist/courseFormat/hyperskill/HyperskillTaskType.js +26 -0
  91. package/dist/courseFormat/hyperskill/HyperskillTopic.d.ts +5 -0
  92. package/dist/courseFormat/hyperskill/HyperskillTopic.js +11 -0
  93. package/dist/courseFormat/loggerUtils.d.ts +1 -0
  94. package/dist/courseFormat/loggerUtils.js +6 -0
  95. package/dist/courseFormat/stepik/StepikCourse.d.ts +5 -0
  96. package/dist/courseFormat/stepik/StepikCourse.js +15 -0
  97. package/dist/courseFormat/stepik/StepikLesson.d.ts +6 -0
  98. package/dist/courseFormat/stepik/StepikLesson.js +16 -0
  99. package/dist/courseFormat/tasks/AnswerTask.d.ts +8 -0
  100. package/dist/courseFormat/tasks/AnswerTask.js +11 -0
  101. package/dist/courseFormat/tasks/CodeTask.d.ts +12 -0
  102. package/dist/courseFormat/tasks/CodeTask.js +21 -0
  103. package/dist/courseFormat/tasks/DataTask.d.ts +18 -0
  104. package/dist/courseFormat/tasks/DataTask.js +32 -0
  105. package/dist/courseFormat/tasks/EduTask.d.ts +12 -0
  106. package/dist/courseFormat/tasks/EduTask.js +22 -0
  107. package/dist/courseFormat/tasks/IdeTask.d.ts +9 -0
  108. package/dist/courseFormat/tasks/IdeTask.js +14 -0
  109. package/dist/courseFormat/tasks/NumberTask.d.ts +9 -0
  110. package/dist/courseFormat/tasks/NumberTask.js +14 -0
  111. package/dist/courseFormat/tasks/OutputTask.d.ts +10 -0
  112. package/dist/courseFormat/tasks/OutputTask.js +18 -0
  113. package/dist/courseFormat/tasks/OutputTaskBase.d.ts +14 -0
  114. package/dist/courseFormat/tasks/OutputTaskBase.js +19 -0
  115. package/dist/courseFormat/tasks/RemoteEduTask.d.ts +9 -0
  116. package/dist/courseFormat/tasks/RemoteEduTask.js +15 -0
  117. package/dist/courseFormat/tasks/StringTask.d.ts +9 -0
  118. package/dist/courseFormat/tasks/StringTask.js +14 -0
  119. package/dist/courseFormat/tasks/TableTask.d.ts +17 -0
  120. package/dist/courseFormat/tasks/TableTask.js +43 -0
  121. package/dist/courseFormat/tasks/Task.d.ts +45 -0
  122. package/dist/courseFormat/tasks/Task.js +155 -0
  123. package/dist/courseFormat/tasks/TheoryTask.d.ts +10 -0
  124. package/dist/courseFormat/tasks/TheoryTask.js +15 -0
  125. package/dist/courseFormat/tasks/UnsupportedTask.d.ts +9 -0
  126. package/dist/courseFormat/tasks/UnsupportedTask.js +14 -0
  127. package/dist/courseFormat/tasks/choice/ChoiceOption.d.ts +10 -0
  128. package/dist/courseFormat/tasks/choice/ChoiceOption.js +33 -0
  129. package/dist/courseFormat/tasks/choice/ChoiceOptionStatus.d.ts +5 -0
  130. package/dist/courseFormat/tasks/choice/ChoiceOptionStatus.js +9 -0
  131. package/dist/courseFormat/tasks/choice/ChoiceTask.d.ts +23 -0
  132. package/dist/courseFormat/tasks/choice/ChoiceTask.js +47 -0
  133. package/dist/courseFormat/tasks/matching/MatchingTask.d.ts +10 -0
  134. package/dist/courseFormat/tasks/matching/MatchingTask.js +15 -0
  135. package/dist/courseFormat/tasks/matching/SortingBasedTask.d.ts +16 -0
  136. package/dist/courseFormat/tasks/matching/SortingBasedTask.js +50 -0
  137. package/dist/courseFormat/tasks/matching/SortingTask.d.ts +9 -0
  138. package/dist/courseFormat/tasks/matching/SortingTask.js +14 -0
  139. package/dist/courseFormat/uiMessages.d.ts +3 -0
  140. package/dist/courseFormat/uiMessages.js +14 -0
  141. package/dist/disk-loader.d.ts +4 -0
  142. package/dist/disk-loader.js +389 -0
  143. package/dist/index.d.ts +31 -0
  144. package/dist/index.js +64 -0
  145. package/dist/loader.d.ts +7 -0
  146. package/dist/loader.js +435 -0
  147. package/dist/models.d.ts +49 -0
  148. package/dist/models.js +2 -0
  149. package/dist/zip-loader.d.ts +4 -0
  150. package/dist/zip-loader.js +431 -0
  151. package/example-course-project/course-info.yaml +15 -0
  152. package/example-course-project/lesson1/lesson-info.yaml +3 -0
  153. package/example-course-project/lesson1/lesson-remote-info.yaml +1 -0
  154. package/example-course-project/lesson1/task1/Task.txt +1 -0
  155. package/example-course-project/lesson1/task1/task-info.yaml +12 -0
  156. package/example-course-project/lesson1/task1/task-remote-info.yaml +1 -0
  157. package/example-course-project/lesson1/task1/task.md +47 -0
  158. package/example-course-project/lesson1/task1/tests/Tests.txt +0 -0
  159. package/example-course-project/lesson1/task2/Task.txt +1 -0
  160. package/example-course-project/lesson1/task2/task-info.yaml +12 -0
  161. package/example-course-project/lesson1/task2/task-remote-info.yaml +1 -0
  162. package/example-course-project/lesson1/task2/task.md +47 -0
  163. package/example-course-project/lesson1/task2/tests/Tests.txt +0 -0
  164. package/package.json +19 -0
  165. package/src/@types/mime-types.d.ts +3 -0
  166. package/src/courseFormat/AnswerPlaceholder.ts +121 -0
  167. package/src/courseFormat/AnswerPlaceholderComparator.ts +7 -0
  168. package/src/courseFormat/AnswerPlaceholderDependency.ts +122 -0
  169. package/src/courseFormat/CheckFeedback.ts +71 -0
  170. package/src/courseFormat/CheckResult.ts +92 -0
  171. package/src/courseFormat/CheckResultSeverity.ts +13 -0
  172. package/src/courseFormat/CheckStatus.ts +5 -0
  173. package/src/courseFormat/Course.ts +201 -0
  174. package/src/courseFormat/CourseMode.ts +4 -0
  175. package/src/courseFormat/CourseVisibility.ts +4 -0
  176. package/src/courseFormat/CourseraCourse.ts +10 -0
  177. package/src/courseFormat/DescriptionFormat.ts +5 -0
  178. package/src/courseFormat/EduCourse.ts +41 -0
  179. package/src/courseFormat/EduFile.ts +133 -0
  180. package/src/courseFormat/EduFileErrorHighlightLevel.ts +5 -0
  181. package/src/courseFormat/EduFormatNames.ts +95 -0
  182. package/src/courseFormat/EduTestInfo.ts +87 -0
  183. package/src/courseFormat/EduVersions.ts +2 -0
  184. package/src/courseFormat/FileContents.ts +97 -0
  185. package/src/courseFormat/FileContentsFactory.ts +19 -0
  186. package/src/courseFormat/FrameworkLesson.ts +29 -0
  187. package/src/courseFormat/ItemContainer.ts +47 -0
  188. package/src/courseFormat/JBAccountUserInfo.ts +21 -0
  189. package/src/courseFormat/Language.ts +31 -0
  190. package/src/courseFormat/Lesson.ts +69 -0
  191. package/src/courseFormat/LessonContainer.ts +65 -0
  192. package/src/courseFormat/PluginInfo.ts +15 -0
  193. package/src/courseFormat/Section.ts +29 -0
  194. package/src/courseFormat/StudyItem.ts +55 -0
  195. package/src/courseFormat/Tags.ts +45 -0
  196. package/src/courseFormat/TaskFile.ts +88 -0
  197. package/src/courseFormat/UserInfo.ts +3 -0
  198. package/src/courseFormat/Vendor.ts +15 -0
  199. package/src/courseFormat/attempts/Attempt.ts +28 -0
  200. package/src/courseFormat/attempts/AttemptBase.ts +24 -0
  201. package/src/courseFormat/attempts/DataTaskAttempt.ts +19 -0
  202. package/src/courseFormat/attempts/Dataset.ts +13 -0
  203. package/src/courseFormat/fileUtils.ts +31 -0
  204. package/src/courseFormat/hyperskill/HyperskillCourse.ts +24 -0
  205. package/src/courseFormat/hyperskill/HyperskillProject.ts +10 -0
  206. package/src/courseFormat/hyperskill/HyperskillStage.ts +15 -0
  207. package/src/courseFormat/hyperskill/HyperskillTaskType.ts +23 -0
  208. package/src/courseFormat/hyperskill/HyperskillTopic.ts +5 -0
  209. package/src/courseFormat/loggerUtils.ts +3 -0
  210. package/src/courseFormat/stepik/StepikCourse.ts +10 -0
  211. package/src/courseFormat/stepik/StepikLesson.ts +11 -0
  212. package/src/courseFormat/tasks/AnswerTask.ts +13 -0
  213. package/src/courseFormat/tasks/CodeTask.ts +42 -0
  214. package/src/courseFormat/tasks/DataTask.ts +37 -0
  215. package/src/courseFormat/tasks/EduTask.ts +26 -0
  216. package/src/courseFormat/tasks/IdeTask.ts +17 -0
  217. package/src/courseFormat/tasks/NumberTask.ts +17 -0
  218. package/src/courseFormat/tasks/OutputTask.ts +21 -0
  219. package/src/courseFormat/tasks/OutputTaskBase.ts +23 -0
  220. package/src/courseFormat/tasks/RemoteEduTask.ts +18 -0
  221. package/src/courseFormat/tasks/StringTask.ts +17 -0
  222. package/src/courseFormat/tasks/TableTask.ts +51 -0
  223. package/src/courseFormat/tasks/Task.ts +181 -0
  224. package/src/courseFormat/tasks/TheoryTask.ts +19 -0
  225. package/src/courseFormat/tasks/UnsupportedTask.ts +17 -0
  226. package/src/courseFormat/tasks/choice/ChoiceOption.ts +37 -0
  227. package/src/courseFormat/tasks/choice/ChoiceOptionStatus.ts +5 -0
  228. package/src/courseFormat/tasks/choice/ChoiceTask.ts +57 -0
  229. package/src/courseFormat/tasks/matching/MatchingTask.ts +19 -0
  230. package/src/courseFormat/tasks/matching/SortingBasedTask.ts +59 -0
  231. package/src/courseFormat/tasks/matching/SortingTask.ts +17 -0
  232. package/src/courseFormat/uiMessages.ts +12 -0
  233. package/src/disk-loader.ts +463 -0
  234. package/src/index.ts +33 -0
  235. package/src/models.ts +54 -0
  236. package/src/zip-loader.ts +583 -0
  237. package/test/load-course.test.js +279 -0
  238. package/test/load-zip-course.test.js +73 -0
  239. package/tsconfig.json +15 -0
@@ -0,0 +1,18 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ import type { DataTaskAttempt } from "../attempts/DataTaskAttempt";
4
+ export declare class DataTask extends Task {
5
+ attempt?: DataTaskAttempt;
6
+ get isTimeLimited(): boolean;
7
+ constructor();
8
+ constructor(name: string);
9
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
10
+ get itemType(): string;
11
+ get supportSubmissions(): boolean;
12
+ isRunning(): boolean;
13
+ static DATA_TASK_TYPE: string;
14
+ static DATA_FOLDER_NAME: string;
15
+ static DATA_SAMPLE_FOLDER_NAME: string;
16
+ static DATASET_FOLDER_NAME: string;
17
+ static INPUT_FILE_NAME: string;
18
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataTask = void 0;
4
+ const CheckStatus_1 = require("../CheckStatus");
5
+ const Task_1 = require("./Task");
6
+ class DataTask extends Task_1.Task {
7
+ get isTimeLimited() {
8
+ var _a;
9
+ return ((_a = this.attempt) === null || _a === void 0 ? void 0 : _a.endDateTime) !== undefined;
10
+ }
11
+ constructor(name, id, position, updateDate, status) {
12
+ super(name, id, position, updateDate, status);
13
+ }
14
+ get itemType() {
15
+ return DataTask.DATA_TASK_TYPE;
16
+ }
17
+ get supportSubmissions() {
18
+ return false;
19
+ }
20
+ isRunning() {
21
+ var _a, _b;
22
+ if (this.status !== CheckStatus_1.CheckStatus.Unchecked)
23
+ return false;
24
+ return (_b = (_a = this.attempt) === null || _a === void 0 ? void 0 : _a.isRunning) !== null && _b !== void 0 ? _b : false;
25
+ }
26
+ }
27
+ exports.DataTask = DataTask;
28
+ DataTask.DATA_TASK_TYPE = "dataset";
29
+ DataTask.DATA_FOLDER_NAME = "data";
30
+ DataTask.DATA_SAMPLE_FOLDER_NAME = "sample";
31
+ DataTask.DATASET_FOLDER_NAME = "dataset";
32
+ DataTask.INPUT_FILE_NAME = "input.txt";
@@ -0,0 +1,12 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare class EduTask extends Task {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ get isToSubmitToRemote(): boolean;
9
+ get supportSubmissions(): boolean;
10
+ static EDU_TASK_TYPE: string;
11
+ static PYCHARM_TASK_TYPE: string;
12
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EduTask = void 0;
4
+ const CheckStatus_1 = require("../CheckStatus");
5
+ const Task_1 = require("./Task");
6
+ class EduTask extends Task_1.Task {
7
+ constructor(name, id, position, updateDate, status) {
8
+ super(name, id, position, updateDate, status);
9
+ }
10
+ get itemType() {
11
+ return EduTask.EDU_TASK_TYPE;
12
+ }
13
+ get isToSubmitToRemote() {
14
+ return this.checkStatus !== CheckStatus_1.CheckStatus.Unchecked;
15
+ }
16
+ get supportSubmissions() {
17
+ return true;
18
+ }
19
+ }
20
+ exports.EduTask = EduTask;
21
+ EduTask.EDU_TASK_TYPE = "edu";
22
+ EduTask.PYCHARM_TASK_TYPE = "pycharm";
@@ -0,0 +1,9 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare class IdeTask extends Task {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ static IDE_TASK_TYPE: string;
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdeTask = void 0;
4
+ const Task_1 = require("./Task");
5
+ class IdeTask extends Task_1.Task {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ }
9
+ get itemType() {
10
+ return IdeTask.IDE_TASK_TYPE;
11
+ }
12
+ }
13
+ exports.IdeTask = IdeTask;
14
+ IdeTask.IDE_TASK_TYPE = "ide";
@@ -0,0 +1,9 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { AnswerTask } from "./AnswerTask";
3
+ export declare class NumberTask extends AnswerTask {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ static NUMBER_TASK_TYPE: string;
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NumberTask = void 0;
4
+ const AnswerTask_1 = require("./AnswerTask");
5
+ class NumberTask extends AnswerTask_1.AnswerTask {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ }
9
+ get itemType() {
10
+ return NumberTask.NUMBER_TASK_TYPE;
11
+ }
12
+ }
13
+ exports.NumberTask = NumberTask;
14
+ NumberTask.NUMBER_TASK_TYPE = "number";
@@ -0,0 +1,10 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { OutputTaskBase } from "./OutputTaskBase";
3
+ export declare class OutputTask extends OutputTaskBase {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ get isToSubmitToRemote(): boolean;
9
+ static OUTPUT_TASK_TYPE: string;
10
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputTask = void 0;
4
+ const CheckStatus_1 = require("../CheckStatus");
5
+ const OutputTaskBase_1 = require("./OutputTaskBase");
6
+ class OutputTask extends OutputTaskBase_1.OutputTaskBase {
7
+ constructor(name, id, position, updateDate, status) {
8
+ super(name, id, position, updateDate, status);
9
+ }
10
+ get itemType() {
11
+ return OutputTask.OUTPUT_TASK_TYPE;
12
+ }
13
+ get isToSubmitToRemote() {
14
+ return this.checkStatus !== CheckStatus_1.CheckStatus.Unchecked;
15
+ }
16
+ }
17
+ exports.OutputTask = OutputTask;
18
+ OutputTask.OUTPUT_TASK_TYPE = "output";
@@ -0,0 +1,14 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare abstract class OutputTaskBase extends Task {
4
+ inputFileName: string;
5
+ outputFileName: string;
6
+ latestOutputFileName: string;
7
+ constructor();
8
+ constructor(name: string);
9
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
10
+ get supportSubmissions(): boolean;
11
+ static OUTPUT_PATTERN_NAME: string;
12
+ static INPUT_PATTERN_NAME: string;
13
+ static LATEST_OUTPUT_PATTERN_NAME: string;
14
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputTaskBase = void 0;
4
+ const Task_1 = require("./Task");
5
+ class OutputTaskBase extends Task_1.Task {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ this.inputFileName = OutputTaskBase.INPUT_PATTERN_NAME;
9
+ this.outputFileName = OutputTaskBase.OUTPUT_PATTERN_NAME;
10
+ this.latestOutputFileName = OutputTaskBase.LATEST_OUTPUT_PATTERN_NAME;
11
+ }
12
+ get supportSubmissions() {
13
+ return true;
14
+ }
15
+ }
16
+ exports.OutputTaskBase = OutputTaskBase;
17
+ OutputTaskBase.OUTPUT_PATTERN_NAME = "output.txt";
18
+ OutputTaskBase.INPUT_PATTERN_NAME = "input.txt";
19
+ OutputTaskBase.LATEST_OUTPUT_PATTERN_NAME = "latest_output.txt";
@@ -0,0 +1,9 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { EduTask } from "./EduTask";
3
+ export declare class RemoteEduTask extends EduTask {
4
+ checkProfile: string;
5
+ constructor();
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ static REMOTE_EDU_TASK_TYPE: string;
9
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoteEduTask = void 0;
4
+ const EduTask_1 = require("./EduTask");
5
+ class RemoteEduTask extends EduTask_1.EduTask {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ this.checkProfile = "";
9
+ }
10
+ get itemType() {
11
+ return RemoteEduTask.REMOTE_EDU_TASK_TYPE;
12
+ }
13
+ }
14
+ exports.RemoteEduTask = RemoteEduTask;
15
+ RemoteEduTask.REMOTE_EDU_TASK_TYPE = "remote_edu";
@@ -0,0 +1,9 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { AnswerTask } from "./AnswerTask";
3
+ export declare class StringTask extends AnswerTask {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ static STRING_TASK_TYPE: string;
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringTask = void 0;
4
+ const AnswerTask_1 = require("./AnswerTask");
5
+ class StringTask extends AnswerTask_1.AnswerTask {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ }
9
+ get itemType() {
10
+ return StringTask.STRING_TASK_TYPE;
11
+ }
12
+ }
13
+ exports.StringTask = StringTask;
14
+ StringTask.STRING_TASK_TYPE = "string";
@@ -0,0 +1,17 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare class TableTask extends Task {
4
+ isMultipleChoice: boolean;
5
+ rows: string[];
6
+ columns: string[];
7
+ selected: boolean[][];
8
+ constructor();
9
+ constructor(name: string);
10
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
11
+ get itemType(): string;
12
+ choose(rowIndex: number, columnIndex: number): void;
13
+ clearSelectedVariants(): void;
14
+ private clearSelectedInRow;
15
+ createTable(rows: string[], columns: string[], isCheckbox?: boolean): void;
16
+ static TABLE_TASK_TYPE: string;
17
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableTask = void 0;
4
+ const Task_1 = require("./Task");
5
+ const loggerUtils_1 = require("../loggerUtils");
6
+ class TableTask extends Task_1.Task {
7
+ constructor(name, id, position, updateDate, status) {
8
+ super(name, id, position, updateDate, status);
9
+ this.isMultipleChoice = false;
10
+ this.rows = [];
11
+ this.columns = [];
12
+ this.selected = [];
13
+ }
14
+ get itemType() {
15
+ return TableTask.TABLE_TASK_TYPE;
16
+ }
17
+ choose(rowIndex, columnIndex) {
18
+ if (rowIndex < 0 || rowIndex >= this.rows.length || columnIndex < 0 || columnIndex >= this.columns.length) {
19
+ (0, loggerUtils_1.logger)("TableTask").error("There was an attempt to choose a cell with invalid indices");
20
+ return;
21
+ }
22
+ if (!this.isMultipleChoice) {
23
+ this.clearSelectedInRow(rowIndex);
24
+ }
25
+ this.selected[rowIndex][columnIndex] = !this.selected[rowIndex][columnIndex];
26
+ }
27
+ clearSelectedVariants() {
28
+ for (let rowIndex = 0; rowIndex < this.selected.length; rowIndex += 1) {
29
+ this.clearSelectedInRow(rowIndex);
30
+ }
31
+ }
32
+ clearSelectedInRow(rowIndex) {
33
+ this.selected[rowIndex] = this.selected[rowIndex].map(() => false);
34
+ }
35
+ createTable(rows, columns, isCheckbox = false) {
36
+ this.rows = rows;
37
+ this.columns = columns;
38
+ this.isMultipleChoice = isCheckbox;
39
+ this.selected = rows.map(() => columns.map(() => false));
40
+ }
41
+ }
42
+ exports.TableTask = TableTask;
43
+ TableTask.TABLE_TASK_TYPE = "table";
@@ -0,0 +1,45 @@
1
+ import { CheckFeedback } from "../CheckFeedback";
2
+ import { CheckStatus } from "../CheckStatus";
3
+ import { DescriptionFormat } from "../DescriptionFormat";
4
+ import { ItemContainer } from "../ItemContainer";
5
+ import type { Lesson } from "../Lesson";
6
+ import { Course } from "../Course";
7
+ import { TaskFile } from "../TaskFile";
8
+ import { StudyItem } from "../StudyItem";
9
+ export declare abstract class Task extends StudyItem {
10
+ private _taskFiles;
11
+ get taskFiles(): Map<string, TaskFile>;
12
+ set taskFiles(value: Map<string, TaskFile>);
13
+ feedback?: CheckFeedback;
14
+ descriptionText: string;
15
+ descriptionFormat: DescriptionFormat;
16
+ feedbackLink?: string;
17
+ solutionHidden?: boolean;
18
+ record: number;
19
+ isUpToDate: boolean;
20
+ protected checkStatus: CheckStatus;
21
+ get status(): CheckStatus;
22
+ set status(status: CheckStatus);
23
+ get lesson(): Lesson;
24
+ get isPluginTaskType(): boolean;
25
+ get supportSubmissions(): boolean;
26
+ get isToSubmitToRemote(): boolean;
27
+ get isChangedOnFailed(): boolean;
28
+ get course(): Course;
29
+ get files(): TaskFile[];
30
+ constructor();
31
+ constructor(name: string);
32
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
33
+ init(parentItem: ItemContainer, isRestarted: boolean): void;
34
+ getTaskFile(name: string): TaskFile | undefined;
35
+ addTaskFile(name: string, isVisible?: boolean): TaskFile;
36
+ addTaskFileInstance(taskFile: TaskFile): void;
37
+ addTaskFileAt(taskFile: TaskFile, position: number): void;
38
+ setTaskFileValues(taskFiles: TaskFile[]): void;
39
+ getTaskFileValues(): TaskFile[];
40
+ removeTaskFile(taskFile: string): TaskFile | undefined;
41
+ taskFileIndex(taskFile: string): number | undefined;
42
+ equals(other: Task): boolean;
43
+ hashCode(): number;
44
+ static LOG: Console;
45
+ }
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Task = void 0;
4
+ const CheckStatus_1 = require("../CheckStatus");
5
+ const DescriptionFormat_1 = require("../DescriptionFormat");
6
+ const TaskFile_1 = require("../TaskFile");
7
+ const StudyItem_1 = require("../StudyItem");
8
+ const loggerUtils_1 = require("../loggerUtils");
9
+ function getLessonModuleLazy() {
10
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
11
+ return require("../Lesson");
12
+ }
13
+ class Task extends StudyItem_1.StudyItem {
14
+ get taskFiles() {
15
+ return this._taskFiles;
16
+ }
17
+ set taskFiles(value) {
18
+ this._taskFiles = value;
19
+ }
20
+ get status() {
21
+ return this.checkStatus;
22
+ }
23
+ set status(status) {
24
+ for (const taskFile of this._taskFiles.values()) {
25
+ for (const placeholder of taskFile.answerPlaceholders) {
26
+ placeholder.status = status;
27
+ }
28
+ }
29
+ if (this.checkStatus !== status) {
30
+ this.feedback = undefined;
31
+ }
32
+ this.checkStatus = status;
33
+ }
34
+ get lesson() {
35
+ const LessonClass = getLessonModuleLazy().Lesson;
36
+ if (!(this.parent instanceof LessonClass)) {
37
+ throw new Error(`Lesson is null for task ${this.name}`);
38
+ }
39
+ return this.parent;
40
+ }
41
+ get isPluginTaskType() {
42
+ return true;
43
+ }
44
+ get supportSubmissions() {
45
+ return false;
46
+ }
47
+ get isToSubmitToRemote() {
48
+ return false;
49
+ }
50
+ get isChangedOnFailed() {
51
+ return false;
52
+ }
53
+ get course() {
54
+ return this.lesson.course;
55
+ }
56
+ get files() {
57
+ return this.getTaskFileValues();
58
+ }
59
+ constructor(name, id, position, updateDate, status) {
60
+ super(name);
61
+ this._taskFiles = new Map();
62
+ this.descriptionText = "";
63
+ this.descriptionFormat = DescriptionFormat_1.DescriptionFormat.MD;
64
+ this.record = -1;
65
+ this.isUpToDate = true;
66
+ this.checkStatus = CheckStatus_1.CheckStatus.Unchecked;
67
+ if (id !== undefined)
68
+ this.id = id;
69
+ if (position !== undefined)
70
+ this.index = position;
71
+ if (updateDate !== undefined)
72
+ this.updateDate = updateDate;
73
+ if (status !== undefined)
74
+ this.checkStatus = status;
75
+ }
76
+ init(parentItem, isRestarted) {
77
+ this.parent = parentItem;
78
+ for (const taskFile of this._taskFiles.values()) {
79
+ taskFile.initTaskFile(this, isRestarted);
80
+ }
81
+ }
82
+ getTaskFile(name) {
83
+ return this._taskFiles.get(name);
84
+ }
85
+ addTaskFile(name, isVisible = true) {
86
+ const taskFile = new TaskFile_1.TaskFile();
87
+ taskFile.task = this;
88
+ taskFile.name = name;
89
+ taskFile.isVisible = isVisible;
90
+ this._taskFiles.set(name, taskFile);
91
+ return taskFile;
92
+ }
93
+ addTaskFileInstance(taskFile) {
94
+ taskFile.task = this;
95
+ this._taskFiles.set(taskFile.name, taskFile);
96
+ }
97
+ addTaskFileAt(taskFile, position) {
98
+ taskFile.task = this;
99
+ if (position < 0 || position > this._taskFiles.size) {
100
+ throw new Error("IndexOutOfBounds");
101
+ }
102
+ const entries = Array.from(this._taskFiles.entries());
103
+ entries.splice(position, 0, [taskFile.name, taskFile]);
104
+ this._taskFiles = new Map(entries);
105
+ }
106
+ setTaskFileValues(taskFiles) {
107
+ this._taskFiles.clear();
108
+ for (const taskFile of taskFiles) {
109
+ this._taskFiles.set(taskFile.name, taskFile);
110
+ }
111
+ }
112
+ getTaskFileValues() {
113
+ return Array.from(this._taskFiles.values());
114
+ }
115
+ removeTaskFile(taskFile) {
116
+ const value = this._taskFiles.get(taskFile);
117
+ this._taskFiles.delete(taskFile);
118
+ return value;
119
+ }
120
+ taskFileIndex(taskFile) {
121
+ const index = Array.from(this._taskFiles.keys()).indexOf(taskFile);
122
+ return index === -1 ? undefined : index;
123
+ }
124
+ equals(other) {
125
+ if (this === other)
126
+ return true;
127
+ if (this.index !== other.index)
128
+ return false;
129
+ if (this.name !== other.name)
130
+ return false;
131
+ if (this._taskFiles !== other._taskFiles)
132
+ return false;
133
+ if (this.descriptionText !== other.descriptionText)
134
+ return false;
135
+ return this.descriptionFormat === other.descriptionFormat;
136
+ }
137
+ hashCode() {
138
+ let result = hashString(this.name);
139
+ result = 31 * result + this.index;
140
+ result = 31 * result + this._taskFiles.size;
141
+ result = 31 * result + hashString(this.descriptionText);
142
+ result = 31 * result + hashString(this.descriptionFormat);
143
+ return result;
144
+ }
145
+ }
146
+ exports.Task = Task;
147
+ Task.LOG = (0, loggerUtils_1.logger)("Task");
148
+ function hashString(value) {
149
+ let hash = 0;
150
+ for (let i = 0; i < value.length; i += 1) {
151
+ hash = (hash << 5) - hash + value.charCodeAt(i);
152
+ hash |= 0;
153
+ }
154
+ return hash;
155
+ }
@@ -0,0 +1,10 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare class TheoryTask extends Task {
4
+ postSubmissionOnOpen: boolean;
5
+ constructor();
6
+ constructor(name: string);
7
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
8
+ get itemType(): string;
9
+ static THEORY_TASK_TYPE: string;
10
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TheoryTask = void 0;
4
+ const Task_1 = require("./Task");
5
+ class TheoryTask extends Task_1.Task {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ this.postSubmissionOnOpen = true;
9
+ }
10
+ get itemType() {
11
+ return TheoryTask.THEORY_TASK_TYPE;
12
+ }
13
+ }
14
+ exports.TheoryTask = TheoryTask;
15
+ TheoryTask.THEORY_TASK_TYPE = "theory";
@@ -0,0 +1,9 @@
1
+ import { CheckStatus } from "../CheckStatus";
2
+ import { Task } from "./Task";
3
+ export declare class UnsupportedTask extends Task {
4
+ constructor();
5
+ constructor(name: string);
6
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
7
+ get itemType(): string;
8
+ static UNSUPPORTED_TASK_TYPE: string;
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnsupportedTask = void 0;
4
+ const Task_1 = require("./Task");
5
+ class UnsupportedTask extends Task_1.Task {
6
+ constructor(name, id, position, updateDate, status) {
7
+ super(name, id, position, updateDate, status);
8
+ }
9
+ get itemType() {
10
+ return UnsupportedTask.UNSUPPORTED_TASK_TYPE;
11
+ }
12
+ }
13
+ exports.UnsupportedTask = UnsupportedTask;
14
+ UnsupportedTask.UNSUPPORTED_TASK_TYPE = "unsupported";
@@ -0,0 +1,10 @@
1
+ import { ChoiceOptionStatus } from "./ChoiceOptionStatus";
2
+ export declare class ChoiceOption {
3
+ text: string;
4
+ status: ChoiceOptionStatus;
5
+ constructor();
6
+ constructor(text: string);
7
+ constructor(text: string, status: ChoiceOptionStatus);
8
+ equals(other: ChoiceOption): boolean;
9
+ hashCode(): number;
10
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChoiceOption = void 0;
4
+ const ChoiceOptionStatus_1 = require("./ChoiceOptionStatus");
5
+ class ChoiceOption {
6
+ constructor(text, status) {
7
+ this.text = "";
8
+ this.status = ChoiceOptionStatus_1.ChoiceOptionStatus.UNKNOWN;
9
+ if (text !== undefined) {
10
+ this.text = text;
11
+ }
12
+ if (status !== undefined) {
13
+ this.status = status;
14
+ }
15
+ }
16
+ equals(other) {
17
+ return this.text === other.text && this.status === other.status;
18
+ }
19
+ hashCode() {
20
+ let result = hashString(this.text);
21
+ result = 31 * result + hashString(this.status);
22
+ return result;
23
+ }
24
+ }
25
+ exports.ChoiceOption = ChoiceOption;
26
+ function hashString(value) {
27
+ let hash = 0;
28
+ for (let i = 0; i < value.length; i += 1) {
29
+ hash = (hash << 5) - hash + value.charCodeAt(i);
30
+ hash |= 0;
31
+ }
32
+ return hash;
33
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum ChoiceOptionStatus {
2
+ CORRECT = "CORRECT",
3
+ INCORRECT = "INCORRECT",
4
+ UNKNOWN = "UNKNOWN"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChoiceOptionStatus = void 0;
4
+ var ChoiceOptionStatus;
5
+ (function (ChoiceOptionStatus) {
6
+ ChoiceOptionStatus["CORRECT"] = "CORRECT";
7
+ ChoiceOptionStatus["INCORRECT"] = "INCORRECT";
8
+ ChoiceOptionStatus["UNKNOWN"] = "UNKNOWN";
9
+ })(ChoiceOptionStatus || (exports.ChoiceOptionStatus = ChoiceOptionStatus = {}));
@@ -0,0 +1,23 @@
1
+ import { CheckStatus } from "../../CheckStatus";
2
+ import { Task } from "../Task";
3
+ import { ChoiceOption } from "./ChoiceOption";
4
+ export declare class ChoiceTask extends Task {
5
+ choiceOptions: ChoiceOption[];
6
+ isMultipleChoice: boolean;
7
+ selectedVariants: number[];
8
+ messageCorrect: string;
9
+ messageIncorrect: string;
10
+ quizHeader?: string;
11
+ canCheckLocally: boolean;
12
+ constructor();
13
+ constructor(name: string, id: number, position: number, updateDate: Date, status: CheckStatus);
14
+ get itemType(): string;
15
+ get isPluginTaskType(): boolean;
16
+ get isChangedOnFailed(): boolean;
17
+ get isToSubmitToRemote(): boolean;
18
+ get presentableQuizHeader(): string;
19
+ addSelectedVariant(variant: number): void;
20
+ removeSelectedVariant(variant: number): void;
21
+ clearSelectedVariants(): void;
22
+ static CHOICE_TASK_TYPE: string;
23
+ }