@digabi/exam-engine-core 23.8.2-alpha.0 → 23.8.2

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 (205) hide show
  1. package/dist/__tests__/annotations.test.d.ts +2 -0
  2. package/dist/__tests__/annotations.test.d.ts.map +1 -0
  3. package/dist/__tests__/annotations.test.js +306 -0
  4. package/dist/__tests__/annotations.test.js.map +1 -0
  5. package/dist/__tests__/examServerApi.d.ts.map +1 -1
  6. package/dist/__tests__/examServerApi.js +0 -2
  7. package/dist/__tests__/examServerApi.js.map +1 -1
  8. package/dist/__tests__/playwright/Annotations.test.d.ts +2 -0
  9. package/dist/__tests__/playwright/Annotations.test.d.ts.map +1 -0
  10. package/dist/__tests__/playwright/Annotations.test.js +201 -0
  11. package/dist/__tests__/playwright/Annotations.test.js.map +1 -0
  12. package/dist/__tests__/playwright/attachments/Attachments.test.d.ts +2 -0
  13. package/dist/__tests__/playwright/attachments/Attachments.test.d.ts.map +1 -0
  14. package/dist/__tests__/playwright/attachments/Attachments.test.js +30 -0
  15. package/dist/__tests__/playwright/attachments/Attachments.test.js.map +1 -0
  16. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.d.ts +2 -0
  17. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.d.ts.map +1 -0
  18. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.js +30 -0
  19. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.js.map +1 -0
  20. package/dist/__tests__/playwright/stories/Annotations.story.d.ts +15 -0
  21. package/dist/__tests__/playwright/stories/Annotations.story.d.ts.map +1 -0
  22. package/dist/__tests__/playwright/stories/Annotations.story.js +27 -0
  23. package/dist/__tests__/playwright/stories/Annotations.story.js.map +1 -0
  24. package/dist/__tests__/playwright/stories/attachments/Attachments.story.d.ts +13 -0
  25. package/dist/__tests__/playwright/stories/attachments/Attachments.story.d.ts.map +1 -0
  26. package/dist/__tests__/playwright/stories/attachments/Attachments.story.js +17 -0
  27. package/dist/__tests__/playwright/stories/attachments/Attachments.story.js.map +1 -0
  28. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.d.ts +13 -0
  29. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.d.ts.map +1 -0
  30. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.js +16 -0
  31. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.js.map +1 -0
  32. package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
  33. package/dist/assets/NotoMono.ttf +0 -0
  34. package/dist/assets/NotoMono.woff +0 -0
  35. package/dist/assets/NotoMono.woff2 +0 -0
  36. package/dist/assets/NotoSans-Bold.ttf +0 -0
  37. package/dist/assets/NotoSans-Bold.woff +0 -0
  38. package/dist/assets/NotoSans-Bold.woff2 +0 -0
  39. package/dist/assets/NotoSans-BoldItalic.ttf +0 -0
  40. package/dist/assets/NotoSans-BoldItalic.woff +0 -0
  41. package/dist/assets/NotoSans-BoldItalic.woff2 +0 -0
  42. package/dist/assets/NotoSans-Italic.ttf +0 -0
  43. package/dist/assets/NotoSans-Italic.woff +0 -0
  44. package/dist/assets/NotoSans-Italic.woff2 +0 -0
  45. package/dist/assets/NotoSans-Light.ttf +0 -0
  46. package/dist/assets/NotoSans-Light.woff +0 -0
  47. package/dist/assets/NotoSans-Light.woff2 +0 -0
  48. package/dist/assets/NotoSans-LightItalic.ttf +0 -0
  49. package/dist/assets/NotoSans-LightItalic.woff +0 -0
  50. package/dist/assets/NotoSans-LightItalic.woff2 +0 -0
  51. package/dist/assets/NotoSans-Regular.ttf +0 -0
  52. package/dist/assets/NotoSans-Regular.woff +0 -0
  53. package/dist/assets/NotoSans-Regular.woff2 +0 -0
  54. package/dist/assets/NotoSans-SemiBold.ttf +0 -0
  55. package/dist/assets/NotoSans-SemiBold.woff +0 -0
  56. package/dist/assets/NotoSans-SemiBold.woff2 +0 -0
  57. package/dist/assets/NotoSans-SemiBoldItalic.ttf +0 -0
  58. package/dist/assets/NotoSans-SemiBoldItalic.woff +0 -0
  59. package/dist/assets/NotoSans-SemiBoldItalic.woff2 +0 -0
  60. package/dist/assets/closeButton.svg +1 -0
  61. package/dist/assets/collapse.svg +12 -0
  62. package/dist/assets/expand.svg +12 -0
  63. package/dist/assets/helpButton.svg +9 -0
  64. package/dist/assets/redoButton.svg +5 -0
  65. package/dist/assets/undoButton.svg +5 -0
  66. package/dist/components/attachments/Attachments.js +1 -1
  67. package/dist/components/attachments/Attachments.js.map +1 -1
  68. package/dist/components/context/QuestionContext.d.ts.map +1 -1
  69. package/dist/components/context/QuestionContext.js +1 -1
  70. package/dist/components/context/QuestionContext.js.map +1 -1
  71. package/dist/components/exam/Exam.d.ts.map +1 -1
  72. package/dist/components/exam/Exam.js +1 -3
  73. package/dist/components/exam/Exam.js.map +1 -1
  74. package/dist/components/grading/GradingAnswer.d.ts +6 -2
  75. package/dist/components/grading/GradingAnswer.d.ts.map +1 -1
  76. package/dist/components/grading/GradingAnswer.js +3 -4
  77. package/dist/components/grading/GradingAnswer.js.map +1 -1
  78. package/dist/components/grading/examAnnotationUtils.d.ts +4 -0
  79. package/dist/components/grading/examAnnotationUtils.d.ts.map +1 -0
  80. package/dist/components/grading/examAnnotationUtils.js +123 -0
  81. package/dist/components/grading/examAnnotationUtils.js.map +1 -0
  82. package/dist/components/results/DNDAnswerContainer.d.ts +4 -0
  83. package/dist/components/results/DNDAnswerContainer.d.ts.map +1 -0
  84. package/dist/components/results/DNDAnswerContainer.js +22 -0
  85. package/dist/components/results/DNDAnswerContainer.js.map +1 -0
  86. package/dist/components/results/Results.d.ts.map +1 -1
  87. package/dist/components/results/Results.js +1 -3
  88. package/dist/components/results/Results.js.map +1 -1
  89. package/dist/components/shared/AnnotatableText.d.ts +5 -0
  90. package/dist/components/shared/AnnotatableText.d.ts.map +1 -0
  91. package/dist/components/shared/AnnotatableText.js +25 -0
  92. package/dist/components/shared/AnnotatableText.js.map +1 -0
  93. package/dist/components/shared/AnnotationImageMark.d.ts +16 -0
  94. package/dist/components/shared/AnnotationImageMark.d.ts.map +1 -0
  95. package/dist/components/shared/AnnotationImageMark.js +99 -0
  96. package/dist/components/shared/AnnotationImageMark.js.map +1 -0
  97. package/dist/components/shared/AnnotationMark.d.ts +9 -0
  98. package/dist/components/shared/AnnotationMark.d.ts.map +1 -0
  99. package/dist/components/shared/AnnotationMark.js +14 -0
  100. package/dist/components/shared/AnnotationMark.js.map +1 -0
  101. package/dist/components/shared/AnnotationPopup.d.ts +3 -0
  102. package/dist/components/shared/AnnotationPopup.d.ts.map +1 -0
  103. package/dist/components/shared/AnnotationPopup.js +24 -0
  104. package/dist/components/shared/AnnotationPopup.js.map +1 -0
  105. package/dist/components/shared/AnnotationTextMark.d.ts +11 -0
  106. package/dist/components/shared/AnnotationTextMark.d.ts.map +1 -0
  107. package/dist/components/shared/AnnotationTextMark.js +21 -0
  108. package/dist/components/shared/AnnotationTextMark.js.map +1 -0
  109. package/dist/components/shared/QuestionNumber.d.ts +1 -1
  110. package/dist/components/shared/QuestionNumber.d.ts.map +1 -1
  111. package/dist/components/shared/QuestionNumber.js +4 -1
  112. package/dist/components/shared/QuestionNumber.js.map +1 -1
  113. package/dist/components/shared/markText.d.ts +6 -0
  114. package/dist/components/shared/markText.d.ts.map +1 -0
  115. package/dist/components/shared/markText.js +77 -0
  116. package/dist/components/shared/markText.js.map +1 -0
  117. package/dist/createRenderChildNodes.d.ts +2 -0
  118. package/dist/createRenderChildNodes.d.ts.map +1 -1
  119. package/dist/createRenderChildNodes.js +4 -3
  120. package/dist/createRenderChildNodes.js.map +1 -1
  121. package/dist/dom-utils.js +1 -1
  122. package/dist/dom-utils.js.map +1 -1
  123. package/dist/eslint.config.d.ts +22 -0
  124. package/dist/eslint.config.d.ts.map +1 -0
  125. package/dist/eslint.config.js +31 -0
  126. package/dist/eslint.config.js.map +1 -0
  127. package/dist/i18n/exam_titles_fi-FI.d.ts +46 -0
  128. package/dist/i18n/exam_titles_fi-FI.d.ts.map +1 -0
  129. package/dist/i18n/exam_titles_fi-FI.js +46 -0
  130. package/dist/i18n/exam_titles_fi-FI.js.map +1 -0
  131. package/dist/i18n/exam_titles_fi-FI.json +45 -0
  132. package/dist/i18n/exam_titles_sv-FI.d.ts +46 -0
  133. package/dist/i18n/exam_titles_sv-FI.d.ts.map +1 -0
  134. package/dist/i18n/exam_titles_sv-FI.js +46 -0
  135. package/dist/i18n/exam_titles_sv-FI.js.map +1 -0
  136. package/dist/i18n/exam_titles_sv-FI.json +45 -0
  137. package/dist/i18n/exams.d.ts +11 -0
  138. package/dist/i18n/exams.d.ts.map +1 -0
  139. package/dist/i18n/exams.js +10 -0
  140. package/dist/i18n/exams.js.map +1 -0
  141. package/dist/i18n/fi-FI.d.ts +0 -3
  142. package/dist/i18n/fi-FI.d.ts.map +1 -1
  143. package/dist/i18n/fi-FI.js +0 -3
  144. package/dist/i18n/fi-FI.js.map +1 -1
  145. package/dist/i18n/sv-FI.d.ts.map +1 -1
  146. package/dist/i18n/sv-FI.js +0 -3
  147. package/dist/i18n/sv-FI.js.map +1 -1
  148. package/dist/main-bundle.js +13 -13
  149. package/dist/main-bundle.js.LICENSE.txt +0 -7
  150. package/dist/main.css +1 -1
  151. package/dist/parser/parseExamStructure.d.ts +1 -8
  152. package/dist/parser/parseExamStructure.d.ts.map +1 -1
  153. package/dist/parser/parseExamStructure.js +1 -1
  154. package/dist/parser/parseExamStructure.js.map +1 -1
  155. package/dist/types/ExamAnnotations.d.ts +46 -0
  156. package/dist/types/ExamAnnotations.d.ts.map +1 -0
  157. package/dist/types/ExamAnnotations.js +2 -0
  158. package/dist/types/ExamAnnotations.js.map +1 -0
  159. package/dist/types/ExamAnswer.d.ts +1 -5
  160. package/dist/types/ExamAnswer.d.ts.map +1 -1
  161. package/dist/types/ExamServerAPI.d.ts +0 -4
  162. package/dist/types/ExamServerAPI.d.ts.map +1 -1
  163. package/dist/types/GradingStructure.d.ts +1 -7
  164. package/dist/types/GradingStructure.d.ts.map +1 -1
  165. package/dist/validateAnswers.d.ts.map +1 -1
  166. package/dist/validateAnswers.js +0 -1
  167. package/dist/validateAnswers.js.map +1 -1
  168. package/package.json +2 -3
  169. package/dist/components/exam/AudioAnswer.d.ts +0 -7
  170. package/dist/components/exam/AudioAnswer.d.ts.map +0 -1
  171. package/dist/components/exam/AudioAnswer.js +0 -79
  172. package/dist/components/exam/AudioAnswer.js.map +0 -1
  173. package/dist/components/exam/AudioAnswerRecorder.d.ts +0 -10
  174. package/dist/components/exam/AudioAnswerRecorder.d.ts.map +0 -1
  175. package/dist/components/exam/AudioAnswerRecorder.js +0 -28
  176. package/dist/components/exam/AudioAnswerRecorder.js.map +0 -1
  177. package/dist/components/exam/OralAnswer.d.ts +0 -6
  178. package/dist/components/exam/OralAnswer.d.ts.map +0 -1
  179. package/dist/components/exam/OralAnswer.js +0 -18
  180. package/dist/components/exam/OralAnswer.js.map +0 -1
  181. package/dist/components/results/AudioAnswer.d.ts +0 -6
  182. package/dist/components/results/AudioAnswer.d.ts.map +0 -1
  183. package/dist/components/results/AudioAnswer.js +0 -13
  184. package/dist/components/results/AudioAnswer.js.map +0 -1
  185. package/dist/components/shared/internal/AudioError.d.ts +0 -8
  186. package/dist/components/shared/internal/AudioError.d.ts.map +0 -1
  187. package/dist/components/shared/internal/AudioError.js +0 -17
  188. package/dist/components/shared/internal/AudioError.js.map +0 -1
  189. package/dist/components/shared/internal/AudioRecordingError.d.ts +0 -8
  190. package/dist/components/shared/internal/AudioRecordingError.d.ts.map +0 -1
  191. package/dist/components/shared/internal/AudioRecordingError.js +0 -17
  192. package/dist/components/shared/internal/AudioRecordingError.js.map +0 -1
  193. package/dist/node_modules_music-metadata_lib_aiff_AiffParser_js.main-bundle.js +0 -33
  194. package/dist/node_modules_music-metadata_lib_dsdiff_DsdiffParser_js.main-bundle.js +0 -26
  195. package/dist/node_modules_music-metadata_lib_dsf_DsfParser_js.main-bundle.js +0 -33
  196. package/dist/node_modules_music-metadata_lib_wavpack_WavPackParser_js.main-bundle.js +0 -26
  197. package/dist/vendors-node_modules_music-metadata_lib_asf_AsfParser_js.main-bundle.js +0 -40
  198. package/dist/vendors-node_modules_music-metadata_lib_flac_FlacParser_js.main-bundle.js +0 -47
  199. package/dist/vendors-node_modules_music-metadata_lib_id3v2_ID3v2Parser_js.main-bundle.js +0 -26
  200. package/dist/vendors-node_modules_music-metadata_lib_matroska_MatroskaParser_js.main-bundle.js +0 -40
  201. package/dist/vendors-node_modules_music-metadata_lib_mp4_MP4Parser_js.main-bundle.js +0 -33
  202. package/dist/vendors-node_modules_music-metadata_lib_mpeg_MpegParser_js.main-bundle.js +0 -47
  203. package/dist/vendors-node_modules_music-metadata_lib_musepack_MusepackParser_js.main-bundle.js +0 -68
  204. package/dist/vendors-node_modules_music-metadata_lib_ogg_OggParser_js.main-bundle.js +0 -82
  205. package/dist/vendors-node_modules_music-metadata_lib_wav_WaveParser_js.main-bundle.js +0 -40
