@falkenslab/moodle-driver 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +3 -2
  2. package/dist/areas/activities/build.d.ts +47 -10
  3. package/dist/areas/activities/build.js +157 -24
  4. package/dist/areas/activities/build.js.map +1 -1
  5. package/dist/areas/activities/conditions.d.ts +77 -0
  6. package/dist/areas/activities/conditions.js +216 -0
  7. package/dist/areas/activities/conditions.js.map +1 -0
  8. package/dist/areas/activities/content.d.ts +3 -0
  9. package/dist/areas/activities/content.js +1 -0
  10. package/dist/areas/activities/content.js.map +1 -1
  11. package/dist/areas/assignments/grader.d.ts +32 -0
  12. package/dist/areas/assignments/grader.js +66 -2
  13. package/dist/areas/assignments/grader.js.map +1 -1
  14. package/dist/areas/assignments/grading.d.ts +69 -6
  15. package/dist/areas/assignments/grading.js +173 -13
  16. package/dist/areas/assignments/grading.js.map +1 -1
  17. package/dist/areas/assignments/student.d.ts +14 -0
  18. package/dist/areas/assignments/student.js +43 -2
  19. package/dist/areas/assignments/student.js.map +1 -1
  20. package/dist/areas/backup/backup.d.ts +86 -0
  21. package/dist/areas/backup/backup.js +368 -0
  22. package/dist/areas/backup/backup.js.map +1 -0
  23. package/dist/areas/calendar/calendar.d.ts +27 -0
  24. package/dist/areas/calendar/calendar.js +115 -9
  25. package/dist/areas/calendar/calendar.js.map +1 -1
  26. package/dist/areas/completion/completion.d.ts +3 -0
  27. package/dist/areas/completion/completion.js.map +1 -1
  28. package/dist/areas/courses/list.d.ts +2 -0
  29. package/dist/areas/courses/list.js.map +1 -1
  30. package/dist/areas/courses/reset.d.ts +51 -0
  31. package/dist/areas/courses/reset.js +123 -0
  32. package/dist/areas/courses/reset.js.map +1 -0
  33. package/dist/areas/courses/state.d.ts +17 -0
  34. package/dist/areas/courses/state.js +37 -6
  35. package/dist/areas/courses/state.js.map +1 -1
  36. package/dist/areas/courses/structure.d.ts +14 -2
  37. package/dist/areas/courses/structure.js +11 -5
  38. package/dist/areas/courses/structure.js.map +1 -1
  39. package/dist/areas/forums/discussions.d.ts +8 -0
  40. package/dist/areas/forums/discussions.js +10 -0
  41. package/dist/areas/forums/discussions.js.map +1 -1
  42. package/dist/areas/forums/grading.d.ts +49 -0
  43. package/dist/areas/forums/grading.js +125 -0
  44. package/dist/areas/forums/grading.js.map +1 -0
  45. package/dist/areas/forums/posts.d.ts +37 -0
  46. package/dist/areas/forums/posts.js +141 -6
  47. package/dist/areas/forums/posts.js.map +1 -1
  48. package/dist/areas/grades/export.d.ts +38 -0
  49. package/dist/areas/grades/export.js +88 -0
  50. package/dist/areas/grades/export.js.map +1 -0
  51. package/dist/areas/grades/gradebook.d.ts +50 -0
  52. package/dist/areas/grades/gradebook.js +120 -0
  53. package/dist/areas/grades/gradebook.js.map +1 -1
  54. package/dist/areas/grades/singleview.d.ts +39 -0
  55. package/dist/areas/grades/singleview.js +186 -0
  56. package/dist/areas/grades/singleview.js.map +1 -0
  57. package/dist/areas/h5p/h5p.d.ts +2 -0
  58. package/dist/areas/h5p/h5p.js +12 -7
  59. package/dist/areas/h5p/h5p.js.map +1 -1
  60. package/dist/areas/lessons/lessons.d.ts +1 -0
  61. package/dist/areas/lessons/lessons.js.map +1 -1
  62. package/dist/areas/messages/messages.d.ts +32 -0
  63. package/dist/areas/messages/messages.js +44 -2
  64. package/dist/areas/messages/messages.js.map +1 -1
  65. package/dist/areas/participants/enrolments.d.ts +60 -0
  66. package/dist/areas/participants/enrolments.js +218 -0
  67. package/dist/areas/participants/enrolments.js.map +1 -0
  68. package/dist/areas/participants/groups.d.ts +75 -0
  69. package/dist/areas/participants/groups.js +201 -0
  70. package/dist/areas/participants/groups.js.map +1 -0
  71. package/dist/areas/participants/methods.d.ts +56 -0
  72. package/dist/areas/participants/methods.js +154 -0
  73. package/dist/areas/participants/methods.js.map +1 -0
  74. package/dist/areas/participants/participants.d.ts +11 -0
  75. package/dist/areas/participants/participants.js +24 -19
  76. package/dist/areas/participants/participants.js.map +1 -1
  77. package/dist/areas/questions/banks.d.ts +36 -1
  78. package/dist/areas/questions/banks.js +140 -17
  79. package/dist/areas/questions/banks.js.map +1 -1
  80. package/dist/areas/quizzes/attempts.d.ts +2 -0
  81. package/dist/areas/quizzes/attempts.js +9 -0
  82. package/dist/areas/quizzes/attempts.js.map +1 -1
  83. package/dist/areas/quizzes/grading.d.ts +50 -0
  84. package/dist/areas/quizzes/grading.js +131 -0
  85. package/dist/areas/quizzes/grading.js.map +1 -0
  86. package/dist/areas/quizzes/results.d.ts +3 -0
  87. package/dist/areas/quizzes/results.js +2 -1
  88. package/dist/areas/quizzes/results.js.map +1 -1
  89. package/dist/areas/quizzes/structure.d.ts +65 -9
  90. package/dist/areas/quizzes/structure.js +222 -23
  91. package/dist/areas/quizzes/structure.js.map +1 -1
  92. package/dist/areas/ratings/ratings.d.ts +26 -0
  93. package/dist/areas/ratings/ratings.js +108 -0
  94. package/dist/areas/ratings/ratings.js.map +1 -0
  95. package/dist/areas/reports/dates.d.ts +18 -0
  96. package/dist/areas/reports/dates.js +134 -0
  97. package/dist/areas/reports/dates.js.map +1 -0
  98. package/dist/areas/reports/reports.d.ts +143 -0
  99. package/dist/areas/reports/reports.js +267 -0
  100. package/dist/areas/reports/reports.js.map +1 -0
  101. package/dist/areas/scorm/scorm.d.ts +1 -0
  102. package/dist/areas/scorm/scorm.js.map +1 -1
  103. package/dist/areas/site/users.d.ts +7 -1
  104. package/dist/areas/site/users.js +9 -2
  105. package/dist/areas/site/users.js.map +1 -1
  106. package/dist/areas/surveys/choice.d.ts +2 -0
  107. package/dist/areas/surveys/choice.js +6 -3
  108. package/dist/areas/surveys/choice.js.map +1 -1
  109. package/dist/areas/surveys/surveys.d.ts +3 -0
  110. package/dist/areas/surveys/surveys.js +1 -0
  111. package/dist/areas/surveys/surveys.js.map +1 -1
  112. package/dist/areas/workshops/workshops.d.ts +133 -0
  113. package/dist/areas/workshops/workshops.js +335 -0
  114. package/dist/areas/workshops/workshops.js.map +1 -0
  115. package/dist/browser/background.d.ts +43 -0
  116. package/dist/browser/background.js +164 -0
  117. package/dist/browser/background.js.map +1 -0
  118. package/dist/browser/host.d.ts +30 -0
  119. package/dist/browser/host.js +373 -0
  120. package/dist/browser/host.js.map +1 -0
  121. package/dist/browser/manager.d.ts +9 -0
  122. package/dist/browser/manager.js +8 -0
  123. package/dist/browser/manager.js.map +1 -1
  124. package/dist/categories.d.ts +1 -0
  125. package/dist/categories.js +67 -0
  126. package/dist/categories.js.map +1 -1
  127. package/dist/cli/args.d.ts +8 -0
  128. package/dist/cli/args.js +49 -0
  129. package/dist/cli/args.js.map +1 -1
  130. package/dist/cli/background.d.ts +23 -0
  131. package/dist/cli/background.js +128 -0
  132. package/dist/cli/background.js.map +1 -0
  133. package/dist/cli/command.d.ts +66 -0
  134. package/dist/cli/command.js +328 -0
  135. package/dist/cli/command.js.map +1 -0
  136. package/dist/cli/commands.generated.js +2635 -577
  137. package/dist/cli/commands.generated.js.map +1 -1
  138. package/dist/cli/config.d.ts +2 -0
  139. package/dist/cli/config.js +2 -0
  140. package/dist/cli/config.js.map +1 -1
  141. package/dist/cli/main.js +30 -10
  142. package/dist/cli/main.js.map +1 -1
  143. package/dist/cli/run.d.ts +3 -14
  144. package/dist/cli/run.js +9 -185
  145. package/dist/cli/run.js.map +1 -1
  146. package/dist/cli/shell.d.ts +9 -0
  147. package/dist/cli/shell.js +233 -0
  148. package/dist/cli/shell.js.map +1 -0
  149. package/dist/client.d.ts +71 -8
  150. package/dist/client.js +75 -8
  151. package/dist/client.js.map +1 -1
  152. package/dist/core/errors.d.ts +1 -1
  153. package/dist/core/errors.js.map +1 -1
  154. package/dist/core/files.d.ts +5 -0
  155. package/dist/core/files.js +7 -3
  156. package/dist/core/files.js.map +1 -1
  157. package/dist/core/forms.d.ts +33 -3
  158. package/dist/core/forms.js +105 -8
  159. package/dist/core/forms.js.map +1 -1
  160. package/dist/core/http.d.ts +7 -0
  161. package/dist/core/http.js +28 -7
  162. package/dist/core/http.js.map +1 -1
  163. package/dist/core/login.d.ts +3 -0
  164. package/dist/core/login.js +2 -0
  165. package/dist/core/login.js.map +1 -1
  166. package/dist/core/session.d.ts +12 -1
  167. package/dist/core/session.js +12 -1
  168. package/dist/core/session.js.map +1 -1
  169. package/dist/index.d.ts +35 -11
  170. package/dist/index.js +32 -12
  171. package/dist/index.js.map +1 -1
  172. package/dist/internals.d.ts +9 -1
  173. package/dist/internals.js +9 -4
  174. package/dist/internals.js.map +1 -1
  175. package/dist/options.d.ts +2 -0
  176. package/dist/options.js.map +1 -1
  177. package/dist/testing/fakeMoodle.d.ts +9 -2
  178. package/dist/testing/fakeMoodle.js +5 -3
  179. package/dist/testing/fakeMoodle.js.map +1 -1
  180. package/dist/testing/index.d.ts +7 -0
  181. package/dist/testing/index.js.map +1 -1
  182. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/areas/quizzes/structure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/areas/quizzes/structure.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA6BzE,oHAAoH;AACpH,MAAM,UAAU,cAAc,CAAC,IAAU;IACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAUxB,MAAM,GAAG,GAAI,UAA0C,CAAC,QAAQ,CAAC;QACjE,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACtB,gFAAgF;oBAChF,OAAO,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC3H,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC3B,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK;iBACxE,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,iHAAiH;YACjH,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,qDAAqD,CAAC,CAAC;YACvF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;YACtH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC;YACjK,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAClH,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,IAAI,EAAE,OAAO;gBACb,GAAG,CAAC,UAAU,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,IAAI;gBACJ,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;gBAC9I,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,gGAAgG;QAChG,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU;IAC5C,OAAO,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB;IACtF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,uBAAuB,UAAU,KAAK,MAAM,IAAI,wCAAwC,GAAG,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8HAA8H;AAC9H,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB;IAC9F,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,kHAAkH;AAClH,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,UAAkB;IACzD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;QAAE,OAAO;IAClE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClI,MAAM,IAAI,SAAS,CAAC,QAAQ,UAAU,oCAAoC,MAAM,IAAI,yBAAyB,sDAAsD,CAAC,CAAC;AACvK,CAAC;AAED,qHAAqH;AACrH,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,UAAkB,EAAE,MAA8B;IACxF,OAAO,IAAI,CAAC,QAAQ,CAClB,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,UAKT,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,2BAA2B,MAAM,EAAE,EAAE;YACpF,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,uCAAuC,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7H,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAClE,CAAC,EACD,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAC/B,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,UAAkB;IAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,UAAU,yFAAyF,CAAC,CAAC;IAC1I,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+HAA+H;AAC/H,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,MAAc,EAAE,UAAkB,EAAE,MAAuC;IAC7G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAChC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,UAIT,CAAC;QACF,MAAM,IAAI,GAA2B,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1F,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/J,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC,EACD,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACF,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,6BAA6B,UAAU,sBAAsB,MAAM,CAAC,MAAM,+BAA+B,CAAC,CAAC;IACjI,CAAC;IACD,MAAM,KAAK,GAAI,IAAkC,EAAE,KAAK,CAAC;IACzD,IAAI,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,UAAU,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACxG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,KAAiB,EAAE,IAAY,EAAE,UAAkB;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,UAAU,gBAAgB,IAAI,YAAY,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC;IACvH,OAAO,KAAK,CAAC;AACf,CAAC;AAID,KAAK,UAAU,WAAW,CAAC,IAAU,EAAE,UAAkB,EAAE,OAAe;IACxE,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAAe,EACf,UAAkB,EAClB,EAAE,WAAW,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAA6H;IAErK,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,+EAA+E,CAAC,CAAC;IAC9I,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtJ,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvM,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,MAAM,IAAI,GAAG;gBAAE,MAAM,IAAI,SAAS,CAAC,mBAAmB,MAAM,6BAA6B,UAAU,8CAA8C,CAAC,CAAC;QACzJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3C,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,UAAU,8DAA8D,CAAC,CAAC;QAClJ,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,UAAU,GAAG,EAAE,CAAC;IAC3G,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,OAAe,EACf,UAAkB,EAClB,IAAY,EACZ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAA2D;IAE7F,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAC;IAClK,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IACpJ,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACtC,2DAA2D;YAC3D,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,IAAI,QAAQ,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;gBAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,IAAI,2BAA2B,CAAC,CAAC;YAC7F,kGAAkG;YAClG,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3I,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;QAC1M,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/H,IAAI,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,IAAI,QAAQ,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3F,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,8HAA8H;AAC9H,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB,EAAE,IAAY;IAC7G,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QACpE,gEAAgE;QAChE,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClG,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,IAAI,MAAM,OAAO,CAAC,IAAI,gBAAgB,UAAU,GAAG,CAAC,CAAC;IAClH,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAuB,EAAE,OAAe,EAAE,UAAkB,EAAE,KAAsD;IACrJ,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;YACpJ,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7H,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG;gBAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,UAAU,KAAK,KAAK,IAAI,QAAQ,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9H,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,oBAAoB,UAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,YAAY,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,2BAA2B,GAAG,CAAC,CAAC;QACtM,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,KAAK,CAAC,MAAM,GAAG,CAAC,YAAY,UAAU,KAAK,KAAK,aAAa,CAAC,CAAC;QACzK,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC;YAClD,IAAI,MAAM,KAAK,GAAG;gBAAE,SAAS;YAC7B,uGAAuG;YACvG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnI,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACxL,OAAO,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,UAAU,0BAA0B,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,UAAU,gCAAgC,KAAK,GAAG,CAAC,CAAC;IAC9K,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,OAAe,EACf,UAAkB,EAClB,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAA6D;IAElG,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,SAAS,CAAC,QAAQ,SAAS,wCAAwC,UAAU,qEAAqE,CAAC,CAAC;QAChK,CAAC;QACD,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC;QAC3E,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,UAAU,2CAA2C,SAAS,aAAa,SAAS,IAAI,CAAC,CAAC;QACnJ,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,UAAU,KAAK,KAAK,IAAI,QAAQ,MAAM,EAAE,GAAG,CAAC,CAAC;QACpI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACrD,SAAS,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACnH,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,UAAU,GAAG,CAAC,CAAC;QACnG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAChI,IAAI,OAAO;YAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3I,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,OAAO,aAAa,UAAU,YAAY,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzK,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { BrowserContext } from "playwright-core";
