@ueu/ueu-canvas 0.0.3 → 0.0.5

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 (339) hide show
  1. package/dist/Account.js +60 -0
  2. package/dist/Account.js.map +1 -0
  3. package/dist/NotImplementedException.js +8 -0
  4. package/dist/NotImplementedException.js.map +1 -0
  5. package/dist/__mocks__/Account.d.ts +3 -3
  6. package/dist/__mocks__/Account.js +51 -0
  7. package/dist/__mocks__/Account.js.map +1 -0
  8. package/dist/__mocks__/index.js +25 -0
  9. package/dist/__mocks__/index.js.map +1 -0
  10. package/dist/__mocks__/mockAccountData.js +45 -0
  11. package/dist/__mocks__/mockAccountData.js.map +1 -0
  12. package/dist/__mocks__/mockEnrollment.d.ts +1 -1
  13. package/dist/__mocks__/mockEnrollment.js +24 -0
  14. package/dist/__mocks__/mockEnrollment.js.map +1 -0
  15. package/dist/__mocks__/mockRubricData.d.ts +1 -1
  16. package/dist/__mocks__/mockRubricData.js +56 -0
  17. package/dist/__mocks__/mockRubricData.js.map +1 -0
  18. package/dist/__mocks__/mockTabData.d.ts +1 -1
  19. package/dist/__mocks__/mockTabData.js +14 -0
  20. package/dist/__mocks__/mockTabData.js.map +1 -0
  21. package/dist/__mocks__/mockTermData.d.ts +1 -1
  22. package/dist/__mocks__/mockTermData.js +8 -0
  23. package/dist/__mocks__/mockTermData.js.map +1 -0
  24. package/dist/__mocks__/mockUserData.js +15 -0
  25. package/dist/__mocks__/mockUserData.js.map +1 -0
  26. package/dist/__mocks__/utils.js +14 -0
  27. package/dist/__mocks__/utils.js.map +1 -0
  28. package/dist/__tests__/canvasUtils.test.js +431 -0
  29. package/dist/__tests__/canvasUtils.test.js.map +1 -0
  30. package/dist/__tests__/fetch.test.js +236 -0
  31. package/dist/__tests__/fetch.test.js.map +1 -0
  32. package/dist/__tests__/profile.test.js +17 -0
  33. package/dist/__tests__/profile.test.js.map +1 -0
  34. package/dist/__tests__/rubrics.test.js +136 -0
  35. package/dist/__tests__/rubrics.test.js.map +1 -0
  36. package/dist/baseCanvasObject.js +115 -0
  37. package/dist/baseCanvasObject.js.map +1 -0
  38. package/dist/canvasDataDefs.d.ts +4 -0
  39. package/dist/canvasDataDefs.d.ts.map +1 -1
  40. package/dist/canvasDataDefs.js +3 -0
  41. package/dist/canvasDataDefs.js.map +1 -0
  42. package/dist/canvasUtils.d.ts +1 -1
  43. package/dist/canvasUtils.js +358 -0
  44. package/dist/canvasUtils.js.map +1 -0
  45. package/dist/consts.js +6 -0
  46. package/dist/consts.js.map +1 -0
  47. package/dist/content/BaseContentItem.d.ts +6 -6
  48. package/dist/content/BaseContentItem.js +182 -0
  49. package/dist/content/BaseContentItem.js.map +1 -0
  50. package/dist/content/ContentKind.d.ts +3 -3
  51. package/dist/content/ContentKind.js +45 -0
  52. package/dist/content/ContentKind.js.map +1 -0
  53. package/dist/content/__mocks__/determineContent.d.ts +14 -14
  54. package/dist/content/__mocks__/determineContent.js +27 -0
  55. package/dist/content/__mocks__/determineContent.js.map +1 -0
  56. package/dist/content/__mocks__/mockAssignmentSubmission.d.ts +2 -2
  57. package/dist/content/__mocks__/mockAssignmentSubmission.d.ts.map +1 -1
  58. package/dist/content/__mocks__/mockAssignmentSubmission.js +38 -0
  59. package/dist/content/__mocks__/mockAssignmentSubmission.js.map +1 -0
  60. package/dist/content/__mocks__/mockContentData.d.ts +3 -3
  61. package/dist/content/__mocks__/mockContentData.js +92 -0
  62. package/dist/content/__mocks__/mockContentData.js.map +1 -0
  63. package/dist/content/__mocks__/openThisContentInTarget.d.ts +1 -1
  64. package/dist/content/__mocks__/openThisContentInTarget.d.ts.map +1 -1
  65. package/dist/content/__mocks__/openThisContentInTarget.js +6 -0
  66. package/dist/content/__mocks__/openThisContentInTarget.js.map +1 -0
  67. package/dist/content/__testingUtils__/utils.d.ts +1 -1
  68. package/dist/content/__testingUtils__/utils.js +43 -0
  69. package/dist/content/__testingUtils__/utils.js.map +1 -0
  70. package/dist/content/__tests__/determineContent.test.js +115 -0
  71. package/dist/content/__tests__/determineContent.test.js.map +1 -0
  72. package/dist/content/__tests__/getContentFuncs.test.js +66 -0
  73. package/dist/content/__tests__/getContentFuncs.test.js.map +1 -0
  74. package/dist/content/assignments/Assignment.d.ts +4 -4
  75. package/dist/content/assignments/Assignment.js +61 -0
  76. package/dist/content/assignments/Assignment.js.map +1 -0
  77. package/dist/content/assignments/AssignmentKind.d.ts +4 -4
  78. package/dist/content/assignments/AssignmentKind.d.ts.map +1 -1
  79. package/dist/content/assignments/AssignmentKind.js +24 -0
  80. package/dist/content/assignments/AssignmentKind.js.map +1 -0
  81. package/dist/content/assignments/__tests__/AssignmentKind.test.js +56 -0
  82. package/dist/content/assignments/__tests__/AssignmentKind.test.js.map +1 -0
  83. package/dist/content/assignments/__tests__/assignments.test.js +95 -0
  84. package/dist/content/assignments/__tests__/assignments.test.js.map +1 -0
  85. package/dist/content/assignments/deleteAssignmentGroup.d.ts +2 -1
  86. package/dist/content/assignments/deleteAssignmentGroup.d.ts.map +1 -1
  87. package/dist/content/assignments/deleteAssignmentGroup.js +17 -0
  88. package/dist/content/assignments/deleteAssignmentGroup.js.map +1 -0
  89. package/dist/content/assignments/genAssignmentGroups.d.ts +3 -2
  90. package/dist/content/assignments/genAssignmentGroups.d.ts.map +1 -1
  91. package/dist/content/assignments/genAssignmentGroups.js +14 -0
  92. package/dist/content/assignments/genAssignmentGroups.js.map +1 -0
  93. package/dist/content/assignments/index.d.ts +4 -4
  94. package/dist/content/assignments/index.js +28 -0
  95. package/dist/content/assignments/index.js.map +1 -0
  96. package/dist/content/assignments/legacy.js +12 -0
  97. package/dist/content/assignments/legacy.js.map +1 -0
  98. package/dist/content/assignments/updateAssignmentDueDates.d.ts +2 -2
  99. package/dist/content/assignments/updateAssignmentDueDates.js +22 -0
  100. package/dist/content/assignments/updateAssignmentDueDates.js.map +1 -0
  101. package/dist/content/determineContent.d.ts +8 -8
  102. package/dist/content/determineContent.d.ts.map +1 -1
  103. package/dist/content/determineContent.js +70 -0
  104. package/dist/content/determineContent.js.map +1 -0
  105. package/dist/content/discussions/Discussion.d.ts +4 -4
  106. package/dist/content/discussions/Discussion.js +32 -0
  107. package/dist/content/discussions/Discussion.js.map +1 -0
  108. package/dist/content/discussions/DiscussionKind.d.ts +3 -3
  109. package/dist/content/discussions/DiscussionKind.d.ts.map +1 -1
  110. package/dist/content/discussions/DiscussionKind.js +23 -0
  111. package/dist/content/discussions/DiscussionKind.js.map +1 -0
  112. package/dist/content/discussions/__tests__/DiscussionKind.test.js +56 -0
  113. package/dist/content/discussions/__tests__/DiscussionKind.test.js.map +1 -0
  114. package/dist/content/discussions/genEquivalentDiscussionData.js +97 -0
  115. package/dist/content/discussions/genEquivalentDiscussionData.js.map +1 -0
  116. package/dist/content/discussions/index.js +19 -0
  117. package/dist/content/discussions/index.js.map +1 -0
  118. package/dist/content/getContentFuncs.js +25 -0
  119. package/dist/content/getContentFuncs.js.map +1 -0
  120. package/dist/content/index.js +27 -0
  121. package/dist/content/index.js.map +1 -0
  122. package/dist/content/openThisContentInTarget.d.ts +3 -2
  123. package/dist/content/openThisContentInTarget.d.ts.map +1 -1
  124. package/dist/content/openThisContentInTarget.js +35 -0
  125. package/dist/content/openThisContentInTarget.js.map +1 -0
  126. package/dist/content/pages/Page.d.ts +5 -4
  127. package/dist/content/pages/Page.d.ts.map +1 -1
  128. package/dist/content/pages/Page.js +39 -0
  129. package/dist/content/pages/Page.js.map +1 -0
  130. package/dist/content/pages/PageKind.d.ts +4 -3
  131. package/dist/content/pages/PageKind.d.ts.map +1 -1
  132. package/dist/content/pages/PageKind.js +24 -0
  133. package/dist/content/pages/PageKind.js.map +1 -0
  134. package/dist/content/pages/__tests__/PageKind.test.js +69 -0
  135. package/dist/content/pages/__tests__/PageKind.test.js.map +1 -0
  136. package/dist/content/pages/__tests__/learningMaterialsForModule.js +82 -0
  137. package/dist/content/pages/__tests__/learningMaterialsForModule.js.map +1 -0
  138. package/dist/content/pages/index.d.ts +4 -0
  139. package/dist/content/pages/index.d.ts.map +1 -1
  140. package/dist/content/pages/index.js +56 -0
  141. package/dist/content/pages/index.js.map +1 -0
  142. package/dist/content/pages/learningMaterialsForModule.d.ts +2 -2
  143. package/dist/content/pages/learningMaterialsForModule.js +16 -0
  144. package/dist/content/pages/learningMaterialsForModule.js.map +1 -0
  145. package/dist/content/pages/types.d.ts +2 -1
  146. package/dist/content/pages/types.d.ts.map +1 -1
  147. package/dist/content/pages/types.js +3 -0
  148. package/dist/content/pages/types.js.map +1 -0
  149. package/dist/content/quizzes/Quiz.d.ts +1 -1
  150. package/dist/content/quizzes/Quiz.js +27 -0
  151. package/dist/content/quizzes/Quiz.js.map +1 -0
  152. package/dist/content/quizzes/QuizKind.d.ts +3 -3
  153. package/dist/content/quizzes/QuizKind.d.ts.map +1 -1
  154. package/dist/content/quizzes/QuizKind.js +22 -0
  155. package/dist/content/quizzes/QuizKind.js.map +1 -0
  156. package/dist/content/quizzes/__tests__/QuizKind.test.js +56 -0
  157. package/dist/content/quizzes/__tests__/QuizKind.test.js.map +1 -0
  158. package/dist/content/quizzes/index.js +3 -0
  159. package/dist/content/quizzes/index.js.map +1 -0
  160. package/dist/content/quizzes/types.js +3 -0
  161. package/dist/content/quizzes/types.js.map +1 -0
  162. package/dist/content/types.d.ts +6 -6
  163. package/dist/content/types.js +3 -0
  164. package/dist/content/types.js.map +1 -0
  165. package/dist/course/Course.d.ts +15 -11
  166. package/dist/course/Course.d.ts.map +1 -1
  167. package/dist/course/Course.js +473 -0
  168. package/dist/course/Course.js.map +1 -0
  169. package/dist/course/IBlueprintCourse.d.ts +2 -2
  170. package/dist/course/IBlueprintCourse.js +3 -0
  171. package/dist/course/IBlueprintCourse.js.map +1 -0
  172. package/dist/course/__mocks__/blueprint.d.ts +1 -1
  173. package/dist/course/__mocks__/blueprint.js +28 -0
  174. package/dist/course/__mocks__/blueprint.js.map +1 -0
  175. package/dist/course/__mocks__/mockCourseData.d.ts +1 -1
  176. package/dist/course/__mocks__/mockCourseData.js +50 -0
  177. package/dist/course/__mocks__/mockCourseData.js.map +1 -0
  178. package/dist/course/__mocks__/mockLatePolicy.d.ts +1 -1
  179. package/dist/course/__mocks__/mockLatePolicy.d.ts.map +1 -1
  180. package/dist/course/__mocks__/mockLatePolicy.js +15 -0
  181. package/dist/course/__mocks__/mockLatePolicy.js.map +1 -0
  182. package/dist/course/__mocks__/mockModuleData.js +55 -0
  183. package/dist/course/__mocks__/mockModuleData.js.map +1 -0
  184. package/dist/course/__mocks__/mockProgressData.js +29 -0
  185. package/dist/course/__mocks__/mockProgressData.js.map +1 -0
  186. package/dist/course/__tests__/Course.test.js +75 -0
  187. package/dist/course/__tests__/Course.test.js.map +1 -0
  188. package/dist/course/__tests__/blueprint.test.js +273 -0
  189. package/dist/course/__tests__/blueprint.test.js.map +1 -0
  190. package/dist/course/__tests__/changeStartDate.test.js +240 -0
  191. package/dist/course/__tests__/changeStartDate.test.js.map +1 -0
  192. package/dist/course/__tests__/index.test.js +77 -0
  193. package/dist/course/__tests__/index.test.js.map +1 -0
  194. package/dist/course/blueprint.d.ts +1 -1
  195. package/dist/course/blueprint.js +108 -0
  196. package/dist/course/blueprint.js.map +1 -0
  197. package/dist/course/cachedGetAssociatedCoursesFunc.d.ts +2 -2
  198. package/dist/course/cachedGetAssociatedCoursesFunc.js +14 -0
  199. package/dist/course/cachedGetAssociatedCoursesFunc.js.map +1 -0
  200. package/dist/course/changeStartDate.d.ts +7 -6
  201. package/dist/course/changeStartDate.d.ts.map +1 -1
  202. package/dist/course/changeStartDate.js +182 -0
  203. package/dist/course/changeStartDate.js.map +1 -0
  204. package/dist/course/code.js +39 -0
  205. package/dist/course/code.js.map +1 -0
  206. package/dist/course/courseTypes.d.ts +5 -5
  207. package/dist/course/courseTypes.js +3 -0
  208. package/dist/course/courseTypes.js.map +1 -0
  209. package/dist/course/getCourseIdFromUrl.d.ts +2 -1
  210. package/dist/course/getCourseIdFromUrl.d.ts.map +1 -1
  211. package/dist/course/getCourseIdFromUrl.js +12 -0
  212. package/dist/course/getCourseIdFromUrl.js.map +1 -0
  213. package/dist/course/getSections.d.ts +3 -3
  214. package/dist/course/getSections.js +10 -0
  215. package/dist/course/getSections.js.map +1 -0
  216. package/dist/course/getTermNameFromSections.d.ts +1 -1
  217. package/dist/course/getTermNameFromSections.js +13 -0
  218. package/dist/course/getTermNameFromSections.js.map +1 -0
  219. package/dist/course/index.js +28 -0
  220. package/dist/course/index.js.map +1 -0
  221. package/dist/course/migration/__mocks__/mockMigrationData.js +41 -0
  222. package/dist/course/migration/__mocks__/mockMigrationData.js.map +1 -0
  223. package/dist/course/migration/__tests__/migration.test.js +141 -0
  224. package/dist/course/migration/__tests__/migration.test.js.map +1 -0
  225. package/dist/course/migration/__tests__/migrationCache.test.js +42 -0
  226. package/dist/course/migration/__tests__/migrationCache.test.js.map +1 -0
  227. package/dist/course/migration/index.d.ts +2 -2
  228. package/dist/course/migration/index.js +74 -0
  229. package/dist/course/migration/index.js.map +1 -0
  230. package/dist/course/migration/migrationCache.js +44 -0
  231. package/dist/course/migration/migrationCache.js.map +1 -0
  232. package/dist/course/modules.d.ts +1 -1
  233. package/dist/course/modules.js +82 -0
  234. package/dist/course/modules.js.map +1 -0
  235. package/dist/course/notABlueprintError.js +8 -0
  236. package/dist/course/notABlueprintError.js.map +1 -0
  237. package/dist/course/references/getReferencesForText.d.ts +3 -2
  238. package/dist/course/references/getReferencesForText.d.ts.map +1 -1
  239. package/dist/course/references/getReferencesForText.js +14 -0
  240. package/dist/course/references/getReferencesForText.js.map +1 -0
  241. package/dist/course/references/getReferencesForText.test.js +21 -0
  242. package/dist/course/references/getReferencesForText.test.js.map +1 -0
  243. package/dist/course/references/getReferencesTemplate.d.ts +6 -6
  244. package/dist/course/references/getReferencesTemplate.d.ts.map +1 -1
  245. package/dist/course/references/getReferencesTemplate.js +30 -0
  246. package/dist/course/references/getReferencesTemplate.js.map +1 -0
  247. package/dist/course/references/mockCiteAsResponse.d.ts +2 -2
  248. package/dist/course/references/mockCiteAsResponse.d.ts.map +1 -1
  249. package/dist/course/references/mockCiteAsResponse.js +323 -0
  250. package/dist/course/references/mockCiteAsResponse.js.map +1 -0
  251. package/dist/course/retireBlueprint.d.ts +2 -2
  252. package/dist/course/retireBlueprint.js +21 -0
  253. package/dist/course/retireBlueprint.js.map +1 -0
  254. package/dist/course/toolbox.d.ts +3 -3
  255. package/dist/course/toolbox.js +96 -0
  256. package/dist/course/toolbox.js.map +1 -0
  257. package/dist/date.js +119 -0
  258. package/dist/date.js.map +1 -0
  259. package/dist/enrollments/EnrollmentTypes.d.ts +2 -2
  260. package/dist/enrollments/EnrollmentTypes.js +3 -0
  261. package/dist/enrollments/EnrollmentTypes.js.map +1 -0
  262. package/dist/enrollments/enrollmentRole.js +7 -0
  263. package/dist/enrollments/enrollmentRole.js.map +1 -0
  264. package/dist/enrollments/getEnrollmentGenerator.d.ts +2 -2
  265. package/dist/enrollments/getEnrollmentGenerator.js +25 -0
  266. package/dist/enrollments/getEnrollmentGenerator.js.map +1 -0
  267. package/dist/enrollments/index.js +20 -0
  268. package/dist/enrollments/index.js.map +1 -0
  269. package/dist/fetch/__mocks__/fetchJson.js +5 -0
  270. package/dist/fetch/__mocks__/fetchJson.js.map +1 -0
  271. package/dist/fetch/__mocks__/getPagedDataGenerator.js +10 -0
  272. package/dist/fetch/__mocks__/getPagedDataGenerator.js.map +1 -0
  273. package/dist/fetch/__mocks__/index.js +8 -0
  274. package/dist/fetch/__mocks__/index.js.map +1 -0
  275. package/dist/fetch/apiGetConfig.d.ts +1 -1
  276. package/dist/fetch/apiGetConfig.js +11 -0
  277. package/dist/fetch/apiGetConfig.js.map +1 -0
  278. package/dist/fetch/apiWriteConfig.d.ts +2 -2
  279. package/dist/fetch/apiWriteConfig.js +16 -0
  280. package/dist/fetch/apiWriteConfig.js.map +1 -0
  281. package/dist/fetch/canvasDataFetchGenFunc.d.ts +2 -2
  282. package/dist/fetch/canvasDataFetchGenFunc.js +13 -0
  283. package/dist/fetch/canvasDataFetchGenFunc.js.map +1 -0
  284. package/dist/fetch/fetchJson.d.ts +1 -1
  285. package/dist/fetch/fetchJson.js +19 -0
  286. package/dist/fetch/fetchJson.js.map +1 -0
  287. package/dist/fetch/getPagedDataGenerator.d.ts +2 -2
  288. package/dist/fetch/getPagedDataGenerator.js +145 -0
  289. package/dist/fetch/getPagedDataGenerator.js.map +1 -0
  290. package/dist/fetch/index.js +22 -0
  291. package/dist/fetch/index.js.map +1 -0
  292. package/dist/fetch/utils.d.ts +1 -1
  293. package/dist/fetch/utils.js +14 -0
  294. package/dist/fetch/utils.js.map +1 -0
  295. package/dist/files.js +33 -0
  296. package/dist/files.js.map +1 -0
  297. package/dist/fixes/annotations.d.ts +1 -1
  298. package/dist/fixes/annotations.js +95 -0
  299. package/dist/fixes/annotations.js.map +1 -0
  300. package/dist/fixes/index.js +87 -0
  301. package/dist/fixes/index.js.map +1 -0
  302. package/dist/index.d.ts +3 -3
  303. package/dist/index.js +60 -8923
  304. package/dist/index.js.map +1 -0
  305. package/dist/profile.d.ts +2 -2
  306. package/dist/profile.js +230 -0
  307. package/dist/profile.js.map +1 -0
  308. package/dist/rubricTypes.d.ts +14 -0
  309. package/dist/rubricTypes.d.ts.map +1 -1
  310. package/dist/rubricTypes.js +3 -0
  311. package/dist/rubricTypes.js.map +1 -0
  312. package/dist/rubrics.d.ts +1 -1
  313. package/dist/rubrics.js +46 -0
  314. package/dist/rubrics.js.map +1 -0
  315. package/dist/term/Term.d.ts +3 -3
  316. package/dist/term/Term.js +64 -0
  317. package/dist/term/Term.js.map +1 -0
  318. package/dist/term/__tests__/dateFromTermName.test.js +26 -0
  319. package/dist/term/__tests__/dateFromTermName.test.js.map +1 -0
  320. package/dist/term/__tests__/getTermsGenerator.test.js +19 -0
  321. package/dist/term/__tests__/getTermsGenerator.test.js.map +1 -0
  322. package/dist/term/dateFromTermName.js +17 -0
  323. package/dist/term/dateFromTermName.js.map +1 -0
  324. package/dist/term/getTermsGenerator.js +15 -0
  325. package/dist/term/getTermsGenerator.js.map +1 -0
  326. package/dist/term/index.js +20 -0
  327. package/dist/term/index.js.map +1 -0
  328. package/dist/toolbox.js +25 -0
  329. package/dist/toolbox.js.map +1 -0
  330. package/dist/types.d.ts +4 -3
  331. package/dist/types.d.ts.map +1 -1
  332. package/dist/types.js +3 -0
  333. package/dist/types.js.map +1 -0
  334. package/dist/users/getUserGenerator.d.ts +1 -1
  335. package/dist/users/getUserGenerator.js +21 -0
  336. package/dist/users/getUserGenerator.js.map +1 -0
  337. package/dist/users/index.js +18 -0
  338. package/dist/users/index.js.map +1 -0
  339. package/package.json +16 -10
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoAssignmentsWithDueDatesError = exports.MalformedSyllabusError = exports.NoOverviewModuleFoundError = void 0;
4
+ exports.getModuleUnlockStartDate = getModuleUnlockStartDate;
5
+ exports.sortAssignmentsByDueDate = sortAssignmentsByDueDate;
6
+ exports.getStartDateAssignments = getStartDateAssignments;
7
+ exports.getStartDateFromSyllabus = getStartDateFromSyllabus;
8
+ exports.getUpdatedStyleTermName = getUpdatedStyleTermName;
9
+ exports.getOldUgTermName = getOldUgTermName;
10
+ exports.getNewTermName = getNewTermName;
11
+ exports.updatedDateSyllabusHtml = updatedDateSyllabusHtml;
12
+ exports.syllabusHeaderName = syllabusHeaderName;
13
+ const temporal_polyfill_1 = require("temporal-polyfill");
14
+ const date_1 = require("../date");
15
+ const Assignment_1 = require("../content/assignments/Assignment");
16
+ const content_1 = require("../content");
17
+ const DEFAULT_LOCALE = "en-US";
18
+ function getModuleUnlockStartDate(modules) {
19
+ if (modules.length == 0)
20
+ throw new NoOverviewModuleFoundError();
21
+ const overviewModule = modules[0];
22
+ const unlockDateString = overviewModule.unlock_at;
23
+ if (!unlockDateString)
24
+ return null;
25
+ const oldDate = new Date(unlockDateString);
26
+ return (0, date_1.oldDateToPlainDate)(oldDate);
27
+ }
28
+ //This may be unnecessary, as the API call is now pulling by due_at date.
29
+ function sortAssignmentsByDueDate(assignments) {
30
+ return assignments.toSorted((a, b) => {
31
+ a = a instanceof Assignment_1.Assignment ? a.rawData : a;
32
+ b = b instanceof Assignment_1.Assignment ? b.rawData : b;
33
+ if (a.due_at && b.due_at) {
34
+ return (0, date_1.oldDateToPlainDate)(new Date(b.due_at)).until((0, date_1.oldDateToPlainDate)(new Date(a.due_at))).days;
35
+ }
36
+ if (a.due_at)
37
+ return -1;
38
+ if (b.due_at)
39
+ return 1;
40
+ return 0;
41
+ });
42
+ }
43
+ async function getStartDateAssignments(courseId) {
44
+ const assignmentGen = (0, content_1.assignmentDataGen)(courseId, {
45
+ queryParams: {
46
+ order_by: "due_at",
47
+ per_page: 2,
48
+ },
49
+ });
50
+ let assignmentDueAt;
51
+ for await (const assignment of assignmentGen) {
52
+ if (assignment.due_at) {
53
+ assignmentDueAt = assignment.due_at;
54
+ break;
55
+ }
56
+ }
57
+ if (!assignmentDueAt)
58
+ throw new NoAssignmentsWithDueDatesError();
59
+ //Set to monday of that week.
60
+ const firstAssignmentDue = new Date(assignmentDueAt);
61
+ const plainDateDue = (0, date_1.oldDateToPlainDate)(firstAssignmentDue);
62
+ const dayOfWeekOffset = 1 - plainDateDue.dayOfWeek;
63
+ return plainDateDue.add({ days: dayOfWeekOffset });
64
+ }
65
+ function getStartDateFromSyllabus(syllabusHtml, locale = DEFAULT_LOCALE) {
66
+ const syllabusBody = document.createElement("div");
67
+ syllabusBody.innerHTML = syllabusHtml;
68
+ const syllabusCalloutBox = syllabusBody.querySelector("div.cbt-callout-box");
69
+ if (!syllabusCalloutBox)
70
+ throw new MalformedSyllabusError("Can't find syllabus callout box");
71
+ const paras = Array.from(syllabusCalloutBox.querySelectorAll("p"));
72
+ const strongParas = paras.filter((para) => para.querySelector("strong"));
73
+ if (strongParas.length < 5)
74
+ throw new MalformedSyllabusError(`Missing syllabus headers\n${strongParas}`);
75
+ const termNameEl = strongParas[1];
76
+ const datesEl = strongParas[2];
77
+ let dateRange = (0, date_1.findDateRange)(datesEl.innerHTML, locale);
78
+ if (!dateRange)
79
+ throw new MalformedSyllabusError("Date range not found in syllabus");
80
+ const termName = termNameEl.textContent || "";
81
+ let yearToUse;
82
+ const yearMatchNew = termName.match(/\.(\d{2})$/);
83
+ if (yearMatchNew) {
84
+ yearToUse = 2000 + parseInt(yearMatchNew[1]);
85
+ }
86
+ else {
87
+ const yearMatchOld = termName.match(/DE-(\d{2})-/);
88
+ if (yearMatchOld) {
89
+ yearToUse = 2000 + parseInt(yearMatchOld[1]);
90
+ }
91
+ }
92
+ if (yearToUse) {
93
+ dateRange = {
94
+ start: temporal_polyfill_1.Temporal.PlainDate.from({
95
+ year: yearToUse,
96
+ month: dateRange.start.month,
97
+ day: dateRange.start.day,
98
+ }),
99
+ end: temporal_polyfill_1.Temporal.PlainDate.from({
100
+ year: yearToUse,
101
+ month: dateRange.end.month,
102
+ day: dateRange.end.day,
103
+ }),
104
+ };
105
+ }
106
+ return dateRange.start;
107
+ }
108
+ function getUpdatedStyleTermName(termStart, weekCount, locale = DEFAULT_LOCALE) {
109
+ const month = termStart.toLocaleString(locale, { month: "2-digit" });
110
+ const day = termStart.toLocaleString(locale, { day: "2-digit" });
111
+ const year = termStart.toLocaleString(locale, { year: "2-digit" });
112
+ return `DE${weekCount}W${month}.${day}.${year}`;
113
+ }
114
+ function getOldUgTermName(termStart) {
115
+ const year = termStart.toLocaleString(DEFAULT_LOCALE, { year: "2-digit" });
116
+ const month = termStart.toLocaleString(DEFAULT_LOCALE, { month: "short" });
117
+ return `DE-${year}-${month}`;
118
+ }
119
+ function getNewTermName(oldTermName, newTermStart, isGrad = undefined) {
120
+ const [termName, weekCount] = oldTermName.match(/DE(\d)W\d\d\.\d\d\.\d\d/) || [];
121
+ if (termName)
122
+ return getUpdatedStyleTermName(newTermStart, weekCount);
123
+ const termNameUg = oldTermName.match(/(DE(?:.HL|)-\d\d)-(\w+)\w{2}?/i);
124
+ const newWeekCount = isGrad ? 8 : 5;
125
+ if (termNameUg)
126
+ return getUpdatedStyleTermName(newTermStart, newWeekCount);
127
+ throw new MalformedSyllabusError(`Can't Recognize Term Name ${oldTermName}`);
128
+ }
129
+ function updatedDateSyllabusHtml(html, newStartDate, isGrad = undefined, locale = DEFAULT_LOCALE) {
130
+ const syllabusBody = document.createElement("div");
131
+ syllabusBody.innerHTML = html;
132
+ const syllabusCalloutBox = syllabusBody.querySelector("div.cbt-callout-box");
133
+ if (!syllabusCalloutBox)
134
+ throw new MalformedSyllabusError("Can't find syllabus callout box");
135
+ const paras = Array.from(syllabusCalloutBox.querySelectorAll("p"));
136
+ const strongParas = paras.filter((para) => para.querySelector("strong"));
137
+ if (strongParas.length < 5)
138
+ throw new MalformedSyllabusError(`Missing syllabus headers\n${strongParas}`);
139
+ const [_courseNameEl, termNameEl, datesEl, _instructorNameEl, _instructorContactInfoEl, _creditsEl] = strongParas;
140
+ const changedText = [];
141
+ const oldTermName = termNameEl.textContent || "";
142
+ const oldDates = datesEl.textContent || "";
143
+ const dateRange = (0, date_1.findDateRange)(datesEl.innerHTML, locale);
144
+ if (!dateRange)
145
+ throw new MalformedSyllabusError("Date range not found in syllabus");
146
+ const courseDuration = dateRange.start.until(dateRange.end);
147
+ const newEndDate = newStartDate.add(courseDuration);
148
+ const newTermName = getNewTermName(oldTermName, newStartDate, isGrad);
149
+ const dateRangeText = `${dateToSyllabusString(newStartDate)} - ${dateToSyllabusString(newEndDate)}`;
150
+ termNameEl.innerHTML = `<strong>${syllabusHeaderName(termNameEl)}:</strong><span> ${newTermName}</span>`;
151
+ datesEl.innerHTML = `<strong>${syllabusHeaderName(datesEl)}:</strong><span> ${dateRangeText}</span>`;
152
+ changedText.push(`${oldTermName} -> ${termNameEl.textContent}`);
153
+ changedText.push(`${oldDates} -> ${datesEl.textContent}`);
154
+ const output = {
155
+ html: syllabusBody.innerHTML.replaceAll(/<p>\s*(&nbsp;)?<\/p>/gi, ""),
156
+ changedText,
157
+ };
158
+ syllabusBody.remove();
159
+ return output;
160
+ }
161
+ function dateToSyllabusString(date) {
162
+ return `${date.toLocaleString(DEFAULT_LOCALE, { month: "long", day: "numeric" })}`;
163
+ }
164
+ function syllabusHeaderName(el) {
165
+ // eslint-disable-next-line prefer-const
166
+ let [_, head] = /([^:]*):/.exec(el.innerHTML) ?? [];
167
+ head = head?.replaceAll(/<[^>]*>/g, "");
168
+ return head;
169
+ }
170
+ class NoOverviewModuleFoundError extends Error {
171
+ name = "NoOverviewModuleFoundError";
172
+ }
173
+ exports.NoOverviewModuleFoundError = NoOverviewModuleFoundError;
174
+ class MalformedSyllabusError extends Error {
175
+ name = "MalformedSyllabusError";
176
+ }
177
+ exports.MalformedSyllabusError = MalformedSyllabusError;
178
+ class NoAssignmentsWithDueDatesError extends Error {
179
+ name = "NoAssignmentsWithDueDatesError";
180
+ }
181
+ exports.NoAssignmentsWithDueDatesError = NoAssignmentsWithDueDatesError;
182
+ //# sourceMappingURL=changeStartDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeStartDate.js","sourceRoot":"","sources":["../../src/course/changeStartDate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MalformedCourseCodeError = void 0;
4
+ exports.parseCourseCode = parseCourseCode;
5
+ exports.baseCourseCode = baseCourseCode;
6
+ exports.stringIsCourseCode = stringIsCourseCode;
7
+ const Course_1 = require("../course/Course");
8
+ function parseCourseCode(code) {
9
+ const match = Course_1.COURSE_CODE_REGEX.exec(code);
10
+ if (!match)
11
+ return null;
12
+ const prefix = match[1] || "";
13
+ const courseCode = match[2] || "";
14
+ if (prefix.length > 0) {
15
+ return `${prefix}_${courseCode}`;
16
+ }
17
+ return courseCode;
18
+ }
19
+ function baseCourseCode(code) {
20
+ const match = Course_1.COURSE_CODE_REGEX.exec(code);
21
+ if (!match)
22
+ return null;
23
+ return match[2];
24
+ }
25
+ function stringIsCourseCode(code) {
26
+ return Course_1.COURSE_CODE_REGEX.exec(code);
27
+ }
28
+ class MalformedCourseCodeError extends Error {
29
+ name = "MalformedCourseCodeError";
30
+ courseCode;
31
+ constructor(courseCode, message, options) {
32
+ if (!message)
33
+ message = `${courseCode} is not a valid course code`;
34
+ super(message, options);
35
+ this.courseCode = courseCode;
36
+ }
37
+ }
38
+ exports.MalformedCourseCodeError = MalformedCourseCodeError;
39
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/course/code.ts"],"names":[],"mappings":";;;AAEA,0CASC;AAED,wCAIC;AAED,gDAEC;AArBD,4CAAkD;AAElD,SAAgB,eAAe,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,0BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,0BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC3C,OAAO,0BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAa,wBAAyB,SAAQ,KAAK;IAC/C,IAAI,GAAG,0BAA0B,CAAC;IAClC,UAAU,CAAa;IACvB,YAAY,UAAsB,EAAE,OAAgB,EAAE,OAAqB;QACvE,IAAG,CAAC,OAAO;YAAE,OAAO,GAAG,GAAG,UAAU,6BAA6B,CAAC;QAClE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;CACJ;AARD,4DAQC"}
@@ -1,10 +1,10 @@
1
1
  import { ICanvasCallConfig } from "../canvasUtils";