@@ -1 +1 @@
1
- {"version":3,"file":"validateAnswers.js","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAiB9B,SAAS,UAAU,CACjB,aAA0B,EAC1B,OAAoD,EACpD,YAAe;IAEf,SAAS,EAAE,CAAC,WAAc,EAAE,OAAoB;QAC9C,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,oBAAoB,CAC3B,aAA0B,EAC1B,WAA2C;IAE3C,OAAO,UAAU,CACf,aAAa,EACb,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QAClB,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAC9D,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,MAAK,UAAU,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,MAAK,MAAM,EAAE,CAAC;gBACrE,OAAO,WAAW,CAAC,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS;oBAC9D,CAAC,CAAC;wBACE,GAAG,MAAM;wBACT;4BACE,IAAI,EAAE,eAAe;4BACrB,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,aAAa;4BAC/C,cAAc,EAAE,WAAW,CAAC,cAAc;4BAC1C,WAAW,EAAE,UAAU;yBACxB;qBACF;oBACH,CAAC,CAAC,MAAM,CAAA;YACZ,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC,EACD,EAAuB,CACxB,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,aAA0B,EAC1B,WAA2C;IAE3C,2EAA2E;IAC3E,6DAA6D;IAC7D,SAAS,EAAE,CAAC,OAAoB;;QAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAA;QAErF,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAC3C,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;gBACnE,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,CAAC,UAAU,mCAAI,QAAQ,CAAA;gBAC5D,uDAAuD;gBACvD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;gBACzF,kEAAkE;gBAClE,sEAAsE;gBACtE,8CAA8C;gBAC9C,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,MAAM;oBACrB,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC5E,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAA;gBAChC,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;gBAClE,sEAAsE;gBACtE,kEAAkE;gBAClE,SAAS;gBACT,MAAM,YAAY,GAChB,WAAW,GAAG,UAAU;oBACtB,CAAC,CAAC;wBACE;4BACE,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,OAAO,CAAC,IAAI;4BACzB,aAAa;4BACb,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;4BAClD,UAAU;4BACV,UAAU;yBACI;wBAChB,GAAG,iBAAiB;qBACrB;oBACH,CAAC,CAAC,iBAAiB,CAAA;gBAEvB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA;YACrD,CAAC;YACD,KAAK,aAAa,CAAC;YACnB,KAAK,cAAc,CAAC;YACpB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,eAAe,CAAC;YACrB,KAAK,YAAY,CAAC;YAClB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;gBAC9D,sEAAsE;gBACtE,QAAQ;gBACR,MAAM,aAAa,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAC,MAAM,IAAG,CAAC,CAAA;gBACnD,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,YAAY,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,aAA0B,EAC1B,WAA2C;IAE3C,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAE,YAAY,CAAC,EAAE,CAC5E,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CACzC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"validateAnswers.js","sourceRoot":"","sources":["../src/validateAnswers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digabi/exam-engine-core",
3
- "version": "23.8.2-alpha.0",
3
+ "version": "23.8.2",
4
4
  "main": "dist/main-bundle.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "Matriculation Examination Board, Finland",
@@ -46,7 +46,6 @@
46
46
  "react-css-transition-replace": "^5.0.1",
47
47
  "react-dom": "^18.2.0",
48
48
  "react-i18next": "^15.0.0",
49
- "react-media-recorder": "^1.7.1",
50
49
  "react-redux": "^9.1.0",
51
50
  "react-test-renderer": "^18.2.0",
52
51
  "redux": "^5.0.1",
@@ -61,5 +60,5 @@
61
60
  "webpack-bundle-analyzer": "^4.1.0",
62
61
  "webpack-cli": "^6.0.0"
63
62
  },