2
+ /** Something rated: a forum post (in its discussion), a glossary entry, or a database record. */
3
+ export type RateableItem = {
4
+ type: "forum-post";
5
+ id: number;
6
+ discussionId: number;
7
+ } | {
8
+ type: "glossary-entry";
9
+ id: number;
10
+ } | {
11
+ type: "database-record";
12
+ id: number;
13
+ };
14
+ /**
15
+ * Rates a forum post, a glossary entry or a database record as the person, as the rating menu under
16
+ * it does: by a scale item's name, or its number (the points of a point scale). `null` takes the
17
+ * person's rating away. Returns a sentence of what changed and the item's aggregate afterwards (as
18
+ * Moodle shows it, by the activity's aggregation) with the number of ratings. Throws `GradingError`
19
+ * when the item has no rating menu for the person (ratings off, their own item, outside the
20
+ * rating period, or no permission) or the rating isn't on its scale.
21
+ */
22
+ export declare function rate(context: BrowserContext, siteUrl: string, item: RateableItem, rating: number | string | null): Promise<{
23
+ changed: string;
24
+ aggregate?: string;
25
+ count?: number;
26
+ }>;
@@ -0,0 +1,108 @@
1
+ import { moodleErrorMessage, openSitePage } from "../../core/session.js";
2
+ import { MoodleError } from "../../core/errors.js";
3
+ import { GradingError } from "../assignments/grader.js";
4
+ /** The page that shows an item with its rating form. */
5
+ function itemPage(item) {
6
+ switch (item.type) {
7
+ case "forum-post":
8
+ return `mod/forum/discuss.php?d=${item.discussionId}`;
9
+ case "glossary-entry":
10
+ // The entry's own page, which says its glossary: the rating form is only on the glossary's (openItem).
11
+ return `mod/glossary/showentry.php?eid=${item.id}`;
12
+ case "database-record":
13
+ return `mod/data/view.php?rid=${item.id}`;
14
+ default:
15
+ throw new MoodleError(`Ratings are on forum posts, glossary entries and database records, not "${item.type}".`, "invalid-input");
16
+ }
17
+ }
18
+ /**
19
+ * Opens the page with the item's rating form. A glossary entry's own page (showentry.php) loads no
20
+ * ratings: only the glossary's page does, so the entry is shown there, in its glossary (the `cmid-`
21
+ * body class of its own page), as Moodle's own link to an entry does (confirmed empirically, 5.2).
22
+ */
23
+ async function openItem(context, siteUrl, item) {
24
+ const page = await openSitePage(context, siteUrl, itemPage(item));
25
+ if (item.type !== "glossary-entry" || (await moodleErrorMessage(page)) !== undefined)
26
+ return page;
27
+ const cm = await page.evaluate(() => /\bcmid-(\d+)\b/.exec(globalThis.document.body.className)?.[1]);
28
+ if (!cm)
29
+ return page;
30
+ await page.close().catch(() => undefined);
31
+ return openSitePage(context, siteUrl, `mod/glossary/view.php?id=${cm}&mode=entry&hook=${item.id}`);
32
+ }
33
+ /** Moodle's "Rate..." option: no rating (RATING_UNSET_RATING). */
34
+ const UNSET = "-999";
35
+ /**
36
+ * Rates a forum post, a glossary entry or a database record as the person, as the rating menu under
37
+ * it does: by a scale item's name, or its number (the points of a point scale). `null` takes the
38
+ * person's rating away. Returns a sentence of what changed and the item's aggregate afterwards (as
39
+ * Moodle shows it, by the activity's aggregation) with the number of ratings. Throws `GradingError`
40
+ * when the item has no rating menu for the person (ratings off, their own item, outside the
41
+ * rating period, or no permission) or the rating isn't on its scale.
42
+ */
43
+ export async function rate(context, siteUrl, item, rating) {
44
+ const page = await openItem(context, siteUrl, item);
45
+ try {
46
+ const refused = await moodleErrorMessage(page);
47
+ if (refused !== undefined)
48
+ throw new GradingError(`You can't see ${item.type} ${item.id}: ${refused}`);
49
+ const form = await page.evaluate((itemId) => {
50
+ const doc = globalThis.document;
51
+ // The .ratingform, not its form.postratingform: a database's single view renders the rating form
52
+ // inside a form of its own, and the browser drops the nested form, keeping its fields (confirmed
53
+ // empirically, 5.2).
54
+ const found = Array.from(doc.querySelectorAll(".ratingform")).find((f) => f.querySelector(`input[name="itemid"][value="${itemId}"]`) !== null);
55
+ if (!found)
56
+ return undefined;
57
+ return {
58
+ fields: Array.from(found.querySelectorAll('input[type="hidden"]')).map((input) => [input.name, input.value]),
59
+ options: Array.from(found.querySelectorAll('select[name="rating"] option')).map((o) => ({ value: o.value, text: o.text.replace(/\s+/g, " ").trim() })),
60
+ };
61
+ }, item.id);
62
+ if (!form || form.options.length === 0) {
63
+ throw new GradingError(`${item.type} ${item.id} has no rating menu for you: its activity doesn't use ratings, it's your own, the rating period is over, or you aren't allowed to rate.`);
64
+ }
65
+ let value;
66
+ if (rating === null)
67
+ value = UNSET;
68
+ else {
69
+ const option = form.options.find((o) => o.value !== UNSET && (o.value === String(rating) || o.text === String(rating)));
70
+ if (!option)
71
+ throw new GradingError(`${item.type} ${item.id} is rated on ${form.options.filter((o) => o.value !== UNSET).map((o) => `"${o.text}"`).join(", ")}; not "${rating}".`);
72
+ value = option.value;
73
+ }
74
+ const body = new URLSearchParams([...form.fields.filter(([name]) => name !== "returnurl"), ["rating", value]]).toString();
75
+ const answer = await page.evaluate(async ({ body }) => {
76
+ const g = globalThis;
77
+ const response = await g.fetch(`${g.M.cfg.wwwroot}/rating/rate_ajax.php`, {
78
+ method: "POST",
79
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
80
+ body,
81
+ credentials: "same-origin",
82
+ });
83
+ return response.text();
84
+ }, { body });
85
+ let result;
86
+ try {
87
+ result = JSON.parse(answer);
88
+ }
89
+ catch {
90
+ throw new GradingError(`Moodle didn't take the rating on ${item.type} ${item.id}: you may not be allowed to rate it.`);
91
+ }
92
+ if (!result.success)
93
+ throw new GradingError(`Moodle didn't take the rating on ${item.type} ${item.id}: ${result.error ?? "no reason given"}.`);
94
+ const shown = rating === null ? undefined : form.options.find((o) => o.value === value)?.text;
95
+ // Without ratings left, Moodle answers " - " for the aggregate.
96
+ const aggregate = String(result.aggregate ?? "").trim();
97
+ const count = Number(result.count);
98
+ return {
99
+ changed: rating === null ? `Rating on ${item.type} ${item.id} taken away.` : `Rated ${item.type} ${item.id} "${shown}".`,
100
+ ...(aggregate !== "" && aggregate !== "-" ? { aggregate } : {}),
101
+ ...(Number.isFinite(count) && result.count !== undefined && result.count !== "" ? { count } : {}),
102
+ };
103
+ }
104
+ finally {
105
+ await page.close().catch(() => undefined);
106
+ }
107
+ }
108
+ //# sourceMappingURL=ratings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratings.js","sourceRoot":"","sources":["../../../src/areas/ratings/ratings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BrowserContext } from "playwright-core";
2
+ /** How a report writes a date: the strftime format, the language's locale (`es_ES.UTF-8`) and the person's time zone. */
3
+ export interface DateFormat {
4
+ format: string;
5
+ locale: string;
6
+ timeZone: string;
7
+ }
8
+ /** The language's formats by their `core_langconfig` names, and its locale, through `core_get_strings`. */
9
+ export declare function languageFormats(context: BrowserContext, siteUrl: string, names: string[]): Promise<{
10
+ formats: Record<string, string>;
11
+ locale: string;
12
+ }>;
13
+ /**
14
+ * The instant a date text stands for, read with the format Moodle wrote it with; undefined when the
15
+ * text doesn't follow it. Only the start of the text is read: Moodle may add more after the date
16
+ * ("(3 hours 4 mins)").
17
+ */
18
+ export declare function parseMoodleDate(text: string, { format, locale, timeZone }: DateFormat): Date | undefined;
@@ -0,0 +1,134 @@
1
+ import { callService } from "../../core/ajax.js";
2
+ /** The language's formats by their `core_langconfig` names, and its locale, through `core_get_strings`. */
3
+ export async function languageFormats(context, siteUrl, names) {
4
+ const strings = await callService(context, siteUrl, "core_get_strings", {
5
+ strings: [...names, "locale"].map((stringid) => ({ stringid, component: "langconfig" })),
6
+ });
7
+ const formats = {};
8
+ for (const { stringid, string } of strings)
9
+ formats[stringid] = string;
10
+ return { formats, locale: formats.locale ?? "en" };
11
+ }
12
+ const escape = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
13
+ const fold = (text) => text.normalize("NFD").replace(/[̀-ͯ.]/g, "").toLowerCase().trim();
14
+ /** The month names ICU gives in `locale` (`es_ES.UTF-8` or `es-ES`), as a date with its day writes them. */
15
+ function monthNames(locale, month) {
16
+ const tag = locale.replace(/[.@].*$/, "").replace("_", "-");
17
+ let formatter;
18
+ try {
19
+ formatter = new Intl.DateTimeFormat(tag, { month, day: "numeric", timeZone: "UTC" });
20
+ }
21
+ catch {
22
+ formatter = new Intl.DateTimeFormat("en", { month, day: "numeric", timeZone: "UTC" });
23
+ }
24
+ return Array.from({ length: 12 }, (_, m) => formatter.formatToParts(new Date(Date.UTC(2020, m, 15))).find((part) => part.type === "month")?.value ?? "");
25
+ }
26
+ /**
27
+ * The instant a date text stands for, read with the format Moodle wrote it with; undefined when the
28
+ * text doesn't follow it. Only the start of the text is read: Moodle may add more after the date
29
+ * ("(3 hours 4 mins)").
30
+ */
31
+ export function parseMoodleDate(text, { format, locale, timeZone }) {
32
+ const fields = [];
33
+ let pattern = "";
34
+ for (const piece of format.split(/(%[a-zA-Z%])/)) {
35
+ if (piece === "")
36
+ continue;
37
+ const token = /^%([a-zA-Z%])$/.exec(piece)?.[1];
38
+ if (token === undefined) {
39
+ pattern += piece.split(/\s+/).map(escape).join("\\s+");
40
+ continue;
41
+ }
42
+ const group = (name, regex) => {
43
+ fields.push(name);
44
+ return `(${regex})`;
45
+ };
46
+ switch (token) {
47
+ case "d":
48
+ case "e":
49
+ pattern += group("day", "\\d{1,2}");
50
+ break;
51
+ case "m":
52
+ pattern += group("month", "\\d{1,2}");
53
+ break;
54
+ case "B":
55
+ case "b":
56
+ case "h":
57
+ pattern += group(token === "B" ? "monthName" : "monthShort", "[^\\s\\d,]+");
58
+ break;
59
+ case "Y":
60
+ pattern += group("year", "\\d{4}");
61
+ break;
62
+ case "y":
63
+ pattern += group("year2", "\\d{2}");
64
+ break;
65
+ case "H":
66
+ case "k":
67
+ pattern += group("hour", "\\d{1,2}");
68
+ break;
69
+ case "I":
70
+ case "l":
71
+ pattern += group("hour12", "\\d{1,2}");
72
+ break;
73
+ case "M":
74
+ pattern += group("minute", "\\d{2}");
75
+ break;
76
+ case "S":
77
+ pattern += group("second", "\\d{2}");
78
+ break;
79
+ case "p":
80
+ case "P":
81
+ // PHP's own AM and PM, in English whatever the language.
82
+ pattern += group("meridiem", "[AaPp][Mm]");
83
+ break;
84
+ case "%":
85
+ pattern += "%";
86
+ break;
87
+ default:
88
+ // A weekday's name, or anything else that doesn't make the date.
89
+ pattern += "\\S+?";
90
+ }
91
+ }
92
+ const match = new RegExp(`^\\s*${pattern}`, "u").exec(text.replace(/\s+/g, " "));
93
+ if (!match)
94
+ return undefined;
95
+ const value = (name) => {
96
+ const i = fields.indexOf(name);
97
+ return i < 0 ? undefined : match[i + 1];
98
+ };
99
+ const named = value("monthName") ?? value("monthShort");
100
+ let month = value("month") !== undefined ? Number(value("month")) : undefined;
101
+ if (named !== undefined) {
102
+ const names = monthNames(locale, value("monthName") !== undefined ? "long" : "short").map(fold);
103
+ const found = names.indexOf(fold(named));
104
+ month = found >= 0 ? found + 1 : undefined;
105
+ }
106
+ const year = value("year") !== undefined ? Number(value("year")) : value("year2") !== undefined ? 2000 + Number(value("year2")) : undefined;
107
+ const day = Number(value("day"));
108
+ if (!month || !year || !day)
109
+ return undefined;
110
+ let hour = Number(value("hour") ?? 0);
111
+ if (value("hour12") !== undefined)
112
+ hour = (Number(value("hour12")) % 12) + (/^p/i.test(value("meridiem") ?? "") ? 12 : 0);
113
+ const wall = Date.UTC(year, month - 1, day, hour, Number(value("minute") ?? 0), Number(value("second") ?? 0));
114
+ return new Date(wall - zoneOffset(wall, timeZone));
115
+ }
116
+ /** How far ahead of UTC `timeZone`'s clocks are at the wall time `wall` (twice, across a DST change). */
117
+ function zoneOffset(wall, timeZone) {
118
+ let formatter;
119
+ try {
120
+ formatter = new Intl.DateTimeFormat("en-GB", { timeZone, year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hourCycle: "h23" });
121
+ }
122
+ catch {
123
+ return 0;
124
+ }
125
+ let time = wall;
126
+ for (let i = 0; i < 2; i++) {
127
+ const parts = formatter.formatToParts(new Date(time));
128
+ const part = (type) => Number(parts.find((p) => p.type === type)?.value);
129
+ const shown = Date.UTC(part("year"), part("month") - 1, part("day"), part("hour"), part("minute"), part("second"));
130
+ time += wall - shown;
131
+ }
132
+ return wall - time;
133
+ }
134
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/areas/reports/dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import type { BrowserContext, Page } from "playwright-core";
2
+ import { MoodleError } from "../../core/errors.js";
3
+ import { type DateFormat } from "./dates.js";
4
+ /** A report the person can't see: the course or activity isn't there, or they aren't allowed (`report/log:view`…). */
5
+ export declare class ReportError extends MoodleError {
6
+ name: string;
7
+ constructor(message: string);
8
+ }
9
+ /** One event in a course's logs, as the logs report lists it. */
10
+ export interface LogEntry {
11
+ /** When it happened (ISO 8601); absent when the site's date format couldn't be read back. */
12
+ time?: string;
13
+ /** The time as the report shows it, in the site's language. */
14
+ timeText: string;
15
+ /** Who did it; none for an event without a user (the system's). */
16
+ userId?: number;
17
+ userName: string;
18
+ /** Who was really logged in, when someone acted logged in as `userId`. */
19
+ realUserId?: number;
20
+ /** The person the event was about (graded, enrolled, messaged…), when any. */
21
+ relatedUserId?: number;
22
+ relatedUserName?: string;
23
+ /** Where it happened, as Moodle names it ("Forum: News"), and the activity when it was one. */
24
+ context: string;
25
+ activityId?: number;
26
+ /** The component's and the event's names, in the site's language ("Forum", "Course module viewed"). */
27
+ component: string;
28
+ event: string;
29
+ /** Moodle's description of the event (in English, as events write it). */
30
+ description: string;
31
+ /** "web", "cli", "ws"… */
32
+ origin: string;
33
+ ip?: string;
34
+ }
35
+ /** What the logs report filters by its "actions" menu: creating, viewing, updating, deleting, or any change (the three writes). */
36
+ export declare const LOG_ACTIONS: readonly ["create", "view", "update", "delete", "change"];
37
+ /** One of `LOG_ACTIONS`: the kind of action `courseLogs` keeps. */
38
+ export type LogAction = (typeof LOG_ACTIONS)[number];
39
+ interface RawLogRow {
40
+ timeText: string;
41
+ users: {
42
+ id: number;
43
+ name: string;
44
+ }[];
45
+ userName: string;
46
+ related?: {
47
+ id: number;
48
+ name: string;
49
+ };
50
+ context: string;
51
+ contextUrl?: string;
52
+ component: string;
53
+ event: string;
54
+ description: string;
55
+ origin: string;
56
+ ip: string;
57
+ }
58
+ /** The logs table's rows (`table.reportlog`), cell by cell: time, user, affected user, context, component, event, description, origin, IP. */
59
+ export declare function readLogRows(page: Page): Promise<{
60
+ form: boolean;
61
+ rows: RawLogRow[];
62
+ }>;
63
+ /** A log row in the driver's terms: ids from the links, the time read back with the site's format. */
64
+ export declare function toLogEntry(raw: RawLogRow, format: DateFormat): LogEntry;
65
+ /**
66
+ * A course's logs, newest first, as its logs report lists them: by a user, an activity, a kind of
67
+ * action, and a time span, up to `limit` entries (100 unless given). Moodle filters by user, activity
68
+ * and action; the span is read page by page, stopping at the first entry older than `from`. Every
69
+ * entry's time comes as an ISO date, read back with the site language's own format.
70
+ */
71
+ export declare function courseLogs(context: BrowserContext, siteUrl: string, courseId: number, { userId, activityId, from, until, action, limit }?: {
72
+ userId?: number;
73
+ activityId?: number;
74
+ from?: Date;
75
+ until?: Date;
76
+ action?: LogAction;
77
+ limit?: number;
78
+ }): Promise<LogEntry[]>;
79
+ /** An activity's line in the activity report: its views, by how many people, and the last one. */
80
+ export interface ActivityViews {
81
+ activityId: number;
82
+ /** The module ("forum", "quiz"…) and the name, as the course shows it. */
83
+ type: string;
84
+ name: string;
85
+ views: number;
86
+ users: number;
87
+ /** The last view (ISO 8601); absent when nobody viewed it, or the site hides it. */
88
+ lastAccess?: string;
89
+ }
90
+ interface RawOutlineRow {
91
+ url: string;
92
+ name: string;
93
+ numbers: number[];
94
+ lastAccess: string;
95
+ }
96
+ /** The activity report's rows (`#outlinereport`): the activity's link, its views cell's numbers, its last access text. */
97
+ export declare function readOutlineRows(page: Page): Promise<{
98
+ form: boolean;
99
+ rows: RawOutlineRow[];
100
+ }>;
101
+ /**
102
+ * A course's activity report: per activity, how many times it was viewed, by how many people, and
103
+ * when last, from the logs (between `from` and `until` when given). Activities nobody viewed come with
104
+ * zero views.
105
+ */
106
+ export declare function activityReport(context: BrowserContext, siteUrl: string, courseId: number, { from, until }?: {
107
+ from?: Date;
108
+ until?: Date;
109
+ }): Promise<ActivityViews[]>;
110
+ /** Someone with a role in the course, and whether they took part in the activity. */
111
+ export interface ActivityParticipant {
112
+ userId: number;
113
+ fullName: string;
114
+ roleId: number;
115
+ /** How many actions (views, posts…) they made there; 0 when they didn't take part. */
116
+ actions: number;
117
+ }
118
+ /** The kinds of action the participation report counts: views, or posts (submitting, answering, posting). */
119
+ export declare const PARTICIPATION_ACTIONS: readonly ["view", "post"];
120
+ /** One of `PARTICIPATION_ACTIONS`: the kind of action `participationReport` counts. */
121
+ export type ParticipationAction = (typeof PARTICIPATION_ACTIONS)[number];
122
+ interface ParticipationPage {
123
+ activities: number[];
124
+ roles: number[];
125
+ rows: {
126
+ userId: number;
127
+ fullName: string;
128
+ actions: number;
129
+ }[];
130
+ }
131
+ /** The participation report's page: the activities and roles its form offers, and its table's rows (count from the row's checkbox, else the cell). */
132
+ export declare function readParticipation(page: Page): Promise<ParticipationPage>;
133
+ /**
134
+ * Who took part in an activity of a course, as its participation report counts it: everyone with
135
+ * the role (every role the report offers, unless `roleId`), with how many actions they made there
136
+ * (views or posts only, when `action`; since `since`, when given); those who did nothing come with 0.
137
+ */
138
+ export declare function participationReport(context: BrowserContext, siteUrl: string, courseId: number, activityId: number, { roleId, since, action }?: {
139
+ roleId?: number;
140
+ since?: Date;
141
+ action?: ParticipationAction;
142
+ }): Promise<ActivityParticipant[]>;
143
+ export {};