2
2
  import { ILatePolicyData, IModuleData } from "../canvasDataDefs";
3
- import { ICourseData, ICourseSettings } from "@/types";
4
- import { Quiz } from "@/content/quizzes/Quiz";
5
- import { Page } from "@/content/pages/Page";
6
- import { Discussion } from "@/content/discussions/Discussion";
7
- import { Assignment } from "@/content/assignments/Assignment";
3
+ import { ICourseData, ICourseSettings } from "../types";
4
+ import { Quiz } from "../content/quizzes/Quiz";
5
+ import { Page } from "../content/pages/Page";
6
+ import { Discussion } from "../content/discussions/Discussion";
7
+ import { Assignment } from "../content/assignments/Assignment";
8
8
  export interface IIdHaver<IdType = number> {
9
9
  id: IdType;
10
10
  }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=courseTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"courseTypes.js","sourceRoot":"","sources":["../../src/course/courseTypes.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
- export default function getCourseIdFromUrl(url: string): number | null;
1
+ export declare function getCourseIdFromUrl(url: string): number | null;
2
+ export default getCourseIdFromUrl;
2
3
  //# sourceMappingURL=getCourseIdFromUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCourseIdFromUrl.d.ts","sourceRoot":"","sources":["../../src/course/getCourseIdFromUrl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,GAAG,EAAE,MAAM,iBAMrD"}
1
+ {"version":3,"file":"getCourseIdFromUrl.d.ts","sourceRoot":"","sources":["../../src/course/getCourseIdFromUrl.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,iBAM7C;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCourseIdFromUrl = getCourseIdFromUrl;
4
+ function getCourseIdFromUrl(url) {
5
+ const match = /courses\/(\d+)/.exec(url);
6
+ if (match) {
7
+ return parseInt(match[1]);
8
+ }
9
+ return null;
10
+ }
11
+ exports.default = getCourseIdFromUrl;
12
+ //# sourceMappingURL=getCourseIdFromUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCourseIdFromUrl.js","sourceRoot":"","sources":["../../src/course/getCourseIdFromUrl.ts"],"names":[],"mappings":";;AAAA,gDAMC;AAND,SAAgB,kBAAkB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,kBAAe,kBAAkB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { ICanvasCallConfig } from "@canvas/canvasUtils";
2
- import { GetCoursesFromAccountOptions } from "@canvas/course/courseTypes";
3
- import { Course } from "@canvas/course/Course";
1
+ import { ICanvasCallConfig } from "../canvasUtils";
2
+ import { GetCoursesFromAccountOptions } from "../course/courseTypes";
3
+ import { Course } from "../course/Course";
4
4
  export declare function getSections(courseId: number, config?: ICanvasCallConfig<GetCoursesFromAccountOptions>): Promise<Course[]>;
5
5
  //# sourceMappingURL=getSections.d.ts.map
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSections = getSections;
4
+ const canvasUtils_1 = require("../canvasUtils");
5
+ const Course_1 = require("../course/Course");
6
+ const blueprint_1 = require("../course/blueprint");
7
+ async function getSections(courseId, config) {
8
+ return (await (0, canvasUtils_1.renderAsyncGen)((0, blueprint_1.sectionDataGenerator)(courseId, config))).map(section => new Course_1.Course(section));
9
+ }
10
+ //# sourceMappingURL=getSections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSections.js","sourceRoot":"","sources":["../../src/course/getSections.ts"],"names":[],"mappings":";;AAMA,kCAEC;AARD,qDAAsE;AAEtE,kDAA6C;AAE7C,wDAA8D;AAEvD,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAwD;IACxG,OAAO,CAAC,MAAM,IAAA,4BAAc,EAAC,IAAA,gCAAoB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,eAAM,CAAC,OAAsB,CAAC,CAAC,CAAC;AAC7H,CAAC"}
@@ -1,3 +1,3 @@
1
- import { Course } from "@canvas/course/Course";
1
+ import { Course } from "../course/Course";
2
2
  export declare function getTermNameFromSections(sections: Course[]): Promise<string>;
3
3
  //# sourceMappingURL=getTermNameFromSections.d.ts.map
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTermNameFromSections = getTermNameFromSections;
4
+ async function getTermNameFromSections(sections) {
5
+ const [section] = sections;
6
+ if (!section)
7
+ throw new Error("Cannot determine term name by sections; there are no sections.");
8
+ const sectionTerm = await section.getTerm();
9
+ if (!sectionTerm)
10
+ throw new Error("Section does not have associated term: " + section.name);
11
+ return sectionTerm.name;
12
+ }
13
+ //# sourceMappingURL=getTermNameFromSections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTermNameFromSections.js","sourceRoot":"","sources":["../../src/course/getTermNameFromSections.ts"],"names":[],"mappings":";;AAEA,0DAMC;AANM,KAAK,UAAU,uBAAuB,CAAC,QAAkB;IAC5D,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IAC/F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./blueprint"), exports);
18
+ __exportStar(require("./toolbox"), exports);
19
+ __exportStar(require("./Course"), exports);
20
+ __exportStar(require("./courseTypes"), exports);
21
+ __exportStar(require("./getCourseIdFromUrl"), exports);
22
+ __exportStar(require("./getSections"), exports);
23
+ __exportStar(require("./getTermNameFromSections"), exports);
24
+ __exportStar(require("./IBlueprintCourse"), exports);
25
+ __exportStar(require("./modules"), exports);
26
+ __exportStar(require("./notABlueprintError"), exports);
27
+ __exportStar(require("./retireBlueprint"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/course/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,4CAAyB;AACzB,2CAAwB;AAExB,gDAA6B;AAC7B,uDAAoC;AACpC,gDAA6B;AAC7B,4DAAyC;AACzC,qDAAkC;AAClC,4CAAyB;AACzB,uDAAoC;AACpC,oDAAiC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockMigrationData = void 0;
4
+ /**
5
+ * From canvas api docs
6
+ */
7
+ exports.mockMigrationData = {
8
+ // the unique identifier for the migration
9
+ "id": 370663,
10
+ // the type of content migration
11
+ "migration_type": "course_copy_importer",
12
+ // the name of the content migration type
13
+ "migration_type_title": "Canvas Cartridge Importer",
14
+ // API url to the content migration's issues
15
+ "migration_issues_url": "https://example.com/api/v1/courses/1/content_migrations/1/migration_issues",
16
+ // attachment api object for the uploaded file may not be present for all
17
+ // migrations
18
+ "attachment": { "url": "https://example.com/api/v1/courses/1/content_migrations/1/download_archive" },
19
+ // The api endpoint for polling the current progress
20
+ "progress_url": "https://example.com/api/v1/progress/4",
21
+ // The user who started the migration
22
+ "user_id": 4,
23
+ // Current state of the content migration: pre_processing, pre_processed,
24
+ // running, waiting_for_select, completed, failed
25
+ "workflow_state": "running",
26
+ // timestamp
27
+ "started_at": "2012-06-01T00:00:00-06:00",
28
+ // timestamp
29
+ "finished_at": "2012-06-01T00:00:00-06:00",
30
+ // file uploading data, see {file:file_uploads.html File Upload Documentation}
31
+ // for file upload workflow This works a little differently in that all the file
32
+ // data is in the pre_attachment hash if there is no upload_url then there was
33
+ // an attachment pre-processing error, the error message will be in the message
34
+ // key This data will only be here after a create or update call
35
+ "pre_attachment": {
36
+ upload_url: '',
37
+ "message": "file exceeded quota",
38
+ "upload_params": {}
39
+ }
40
+ };
41
+ //# sourceMappingURL=mockMigrationData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockMigrationData.js","sourceRoot":"","sources":["../../../../src/course/migration/__mocks__/mockMigrationData.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,iBAAiB,GAAmB;IAC7C,0CAA0C;IAC1C,IAAI,EAAE,MAAM;IACZ,gCAAgC;IAChC,gBAAgB,EAAE,sBAAsB;IACxC,yCAAyC;IACzC,sBAAsB,EAAE,2BAA2B;IACnD,4CAA4C;IAC5C,sBAAsB,EAAE,4EAA4E;IACpG,yEAAyE;IACzE,aAAa;IACb,YAAY,EAAE,EAAC,KAAK,EAAE,4EAA4E,EAAC;IACnG,oDAAoD;IACpD,cAAc,EAAE,uCAAuC;IACvD,qCAAqC;IACrC,SAAS,EAAE,CAAC;IACZ,yEAAyE;IACzE,iDAAiD;IACjD,gBAAgB,EAAE,SAAS;IAC3B,YAAY;IACZ,YAAY,EAAE,2BAA2B;IACzC,YAAY;IACZ,aAAa,EAAE,2BAA2B;IAC1C,8EAA8E;IAC9E,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,gEAAgE;IAChE,gBAAgB,EAAE;QACd,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,qBAAqB;QAChC,eAAe,EAAE,EAAE;KACtB;CACJ,CAAA"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jest_fetch_mock_1 = __importDefault(require("jest-fetch-mock"));
7
+ const mockCourseData_1 = require("../../__mocks__/mockCourseData");
8
+ const index_1 = require("../index");
9
+ const canvasUtils_1 = require("../../../canvasUtils");
10
+ const mockMigrationData_1 = require("../../../course/migration/__mocks__/mockMigrationData");
11
+ const Course_1 = require("../../../course/Course");
12
+ const mockProgressData_1 = require("../../../course/__mocks__/mockProgressData");
13
+ beforeEach(() => {
14
+ jest.clearAllMocks();
15
+ });
16
+ describe('Getting migrations', () => {
17
+ it('gets migrations from course', async () => {
18
+ const id = 123;
19
+ const config = { fetchInit: {} };
20
+ jest_fetch_mock_1.default.once(JSON.stringify([mockMigrationData_1.mockMigrationData, { ...mockMigrationData_1.mockMigrationData, id: 321 }]));
21
+ const generator = (0, index_1.migrationsForCourseGen)(id, config);
22
+ let result = await generator.next();
23
+ let migration = result.done ? null : result.value;
24
+ expect(jest_fetch_mock_1.default).toHaveBeenCalledTimes(1);
25
+ expect(jest_fetch_mock_1.default).toHaveBeenCalledWith(`/api/v1/courses/${id}/content_migrations`, config.fetchInit);
26
+ expect(migration).toEqual(mockMigrationData_1.mockMigrationData);
27
+ result = await generator.next();
28
+ migration = result.done ? null : result.value;
29
+ expect(migration?.id).toEqual(321);
30
+ });
31
+ it('gets a single mock by id', async () => {
32
+ const courseId = 123;
33
+ const migrationId = 321;
34
+ const config = { fetchInit: {} };
35
+ jest_fetch_mock_1.default.once(JSON.stringify(mockMigrationData_1.mockMigrationData));
36
+ const migration = await (0, index_1.getMigration)(courseId, migrationId, config);
37
+ expect(jest_fetch_mock_1.default).toHaveBeenCalledTimes(1);
38
+ expect(jest_fetch_mock_1.default).toHaveBeenCalledWith(`/api/v1/courses/${courseId}/content_migrations/${migrationId}`, config.fetchInit);
39
+ expect(migration).toEqual(expect.objectContaining(mockMigrationData_1.mockMigrationData));
40
+ });
41
+ it('returns null if no migrations are found', async () => {
42
+ jest_fetch_mock_1.default.once('null');
43
+ const migration = await (0, index_1.getMigration)(1, 2, {});
44
+ expect(migration).toBeNull();
45
+ });
46
+ });
47
+ describe('Course migration', () => {
48
+ jest_fetch_mock_1.default.enableMocks();
49
+ afterEach(() => {
50
+ jest.clearAllMocks();
51
+ });
52
+ it('Yields values while still polling', async () => {
53
+ const workflowStates = [
54
+ ...[...(0, canvasUtils_1.range)(0, 2)].map(_ => 'queued'),
55
+ ...[...(0, canvasUtils_1.range)(0, 2)].map(_ => 'running'),
56
+ 'completed'
57
+ ];
58
+ jest_fetch_mock_1.default.mockResponseOnce(JSON.stringify({
59
+ ...mockMigrationData_1.mockMigrationData, workflow_state: 'queued'
60
+ }));
61
+ const migrationGenerator = (0, index_1.courseMigrationGenerator)(0, 1, 20);
62
+ for (const state of workflowStates) {
63
+ jest_fetch_mock_1.default.mockResponseOnce(JSON.stringify({
64
+ ...mockProgressData_1.mockProgressData, workflow_state: state
65
+ }));
66
+ }
67
+ const workflowIterator = workflowStates.values();
68
+ for await (const progress of migrationGenerator) {
69
+ expect(progress?.workflow_state).toBe(workflowIterator.next().value);
70
+ }
71
+ });
72
+ it('Throws an error on a failed migration', async () => {
73
+ const workflowStates = [
74
+ 'queued',
75
+ 'running',
76
+ 'failed'
77
+ ];
78
+ jest_fetch_mock_1.default.mockResponseOnce(JSON.stringify({
79
+ ...mockMigrationData_1.mockMigrationData, workflow_state: 'queued'
80
+ }));
81
+ for (const state of workflowStates) {
82
+ jest_fetch_mock_1.default.mockResponseOnce(JSON.stringify({
83
+ ...mockProgressData_1.mockProgressData, workflow_state: state
84
+ }));
85
+ }
86
+ const migrationGenerator = (0, index_1.courseMigrationGenerator)(0, 1, 0);
87
+ await expect(async () => {
88
+ for await (const progress of migrationGenerator) {
89
+ expect(progress?.id).toBe(mockProgressData_1.mockProgressData.id);
90
+ }
91
+ }).rejects.toThrow(/Migration Error/);
92
+ });
93
+ });
94
+ describe('Course Copying', () => {
95
+ test('Copy course wholesale', async () => {
96
+ jest_fetch_mock_1.default.enableMocks();
97
+ const fetch = global.fetch;
98
+ const courseName = 'Test course the testing course';
99
+ const courseCode = "TEST000";
100
+ const sourceCourseData = {
101
+ ...mockCourseData_1.mockCourseData,
102
+ name: `DEV_${courseCode}: ${courseName}`,
103
+ course_code: `DEV_${courseCode}`
104
+ };
105
+ const sourceCourse = new Course_1.Course(sourceCourseData);
106
+ const newCode = 'BP_TEST000';
107
+ const newName = `BP_TEST000: ${courseName}`;
108
+ const workflowStates = [
109
+ ...[...(0, canvasUtils_1.range)(0, 2)].map(_ => 'queued'),
110
+ ...[...(0, canvasUtils_1.range)(0, 2)].map(_ => 'running'),
111
+ 'completed',
112
+ ];
113
+ const workflowIterator = workflowStates.values();
114
+ jest_fetch_mock_1.default.mockClear();
115
+ jest_fetch_mock_1.default.mockResponses(...[
116
+ sourceCourseData,
117
+ { ...mockMigrationData_1.mockMigrationData, workflow_state: 'queued' },
118
+ ...workflowStates.map((state, i) => ({
119
+ ...mockProgressData_1.mockProgressData,
120
+ workflow_state: state,
121
+ message: i.toString(),
122
+ })),
123
+ { ...sourceCourse.rawData, name: newName, course_code: newCode },
124
+ ].map(value => JSON.stringify(value)));
125
+ const migrationGenerator = (0, index_1.copyToNewCourseGenerator)(sourceCourse, newCode, 20);
126
+ async function testCourseMigration() {
127
+ let result;
128
+ while (true) {
129
+ result = await migrationGenerator.next();
130
+ const { value } = workflowIterator.next();
131
+ if (result.done)
132
+ return result.value;
133
+ expect(result.value.workflow_state).toBe(value);
134
+ }
135
+ }
136
+ const course = await testCourseMigration();
137
+ expect(course.name).toBe(newName);
138
+ expect(course.course_code).toBe(newCode);
139
+ });
140
+ });
141
+ //# sourceMappingURL=migration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.test.js","sourceRoot":"","sources":["../../../../src/course/migration/__tests__/migration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const migrationCache_1 = require("../migrationCache");
4
+ const mockMigrationData_1 = require("../../../course/migration/__mocks__/mockMigrationData");
5
+ const canvasUtils_1 = require("../../../canvasUtils");
6
+ describe('Saving and loading migration states', () => {
7
+ beforeEach(() => {
8
+ localStorage.clear();
9
+ });
10
+ afterEach(() => {
11
+ localStorage.clear();
12
+ });
13
+ it('has base functions that save and load migration data', () => {
14
+ const migrations = (0, migrationCache_1.loadCachedCourseMigrations)(0);
15
+ expect(migrations).toHaveLength(0);
16
+ const cachedKeys = {};
17
+ for (const i of [...(0, canvasUtils_1.range)(0, 5)]) {
18
+ const key = i * 2;
19
+ const migrationsToCache = [...(0, canvasUtils_1.range)(1, i)].map(_ => mockMigrationData_1.mockMigrationData);
20
+ (0, migrationCache_1.cacheCourseMigrations)(i * 2, migrationsToCache);
21
+ expect(Object.entries((0, migrationCache_1.loadCachedMigrations)())).toHaveLength(i + 1);
22
+ cachedKeys[key] = i;
23
+ //Make sure all previous cached migrations have the same value going on.
24
+ for (const [key, value] of Object.entries(cachedKeys)) {
25
+ expect((0, migrationCache_1.loadCachedCourseMigrations)(key)).toHaveLength(value);
26
+ }
27
+ }
28
+ });
29
+ it('adds new migrations to cached migration list', () => {
30
+ (0, migrationCache_1.cacheCourseMigrations)(1, [{ ...mockMigrationData_1.mockMigrationData, id: 1 }]);
31
+ expect((0, migrationCache_1.loadCachedCourseMigrations)(1)).toHaveLength(1);
32
+ (0, migrationCache_1.cacheCourseMigrations)(1, [{ ...mockMigrationData_1.mockMigrationData, id: 2 }]);
33
+ expect((0, migrationCache_1.loadCachedCourseMigrations)(1)).toHaveLength(2);
34
+ });
35
+ it('adds new migrations to cached migration list', () => {
36
+ (0, migrationCache_1.cacheCourseMigrations)(1, [{ ...mockMigrationData_1.mockMigrationData, id: 1, workflow_state: 'queued' }]);
37
+ expect((0, migrationCache_1.loadCachedCourseMigrations)(1)).toHaveLength(1);
38
+ (0, migrationCache_1.cacheCourseMigrations)(1, [{ ...mockMigrationData_1.mockMigrationData, id: 1, workflow_state: 'completed', cleanedUp: false }]);
39
+ expect((0, migrationCache_1.loadCachedCourseMigrations)(1)).toHaveLength(1);
40
+ });
41
+ });
42
+ //# sourceMappingURL=migrationCache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationCache.test.js","sourceRoot":"","sources":["../../../../src/course/migration/__tests__/migrationCache.test.ts"],"names":[],"mappings":";;AAAA,sDAA0G;AAC1G,sFAAiF;AACjF,sDAA2C;AAE3C,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACjD,UAAU,CAAC,GAAG,EAAE;QACZ,YAAY,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC5D,MAAM,UAAU,GAAG,IAAA,2CAA0B,EAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,mBAAK,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAA,mBAAK,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,EAAE,CAAC,qCAAiB,CAAC,CAAA;YACtE,IAAA,sCAAqB,EAAC,CAAC,GAAG,CAAC,EAAG,iBAAiB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAA,qCAAoB,GAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAClE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,wEAAwE;YACxE,KAAI,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,IAAA,2CAA0B,EAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,IAAA,sCAAqB,EAAC,CAAC,EAAE,CAAC,EAAC,GAAG,qCAAiB,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QACzD,MAAM,CAAC,IAAA,2CAA0B,EAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtD,IAAA,sCAAqB,EAAC,CAAC,EAAE,CAAC,EAAC,GAAG,qCAAiB,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QACzD,MAAM,CAAC,IAAA,2CAA0B,EAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAA;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,IAAA,sCAAqB,EAAC,CAAC,EAAE,CAAC,EAAC,GAAG,qCAAiB,EAAE,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;QACnF,MAAM,CAAC,IAAA,2CAA0B,EAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtD,IAAA,sCAAqB,EAAC,CAAC,EAAE,CAAC,EAAC,GAAG,qCAAiB,EAAE,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;QACzG,MAAM,CAAC,IAAA,2CAA0B,EAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAA;AAGP,CAAC,CAAC,CAAA"}