64
- "gitHead": "140db0f227850fcff6089ae00b423b67ad479b93"
63
+ "gitHead": "95761ab3ae65a68ae68581807aef19b6c05505b0"
65
64
  }
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { ExamComponentProps } from '../../createRenderChildNodes';
3
- import type { AudioAnswer } from '../../types/ExamAnswer';
4
- declare function AudioAnswer(audioAnswerProps: ExamComponentProps): React.JSX.Element;
5
- declare const _default: React.MemoExoticComponent<typeof AudioAnswer>;
6
- export default _default;
7
- //# sourceMappingURL=AudioAnswer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAOjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAuFzD,iBAAS,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,qBAmCxD;;AAED,wBAAsC"}
@@ -1,79 +0,0 @@
1
- import React, { useContext, useRef, useState } from 'react';
2
- import { getNumericAttribute } from '../../dom-utils';
3
- import { saveAnswer } from '../../store/answers/actions';
4
- import { useDispatch, useSelector } from 'react-redux';
5
- import { ReactMediaRecorder } from 'react-media-recorder';
6
- import { ExamContext } from '../context/ExamContext';
7
- import { useExamTranslation } from '../../i18n';
8
- import { faMicrophone, faStop } from '@fortawesome/free-solid-svg-icons';
9
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
- function AudioAnswerRecorder({ onSave, onDelete, bitsPerSecond, audioUrl }) {
11
- const { t } = useExamTranslation();
12
- const timer = useRef();
13
- const [timeElapsed, setTimeElapsed] = useState(0);
14
- function startTimer() {
15
- const timerId = setInterval(() => {
16
- var _a, _b;
17
- const timeElapsedMs = new Date().getTime() - ((_b = (_a = timer === null || timer === void 0 ? void 0 : timer.current) === null || _a === void 0 ? void 0 : _a.startTime) !== null && _b !== void 0 ? _b : new Date()).getTime();
18
- setTimeElapsed(Math.floor(timeElapsedMs / 1000));
19
- }, 1000);
20
- timer.current = { id: timerId, startTime: new Date() };
21
- }
22
- function saveAndStopTimer(blob) {
23
- var _a;
24
- clearInterval((_a = timer.current) === null || _a === void 0 ? void 0 : _a.id);
25
- setTimeElapsed(0);
26
- onSave(blob);
27
- }
28
- function renderTimeElapsed() {
29
- const minutes = Math.floor(timeElapsed / 60);
30
- const sec = timeElapsed - minutes * 60;
31
- const seconds = `00${sec}`.slice(-2);
32
- return `${minutes}:${seconds}`;
33
- }
34
- return (React.createElement(ReactMediaRecorder, { audio: true, mediaRecorderOptions: { audioBitsPerSecond: bitsPerSecond !== null && bitsPerSecond !== void 0 ? bitsPerSecond : 65536 }, blobPropertyBag: { type: 'audio/mpeg' }, onStart: startTimer, onStop: (_blobUrl, blob) => saveAndStopTimer(blob), render: ({ status, error, startRecording, stopRecording }) => (React.createElement(React.Fragment, null,
35
- React.createElement("div", null,
36
- error && React.createElement("p", null,
37
- "error: ",
38
- error),
39
- React.createElement("p", null,
40
- status != 'recording' && !audioUrl && (React.createElement("button", { className: "e-button", onClick: startRecording },
41
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faMicrophone, fixedWidth: true }),
42
- t('start.recording'))),
43
- status == 'recording' && (React.createElement(React.Fragment, null,
44
- React.createElement("button", { className: "e-button", onClick: stopRecording },
45
- React.createElement(FontAwesomeIcon, { size: "sm", icon: faStop, fixedWidth: true }),
46
- t('stop.recording')),
47
- React.createElement("span", { className: "time-elapsed" }, renderTimeElapsed()))))),
48
- audioUrl && (React.createElement("div", { className: "audio-answer-controls" },
49
- React.createElement("audio", { src: audioUrl, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" }),
50
- React.createElement("button", { className: "e-button-reversed delete-recording", onClick: onDelete }, t('remove.recording')))))) }));
51
- }
52
- function AudioAnswer(audioAnswerProps) {
53
- const { element } = audioAnswerProps;
54
- const questionId = getNumericAttribute(element, 'question-id');
55
- const answer = useSelector((state) => state.answers.answersById[questionId]);
56
- const displayNumber = element.getAttribute('display-number');
57
- const dispatch = useDispatch();
58
- const { examServerApi } = useContext(ExamContext);
59
- return (React.createElement("div", { className: "audio-answer" },
60
- React.createElement("span", { className: "anchor", id: `question-nr-${displayNumber}` }),
61
- React.createElement(AudioAnswerRecorder, { audioUrl: (answer === null || answer === void 0 ? void 0 : answer.value) === '' ? undefined : answer === null || answer === void 0 ? void 0 : answer.value, onSave: audio => {
62
- void (async function () {
63
- const audioAttachmentUrl = await examServerApi.saveAudio(questionId, audio);
64
- const answer = { questionId, type: 'audio', value: audioAttachmentUrl };
65
- dispatch(saveAnswer(answer));
66
- })();
67
- }, onDelete: () => {
68
- if (!answer)
69
- return;
70
- void (async function () {
71
- const audioId = answer.value.split('/').pop();
72
- await examServerApi.deleteAudio(audioId);
73
- const answerObj = { questionId, type: 'audio', value: '' };
74
- dispatch(saveAnswer(answerObj));
75
- })();
76
- } })));
77
- }
78
- export default React.memo(AudioAnswer);
79
- //# sourceMappingURL=AudioAnswer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswer.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- interface AudioAnswerRecorderProps {
3
- onSave: (blobUrl: string, blob: Blob) => void;
4
- onDelete: () => void;
5
- bitsPerSecond?: number;
6
- }
7
- declare function AudioAnswerRecorder({ onSave, onDelete, bitsPerSecond }: AudioAnswerRecorderProps): React.JSX.Element;
8
- declare const _default: React.MemoExoticComponent<typeof AudioAnswerRecorder>;
9
- export default _default;
10
- //# sourceMappingURL=AudioAnswerRecorder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswerRecorder.d.ts","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswerRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAGvC,UAAU,wBAAwB;IAChC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,iBAAS,mBAAmB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,wBAAwB,qBA8CzF;;AAED,wBAA8C"}
@@ -1,28 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { ReactMediaRecorder } from 'react-media-recorder';
3
- function AudioAnswerRecorder({ onSave, onDelete, bitsPerSecond }) {
4
- const [blobSize, setBlobSize] = useState(0);
5
- return (React.createElement(ReactMediaRecorder, { audio: true, mediaRecorderOptions: { audioBitsPerSecond: bitsPerSecond !== null && bitsPerSecond !== void 0 ? bitsPerSecond : 65536 }, onStop: (blobUrl, blob) => onSave(blobUrl, blob), render: ({ status, error, startRecording, stopRecording, clearBlobUrl, mediaBlobUrl }) => (React.createElement(React.Fragment, null,
6
- React.createElement("div", null,
7
- React.createElement("p", null,
8
- "status: ",
9
- status),
10
- error && React.createElement("p", null,
11
- "error: ",
12
- error),
13
- blobSize > 0 && React.createElement("p", null,
14
- "size: ",
15
- blobSize,
16
- " bytes"),
17
- React.createElement("p", null,
18
- React.createElement("button", { onClick: startRecording, disabled: status != 'idle' }, "Tallenna \u00E4\u00E4nt\u00E4"),
19
- React.createElement("button", { onClick: stopRecording, disabled: status != 'recording' }, "Lopeta tallennus"),
20
- React.createElement("button", { onClick: () => {
21
- clearBlobUrl();
22
- setBlobSize(0);
23
- onDelete();
24
- }, disabled: status != 'stopped' || !mediaBlobUrl }, "Poista \u00E4\u00E4nite"))),
25
- mediaBlobUrl && (React.createElement("audio", { src: mediaBlobUrl, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" })))) }));
26
- }
27
- export default React.memo(AudioAnswerRecorder);
28
- //# sourceMappingURL=AudioAnswerRecorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswerRecorder.js","sourceRoot":"","sources":["../../../src/components/exam/AudioAnswerRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAQzD,SAAS,mBAAmB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAA4B;IACxF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAA;IAEnD,OAAO,CACL,oBAAC,kBAAkB,IACjB,KAAK,EAAE,IAAI,EACX,oBAAoB,EAAE,EAAE,kBAAkB,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,KAAK,EAAE,EACpE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAChD,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CACxF;YACE;gBACE;;oBAAY,MAAM,CAAK;gBACtB,KAAK,IAAI;;oBAAW,KAAK,CAAK;gBAC9B,QAAQ,GAAG,CAAC,IAAI;;oBAAU,QAAQ;6BAAW;gBAC9C;oBACE,gCAAQ,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,MAAM,oCAElD;oBACT,gCAAQ,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,IAAI,WAAW,uBAEtD;oBACT,gCACE,OAAO,EAAE,GAAG,EAAE;4BACZ,YAAY,EAAE,CAAA;4BACd,WAAW,CAAC,CAAC,CAAC,CAAA;4BACd,QAAQ,EAAE,CAAA;wBACZ,CAAC,EACD,QAAQ,EAAE,MAAM,IAAI,SAAS,IAAI,CAAC,YAAY,8BAGvC,CACP,CACA;YACL,YAAY,IAAI,CACf,+BACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAC,UAAU,EAClB,QAAQ,QACR,YAAY,EAAC,YAAY,GACzB,CACH,CACA,CACJ,GACD,CACH,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { ExamComponentProps } from '../../createRenderChildNodes';
3
- declare function OralAnswer(props: ExamComponentProps): React.JSX.Element;
4
- declare const _default: React.MemoExoticComponent<typeof OralAnswer>;
5
- export default _default;
6
- //# sourceMappingURL=OralAnswer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OralAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/OralAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAKjE,iBAAS,UAAU,CAAC,KAAK,EAAE,kBAAkB,qBAuB5C;;AAED,wBAAqC"}
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { findChildElement, hasSiblingQuestions } from '../../dom-utils';
3
- import { shortDisplayNumber } from '../../shortDisplayNumber';
4
- import { ScreenReaderOnly } from '../ScreenReaderOnly';
5
- function OralAnswer(props) {
6
- const { element, renderChildNodes } = props;
7
- const displayNumber = element.getAttribute('display-number');
8
- const hint = findChildElement(element, 'hint');
9
- const hasSiblings = hasSiblingQuestions(element);
10
- return (React.createElement(React.Fragment, null,
11
- React.createElement("span", { className: "anchor", id: `question-nr-${displayNumber}` }),
12
- hint ? (React.createElement("label", { className: "e-nowrap" },
13
- hasSiblings && (React.createElement("sup", { className: "e-text-answer-display-number e-color-darkgrey" }, shortDisplayNumber(displayNumber))),
14
- React.createElement(ScreenReaderOnly, null, renderChildNodes(hint)),
15
- React.createElement("div", null, "FOO"))) : (React.createElement("div", null, "FOO"))));
16
- }
17
- export default React.memo(OralAnswer);
18
- //# sourceMappingURL=OralAnswer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OralAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/OralAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,SAAS,UAAU,CAAC,KAAyB;IAC3C,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAA;IAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAE9C,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAEhD,OAAO,CACL;QACE,8BAAM,SAAS,EAAC,QAAQ,EAAC,EAAE,EAAE,eAAe,aAAa,EAAE,GAAI;QAC9D,IAAI,CAAC,CAAC,CAAC,CACN,+BAAO,SAAS,EAAC,UAAU;YACxB,WAAW,IAAI,CACd,6BAAK,SAAS,EAAC,+CAA+C,IAAE,kBAAkB,CAAC,aAAa,CAAC,CAAO,CACzG;YACD,oBAAC,gBAAgB,QAAE,gBAAgB,CAAC,IAAI,CAAC,CAAoB;YAC7D,uCAAc,CACR,CACT,CAAC,CAAC,CAAC,CACF,uCAAc,CACf,CACA,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { ExamComponentProps } from '../../createRenderChildNodes';
3
- declare function AudioAnswer(audioAnswerProps: ExamComponentProps): React.JSX.Element | null;
4
- declare const _default: React.MemoExoticComponent<typeof AudioAnswer>;
5
- export default _default;
6
- //# sourceMappingURL=AudioAnswer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAKjE,iBAAS,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,4BAUxD;;AAED,wBAAsC"}
@@ -1,13 +0,0 @@
1
- import React, { useContext } from 'react';
2
- import { getNumericAttribute } from '../../dom-utils';
3
- import { ResultsContext } from '../context/ResultsContext';
4
- function AudioAnswer(audioAnswerProps) {
5
- const { element } = audioAnswerProps;
6
- const { answersByQuestionId } = useContext(ResultsContext);
7
- const questionId = getNumericAttribute(element, 'question-id');
8
- const answer = answersByQuestionId[questionId];
9
- const value = answer && answer.value;
10
- return value ? (React.createElement("audio", { src: value, className: "e-column e-column--narrow", preload: "metadata", controls: true, controlsList: "nodownload" })) : null;
11
- }
12
- export default React.memo(AudioAnswer);
13
- //# sourceMappingURL=AudioAnswer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioAnswer.js","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,SAAS,WAAW,CAAC,gBAAoC;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAA;IACpC,MAAM,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1D,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAE,CAAA;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAA2B,CAAA;IACxE,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,CAAA;IAEpC,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,+BAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,2BAA2B,EAAC,OAAO,EAAC,UAAU,EAAC,QAAQ,QAAC,YAAY,EAAC,YAAY,GAAG,CAClH,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA"}
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import { AudioError } from '../../../index';
3
- declare const AudioError: React.FunctionComponent<{
4
- error?: AudioError;
5
- children: React.ReactNode[] | React.ReactNode;
6
- }>;
7
- export default AudioError;
8
- //# sourceMappingURL=AudioError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioError.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioError.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3C,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;CAC9C,CAkBA,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -1,17 +0,0 @@
1
- import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import React from 'react';
4
- import ReactCSSTransitionReplace from 'react-css-transition-replace';
5
- import { useExamTranslation } from '../../../i18n';
6
- const AudioError = ({ error, children }) => {
7
- const { t } = useExamTranslation();
8
- return (
9
- // @types/react 18 removed children from implicit props. This component has not explicitly added them yet
10
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
11
- // @ts-ignore
12
- React.createElement(ReactCSSTransitionReplace, { transitionName: "e-crossfade", transitionEnterTimeout: 500, transitionLeaveTimeout: 500 }, error != null ? (React.createElement("div", { className: "e-color-error", role: "alert" },
13
- React.createElement(FontAwesomeIcon, { icon: faExclamationTriangle, className: "e-mrg-r-1" }),
14
- t(`audio-errors.${error}`))) : (React.createElement("div", { key: "no-error" }, children))));
15
- };
16
- export default AudioError;
17
- //# sourceMappingURL=AudioError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioError.js","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,yBAAyB,MAAM,8BAA8B,CAAA;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,UAAU,GAGX,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3B,MAAM,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAElC,OAAO;IACL,yGAAyG;IACzG,6DAA6D;IAC7D,aAAa;IACb,oBAAC,yBAAyB,IAAC,cAAc,EAAC,aAAa,EAAC,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG,IAC7G,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CACf,6BAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,OAAO;QACzC,oBAAC,eAAe,IAAC,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAC,WAAW,GAAG;QACrE,CAAC,CAAC,gBAAgB,KAAK,EAAW,CAAC,CAChC,CACP,CAAC,CAAC,CAAC,CACF,6BAAK,GAAG,EAAC,UAAU,IAAE,QAAQ,CAAO,CACrC,CACyB,CAC7B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import { AudioPlaybackError } from '../../../index';
3
- declare const AudioPlaybackError: React.FunctionComponent<{
4
- error?: AudioPlaybackError;
5
- children: React.ReactNode[] | React.ReactNode;
6
- }>;
7
- export default AudioPlaybackError;
8
- //# sourceMappingURL=AudioRecordingError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioRecordingError.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioRecordingError.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGnD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAChD,KAAK,CAAC,EAAE,kBAAkB,CAAA;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;CAC9C,CAkBA,CAAA;AAED,eAAe,kBAAkB,CAAA"}
@@ -1,17 +0,0 @@
1
- import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import React from 'react';
4
- import ReactCSSTransitionReplace from 'react-css-transition-replace';
5
- import { useExamTranslation } from '../../../i18n';
6
- const AudioPlaybackError = ({ error, children }) => {
7
- const { t } = useExamTranslation();
8
- return (
9
- // @types/react 18 removed children from implicit props. This component has not explicitly added them yet
10
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
11
- // @ts-ignore
12
- React.createElement(ReactCSSTransitionReplace, { transitionName: "e-crossfade", transitionEnterTimeout: 500, transitionLeaveTimeout: 500 }, error != null ? (React.createElement("div", { className: "e-color-error", role: "alert" },
13
- React.createElement(FontAwesomeIcon, { icon: faExclamationTriangle, className: "e-mrg-r-1" }),
14
- t(`audio-errors.${error}`))) : (React.createElement("div", { key: "no-error" }, children))));
15
- };
16
- export default AudioPlaybackError;
17
- //# sourceMappingURL=AudioRecordingError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioRecordingError.js","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioRecordingError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,yBAAyB,MAAM,8BAA8B,CAAA;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,kBAAkB,GAGnB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3B,MAAM,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAElC,OAAO;IACL,yGAAyG;IACzG,6DAA6D;IAC7D,aAAa;IACb,oBAAC,yBAAyB,IAAC,cAAc,EAAC,aAAa,EAAC,sBAAsB,EAAE,GAAG,EAAE,sBAAsB,EAAE,GAAG,IAC7G,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CACf,6BAAK,SAAS,EAAC,eAAe,EAAC,IAAI,EAAC,OAAO;QACzC,oBAAC,eAAe,IAAC,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAC,WAAW,GAAG;QACrE,CAAC,CAAC,gBAAgB,KAAK,EAAW,CAAC,CAChC,CACP,CAAC,CAAC,CAAC,CACF,6BAAK,GAAG,EAAC,UAAU,IAAE,QAAQ,CAAO,CACrC,CACyB,CAC7B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,kBAAkB,CAAA"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- /*
3
- * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
4
- * This devtool is neither made for production nor for readable output files.
5
- * It uses "eval()" calls to create a separate source file in the browser devtools.
6
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
- * or disable the default devtool with "devtool: false".
8
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
- */
10
- (this["webpackChunkExamBundle"] = this["webpackChunkExamBundle"] || []).push([["node_modules_music-metadata_lib_aiff_AiffParser_js"],{
11
-
12
- /***/ "../../node_modules/music-metadata/lib/aiff/AiffParser.js":
13
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14
-
15
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AIFFParser: () => (/* binding */ AIFFParser)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/debug/src/browser.js\");\n/* harmony import */ var strtok3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/strtok3/lib/core.js\");\n/* harmony import */ var _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/ID3v2Parser.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n/* harmony import */ var _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/BasicParser.js\");\n/* harmony import */ var _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\"../../node_modules/music-metadata/lib/aiff/AiffToken.js\");\n/* harmony import */ var _iff_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\"../../node_modules/music-metadata/lib/iff/index.js\");\n\n\n\n\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_1__('music-metadata:parser:aiff');\n/**\n * AIFF - Audio Interchange File Format\n *\n * Ref:\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/AIFF-1.3.pdf\n */\nclass AIFFParser extends _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_5__.BasicParser {\n constructor() {\n super(...arguments);\n this.isCompressed = null;\n }\n async parse() {\n const header = await this.tokenizer.readToken(_iff_index_js__WEBPACK_IMPORTED_MODULE_7__.Header);\n if (header.chunkID !== 'FORM')\n throw new _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__.AiffContentError('Invalid Chunk-ID, expected \\'FORM\\''); // Not AIFF format\n const type = await this.tokenizer.readToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_4__.FourCcToken);\n switch (type) {\n case 'AIFF':\n this.metadata.setFormat('container', type);\n this.isCompressed = false;\n break;\n case 'AIFC':\n this.metadata.setFormat('container', 'AIFF-C');\n this.isCompressed = true;\n break;\n default:\n throw new _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__.AiffContentError(`Unsupported AIFF type: ${type}`);\n }\n this.metadata.setFormat('lossless', !this.isCompressed);\n try {\n while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= _iff_index_js__WEBPACK_IMPORTED_MODULE_7__.Header.len) {\n debug(`Reading AIFF chunk at offset=${this.tokenizer.position}`);\n const chunkHeader = await this.tokenizer.readToken(_iff_index_js__WEBPACK_IMPORTED_MODULE_7__.Header);\n const nextChunk = 2 * Math.round(chunkHeader.chunkSize / 2);\n const bytesRead = await this.readData(chunkHeader);\n await this.tokenizer.ignore(nextChunk - bytesRead);\n }\n }\n catch (err) {\n if (err instanceof strtok3__WEBPACK_IMPORTED_MODULE_2__.EndOfStreamError) {\n debug(\"End-of-stream\");\n }\n else {\n throw err;\n }\n }\n }\n async readData(header) {\n switch (header.chunkID) {\n case 'COMM': { // The Common Chunk\n if (this.isCompressed === null) {\n throw new _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__.AiffContentError('Failed to parse AIFF.COMM chunk when compression type is unknown');\n }\n const common = await this.tokenizer.readToken(new _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__.Common(header, this.isCompressed));\n this.metadata.setFormat('bitsPerSample', common.sampleSize);\n this.metadata.setFormat('sampleRate', common.sampleRate);\n this.metadata.setFormat('numberOfChannels', common.numChannels);\n this.metadata.setFormat('numberOfSamples', common.numSampleFrames);\n this.metadata.setFormat('duration', common.numSampleFrames / common.sampleRate);\n if (common.compressionName || common.compressionType) {\n this.metadata.setFormat('codec', common.compressionName ?? _AiffToken_js__WEBPACK_IMPORTED_MODULE_6__.compressionTypes[common.compressionType]);\n }\n return header.chunkSize;\n }\n case 'ID3 ': { // ID3-meta-data\n const id3_data = await this.tokenizer.readToken(new token_types__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayType(header.chunkSize));\n const rst = strtok3__WEBPACK_IMPORTED_MODULE_2__.fromBuffer(id3_data);\n await new _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__.ID3v2Parser().parse(this.metadata, rst, this.options);\n return header.chunkSize;\n }\n case 'SSND': // Sound Data Chunk\n if (this.metadata.format.duration) {\n this.metadata.setFormat('bitrate', 8 * header.chunkSize / this.metadata.format.duration);\n }\n return 0;\n case 'NAME': // Sample name chunk\n case 'AUTH': // Author chunk\n case '(c) ': // Copyright chunk\n case 'ANNO': // Annotation chunk\n return this.readTextChunk(header);\n default:\n debug(`Ignore chunk id=${header.chunkID}, size=${header.chunkSize}`);\n return 0;\n }\n }\n async readTextChunk(header) {\n const value = await this.tokenizer.readToken(new token_types__WEBPACK_IMPORTED_MODULE_0__.StringType(header.chunkSize, 'ascii'));\n const values = value.split('\\0').map(v => v.trim()).filter(v => v?.length);\n await Promise.all(values.map(v => this.metadata.addTag('AIFF', header.chunkID, v)));\n return header.chunkSize;\n }\n}\n//# sourceMappingURL=AiffParser.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/aiff/AiffParser.js?");
16
-
17
- /***/ }),
18
-
19
- /***/ "../../node_modules/music-metadata/lib/aiff/AiffToken.js":
20
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
21
-
22
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AiffContentError: () => (/* binding */ AiffContentError),\n/* harmony export */ Common: () => (/* binding */ Common),\n/* harmony export */ compressionTypes: () => (/* binding */ compressionTypes)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/music-metadata/lib/ParseError.js\");\n\n\n\nconst compressionTypes = {\n NONE: 'not compressed\tPCM\tApple Computer',\n sowt: 'PCM (byte swapped)',\n fl32: '32-bit floating point IEEE 32-bit float',\n fl64: '64-bit floating point IEEE 64-bit float\tApple Computer',\n alaw: 'ALaw 2:1\t8-bit ITU-T G.711 A-law',\n ulaw: 'µLaw 2:1\t8-bit ITU-T G.711 µ-law\tApple Computer',\n ULAW: 'CCITT G.711 u-law 8-bit ITU-T G.711 µ-law',\n ALAW: 'CCITT G.711 A-law 8-bit ITU-T G.711 A-law',\n FL32: 'Float 32\tIEEE 32-bit float '\n};\nclass AiffContentError extends (0,_ParseError_js__WEBPACK_IMPORTED_MODULE_2__.makeUnexpectedFileContentError)('AIFF') {\n}\nclass Common {\n constructor(header, isAifc) {\n this.isAifc = isAifc;\n const minimumChunkSize = isAifc ? 22 : 18;\n if (header.chunkSize < minimumChunkSize)\n throw new AiffContentError(`COMMON CHUNK size should always be at least ${minimumChunkSize}`);\n this.len = header.chunkSize;\n }\n get(buf, off) {\n // see: https://cycling74.com/forums/aiffs-80-bit-sample-rate-value\n const shift = token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE.get(buf, off + 8) - 16398;\n const baseSampleRate = token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE.get(buf, off + 8 + 2);\n const res = {\n numChannels: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE.get(buf, off),\n numSampleFrames: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_BE.get(buf, off + 2),\n sampleSize: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE.get(buf, off + 6),\n sampleRate: shift < 0 ? baseSampleRate >> Math.abs(shift) : baseSampleRate << shift\n };\n if (this.isAifc) {\n res.compressionType = _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__.FourCcToken.get(buf, off + 18);\n if (this.len > 22) {\n const strLen = token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8.get(buf, off + 22);\n if (strLen > 0) {\n const padding = (strLen + 1) % 2;\n if (23 + strLen + padding === this.len) {\n res.compressionName = new token_types__WEBPACK_IMPORTED_MODULE_0__.StringType(strLen, 'latin1').get(buf, off + 23);\n }\n else {\n throw new AiffContentError('Illegal pstring length');\n }\n }\n else {\n res.compressionName = undefined;\n }\n }\n }\n else {\n res.compressionName = 'PCM';\n }\n return res;\n }\n}\n//# sourceMappingURL=AiffToken.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/aiff/AiffToken.js?");
23
-
24
- /***/ }),
25
-
26
- /***/ "../../node_modules/music-metadata/lib/iff/index.js":
27
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
28
-
29
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Header: () => (/* binding */ Header)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n\n\n/**\n * Common AIFF chunk header\n */\nconst Header = {\n len: 8,\n get: (buf, off) => {\n return {\n // Chunk type ID\n chunkID: _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__.FourCcToken.get(buf, off),\n // Chunk size\n chunkSize: Number(BigInt(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_BE.get(buf, off + 4)))\n };\n }\n};\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/iff/index.js?");
30
-
31
- /***/ })
32
-
33
- }]);
@@ -1,26 +0,0 @@
1
- "use strict";
2
- /*
3
- * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
4
- * This devtool is neither made for production nor for readable output files.
5
- * It uses "eval()" calls to create a separate source file in the browser devtools.
6
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
- * or disable the default devtool with "devtool: false".
8
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
- */
10
- (this["webpackChunkExamBundle"] = this["webpackChunkExamBundle"] || []).push([["node_modules_music-metadata_lib_dsdiff_DsdiffParser_js"],{
11
-
12
- /***/ "../../node_modules/music-metadata/lib/dsdiff/DsdiffParser.js":
13
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14
-
15
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DsdiffContentParseError: () => (/* binding */ DsdiffContentParseError),\n/* harmony export */ DsdiffParser: () => (/* binding */ DsdiffParser)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/debug/src/browser.js\");\n/* harmony import */ var strtok3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/strtok3/lib/core.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n/* harmony import */ var _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/BasicParser.js\");\n/* harmony import */ var _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/ID3v2Parser.js\");\n/* harmony import */ var _DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\"../../node_modules/music-metadata/lib/dsdiff/DsdiffToken.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\"../../node_modules/music-metadata/lib/ParseError.js\");\n\n\n\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_1__('music-metadata:parser:aiff');\nclass DsdiffContentParseError extends (0,_ParseError_js__WEBPACK_IMPORTED_MODULE_7__.makeUnexpectedFileContentError)('DSDIFF') {\n}\n/**\n * DSDIFF - Direct Stream Digital Interchange File Format (Phillips)\n *\n * Ref:\n * - http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nclass DsdiffParser extends _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_4__.BasicParser {\n async parse() {\n const header = await this.tokenizer.readToken(_DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64);\n if (header.chunkID !== 'FRM8')\n throw new DsdiffContentParseError('Unexpected chunk-ID');\n const type = (await this.tokenizer.readToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken)).trim();\n switch (type) {\n case 'DSD':\n this.metadata.setFormat('container', `DSDIFF/${type}`);\n this.metadata.setFormat('lossless', true);\n return this.readFmt8Chunks(header.chunkSize - BigInt(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken.len));\n default:\n throw new DsdiffContentParseError(`Unsupported DSDIFF type: ${type}`);\n }\n }\n async readFmt8Chunks(remainingSize) {\n while (remainingSize >= _DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64.len) {\n const chunkHeader = await this.tokenizer.readToken(_DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64);\n // If the data is an odd number of bytes in length, a pad byte must be added at the end\n debug(`Chunk id=${chunkHeader.chunkID}`);\n await this.readData(chunkHeader);\n remainingSize -= (BigInt(_DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64.len) + chunkHeader.chunkSize);\n }\n }\n async readData(header) {\n debug(`Reading data of chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n const p0 = this.tokenizer.position;\n switch (header.chunkID.trim()) {\n case 'FVER': { // 3.1 FORMAT VERSION CHUNK\n const version = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE);\n debug(`DSDIFF version=${version}`);\n break;\n }\n case 'PROP': { // 3.2 PROPERTY CHUNK\n const propType = await this.tokenizer.readToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken);\n if (propType !== 'SND ')\n throw new DsdiffContentParseError('Unexpected PROP-chunk ID');\n await this.handleSoundPropertyChunks(header.chunkSize - BigInt(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken.len));\n break;\n }\n case 'ID3': { // Unofficial ID3 tag support\n const id3_data = await this.tokenizer.readToken(new token_types__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayType(Number(header.chunkSize)));\n const rst = strtok3__WEBPACK_IMPORTED_MODULE_2__.fromBuffer(id3_data);\n await new _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_5__.ID3v2Parser().parse(this.metadata, rst, this.options);\n break;\n }\n case 'DSD':\n if (this.metadata.format.numberOfChannels) {\n this.metadata.setFormat('numberOfSamples', Number(header.chunkSize * BigInt(8) / BigInt(this.metadata.format.numberOfChannels)));\n }\n if (this.metadata.format.numberOfSamples && this.metadata.format.sampleRate) {\n this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\n }\n break;\n default:\n debug(`Ignore chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n break;\n }\n const remaining = header.chunkSize - BigInt(this.tokenizer.position - p0);\n if (remaining > 0) {\n debug(`After Parsing chunk, remaining ${remaining} bytes`);\n await this.tokenizer.ignore(Number(remaining));\n }\n }\n async handleSoundPropertyChunks(remainingSize) {\n debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n while (remainingSize > 0) {\n const sndPropHeader = await this.tokenizer.readToken(_DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64);\n debug(`Sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n const p0 = this.tokenizer.position;\n switch (sndPropHeader.chunkID.trim()) {\n case 'FS': { // 3.2.1 Sample Rate Chunk\n const sampleRate = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_BE);\n this.metadata.setFormat('sampleRate', sampleRate);\n break;\n }\n case 'CHNL': { // 3.2.2 Channels Chunk\n const numChannels = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE);\n this.metadata.setFormat('numberOfChannels', numChannels);\n await this.handleChannelChunks(sndPropHeader.chunkSize - BigInt(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE.len));\n break;\n }\n case 'CMPR': { // 3.2.3 Compression Type Chunk\n const compressionIdCode = (await this.tokenizer.readToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken)).trim();\n const count = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8);\n const compressionName = await this.tokenizer.readToken(new token_types__WEBPACK_IMPORTED_MODULE_0__.StringType(count, 'ascii'));\n if (compressionIdCode === 'DSD') {\n this.metadata.setFormat('lossless', true);\n this.metadata.setFormat('bitsPerSample', 1);\n }\n this.metadata.setFormat('codec', `${compressionIdCode} (${compressionName})`);\n break;\n }\n case 'ABSS': { // 3.2.4 Absolute Start Time Chunk\n const hours = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE);\n const minutes = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8);\n const seconds = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8);\n const samples = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_BE);\n debug(`ABSS ${hours}:${minutes}:${seconds}.${samples}`);\n break;\n }\n case 'LSCO': { // 3.2.5 Loudspeaker Configuration Chunk\n const lsConfig = await this.tokenizer.readToken(token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_BE);\n debug(`LSCO lsConfig=${lsConfig}`);\n break;\n }\n default:\n debug(`Unknown sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n await this.tokenizer.ignore(Number(sndPropHeader.chunkSize));\n }\n const remaining = sndPropHeader.chunkSize - BigInt(this.tokenizer.position - p0);\n if (remaining > 0) {\n debug(`After Parsing sound-property-chunk ${sndPropHeader.chunkSize}, remaining ${remaining} bytes`);\n await this.tokenizer.ignore(Number(remaining));\n }\n remainingSize -= BigInt(_DsdiffToken_js__WEBPACK_IMPORTED_MODULE_6__.ChunkHeader64.len) + sndPropHeader.chunkSize;\n debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n }\n if (this.metadata.format.lossless && this.metadata.format.sampleRate && this.metadata.format.numberOfChannels && this.metadata.format.bitsPerSample) {\n const bitrate = this.metadata.format.sampleRate * this.metadata.format.numberOfChannels * this.metadata.format.bitsPerSample;\n this.metadata.setFormat('bitrate', bitrate);\n }\n }\n async handleChannelChunks(remainingSize) {\n debug(`Parsing channel-chunks, remainingSize=${remainingSize}`);\n const channels = [];\n while (remainingSize >= _common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken.len) {\n const channelId = await this.tokenizer.readToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken);\n debug(`Channel[ID=${channelId}]`);\n channels.push(channelId);\n remainingSize -= BigInt(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_3__.FourCcToken.len);\n }\n debug(`Channels: ${channels.join(', ')}`);\n return channels;\n }\n}\n//# sourceMappingURL=DsdiffParser.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/dsdiff/DsdiffParser.js?");
16
-
17
- /***/ }),
18
-
19
- /***/ "../../node_modules/music-metadata/lib/dsdiff/DsdiffToken.js":
20
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
21
-
22
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChunkHeader64: () => (/* binding */ ChunkHeader64)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n\n\n/**\n * DSDIFF chunk header\n * The data-size encoding is deviating from EA-IFF 85\n * Ref: http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nconst ChunkHeader64 = {\n len: 12,\n get: (buf, off) => {\n return {\n // Group-ID\n chunkID: _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__.FourCcToken.get(buf, off),\n // Size\n chunkSize: token_types__WEBPACK_IMPORTED_MODULE_0__.INT64_BE.get(buf, off + 4)\n };\n }\n};\n//# sourceMappingURL=DsdiffToken.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/dsdiff/DsdiffToken.js?");
23
-
24
- /***/ })
25
-
26
- }]);
@@ -1,33 +0,0 @@
1
- "use strict";
2
- /*
3
- * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
4
- * This devtool is neither made for production nor for readable output files.
5
- * It uses "eval()" calls to create a separate source file in the browser devtools.
6
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
- * or disable the default devtool with "devtool: false".
8
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
- */
10
- (this["webpackChunkExamBundle"] = this["webpackChunkExamBundle"] || []).push([["node_modules_music-metadata_lib_dsf_DsfParser_js"],{
11
-
12
- /***/ "../../node_modules/music-metadata/lib/dsf/DsfChunk.js":
13
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14
-
15
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChannelType: () => (/* binding */ ChannelType),\n/* harmony export */ ChunkHeader: () => (/* binding */ ChunkHeader),\n/* harmony export */ DsdChunk: () => (/* binding */ DsdChunk),\n/* harmony export */ FormatChunk: () => (/* binding */ FormatChunk)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n\n\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nconst ChunkHeader = {\n len: 12,\n get: (buf, off) => {\n return { id: _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__.FourCcToken.get(buf, off), size: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT64_LE.get(buf, off + 4) };\n }\n};\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nconst DsdChunk = {\n len: 16,\n get: (buf, off) => {\n return {\n fileSize: token_types__WEBPACK_IMPORTED_MODULE_0__.INT64_LE.get(buf, off),\n metadataPointer: token_types__WEBPACK_IMPORTED_MODULE_0__.INT64_LE.get(buf, off + 8)\n };\n }\n};\nvar ChannelType;\n(function (ChannelType) {\n ChannelType[ChannelType[\"mono\"] = 1] = \"mono\";\n ChannelType[ChannelType[\"stereo\"] = 2] = \"stereo\";\n ChannelType[ChannelType[\"channels\"] = 3] = \"channels\";\n ChannelType[ChannelType[\"quad\"] = 4] = \"quad\";\n ChannelType[ChannelType[\"4 channels\"] = 5] = \"4 channels\";\n ChannelType[ChannelType[\"5 channels\"] = 6] = \"5 channels\";\n ChannelType[ChannelType[\"5.1 channels\"] = 7] = \"5.1 channels\";\n})(ChannelType || (ChannelType = {}));\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nconst FormatChunk = {\n len: 40,\n get: (buf, off) => {\n return {\n formatVersion: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off),\n formatID: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 4),\n channelType: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 8),\n channelNum: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 12),\n samplingFrequency: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 16),\n bitsPerSample: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 20),\n sampleCount: token_types__WEBPACK_IMPORTED_MODULE_0__.INT64_LE.get(buf, off + 24),\n blockSizePerChannel: token_types__WEBPACK_IMPORTED_MODULE_0__.INT32_LE.get(buf, off + 32)\n };\n }\n};\n//# sourceMappingURL=DsfChunk.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/dsf/DsfChunk.js?");
16
-
17
- /***/ }),
18
-
19
- /***/ "../../node_modules/music-metadata/lib/dsf/DsfParser.js":
20
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
21
-
22
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DsdContentParseError: () => (/* binding */ DsdContentParseError),\n/* harmony export */ DsfParser: () => (/* binding */ DsfParser)\n/* harmony export */ });\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/debug/src/browser.js\");\n/* harmony import */ var _id3v2_AbstractID3Parser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js\");\n/* harmony import */ var _DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/music-metadata/lib/dsf/DsfChunk.js\");\n/* harmony import */ var _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/ID3v2Parser.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/music-metadata/lib/ParseError.js\");\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_0__('music-metadata:parser:DSF');\nclass DsdContentParseError extends (0,_ParseError_js__WEBPACK_IMPORTED_MODULE_4__.makeUnexpectedFileContentError)('DSD') {\n}\n/**\n * DSF (dsd stream file) File Parser\n * Ref: https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf\n */\nclass DsfParser extends _id3v2_AbstractID3Parser_js__WEBPACK_IMPORTED_MODULE_1__.AbstractID3Parser {\n async postId3v2Parse() {\n const p0 = this.tokenizer.position; // mark start position, normally 0\n const chunkHeader = await this.tokenizer.readToken(_DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.ChunkHeader);\n if (chunkHeader.id !== 'DSD ')\n throw new DsdContentParseError('Invalid chunk signature');\n this.metadata.setFormat('container', 'DSF');\n this.metadata.setFormat('lossless', true);\n const dsdChunk = await this.tokenizer.readToken(_DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.DsdChunk);\n if (dsdChunk.metadataPointer === BigInt(0)) {\n debug(\"No ID3v2 tag present\");\n }\n else {\n debug(`expect ID3v2 at offset=${dsdChunk.metadataPointer}`);\n await this.parseChunks(dsdChunk.fileSize - chunkHeader.size);\n // Jump to ID3 header\n await this.tokenizer.ignore(Number(dsdChunk.metadataPointer) - this.tokenizer.position - p0);\n return new _id3v2_ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__.ID3v2Parser().parse(this.metadata, this.tokenizer, this.options);\n }\n }\n async parseChunks(bytesRemaining) {\n while (bytesRemaining >= _DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.ChunkHeader.len) {\n const chunkHeader = await this.tokenizer.readToken(_DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.ChunkHeader);\n debug(`Parsing chunk name=${chunkHeader.id} size=${chunkHeader.size}`);\n switch (chunkHeader.id) {\n case 'fmt ': {\n const formatChunk = await this.tokenizer.readToken(_DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.FormatChunk);\n this.metadata.setFormat('numberOfChannels', formatChunk.channelNum);\n this.metadata.setFormat('sampleRate', formatChunk.samplingFrequency);\n this.metadata.setFormat('bitsPerSample', formatChunk.bitsPerSample);\n this.metadata.setFormat('numberOfSamples', formatChunk.sampleCount);\n this.metadata.setFormat('duration', Number(formatChunk.sampleCount) / formatChunk.samplingFrequency);\n const bitrate = formatChunk.bitsPerSample * formatChunk.samplingFrequency * formatChunk.channelNum;\n this.metadata.setFormat('bitrate', bitrate);\n return; // We got what we want, stop further processing of chunks\n }\n default:\n this.tokenizer.ignore(Number(chunkHeader.size) - _DsfChunk_js__WEBPACK_IMPORTED_MODULE_2__.ChunkHeader.len);\n break;\n }\n bytesRemaining -= chunkHeader.size;\n }\n }\n}\n//# sourceMappingURL=DsfParser.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/dsf/DsfParser.js?");
23
-
24
- /***/ }),
25
-
26
- /***/ "../../node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js":
27
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
28
-
29
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractID3Parser: () => (/* binding */ AbstractID3Parser)\n/* harmony export */ });\n/* harmony import */ var strtok3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/strtok3/lib/core.js\");\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/debug/src/browser.js\");\n/* harmony import */ var _ID3v2Token_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/ID3v2Token.js\");\n/* harmony import */ var _ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v2/ID3v2Parser.js\");\n/* harmony import */ var _id3v1_ID3v1Parser_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/music-metadata/lib/id3v1/ID3v1Parser.js\");\n/* harmony import */ var _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/BasicParser.js\");\n\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_1__('music-metadata:parser:ID3');\n/**\n * Abstract parser which tries take ID3v2 and ID3v1 headers.\n */\nclass AbstractID3Parser extends _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_5__.BasicParser {\n constructor() {\n super(...arguments);\n this.id3parser = new _ID3v2Parser_js__WEBPACK_IMPORTED_MODULE_3__.ID3v2Parser();\n }\n static async startsWithID3v2Header(tokenizer) {\n return (await tokenizer.peekToken(_ID3v2Token_js__WEBPACK_IMPORTED_MODULE_2__.ID3v2Header)).fileIdentifier === 'ID3';\n }\n async parse() {\n try {\n await this.parseID3v2();\n }\n catch (err) {\n if (err instanceof strtok3__WEBPACK_IMPORTED_MODULE_0__.EndOfStreamError) {\n debug(\"End-of-stream\");\n }\n else {\n throw err;\n }\n }\n }\n finalize() {\n return;\n }\n async parseID3v2() {\n await this.tryReadId3v2Headers();\n debug('End of ID3v2 header, go to MPEG-parser: pos=%s', this.tokenizer.position);\n await this.postId3v2Parse();\n if (this.options.skipPostHeaders && this.metadata.hasAny()) {\n this.finalize();\n }\n else {\n const id3v1parser = new _id3v1_ID3v1Parser_js__WEBPACK_IMPORTED_MODULE_4__.ID3v1Parser(this.metadata, this.tokenizer, this.options);\n await id3v1parser.parse();\n this.finalize();\n }\n }\n async tryReadId3v2Headers() {\n const id3Header = await this.tokenizer.peekToken(_ID3v2Token_js__WEBPACK_IMPORTED_MODULE_2__.ID3v2Header);\n if (id3Header.fileIdentifier === 'ID3') {\n debug('Found ID3v2 header, pos=%s', this.tokenizer.position);\n await this.id3parser.parse(this.metadata, this.tokenizer, this.options);\n return this.tryReadId3v2Headers();\n }\n }\n}\n//# sourceMappingURL=AbstractID3Parser.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js?");
30
-
31
- /***/ })
32
-
33
- }]);
@@ -1,26 +0,0 @@
1
- "use strict";
2
- /*
3
- * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
4
- * This devtool is neither made for production nor for readable output files.
5
- * It uses "eval()" calls to create a separate source file in the browser devtools.
6
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
- * or disable the default devtool with "devtool: false".
8
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
- */
10
- (this["webpackChunkExamBundle"] = this["webpackChunkExamBundle"] || []).push([["node_modules_music-metadata_lib_wavpack_WavPackParser_js"],{
11
-
12
- /***/ "../../node_modules/music-metadata/lib/wavpack/WavPackParser.js":
13
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14
-
15
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ WavPackContentError: () => (/* binding */ WavPackContentError),\n/* harmony export */ WavPackParser: () => (/* binding */ WavPackParser)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _apev2_APEv2Parser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/apev2/APEv2Parser.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n/* harmony import */ var _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/BasicParser.js\");\n/* harmony import */ var _WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/music-metadata/lib/wavpack/WavPackToken.js\");\n/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/debug/src/browser.js\");\n/* harmony import */ var uint8array_extras__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\"../../node_modules/uint8array-extras/index.js\");\n/* harmony import */ var _ParseError_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\"../../node_modules/music-metadata/lib/ParseError.js\");\n\n\n\n\n\n\n\n\nconst debug = debug__WEBPACK_IMPORTED_MODULE_5__('music-metadata:parser:WavPack');\nclass WavPackContentError extends (0,_ParseError_js__WEBPACK_IMPORTED_MODULE_6__.makeUnexpectedFileContentError)('WavPack') {\n}\n/**\n * WavPack Parser\n */\nclass WavPackParser extends _common_BasicParser_js__WEBPACK_IMPORTED_MODULE_3__.BasicParser {\n constructor() {\n super(...arguments);\n this.audioDataSize = 0;\n }\n async parse() {\n this.audioDataSize = 0;\n // First parse all WavPack blocks\n await this.parseWavPackBlocks();\n // try to parse APEv2 header\n return _apev2_APEv2Parser_js__WEBPACK_IMPORTED_MODULE_1__.APEv2Parser.tryParseApeHeader(this.metadata, this.tokenizer, this.options);\n }\n async parseWavPackBlocks() {\n do {\n const blockId = await this.tokenizer.peekToken(_common_FourCC_js__WEBPACK_IMPORTED_MODULE_2__.FourCcToken);\n if (blockId !== 'wvpk')\n break;\n const header = await this.tokenizer.readToken(_WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.BlockHeaderToken);\n if (header.BlockID !== 'wvpk')\n throw new WavPackContentError('Invalid WavPack Block-ID');\n debug(`WavPack header blockIndex=${header.blockIndex}, len=${_WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.BlockHeaderToken.len}`);\n if (header.blockIndex === 0 && !this.metadata.format.container) {\n this.metadata.setFormat('container', 'WavPack');\n this.metadata.setFormat('lossless', !header.flags.isHybrid);\n // tagTypes: this.type,\n this.metadata.setFormat('bitsPerSample', header.flags.bitsPerSample);\n if (!header.flags.isDSD) {\n // In case isDSD, these values will ne set in ID_DSD_BLOCK\n this.metadata.setFormat('sampleRate', header.flags.samplingRate);\n this.metadata.setFormat('duration', header.totalSamples / header.flags.samplingRate);\n }\n this.metadata.setFormat('numberOfChannels', header.flags.isMono ? 1 : 2);\n this.metadata.setFormat('numberOfSamples', header.totalSamples);\n this.metadata.setFormat('codec', header.flags.isDSD ? 'DSD' : 'PCM');\n }\n const ignoreBytes = header.blockSize - (_WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.BlockHeaderToken.len - 8);\n await (header.blockIndex === 0 ? this.parseMetadataSubBlock(header, ignoreBytes) : this.tokenizer.ignore(ignoreBytes));\n if (header.blockSamples > 0) {\n this.audioDataSize += header.blockSize; // Count audio data for bit-rate calculation\n }\n } while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= _WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.BlockHeaderToken.len);\n if (this.metadata.format.duration) {\n this.metadata.setFormat('bitrate', this.audioDataSize * 8 / this.metadata.format.duration);\n }\n }\n /**\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf, 3.0 Metadata Sub-blocks\n * @param header Header\n * @param remainingLength Remaining length\n */\n async parseMetadataSubBlock(header, remainingLength) {\n let remaining = remainingLength;\n while (remaining > _WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.MetadataIdToken.len) {\n const id = await this.tokenizer.readToken(_WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.MetadataIdToken);\n const dataSizeInWords = await this.tokenizer.readNumber(id.largeBlock ? token_types__WEBPACK_IMPORTED_MODULE_0__.UINT24_LE : token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8);\n const data = new Uint8Array(dataSizeInWords * 2 - (id.isOddSize ? 1 : 0));\n await this.tokenizer.readBuffer(data);\n debug(`Metadata Sub-Blocks functionId=0x${id.functionId.toString(16)}, id.largeBlock=${id.largeBlock},data-size=${data.length}`);\n switch (id.functionId) {\n case 0x0: // ID_DUMMY: could be used to pad WavPack blocks\n break;\n case 0xe: { // ID_DSD_BLOCK\n debug('ID_DSD_BLOCK');\n // https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n const mp = 1 << token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8.get(data, 0);\n const samplingRate = header.flags.samplingRate * mp * 8; // ToDo: second factor should be read from DSD-metadata block https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n if (!header.flags.isDSD)\n throw new WavPackContentError('Only expect DSD block if DSD-flag is set');\n this.metadata.setFormat('sampleRate', samplingRate);\n this.metadata.setFormat('duration', header.totalSamples / samplingRate);\n break;\n }\n case 0x24: // ID_ALT_TRAILER: maybe used to embed original ID3 tag header\n debug('ID_ALT_TRAILER: trailer for non-wav files');\n break;\n case 0x26: // ID_MD5_CHECKSUM\n this.metadata.setFormat('audioMD5', data);\n break;\n case 0x2f: // ID_BLOCK_CHECKSUM\n debug(`ID_BLOCK_CHECKSUM: checksum=${(0,uint8array_extras__WEBPACK_IMPORTED_MODULE_7__.uint8ArrayToHex)(data)}`);\n break;\n default:\n debug(`Ignore unsupported meta-sub-block-id functionId=0x${id.functionId.toString(16)}`);\n break;\n }\n remaining -= _WavPackToken_js__WEBPACK_IMPORTED_MODULE_4__.MetadataIdToken.len + (id.largeBlock ? token_types__WEBPACK_IMPORTED_MODULE_0__.UINT24_LE.len : token_types__WEBPACK_IMPORTED_MODULE_0__.UINT8.len) + dataSizeInWords * 2;\n debug(`remainingLength=${remaining}`);\n if (id.isOddSize)\n this.tokenizer.ignore(1);\n }\n if (remaining !== 0)\n throw new WavPackContentError('metadata-sub-block should fit it remaining length');\n }\n}\n//# sourceMappingURL=WavPackParser.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/wavpack/WavPackParser.js?");
16
-
17
- /***/ }),
18
-
19
- /***/ "../../node_modules/music-metadata/lib/wavpack/WavPackToken.js":
20
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
21
-
22
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BlockHeaderToken: () => (/* binding */ BlockHeaderToken),\n/* harmony export */ MetadataIdToken: () => (/* binding */ MetadataIdToken)\n/* harmony export */ });\n/* harmony import */ var token_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/token-types/lib/index.js\");\n/* harmony import */ var _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/music-metadata/lib/common/FourCC.js\");\n\n\nconst SampleRates = [6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100,\n 48000, 64000, 88200, 96000, 192000, -1];\n/**\n * WavPack Block Header\n *\n * 32-byte little-endian header at the front of every WavPack block\n *\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 2/6: 2.0 \"Block Header\")\n */\nconst BlockHeaderToken = {\n len: 32,\n get: (buf, off) => {\n const flags = token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE.get(buf, off + 24);\n const res = {\n // should equal 'wvpk'\n BlockID: _common_FourCC_js__WEBPACK_IMPORTED_MODULE_1__.FourCcToken.get(buf, off),\n // 0x402 to 0x410 are valid for decode\n blockSize: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE.get(buf, off + 4),\n // 0x402 (1026) to 0x410 are valid for decode\n version: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT16_LE.get(buf, off + 8),\n // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n totalSamples: /* replace with bigint? (Token.UINT8.get(buf, off + 11) << 32) + */ token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE.get(buf, off + 12),\n // 40-bit block_index\n blockIndex: /* replace with bigint? (Token.UINT8.get(buf, off + 10) << 32) + */ token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE.get(buf, off + 16),\n // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n blockSamples: token_types__WEBPACK_IMPORTED_MODULE_0__.UINT32_LE.get(buf, off + 20),\n // various flags for id and decoding\n flags: {\n bitsPerSample: (1 + getBitAllignedNumber(flags, 0, 2)) * 8,\n isMono: isBitSet(flags, 2),\n isHybrid: isBitSet(flags, 3),\n isJointStereo: isBitSet(flags, 4),\n crossChannel: isBitSet(flags, 5),\n hybridNoiseShaping: isBitSet(flags, 6),\n floatingPoint: isBitSet(flags, 7),\n samplingRate: SampleRates[getBitAllignedNumber(flags, 23, 4)],\n isDSD: isBitSet(flags, 31)\n },\n // crc for actual decoded data\n crc: new token_types__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayType(4).get(buf, off + 28)\n };\n if (res.flags.isDSD) {\n res.totalSamples *= 8;\n }\n return res;\n }\n};\n/**\n * 3.0 Metadata Sub-Blocks\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 4/6: 3.0 \"Metadata Sub-Block\")\n */\nconst MetadataIdToken = {\n len: 1,\n get: (buf, off) => {\n return {\n functionId: getBitAllignedNumber(buf[off], 0, 6), // functionId overlaps with isOptional flag\n isOptional: isBitSet(buf[off], 5),\n isOddSize: isBitSet(buf[off], 6),\n largeBlock: isBitSet(buf[off], 7)\n };\n }\n};\nfunction isBitSet(flags, bitOffset) {\n return getBitAllignedNumber(flags, bitOffset, 1) === 1;\n}\nfunction getBitAllignedNumber(flags, bitOffset, len) {\n return (flags >>> bitOffset) & (0xffffffff >>> (32 - len));\n}\n//# sourceMappingURL=WavPackToken.js.map\n\n//# sourceURL=webpack://ExamBundle/../../node_modules/music-metadata/lib/wavpack/WavPackToken.js?");
23
-
24
- /***/ })
25
-
26
- }]);