@ueu/ueu-canvas 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Account.d.ts +22 -0
- package/dist/Account.d.ts.map +1 -0
- package/dist/NotImplementedException.d.ts +4 -0
- package/dist/NotImplementedException.d.ts.map +1 -0
- package/dist/__mocks__/Account.d.ts +17 -0
- package/dist/__mocks__/Account.d.ts.map +1 -0
- package/dist/__mocks__/index.d.ts +9 -0
- package/dist/__mocks__/index.d.ts.map +1 -0
- package/dist/__mocks__/mockAccountData.d.ts +6 -0
- package/dist/__mocks__/mockAccountData.d.ts.map +1 -0
- package/dist/__mocks__/mockEnrollment.d.ts +3 -0
- package/dist/__mocks__/mockEnrollment.d.ts.map +1 -0
- package/dist/__mocks__/mockRubricData.d.ts +20 -0
- package/dist/__mocks__/mockRubricData.d.ts.map +1 -0
- package/dist/__mocks__/mockTabData.d.ts +4 -0
- package/dist/__mocks__/mockTabData.d.ts.map +1 -0
- package/dist/__mocks__/mockTermData.d.ts +3 -0
- package/dist/__mocks__/mockTermData.d.ts.map +1 -0
- package/dist/__mocks__/mockUserData.d.ts +3 -0
- package/dist/__mocks__/mockUserData.d.ts.map +1 -0
- package/dist/__mocks__/utils.d.ts +3 -0
- package/dist/__mocks__/utils.d.ts.map +1 -0
- package/dist/__tests__/canvasUtils.test.d.ts +2 -0
- package/dist/__tests__/canvasUtils.test.d.ts.map +1 -0
- package/dist/__tests__/fetch.test.d.ts +2 -0
- package/dist/__tests__/fetch.test.d.ts.map +1 -0
- package/dist/__tests__/profile.test.d.ts +2 -0
- package/dist/__tests__/profile.test.d.ts.map +1 -0
- package/dist/__tests__/rubrics.test.d.ts +2 -0
- package/dist/__tests__/rubrics.test.d.ts.map +1 -0
- package/dist/baseCanvasObject.d.ts +41 -0
- package/dist/baseCanvasObject.d.ts.map +1 -0
- package/dist/canvasDataDefs.d.ts +97 -0
- package/dist/canvasDataDefs.d.ts.map +1 -0
- package/dist/canvasUtils.d.ts +65 -0
- package/dist/canvasUtils.d.ts.map +1 -0
- package/dist/consts.d.ts +3 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/content/BaseContentItem.d.ts +32 -0
- package/dist/content/BaseContentItem.d.ts.map +1 -0
- package/dist/content/ContentKind.d.ts +28 -0
- package/dist/content/ContentKind.d.ts.map +1 -0
- package/dist/content/__mocks__/determineContent.d.ts +65 -0
- package/dist/content/__mocks__/determineContent.d.ts.map +1 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts +4 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts.map +1 -0
- package/dist/content/__mocks__/mockContentData.d.ts +8 -0
- package/dist/content/__mocks__/mockContentData.d.ts.map +1 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts +3 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/__testingUtils__/utils.d.ts +6 -0
- package/dist/content/__testingUtils__/utils.d.ts.map +1 -0
- package/dist/content/__tests__/determineContent.test.d.ts +2 -0
- package/dist/content/__tests__/determineContent.test.d.ts.map +1 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts +2 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts.map +1 -0
- package/dist/content/assignments/Assignment.d.ts +15 -0
- package/dist/content/assignments/Assignment.d.ts.map +1 -0
- package/dist/content/assignments/AssignmentKind.d.ts +14 -0
- package/dist/content/assignments/AssignmentKind.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts.map +1 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts +3 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts.map +1 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts +5 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts.map +1 -0
- package/dist/content/assignments/index.d.ts +11 -0
- package/dist/content/assignments/index.d.ts.map +1 -0
- package/dist/content/assignments/legacy.d.ts +4 -0
- package/dist/content/assignments/legacy.d.ts.map +1 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts +7 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts.map +1 -0
- package/dist/content/determineContent.d.ts +19 -0
- package/dist/content/determineContent.d.ts.map +1 -0
- package/dist/content/discussions/Discussion.d.ts +13 -0
- package/dist/content/discussions/Discussion.d.ts.map +1 -0
- package/dist/content/discussions/DiscussionKind.d.ts +14 -0
- package/dist/content/discussions/DiscussionKind.d.ts.map +1 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts +2 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts.map +1 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts +32 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts.map +1 -0
- package/{src/content/discussions/index.ts → dist/content/discussions/index.d.ts} +1 -0
- package/dist/content/discussions/index.d.ts.map +1 -0
- package/dist/content/getContentFuncs.d.ts +3 -0
- package/dist/content/getContentFuncs.d.ts.map +1 -0
- package/{src/content/index.ts → dist/content/index.d.ts} +3 -3
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/openThisContentInTarget.d.ts +4 -0
- package/dist/content/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/pages/Page.d.ts +15 -0
- package/dist/content/pages/Page.d.ts.map +1 -0
- package/dist/content/pages/PageKind.d.ts +15 -0
- package/dist/content/pages/PageKind.d.ts.map +1 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts +2 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts.map +1 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts +2 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/index.d.ts +14 -0
- package/dist/content/pages/index.d.ts.map +1 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts +7 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/types.d.ts +11 -0
- package/dist/content/pages/types.d.ts.map +1 -0
- package/dist/content/quizzes/Quiz.d.ts +9 -0
- package/dist/content/quizzes/Quiz.d.ts.map +1 -0
- package/dist/content/quizzes/QuizKind.d.ts +13 -0
- package/dist/content/quizzes/QuizKind.d.ts.map +1 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts +2 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts.map +1 -0
- package/dist/content/quizzes/index.d.ts +2 -0
- package/dist/content/quizzes/index.d.ts.map +1 -0
- package/dist/content/quizzes/types.d.ts +45 -0
- package/dist/content/quizzes/types.d.ts.map +1 -0
- package/dist/content/types.d.ts +229 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/course/Course.d.ts +87 -0
- package/dist/course/Course.d.ts.map +1 -0
- package/dist/course/IBlueprintCourse.d.ts +7 -0
- package/dist/course/IBlueprintCourse.d.ts.map +1 -0
- package/dist/course/__mocks__/blueprint.d.ts +14 -0
- package/dist/course/__mocks__/blueprint.d.ts.map +1 -0
- package/dist/course/__mocks__/mockCourseData.d.ts +3 -0
- package/dist/course/__mocks__/mockCourseData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts +4 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts.map +1 -0
- package/dist/course/__mocks__/mockModuleData.d.ts +7 -0
- package/dist/course/__mocks__/mockModuleData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockProgressData.d.ts +3 -0
- package/dist/course/__mocks__/mockProgressData.d.ts.map +1 -0
- package/dist/course/__tests__/Course.test.d.ts +2 -0
- package/dist/course/__tests__/Course.test.d.ts.map +1 -0
- package/dist/course/__tests__/blueprint.test.d.ts +2 -0
- package/dist/course/__tests__/blueprint.test.d.ts.map +1 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts +2 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts.map +1 -0
- package/dist/course/__tests__/index.test.d.ts +2 -0
- package/dist/course/__tests__/index.test.d.ts.map +1 -0
- package/dist/course/blueprint.d.ts +21 -0
- package/dist/course/blueprint.d.ts.map +1 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts +4 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts.map +1 -0
- package/dist/course/changeStartDate.d.ts +25 -0
- package/dist/course/changeStartDate.d.ts.map +1 -0
- package/dist/course/code.d.ts +9 -0
- package/dist/course/code.d.ts.map +1 -0
- package/dist/course/courseTypes.d.ts +102 -0
- package/dist/course/courseTypes.d.ts.map +1 -0
- package/dist/course/getCourseIdFromUrl.d.ts +3 -0
- package/dist/course/getCourseIdFromUrl.d.ts.map +1 -0
- package/dist/course/getSections.d.ts +5 -0
- package/dist/course/getSections.d.ts.map +1 -0
- package/dist/course/getTermNameFromSections.d.ts +3 -0
- package/dist/course/getTermNameFromSections.d.ts.map +1 -0
- package/dist/course/index.d.ts +12 -0
- package/dist/course/index.d.ts.map +1 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts +6 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migration.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migration.test.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts.map +1 -0
- package/dist/course/migration/index.d.ts +47 -0
- package/dist/course/migration/index.d.ts.map +1 -0
- package/dist/course/migration/migrationCache.d.ts +12 -0
- package/dist/course/migration/migrationCache.d.ts.map +1 -0
- package/dist/course/modules.d.ts +35 -0
- package/dist/course/modules.d.ts.map +1 -0
- package/dist/course/notABlueprintError.d.ts +4 -0
- package/dist/course/notABlueprintError.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.d.ts +4 -0
- package/dist/course/references/getReferencesForText.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.test.d.ts +2 -0
- package/dist/course/references/getReferencesForText.test.d.ts.map +1 -0
- package/dist/course/references/getReferencesTemplate.d.ts +13 -0
- package/dist/course/references/getReferencesTemplate.d.ts.map +1 -0
- package/dist/course/references/mockCiteAsResponse.d.ts +127 -0
- package/dist/course/references/mockCiteAsResponse.d.ts.map +1 -0
- package/dist/course/retireBlueprint.d.ts +4 -0
- package/dist/course/retireBlueprint.d.ts.map +1 -0
- package/dist/course/toolbox.d.ts +18 -0
- package/dist/course/toolbox.d.ts.map +1 -0
- package/dist/date.d.ts +18 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/enrollments/EnrollmentTypes.d.ts +60 -0
- package/dist/enrollments/EnrollmentTypes.d.ts.map +1 -0
- package/dist/enrollments/enrollmentRole.d.ts +5 -0
- package/dist/enrollments/enrollmentRole.d.ts.map +1 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts +40 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts.map +1 -0
- package/dist/enrollments/index.d.ts +4 -0
- package/dist/enrollments/index.d.ts.map +1 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts +4 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts.map +1 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts +4 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts.map +1 -0
- package/dist/fetch/__mocks__/index.d.ts +4 -0
- package/dist/fetch/__mocks__/index.d.ts.map +1 -0
- package/dist/fetch/apiGetConfig.d.ts +4 -0
- package/dist/fetch/apiGetConfig.d.ts.map +1 -0
- package/dist/fetch/apiWriteConfig.d.ts +4 -0
- package/dist/fetch/apiWriteConfig.d.ts.map +1 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts +6 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts.map +1 -0
- package/dist/fetch/fetchJson.d.ts +3 -0
- package/dist/fetch/fetchJson.d.ts.map +1 -0
- package/dist/fetch/getPagedDataGenerator.d.ts +63 -0
- package/dist/fetch/getPagedDataGenerator.d.ts.map +1 -0
- package/{src/fetch/index.ts → dist/fetch/index.d.ts} +1 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/utils.d.ts +4 -0
- package/dist/fetch/utils.d.ts.map +1 -0
- package/dist/files.d.ts +29 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/fixes/annotations.d.ts +15 -0
- package/dist/fixes/annotations.d.ts.map +1 -0
- package/dist/fixes/index.d.ts +36 -0
- package/dist/fixes/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +5 -10
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8966 -0
- package/dist/profile.d.ts +24 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/rubricTypes.d.ts +71 -0
- package/dist/rubricTypes.d.ts.map +1 -0
- package/dist/rubrics.d.ts +9 -0
- package/dist/rubrics.d.ts.map +1 -0
- package/dist/term/Term.d.ts +21 -0
- package/dist/term/Term.d.ts.map +1 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts +2 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts.map +1 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts +2 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts.map +1 -0
- package/dist/term/dateFromTermName.d.ts +4 -0
- package/dist/term/dateFromTermName.d.ts.map +1 -0
- package/dist/term/getTermsGenerator.d.ts +7 -0
- package/dist/term/getTermsGenerator.d.ts.map +1 -0
- package/dist/term/index.d.ts +4 -0
- package/dist/term/index.d.ts.map +1 -0
- package/dist/toolbox.d.ts +5 -0
- package/dist/toolbox.d.ts.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/users/getUserGenerator.d.ts +19 -0
- package/dist/users/getUserGenerator.d.ts.map +1 -0
- package/dist/users/index.d.ts +2 -0
- package/dist/users/index.d.ts.map +1 -0
- package/package.json +51 -45
- package/LICENSE +0 -21
- package/html-loader.js +0 -7
- package/jest.config.js +0 -20
- package/src/Account.ts +0 -69
- package/src/NotImplementedException.ts +0 -3
- package/src/__mocks__/Account.ts +0 -55
- package/src/__mocks__/index.ts +0 -8
- package/src/__mocks__/mockAccountData.ts +0 -43
- package/src/__mocks__/mockEnrollment.ts +0 -22
- package/src/__mocks__/mockRubricData.ts +0 -71
- package/src/__mocks__/mockTabData.ts +0 -13
- package/src/__mocks__/mockTermData.ts +0 -7
- package/src/__mocks__/mockUserData.ts +0 -14
- package/src/__mocks__/utils.ts +0 -9
- package/src/__tests__/canvasUtils.test.ts +0 -527
- package/src/__tests__/fetch.test.ts +0 -310
- package/src/__tests__/profile.test.ts +0 -19
- package/src/__tests__/rubrics.test.ts +0 -131
- package/src/baseCanvasObject.ts +0 -139
- package/src/canvasDataDefs.ts +0 -124
- package/src/canvasUtils.ts +0 -420
- package/src/consts.ts +0 -2
- package/src/content/BaseContentItem.ts +0 -219
- package/src/content/ContentKind.ts +0 -85
- package/src/content/__mocks__/determineContent.ts +0 -27
- package/src/content/__mocks__/mockAssignmentSubmission.ts +0 -37
- package/src/content/__mocks__/mockContentData.ts +0 -98
- package/src/content/__mocks__/openThisContentInTarget.ts +0 -2
- package/src/content/__testingUtils__/utils.ts +0 -47
- package/src/content/__tests__/determineContent.test.ts +0 -101
- package/src/content/__tests__/getContentFuncs.test.ts +0 -78
- package/src/content/assignments/Assignment.ts +0 -69
- package/src/content/assignments/AssignmentKind.ts +0 -29
- package/src/content/assignments/__tests__/AssignmentKind.test.ts +0 -31
- package/src/content/assignments/__tests__/assignments.test.ts +0 -72
- package/src/content/assignments/deleteAssignmentGroup.ts +0 -15
- package/src/content/assignments/genAssignmentGroups.ts +0 -15
- package/src/content/assignments/index.ts +0 -31
- package/src/content/assignments/legacy.ts +0 -11
- package/src/content/assignments/updateAssignmentDueDates.ts +0 -25
- package/src/content/determineContent.ts +0 -72
- package/src/content/discussions/Discussion.ts +0 -32
- package/src/content/discussions/DiscussionKind.ts +0 -30
- package/src/content/discussions/__tests__/DiscussionKind.test.ts +0 -31
- package/src/content/discussions/genEquivalentDiscussionData.ts +0 -97
- package/src/content/getContentFuncs.ts +0 -30
- package/src/content/openThisContentInTarget.ts +0 -38
- package/src/content/pages/Page.ts +0 -35
- package/src/content/pages/PageKind.ts +0 -39
- package/src/content/pages/__tests__/PageKind.test.ts +0 -86
- package/src/content/pages/__tests__/learningMaterialsForModule.ts +0 -57
- package/src/content/pages/index.ts +0 -12
- package/src/content/pages/learningMaterialsForModule.ts +0 -16
- package/src/content/pages/types.ts +0 -11
- package/src/content/quizzes/Quiz.ts +0 -25
- package/src/content/quizzes/QuizKind.ts +0 -23
- package/src/content/quizzes/__tests__/QuizKind.test.ts +0 -30
- package/src/content/quizzes/index.ts +0 -3
- package/src/content/quizzes/types.ts +0 -101
- package/src/content/types.ts +0 -302
- package/src/course/Course.ts +0 -538
- package/src/course/IBlueprintCourse.ts +0 -8
- package/src/course/__mocks__/blueprint.ts +0 -31
- package/src/course/__mocks__/mockCourseData.ts +0 -49
- package/src/course/__mocks__/mockLatePolicy.ts +0 -14
- package/src/course/__mocks__/mockModuleData.ts +0 -60
- package/src/course/__mocks__/mockProgressData.ts +0 -28
- package/src/course/__mocks__/syllabus.gallant.html +0 -302
- package/src/course/__mocks__/syllabus.goofus.html +0 -288
- package/src/course/__mocks__/syllabus.grad.html +0 -282
- package/src/course/__tests__/Course.test.ts +0 -91
- package/src/course/__tests__/blueprint.test.ts +0 -292
- package/src/course/__tests__/changeStartDate.test.ts +0 -180
- package/src/course/__tests__/index.test.ts +0 -104
- package/src/course/blueprint.ts +0 -116
- package/src/course/cachedGetAssociatedCoursesFunc.ts +0 -13
- package/src/course/changeStartDate.ts +0 -139
- package/src/course/code.ts +0 -32
- package/src/course/courseTypes.ts +0 -161
- package/src/course/getCourseIdFromUrl.ts +0 -7
- package/src/course/getSections.ts +0 -9
- package/src/course/getTermNameFromSections.ts +0 -9
- package/src/course/index.ts +0 -12
- package/src/course/migration/__mocks__/mockMigrationData.ts +0 -39
- package/src/course/migration/__tests__/migration.test.ts +0 -173
- package/src/course/migration/__tests__/migrationCache.test.ts +0 -45
- package/src/course/migration/index.ts +0 -134
- package/src/course/migration/migrationCache.ts +0 -56
- package/src/course/modules.ts +0 -113
- package/src/course/notABlueprintError.ts +0 -3
- package/src/course/references/getReferencesForText.test.ts +0 -18
- package/src/course/references/getReferencesForText.ts +0 -12
- package/src/course/references/getReferencesTemplate.ts +0 -28
- package/src/course/references/mockCiteAsResponse.ts +0 -320
- package/src/course/retireBlueprint.ts +0 -21
- package/src/course/toolbox.ts +0 -107
- package/src/date.ts +0 -119
- package/src/enrollments/EnrollmentTypes.ts +0 -76
- package/src/enrollments/enrollmentRole.ts +0 -6
- package/src/enrollments/getEnrollmentGenerator.ts +0 -79
- package/src/enrollments/index.ts +0 -3
- package/src/fetch/__mocks__/fetchJson.ts +0 -1
- package/src/fetch/__mocks__/getPagedDataGenerator.ts +0 -8
- package/src/fetch/__mocks__/index.ts +0 -6
- package/src/fetch/apiGetConfig.ts +0 -10
- package/src/fetch/apiWriteConfig.ts +0 -13
- package/src/fetch/canvasDataFetchGenFunc.ts +0 -20
- package/src/fetch/fetchJson.ts +0 -22
- package/src/fetch/getPagedDataGenerator.ts +0 -157
- package/src/fetch/utils.ts +0 -16
- package/src/files.ts +0 -60
- package/src/fixes/annotations.ts +0 -105
- package/src/fixes/index.ts +0 -81
- package/src/profile.ts +0 -253
- package/src/rubricTypes.ts +0 -82
- package/src/rubrics.ts +0 -48
- package/src/term/Term.ts +0 -77
- package/src/term/__tests__/dateFromTermName.test.ts +0 -22
- package/src/term/__tests__/getTermsGenerator.test.ts +0 -24
- package/src/term/dateFromTermName.ts +0 -17
- package/src/term/getTermsGenerator.ts +0 -21
- package/src/term/index.ts +0 -3
- package/src/toolbox.ts +0 -19
- package/src/types.ts +0 -134
- package/src/users/getUserGenerator.ts +0 -39
- package/src/users/index.ts +0 -1
- package/tsconfig.json +0 -46
- package/webpack.config.js +0 -122
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
2
|
-
import {HasUser} from "@/canvasDataDefs";
|
|
3
|
-
import {EnrollmentRole} from "@/enrollments/enrollmentRole";
|
|
4
|
-
import {EnrollmentData, EnrollmentState, EnrollmentType, EnrollmentUserState} from "@/enrollments/EnrollmentTypes";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type EnrollmentInclude = 'avatar_url' |
|
|
8
|
-
'group_ids' |
|
|
9
|
-
'locked' |
|
|
10
|
-
'observed_users' |
|
|
11
|
-
'can_be_removed' |
|
|
12
|
-
'uuid' |
|
|
13
|
-
'current_points'
|
|
14
|
-
|
|
15
|
-
type EnrollmentGenQueryConfig = {
|
|
16
|
-
type?: EnrollmentType[],
|
|
17
|
-
role?: EnrollmentRole[],
|
|
18
|
-
include?: EnrollmentInclude[],
|
|
19
|
-
state?: EnrollmentState[],
|
|
20
|
-
grading_period_id?: number,
|
|
21
|
-
sis_account_id?: number | number[],
|
|
22
|
-
|
|
23
|
-
} & ({
|
|
24
|
-
sis_user_id: number | number[],
|
|
25
|
-
created_for_sis_user_id: true,
|
|
26
|
-
} | {
|
|
27
|
-
sis_user_id?: never,
|
|
28
|
-
created_for_sis_user_id?: false,
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export type GetEnrollmentSectionGenConfig = {
|
|
33
|
-
sectionId: number;
|
|
34
|
-
queryParams: EnrollmentGenQueryConfig & {
|
|
35
|
-
user_id?: string
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
export type GetEnrollmentUserGenConfig = {
|
|
41
|
-
userId: number;
|
|
42
|
-
queryParams: EnrollmentGenQueryConfig & {
|
|
43
|
-
state?: EnrollmentUserState;
|
|
44
|
-
enrollment_term_id?: number;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export type GetEnrollmentCourseGenConfig = {
|
|
49
|
-
courseId: number;
|
|
50
|
-
queryParams: EnrollmentGenQueryConfig & {
|
|
51
|
-
user_id?: string,
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
export type GetEnrollmentGenConfig = GetEnrollmentUserGenConfig | GetEnrollmentCourseGenConfig | GetEnrollmentSectionGenConfig;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
export const getEnrollmentGenerator = ( config: GetEnrollmentGenConfig) => {
|
|
60
|
-
let url: string;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const { queryParams, ...internalParams } = config;
|
|
64
|
-
if ('userId' in config) {
|
|
65
|
-
url = `/api/v1/users/${config.userId}/enrollments`;
|
|
66
|
-
} else if ('courseId' in config) {
|
|
67
|
-
url = `/api/v1/courses/${config.courseId}/enrollments`;
|
|
68
|
-
} else if ('sectionId' in config) {
|
|
69
|
-
url = `/api/v1/sections/${config.sectionId}/enrollments`;
|
|
70
|
-
} else {
|
|
71
|
-
throw new Error('config type not recognized')
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return getPagedDataGenerator<EnrollmentData>(url, {
|
|
77
|
-
queryParams,
|
|
78
|
-
});
|
|
79
|
-
}
|
package/src/enrollments/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const fetchJson = jest.fn((async () => ({ id: 0 })));
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import requireActual = jest.requireActual;
|
|
2
|
-
import {mockAsyncGen} from "@/__mocks__/utils";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const actual = requireActual('../getPagedDataGenerator');
|
|
6
|
-
export const getPagedDataGenerator = jest.fn(() => mockAsyncGen([]));
|
|
7
|
-
export const getPagedData = jest.fn();
|
|
8
|
-
export const mergePagedDataGenerators = jest.fn(actual.mergedPagedDataGenerators)
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import {ICanvasCallConfig, IQueryParams} from "@canvas/canvasUtils";
|
|
2
|
-
import {overrideConfig} from "@canvas/fetch/utils";
|
|
3
|
-
|
|
4
|
-
export function apiGetConfig(queryParams: IQueryParams, baseConfig?: ICanvasCallConfig) {
|
|
5
|
-
return overrideConfig({
|
|
6
|
-
queryParams,
|
|
7
|
-
}, baseConfig);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export default apiGetConfig;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {formDataify, ICanvasCallConfig} from "@canvas/canvasUtils";
|
|
2
|
-
import {overrideConfig} from "@canvas/fetch/utils";
|
|
3
|
-
|
|
4
|
-
export function apiWriteConfig(method: 'POST' | 'PUT', data: Record<string, any>, baseConfig?: ICanvasCallConfig) {
|
|
5
|
-
const body = formDataify(data);
|
|
6
|
-
return overrideConfig({
|
|
7
|
-
fetchInit: {
|
|
8
|
-
method,
|
|
9
|
-
body,
|
|
10
|
-
}
|
|
11
|
-
}, baseConfig);
|
|
12
|
-
}
|
|
13
|
-
export default apiWriteConfig;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {ICanvasCallConfig} from "@/canvasUtils";
|
|
2
|
-
import {CanvasData} from "@/canvasDataDefs";
|
|
3
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
4
|
-
import {overrideConfig} from "@canvas/fetch/utils";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
type UrlFuncType<UrlParams extends Record<string, any>> = (args: UrlParams, config?: ICanvasCallConfig) => string
|
|
8
|
-
|
|
9
|
-
export function canvasDataFetchGenFunc<
|
|
10
|
-
Content extends CanvasData,
|
|
11
|
-
UrlParams extends Record<string, any>
|
|
12
|
-
>(urlFunc: UrlFuncType<UrlParams>, defaultConfig?: ICanvasCallConfig) {
|
|
13
|
-
|
|
14
|
-
return function (args: UrlParams, config?: ICanvasCallConfig) {
|
|
15
|
-
config = overrideConfig(defaultConfig, config);
|
|
16
|
-
const url = urlFunc(args, config);
|
|
17
|
-
return getPagedDataGenerator<Content>(url, config);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
package/src/fetch/fetchJson.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {ICanvasCallConfig} from "@/canvasUtils";
|
|
2
|
-
|
|
3
|
-
export async function fetchJson<T = Record<string, any>>(
|
|
4
|
-
url: string, config: ICanvasCallConfig | null = null
|
|
5
|
-
): Promise<T> {
|
|
6
|
-
const match = url.search(/^(\/|\w+:\/\/)/);
|
|
7
|
-
if (match < 0) throw new Error("url does not start with / or http")
|
|
8
|
-
if (config?.queryParams) {
|
|
9
|
-
url += '?' + new URLSearchParams(config.queryParams);
|
|
10
|
-
}
|
|
11
|
-
config ??= {};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const response = await fetch(url, config.fetchInit);
|
|
15
|
-
const responseJson = await response.json() as (T & { retrieved_at?: string }) | undefined;
|
|
16
|
-
if(!responseJson) throw new Error("Could not fetch json");
|
|
17
|
-
|
|
18
|
-
responseJson.retrieved_at = new Date().toISOString();
|
|
19
|
-
return responseJson;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import {CanvasData} from "@/canvasDataDefs";
|
|
2
|
-
import {ICanvasCallConfig, searchParamsFromObject} from "@/canvasUtils";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @param url The entire path of the url
|
|
6
|
-
* @param config a configuration object of type ICanvasCallConfig
|
|
7
|
-
* @returns {Promise<Record<string, any>[]>}
|
|
8
|
-
*/
|
|
9
|
-
export async function getPagedData<T extends CanvasData = CanvasData>(
|
|
10
|
-
url: string, config: ICanvasCallConfig | null = null
|
|
11
|
-
): Promise<T[]> {
|
|
12
|
-
|
|
13
|
-
const generator = getPagedDataGenerator<T>(url, config);
|
|
14
|
-
|
|
15
|
-
const out: T[] = [];
|
|
16
|
-
for await (const value of generator) {
|
|
17
|
-
out.push(value);
|
|
18
|
-
}
|
|
19
|
-
return out;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Merges multiple asynchronous paginated data generators into a single generator.
|
|
24
|
-
*
|
|
25
|
-
* This function combines the results of multiple paginated data generators into a unified stream. Each generator
|
|
26
|
-
* is processed sequentially, and its results are yielded one by one as they become available. This allows for
|
|
27
|
-
* easy handling of multiple paginated API requests or data sources in parallel without needing to collect all
|
|
28
|
-
* results in memory at once.
|
|
29
|
-
*
|
|
30
|
-
* The function is particularly useful when dealing with multiple sources of paginated data (e.g., multiple API
|
|
31
|
-
* endpoints) that need to be processed as one continuous stream of results, without waiting for all pages from one
|
|
32
|
-
* source to finish before beginning to process the next.
|
|
33
|
-
*
|
|
34
|
-
* @template T - A type parameter that extends `CanvasData`, ensuring that the data being yielded is in a format consistent
|
|
35
|
-
* with Canvas API data structures.
|
|
36
|
-
* @param {AsyncGenerator<T, T[], void>[]} generators - An array of asynchronous generators, each of which yields paginated
|
|
37
|
-
* results of type `T`. These could represent different paginated data sources that are combined into a single stream.
|
|
38
|
-
*
|
|
39
|
-
* @yields {T} - The function yields items of type `T` as they are retrieved from each generator in sequence.
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* // Example usage combining two paginated API responses into a single data stream
|
|
43
|
-
* const generator1 = fetchPagedDataFromSource1();
|
|
44
|
-
* const generator2 = fetchPagedDataFromSource2();
|
|
45
|
-
*
|
|
46
|
-
* for await (const data of mergePagedDataGenerators([generator1, generator2])) {
|
|
47
|
-
* console.log(data); // Process each item from both generators as a single stream
|
|
48
|
-
* }
|
|
49
|
-
*
|
|
50
|
-
*/
|
|
51
|
-
export async function* mergePagedDataGenerators<T extends CanvasData = CanvasData, Return = T[]>(generators: AsyncGenerator<T, Return, void>[]) {
|
|
52
|
-
for (const generator of generators) {
|
|
53
|
-
for await (const result of generator) {
|
|
54
|
-
yield result;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Handles the response data from a Canvas API call, normalizing it into an array of `CanvasData` objects.
|
|
63
|
-
*
|
|
64
|
-
* This function accepts various formats of the data (single object, array of objects, or a keyed object containing arrays of objects),
|
|
65
|
-
* and ensures the result is always an array. If no valid array is found, it returns an empty array and logs a warning.
|
|
66
|
-
*
|
|
67
|
-
* @template T - A type that extends `CanvasData`.
|
|
68
|
-
* @param {T | T[] | { [key: string]: T[] }} data - The response data to process. This can be a single object, an array of objects,
|
|
69
|
-
* or a keyed object where the values are arrays of objects.
|
|
70
|
-
* @param {string} url - The URL from which the data was retrieved, used for logging purposes if no valid data is found.
|
|
71
|
-
* @returns {T[]} An array of `CanvasData` objects, or an empty array if no valid array of data is present.
|
|
72
|
-
*/
|
|
73
|
-
function handleResponseData<T extends CanvasData>(data: undefined | null | T | T[] | { [key: string]: T[] }, url: string): T[] {
|
|
74
|
-
if(typeof data === 'undefined' || data == null) {
|
|
75
|
-
console.warn(`no data found for ${url}`)
|
|
76
|
-
return [] as T[]
|
|
77
|
-
}
|
|
78
|
-
if (typeof data === 'object' && !Array.isArray(data)) {
|
|
79
|
-
const values = Array.from(Object.values(data));
|
|
80
|
-
if (values) {
|
|
81
|
-
data = values.find((a) => Array.isArray(a)) as T[];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (!Array.isArray(data)) {
|
|
85
|
-
console.warn(`No valid data found for ${url}`);
|
|
86
|
-
return [] as T[];
|
|
87
|
-
}
|
|
88
|
-
return data;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Async generator function that retrieves paged data from a Canvas API endpoint.
|
|
94
|
-
* It sends HTTP GET requests to the provided URL, processes the results, and iterates
|
|
95
|
-
* through all pages of data, yielding each individual item.
|
|
96
|
-
*
|
|
97
|
-
* The generator automatically handles pagination by examining the 'Link' header
|
|
98
|
-
* returned in each response and fetching the next page as long as a 'next' link is available.
|
|
99
|
-
*
|
|
100
|
-
* @template T - A generic type parameter extending CanvasData to represent the structure of the data.
|
|
101
|
-
* @param {string} url - The full URL for the API request. If the `queryParams` option is provided in the config, it appends the query parameters to the URL.
|
|
102
|
-
* @param {ICanvasCallConfig | null} [config=null] - Optional configuration object for the request, including query parameters and additional fetch options like headers.
|
|
103
|
-
* @yields {T} - Yields individual items of the retrieved data from each page, one at a time.
|
|
104
|
-
*
|
|
105
|
-
* @throws {Error} - If the request fails or the URL contains "undefined", a warning is logged to the console.
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```
|
|
109
|
-
* const generator = getPagedDataGenerator<MyDataType>('https://canvas.example.com/api/data', config);
|
|
110
|
-
* for await (const item of generator) {
|
|
111
|
-
* console.log(item); // Handle each item individually
|
|
112
|
-
* }
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
export async function* getPagedDataGenerator<T extends CanvasData = CanvasData>(
|
|
116
|
-
url: string, config: ICanvasCallConfig | null = null
|
|
117
|
-
): AsyncGenerator<T> {
|
|
118
|
-
|
|
119
|
-
if (config?.queryParams) {
|
|
120
|
-
url += '?' + searchParamsFromObject(config.queryParams);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (url.includes('undefined')) {
|
|
124
|
-
console.warn(url);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
/* Returns a list of data from a GET request, going through multiple pages of data requests as necessary */
|
|
129
|
-
let response = await fetch(url, config?.fetchInit);
|
|
130
|
-
const data = handleResponseData<T>(await response.json(), url);
|
|
131
|
-
if (data.length === 0) return data;
|
|
132
|
-
for (const value of data) yield value;
|
|
133
|
-
|
|
134
|
-
let next_page_link = "!";
|
|
135
|
-
while (next_page_link.length !== 0 &&
|
|
136
|
-
response &&
|
|
137
|
-
response.ok) {
|
|
138
|
-
const nextLink = getNextLink(response);
|
|
139
|
-
if (!nextLink) break;
|
|
140
|
-
next_page_link = nextLink.split(";")[0].split("<")[1].split(">")[0];
|
|
141
|
-
response = await fetch(next_page_link, config?.fetchInit);
|
|
142
|
-
const responseData = handleResponseData<T>(await response.json(), url);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
for (const value of responseData) {
|
|
146
|
-
value.retrieved_at = new Date().toISOString();
|
|
147
|
-
yield value;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function getNextLink(response: Response) {
|
|
153
|
-
const link = response.headers.get("Link");
|
|
154
|
-
if (!link) return null;
|
|
155
|
-
const paginationLinks = link.split(",");
|
|
156
|
-
return paginationLinks.find((link) => link.includes('next'));
|
|
157
|
-
}
|
package/src/fetch/utils.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {deepObjectMerge, ICanvasCallConfig} from "@/canvasUtils";
|
|
2
|
-
|
|
3
|
-
export function overrideConfig<ConfigType extends ICanvasCallConfig | undefined>(
|
|
4
|
-
source: ConfigType | undefined,
|
|
5
|
-
override: ConfigType | undefined
|
|
6
|
-
) {
|
|
7
|
-
|
|
8
|
-
return deepObjectMerge(source, override) ?? {} as ConfigType;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function fetchGetConfig<CallOptions extends Record<string, any>>(options: CallOptions, baseConfig?: ICanvasCallConfig<CallOptions>) {
|
|
12
|
-
return overrideConfig(baseConfig, {
|
|
13
|
-
queryParams: options,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
package/src/files.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import {formDataify} from "./canvasUtils";
|
|
2
|
-
import assert from "assert";
|
|
3
|
-
|
|
4
|
-
export interface IFile {
|
|
5
|
-
"id": number,
|
|
6
|
-
"uuid": string,
|
|
7
|
-
"folder_id": number,
|
|
8
|
-
"display_name": string,
|
|
9
|
-
"filename": string,
|
|
10
|
-
"content-type": string,
|
|
11
|
-
"url": string,
|
|
12
|
-
"size": number,
|
|
13
|
-
"created_at": string,
|
|
14
|
-
"updated_at": string,
|
|
15
|
-
"unlock_at"?: string,
|
|
16
|
-
"locked": boolean,
|
|
17
|
-
"hidden": boolean,
|
|
18
|
-
"lock_at"?: string,
|
|
19
|
-
"hidden_for_user": boolean,
|
|
20
|
-
"visibility_level"?: "course" | "institution" | "public" | "inherit",
|
|
21
|
-
"thumbnail_url"?: string | null,
|
|
22
|
-
"modified_at": string,
|
|
23
|
-
// simplified content-type mapping
|
|
24
|
-
"mime_class": string,
|
|
25
|
-
// identifier for file in third-party transcoding service
|
|
26
|
-
"media_entry_id"?: string,
|
|
27
|
-
"locked_for_user": boolean,
|
|
28
|
-
"lock_info"?: any,
|
|
29
|
-
"lock_explanation"?: string,
|
|
30
|
-
"preview_url"?: string
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export async function uploadFile(file: File, folderId:number, url:string): Promise<void>
|
|
34
|
-
export async function uploadFile(file: File, path:string, url:string): Promise<void>
|
|
35
|
-
export async function uploadFile(file: File, folder: string|number, url:string) {
|
|
36
|
-
const initialParams: Record<string, any> = {
|
|
37
|
-
name: file.name,
|
|
38
|
-
no_redirect: true,
|
|
39
|
-
on_duplicate: 'overwrite'
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if(typeof folder === 'number') initialParams.parent_folder_id = folder;
|
|
43
|
-
else initialParams.parent_folder_path = folder;
|
|
44
|
-
let response = await fetch(url, {
|
|
45
|
-
body: formDataify(initialParams),
|
|
46
|
-
method: 'POST'
|
|
47
|
-
});
|
|
48
|
-
const data = await response.json();
|
|
49
|
-
const uploadParams = data.upload_params;
|
|
50
|
-
const uploadFormData = formDataify(uploadParams);
|
|
51
|
-
uploadFormData.append('file', file);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
response = await fetch(data.upload_url, {
|
|
55
|
-
method: 'POST',
|
|
56
|
-
body: uploadFormData,
|
|
57
|
-
})
|
|
58
|
-
assert(response.ok);
|
|
59
|
-
}
|
|
60
|
-
|
package/src/fixes/annotations.ts
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import {ContentFix, findReplaceFunc, FixFailureResult, notInTest, runReplacements} from "./index";
|
|
2
|
-
|
|
3
|
-
import {Course} from "../course/Course";
|
|
4
|
-
import {Page} from "@/content/pages/Page";
|
|
5
|
-
|
|
6
|
-
const removeMediaPlaceholder = {
|
|
7
|
-
run: findReplaceFunc(/<p>\[Text[^\]]*by SME[^\]]*]<\/p>/, ''),
|
|
8
|
-
tests: [notInTest(/<p>\[Text[^\]]*by SME[^\]]*]<\/p>/)]
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const removeInsertAnnotationForMedia = {
|
|
12
|
-
run: findReplaceFunc(/\[[iI]nsert annotation for media]/, ''),
|
|
13
|
-
tests: [notInTest(/\[.*annotation,.*]/)]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const removeSecondaryMediaTitle = {
|
|
17
|
-
run: findReplaceFunc(/<h3>\[Title for <span style="text-decoration: underline;"> optional <\/span>secondary media element\]<\/h3>/, ''),
|
|
18
|
-
tests: [notInTest('secondary media element]')]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const removeBlockQuote = {
|
|
22
|
-
run: function(input: string) {
|
|
23
|
-
const el = document.createElement('div');
|
|
24
|
-
el.innerHTML = input;
|
|
25
|
-
const bqElement = el.querySelector('blockquote');
|
|
26
|
-
if (bqElement?.innerHTML.includes('SME')) {
|
|
27
|
-
bqElement.parentElement?.parentElement?.remove();
|
|
28
|
-
}
|
|
29
|
-
const output = el.innerHTML;
|
|
30
|
-
el.remove();
|
|
31
|
-
return output;
|
|
32
|
-
},
|
|
33
|
-
tests: [notInTest(/\[Pull quote -/)]
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const removeLmNarrativePlaceholder = {
|
|
38
|
-
run: function(input:string) {
|
|
39
|
-
const el = document.createElement('div');
|
|
40
|
-
el.innerHTML = input;
|
|
41
|
-
const divs = el.querySelectorAll<HTMLDivElement>('div.cbt-content');
|
|
42
|
-
const toRemove = Array.from(divs).filter((div) => div.innerHTML.includes('LM Narrative'));
|
|
43
|
-
for(const element of toRemove) element.remove();
|
|
44
|
-
const output = el.innerHTML;
|
|
45
|
-
el.remove();
|
|
46
|
-
return output;
|
|
47
|
-
},
|
|
48
|
-
tests: [
|
|
49
|
-
notInTest(/LM Narrative/)
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const contentFixes: ContentFix[] = [
|
|
54
|
-
removeMediaPlaceholder,
|
|
55
|
-
removeLmNarrativePlaceholder,
|
|
56
|
-
removeInsertAnnotationForMedia,
|
|
57
|
-
removeSecondaryMediaTitle,
|
|
58
|
-
removeBlockQuote,
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Removes annotation placeholder text from Learning Materials in the course
|
|
64
|
-
* @param course
|
|
65
|
-
*/
|
|
66
|
-
async function fixLmAnnotations(course:Course) {
|
|
67
|
-
const pages = await course.getPages({
|
|
68
|
-
queryParams: {
|
|
69
|
-
include: ['body'],
|
|
70
|
-
search_term: 'learning materials'
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
const pendingUpdates: Promise<any>[] = [];
|
|
74
|
-
const fixedPages: Page[] = [];
|
|
75
|
-
const unchangedPages: Page[] = [];
|
|
76
|
-
const failedPages: Page[] = [];
|
|
77
|
-
const failedFixes: FixFailureResult<string>[] = [];
|
|
78
|
-
|
|
79
|
-
for (const page of pages) {
|
|
80
|
-
const sourceHtml = page.body;
|
|
81
|
-
const fix = runReplacements(contentFixes, sourceHtml);
|
|
82
|
-
const fixedValue = fix.output;
|
|
83
|
-
|
|
84
|
-
if(fix.failedFixes.length > 0) {
|
|
85
|
-
failedPages.push(page);
|
|
86
|
-
console.log(page);
|
|
87
|
-
console.log(fix);
|
|
88
|
-
}
|
|
89
|
-
if(sourceHtml === fixedValue) {
|
|
90
|
-
console.log(sourceHtml.length - fixedValue.length)
|
|
91
|
-
console.log(`Page unchanged ${page.name}`)
|
|
92
|
-
unchangedPages.push(page);
|
|
93
|
-
} else {
|
|
94
|
-
console.log(`fixed ${page.name}`)
|
|
95
|
-
pendingUpdates.push(page.updateContent(fixedValue));
|
|
96
|
-
fixedPages.push(page);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
await Promise.all(pendingUpdates);
|
|
101
|
-
return {fixedPages, unchangedPages, failedPages}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
export { contentFixes, fixLmAnnotations };
|
package/src/fixes/index.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
export type ContentFix<T = string> = {
|
|
2
|
-
preflightTests?: ((potentialOutput: T) => boolean)[],
|
|
3
|
-
tests?: ((potentialOutput: T) => boolean)[],
|
|
4
|
-
run: (value: T) => T
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export type FixFailureResult<T> = {
|
|
8
|
-
failedFixes: ContentFix<T>[],
|
|
9
|
-
output: T
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Runs through a series of Content Fixes. If all is well, passes the results into the next
|
|
13
|
-
* content fix.
|
|
14
|
-
* Each ContentFix can have tests and preflight tests. Preflight tests are run before the fix is attempted
|
|
15
|
-
* Tests are fun after.
|
|
16
|
-
* If any of these tests fail, that content fix is not run on the text, instead passing the previous value.
|
|
17
|
-
* @param fixes
|
|
18
|
-
* @param source
|
|
19
|
-
*/
|
|
20
|
-
export function runReplacements<T extends {toString:()=>string} = string>(fixes: ContentFix<T>[], source: T) {
|
|
21
|
-
const failedFixes: ContentFix<T>[]= [];
|
|
22
|
-
const output: T = fixes.reduce((accumulator, {run, tests, preflightTests}) => {
|
|
23
|
-
// run through all preflight tests, if any of them fail, return the pre-transformation value
|
|
24
|
-
if (preflightTests && preflightTests.map((test) => test(output)).includes(false)) return accumulator;
|
|
25
|
-
const output = run(accumulator);
|
|
26
|
-
// run through all tests, if any of them fail, return the pre-transformation value
|
|
27
|
-
if (tests && tests.map((test) => test(output)).includes(false)) {
|
|
28
|
-
failedFixes.push({run, tests, preflightTests})
|
|
29
|
-
return accumulator;
|
|
30
|
-
}
|
|
31
|
-
return output;
|
|
32
|
-
}, source);
|
|
33
|
-
|
|
34
|
-
return {failedFixes, output} as FixFailureResult<T>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function findReplaceFunc(find:string|RegExp, replace:string) {
|
|
38
|
-
return (source: string) => {
|
|
39
|
-
const output = source.replace(find, replace);
|
|
40
|
-
return output;
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Returns a function that returns true if passed a string that contains the find value or matches the find RegEx, false otherwise
|
|
46
|
-
* @param find A regular expression to check the input string against, or a substring to check if the input string contains
|
|
47
|
-
* @param caseSensitive (string find only) whether to match the string case sensitive-ly
|
|
48
|
-
*/
|
|
49
|
-
export function inTest(find:string|RegExp, caseSensitive=true) {
|
|
50
|
-
if(typeof find === "string") {
|
|
51
|
-
const findValue = caseSensitive ? find : find.toLowerCase();
|
|
52
|
-
return (source: string) => (caseSensitive ? source : source.toLowerCase()).includes(findValue);
|
|
53
|
-
} else {
|
|
54
|
-
return (source:string) => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return !!source.match(find);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Returns a function that returns false if passed a string that contains the find value or matches the find RegEx, true otherwise
|
|
64
|
-
* @param find A regular expression to check the input string against, or a substring to check if the input string contains
|
|
65
|
-
* @param caseSensitive (string find only) whether to match the string case sensitive-ly
|
|
66
|
-
*/
|
|
67
|
-
export function notInTest(find: string|RegExp, caseSensitive = true) {
|
|
68
|
-
if(typeof find === "string") {
|
|
69
|
-
const findValue = caseSensitive ? find : find.toLowerCase();
|
|
70
|
-
return (source: string) => {
|
|
71
|
-
return !((caseSensitive ? source : source.toLowerCase()).includes(findValue));
|
|
72
|
-
}
|
|
73
|
-
} else {
|
|
74
|
-
return (source:string) => {
|
|
75
|
-
|
|
76
|
-
return !source.match(find);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export * from './annotations'
|