fmode-ng 0.0.113 → 0.0.115

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 (275) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +37 -37
  3. package/esm2022/fmode-ng.mjs +10 -5
  4. package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
  5. package/esm2022/lib/aigc/agent/index.mjs +10 -3
  6. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  10. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
  12. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
  13. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
  14. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  15. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  16. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
  17. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
  18. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  19. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
  20. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  21. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  22. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  23. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
  24. package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
  25. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
  26. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
  27. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
  28. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
  29. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
  30. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
  31. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  32. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  33. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
  35. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  36. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  37. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
  38. package/esm2022/lib/aigc/index.mjs +10 -14
  39. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  40. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
  41. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
  42. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  43. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  44. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  45. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  46. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  47. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
  48. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
  49. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
  50. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
  51. package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
  52. package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
  53. package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
  54. package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
  55. package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
  56. package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
  57. package/esm2022/lib/aigc/story/index.mjs +10 -6
  58. package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
  59. package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
  60. package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
  61. package/esm2022/lib/aigc/story/story.service.mjs +10 -35
  62. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
  63. package/esm2022/lib/aigc/voice/index.mjs +10 -7
  64. package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
  65. package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
  66. package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
  67. package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
  68. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  69. package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
  70. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  71. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
  72. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
  73. package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
  74. package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
  75. package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
  76. package/esm2022/lib/code/index.mjs +10 -2
  77. package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
  78. package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
  79. package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
  80. package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
  81. package/esm2022/lib/core/agent/chat/index.mjs +10 -4
  82. package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
  83. package/esm2022/lib/core/agent/index.mjs +10 -6
  84. package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
  85. package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
  86. package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
  87. package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
  88. package/esm2022/lib/core/agent/story/index.mjs +10 -2
  89. package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
  90. package/esm2022/lib/core/agent/task/index.mjs +10 -2
  91. package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
  92. package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
  93. package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
  94. package/esm2022/lib/core/index.mjs +10 -4
  95. package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
  96. package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
  97. package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
  98. package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
  99. package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
  100. package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
  101. package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
  102. package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
  103. package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
  104. package/esm2022/lib/core/parse/index.mjs +10 -5
  105. package/esm2022/lib/core/parse/types.mjs +10 -2
  106. package/esm2022/lib/core/voice/index.mjs +10 -3
  107. package/esm2022/lib/core/voice/tts/index.mjs +10 -2
  108. package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
  109. package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
  110. package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
  111. package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
  112. package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
  113. package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
  114. package/esm2022/lib/icon/filetype/index.mjs +10 -12
  115. package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
  116. package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
  117. package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
  118. package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
  119. package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
  120. package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
  121. package/esm2022/lib/icon/index.mjs +10 -2
  122. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
  123. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  124. package/esm2022/lib/map/index.mjs +10 -4
  125. package/esm2022/lib/map/map.module.mjs +10 -61
  126. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
  127. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
  128. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
  129. package/esm2022/lib/nova-cloud/index.mjs +10 -3
  130. package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
  131. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
  132. package/esm2022/lib/payment/index.mjs +10 -2
  133. package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
  134. package/esm2022/lib/payment/payment.service.mjs +10 -202
  135. package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
  136. package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
  137. package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
  138. package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
  139. package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
  140. package/esm2022/lib/person/index.mjs +10 -5
  141. package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
  142. package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
  143. package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
  144. package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
  145. package/esm2022/lib/person/person.service.mjs +8 -193
  146. package/esm2022/lib/platform/cross.service.mjs +10 -62
  147. package/esm2022/lib/platform/index.mjs +10 -2
  148. package/esm2022/lib/social/index.mjs +10 -2
  149. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
  150. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  151. package/esm2022/lib/storage/index.mjs +10 -5
  152. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
  153. package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
  154. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
  155. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  156. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
  157. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  158. package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
  159. package/esm2022/lib/storage/storage.module.mjs +10 -42
  160. package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
  161. package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
  162. package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
  163. package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
  164. package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
  165. package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
  166. package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
  167. package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
  168. package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
  169. package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
  170. package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
  171. package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
  172. package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
  173. package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
  174. package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
  175. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
  176. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
  177. package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
  178. package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
  179. package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
  180. package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
  181. package/esm2022/lib/text/index.mjs +10 -4
  182. package/esm2022/lib/user/account/account.service.mjs +10 -222
  183. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  184. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
  185. package/esm2022/lib/user/index.mjs +10 -17
  186. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  187. package/esm2022/lib/user/login/auth.service.mjs +8 -433
  188. package/esm2022/lib/user/login/login.component.mjs +10 -916
  189. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
  190. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  191. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  192. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
  193. package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
  194. package/esm2022/lib/user/profile/profile.module.mjs +10 -54
  195. package/esm2022/lib/user/staff/index.mjs +10 -4
  196. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  197. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  198. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  199. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  200. package/esm2022/lib/user/user.module.mjs +10 -102
  201. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  202. package/esm2022/lib/video/index.mjs +10 -2
  203. package/esm2022/public-api.mjs +10 -21
  204. package/fesm2022/fmode-ng.mjs +7 -19788
  205. package/fesm2022/fmode-ng.mjs.map +1 -1
  206. package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
  207. package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
  208. package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
  209. package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
  210. package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
  211. package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
  212. package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
  213. package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
  214. package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
  215. package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
  216. package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
  217. package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
  218. package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
  219. package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
  220. package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
  221. package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
  222. package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
  223. package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
  224. package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
  225. package/lib/aigc/story/story.service.d.ts +3 -2
  226. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  227. package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
  228. package/lib/core/agent/story/agent.story.d.ts +8 -8
  229. package/lib/core/parse/datatype/geopoint.d.ts +5 -1
  230. package/lib/core/parse/fmode.cloud.d.ts +32 -0
  231. package/lib/core/parse/fmode.object.d.ts +2 -2
  232. package/lib/core/parse/fmode.parse.d.ts +15 -9
  233. package/lib/core/parse/fmode.query.d.ts +41 -2
  234. package/lib/core/parse/fmode.user.d.ts +1 -0
  235. package/lib/core/parse/index.d.ts +1 -0
  236. package/lib/core/parse/types.d.ts +2 -0
  237. package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
  238. package/lib/payment/payment/payment.component.d.ts +3 -3
  239. package/lib/payment/payment.service.d.ts +4 -4
  240. package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
  241. package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
  242. package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
  243. package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
  244. package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
  245. package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
  246. package/lib/person/person-detail/person-detail.component.d.ts +4 -4
  247. package/lib/person/person.service.d.ts +7 -7
  248. package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
  249. package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
  250. package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
  251. package/lib/text/fm-article-editor/article.service.d.ts +12 -12
  252. package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
  253. package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
  254. package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
  255. package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
  256. package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
  257. package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
  258. package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
  259. package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
  260. package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
  261. package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
  262. package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
  263. package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
  264. package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
  265. package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
  266. package/lib/user/account/account.service.d.ts +2 -2
  267. package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
  268. package/lib/user/login/auth.service.d.ts +5 -5
  269. package/lib/user/login/login.component.d.ts +3 -3
  270. package/lib/user/profile/auth-profile.service.d.ts +8 -8
  271. package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
  272. package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
  273. package/lib/user/staff/staff.service.d.ts +3 -3
  274. package/lib/user/user-name.pipe.d.ts +2 -2
  275. package/package.json +12 -18
@@ -1,215 +1,10 @@
1
- import Recorder from 'recorder-core';
2
- /*
3
- 录音 Recorder扩展,动态波形显示
4
- https://github.com/xiangyuecn/Recorder
5
- */
6
- (function () {
7
- var WaveView = function (set) {
8
- return new fn(set);
9
- };
10
- var ViewTxt = "WaveView";
11
- var fn = function (set) {
12
- var This = this;
13
- var o = {
14
- /*
15
- elem:"css selector" //自动显示到dom,并以此dom大小为显示大小
16
- //或者配置显示大小,手动把waveviewObj.elem显示到别的地方
17
- ,width:0 //显示宽度
18
- ,height:0 //显示高度
19
-
20
- 以上配置二选一
21
- */
22
- scale: 2 //缩放系数,应为正整数,使用2(3? no!)倍宽高进行绘制,避免移动端绘制模糊
23
- ,
24
- speed: 9 //移动速度系数,越大越快
25
- ,
26
- phase: 21.8 //相位,调整了速度后,调整这个值得到一个看起来舒服的波形
27
- ,
28
- fps: 20 //绘制帧率,调整后也需调整phase值
29
- ,
30
- keep: true //当停止了input输入时,是否保持波形,设为false停止后将变成一条线
31
- ,
32
- lineWidth: 3 //线条基础粗细
33
- //渐变色配置:[位置,css颜色,...] 位置: 取值0.0-1.0之间
34
- ,
35
- linear1: [0, "rgba(150,96,238,1)", 0.2, "rgba(170,79,249,1)", 1, "rgba(53,199,253,1)"] //线条渐变色1,从左到右
36
- ,
37
- linear2: [0, "rgba(209,130,255,0.6)", 1, "rgba(53,199,255,0.6)"] //线条渐变色2,从左到右
38
- ,
39
- linearBg: [0, "rgba(255,255,255,0.2)", 1, "rgba(54,197,252,0.2)"] //背景渐变色,从上到下
40
- };
41
- for (var k in set) {
42
- o[k] = set[k];
43
- }
44
- ;
45
- This.set = set = o;
46
- var elem = set.elem;
47
- if (elem) {
48
- if (typeof (elem) == "string") {
49
- elem = document.querySelector(elem);
50
- }
51
- else if (elem.length) {
52
- elem = elem[0];
53
- }
54
- ;
55
- }
56
- ;
57
- if (elem) {
58
- set.width = elem.offsetWidth;
59
- set.height = elem.offsetHeight;
60
- }
61
- ;
62
- var scale = set.scale;
63
- var width = set.width * scale;
64
- var height = set.height * scale;
65
- if (!width || !height) {
66
- throw new Error(ViewTxt + "无宽高");
67
- }
68
- var thisElem = This.elem = document.createElement("div");
69
- var lowerCss = ["", "transform-origin:0 0;", "transform:scale(" + (1 / scale) + ");"];
70
- thisElem.innerHTML = '<div style="width:' + set.width + 'px;height:' + set.height + 'px;overflow:hidden"><div style="width:' + width + 'px;height:' + height + 'px;' + lowerCss.join("-webkit-") + lowerCss.join("-ms-") + lowerCss.join("-moz-") + lowerCss.join("") + '"><canvas/></div></div>';
71
- var canvas = This.canvas = thisElem.querySelector("canvas");
72
- var ctx = This.ctx = canvas.getContext("2d");
73
- canvas.width = width;
74
- canvas.height = height;
75
- This.linear1 = This.genLinear(ctx, width, set.linear1);
76
- This.linear2 = This.genLinear(ctx, width, set.linear2);
77
- This.linearBg = This.genLinear(ctx, height, set.linearBg, true);
78
- if (elem) {
79
- elem.innerHTML = "";
80
- elem.appendChild(thisElem);
81
- }
82
- ;
83
- This._phase = 0;
84
- };
85
- fn.prototype = WaveView.prototype = {
86
- genLinear: function (ctx, size, colors, top) {
87
- var rtv = ctx.createLinearGradient(0, 0, top ? 0 : size, top ? size : 0);
88
- for (var i = 0; i < colors.length;) {
89
- rtv.addColorStop(colors[i++], colors[i++]);
90
- }
91
- ;
92
- return rtv;
93
- },
94
- genPath: function (frequency, amplitude, phase) {
95
- //曲线生成算法参考 https://github.com/HaloMartin/MCVoiceWave/blob/f6dc28975fbe0f7fc6cc4dbc2e61b0aa5574e9bc/MCVoiceWave/MCVoiceWaveView.m#L268
96
- var rtv = [];
97
- var This = this, set = This.set;
98
- var scale = set.scale;
99
- var width = set.width * scale;
100
- var maxAmplitude = set.height * scale / 2;
101
- for (var x = 0; x < width; x += scale) {
102
- var scaling = (1 + Math.cos(Math.PI + (x / width) * 2 * Math.PI)) / 2;
103
- var y = scaling * maxAmplitude * amplitude * Math.sin(2 * Math.PI * (x / width) * frequency + phase) + maxAmplitude;
104
- rtv.push(y);
105
- }
106
- return rtv;
107
- },
108
- input: function (pcmData, powerLevel, sampleRate) {
109
- var This = this;
110
- This.sampleRate = sampleRate;
111
- This.pcmData = pcmData;
112
- This.pcmPos = 0;
113
- This.inputTime = Date.now();
114
- This.schedule();
115
- },
116
- schedule: function () {
117
- var This = this, set = This.set;
118
- var interval = Math.floor(1000 / set.fps);
119
- if (!This.timer) {
120
- This.timer = setInterval(function () {
121
- This.schedule();
122
- }, interval);
123
- }
124
- ;
125
- var now = Date.now();
126
- var drawTime = This.drawTime || 0;
127
- if (now - drawTime < interval) {
128
- //没到间隔时间,不绘制
129
- return;
130
- }
131
- ;
132
- This.drawTime = now;
133
- //切分当前需要的绘制数据
134
- var bufferSize = This.sampleRate / set.fps;
135
- var pcm = This.pcmData;
136
- var pos = This.pcmPos;
137
- var len = Math.max(0, Math.min(bufferSize, pcm.length - pos));
138
- var sum = 0;
139
- for (var i = 0; i < len; i++, pos++) {
140
- sum += Math.abs(pcm[pos]);
141
- }
142
- ;
143
- This.pcmPos = pos;
144
- //推入绘制
145
- if (len || !set.keep) {
146
- This.draw(Recorder.PowerLevel(sum, len));
147
- }
148
- if (!len && now - This.inputTime > 1300) {
149
- //超时没有输入,干掉定时器
150
- clearInterval(This.timer);
151
- This.timer = 0;
152
- }
153
- },
154
- draw: function (powerLevel) {
155
- var This = this, set = This.set;
156
- var ctx = This.ctx;
157
- var scale = set.scale;
158
- var width = set.width * scale;
159
- var height = set.height * scale;
160
- var speedx = set.speed / set.fps;
161
- var phase = This._phase -= speedx; //位移速度
162
- var phase2 = phase + speedx * set.phase;
163
- var amplitude = powerLevel / 100;
164
- var path1 = This.genPath(2, amplitude, phase);
165
- var path2 = This.genPath(1.8, amplitude, phase2);
166
- //开始绘制图形
167
- ctx.clearRect(0, 0, width, height);
168
- //绘制包围背景
169
- ctx.beginPath();
170
- for (var i = 0, x = 0; x < width; i++, x += scale) {
171
- if (x == 0) {
172
- ctx.moveTo(x, path1[i]);
173
- }
174
- else {
175
- ctx.lineTo(x, path1[i]);
176
- }
177
- ;
178
- }
179
- ;
180
- i--;
181
- for (var x = width - 1; x >= 0; i--, x -= scale) {
182
- ctx.lineTo(x, path2[i]);
183
- }
184
- ;
185
- ctx.closePath();
186
- ctx.fillStyle = This.linearBg;
187
- ctx.fill();
188
- //绘制线
189
- This.drawPath(path2, This.linear2);
190
- This.drawPath(path1, This.linear1);
191
- },
192
- drawPath: function (path, linear) {
193
- var This = this, set = This.set;
194
- var ctx = This.ctx;
195
- var scale = set.scale;
196
- var width = set.width * scale;
197
- ctx.beginPath();
198
- for (var i = 0, x = 0; x < width; i++, x += scale) {
199
- if (x == 0) {
200
- ctx.moveTo(x, path[i]);
201
- }
202
- else {
203
- ctx.lineTo(x, path[i]);
204
- }
205
- ;
206
- }
207
- ;
208
- ctx.lineWidth = set.lineWidth * scale;
209
- ctx.strokeStyle = linear;
210
- ctx.stroke();
211
- }
212
- };
213
- Recorder[ViewTxt] = WaveView;
214
- })();
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uLXdhdmV2aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL2xpYi9yZWNvcmRlci9leHRlbnNpb24td2F2ZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBQ3BDOzs7RUFHRTtBQUNGLENBQUM7SUFFRyxJQUFJLFFBQVEsR0FBQyxVQUFTLEdBQUc7UUFDckIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFDRixJQUFJLE9BQU8sR0FBQyxVQUFVLENBQUM7SUFDdkIsSUFBSSxFQUFFLEdBQUMsVUFBUyxHQUFHO1FBQ2YsSUFBSSxJQUFJLEdBQUMsSUFBSSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEdBQUM7WUFDRjs7Ozs7OztjQU9FO1lBRUYsS0FBSyxFQUFDLENBQUMsQ0FBQyx5Q0FBeUM7O1lBQ2hELEtBQUssRUFBQyxDQUFDLENBQUMsYUFBYTs7WUFDckIsS0FBSyxFQUFDLElBQUksQ0FBQyw2QkFBNkI7O1lBRXhDLEdBQUcsRUFBQyxFQUFFLENBQUMsb0JBQW9COztZQUMzQixJQUFJLEVBQUMsSUFBSSxDQUFDLHNDQUFzQzs7WUFFaEQsU0FBUyxFQUFDLENBQUMsQ0FBQyxRQUFRO1lBRXJCLHNDQUFzQzs7WUFDckMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLEdBQUcsRUFBQyxvQkFBb0IsRUFBQyxDQUFDLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhOztZQUM5RixPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsdUJBQXVCLEVBQUMsQ0FBQyxFQUFDLHNCQUFzQixDQUFDLENBQUMsYUFBYTs7WUFDMUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxFQUFDLHVCQUF1QixFQUFDLENBQUMsRUFBQyxz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SyxDQUFDO1lBQ2xDLEdBQUcsQ0FBQyxXQUFXLEdBQUMsTUFBTSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQixDQUFDO0tBQ0osQ0FBQztJQUNGLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBQyxRQUFRLENBQUM7QUFHM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG4vKlxyXG7lvZXpn7MgUmVjb3JkZXLmianlsZXvvIzliqjmgIHms6LlvaLmmL7npLpcclxuaHR0cHM6Ly9naXRodWIuY29tL3hpYW5neXVlY24vUmVjb3JkZXJcclxuKi9cclxuKGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgdmFyIFdhdmVWaWV3PWZ1bmN0aW9uKHNldCl7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBmbihzZXQpO1xyXG4gICAgfTtcclxuICAgIHZhciBWaWV3VHh0PVwiV2F2ZVZpZXdcIjtcclxuICAgIHZhciBmbj1mdW5jdGlvbihzZXQpe1xyXG4gICAgICAgIHZhciBUaGlzPXRoaXM7XHJcbiAgICAgICAgdmFyIG89e1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICBlbGVtOlwiY3NzIHNlbGVjdG9yXCIgLy/oh6rliqjmmL7npLrliLBkb23vvIzlubbku6XmraRkb23lpKflsI/kuLrmmL7npLrlpKflsI9cclxuICAgICAgICAgICAgICAgIC8v5oiW6ICF6YWN572u5pi+56S65aSn5bCP77yM5omL5Yqo5oqKd2F2ZXZpZXdPYmouZWxlbeaYvuekuuWIsOWIq+eahOWcsOaWuVxyXG4gICAgICAgICAgICAsd2lkdGg6MCAvL+aYvuekuuWuveW6plxyXG4gICAgICAgICAgICAsaGVpZ2h0OjAgLy/mmL7npLrpq5jluqZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIOS7peS4iumFjee9ruS6jOmAieS4gFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2NhbGU6MiAvL+e8qeaUvuezu+aVsO+8jOW6lOS4uuato+aVtOaVsO+8jOS9v+eUqDIoMz8gbm8hKeWAjeWuvemrmOi/m+ihjOe7mOWItu+8jOmBv+WFjeenu+WKqOerr+e7mOWItuaooeezilxyXG4gICAgICAgICAgICAsc3BlZWQ6OSAvL+enu+WKqOmAn+W6puezu+aVsO+8jOi2iuWkp+i2iuW/q1xyXG4gICAgICAgICAgICAscGhhc2U6MjEuOCAvL+ebuOS9je+8jOiwg+aVtOS6humAn+W6puWQju+8jOiwg+aVtOi/meS4quWAvOW+l+WIsOS4gOS4queci+i1t+adpeiIkuacjeeahOazouW9olxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLGZwczoyMCAvL+e7mOWItuW4p+eOh++8jOiwg+aVtOWQjuS5n+mcgOiwg+aVtHBoYXNl5YC8XHJcbiAgICAgICAgICAgICxrZWVwOnRydWUgLy/lvZPlgZzmraLkuoZpbnB1dOi+k+WFpeaXtu+8jOaYr+WQpuS/neaMgeazouW9ou+8jOiuvuS4umZhbHNl5YGc5q2i5ZCO5bCG5Y+Y5oiQ5LiA5p2h57q/XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAsbGluZVdpZHRoOjMgLy/nur/mnaHln7rnoYDnspfnu4ZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8v5riQ5Y+Y6Imy6YWN572u77yaW+S9jee9ru+8jGNzc+minOiJsu+8jC4uLl0g5L2N572uOiDlj5blgLwwLjAtMS4w5LmL6Ze0XHJcbiAgICAgICAgICAgICxsaW5lYXIxOlswLFwicmdiYSgxNTAsOTYsMjM4LDEpXCIsMC4yLFwicmdiYSgxNzAsNzksMjQ5LDEpXCIsMSxcInJnYmEoNTMsMTk5LDI1MywxKVwiXSAvL+e6v+adoea4kOWPmOiJsjHvvIzku47lt6bliLDlj7NcclxuICAgICAgICAgICAgLGxpbmVhcjI6WzAsXCJyZ2JhKDIwOSwxMzAsMjU1LDAuNilcIiwxLFwicmdiYSg1MywxOTksMjU1LDAuNilcIl0gLy/nur/mnaHmuJDlj5joibIy77yM5LuO5bem5Yiw5Y+zXHJcbiAgICAgICAgICAgICxsaW5lYXJCZzpbMCxcInJnYmEoMjU1LDI1NSwyNTUsMC4yKVwiLDEsXCJyZ2JhKDU0LDE5NywyNTIsMC4yKVwiXSAvL+iDjOaZr+a4kOWPmOiJsu+8jOS7juS4iuWIsOS4i1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yKHZhciBrIGluIHNldCl7XHJcbiAgICAgICAgICAgIG9ba109c2V0W2tdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgVGhpcy5zZXQ9c2V0PW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGVsZW09c2V0LmVsZW07XHJcbiAgICAgICAgaWYoZWxlbSl7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZihlbGVtKT09XCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICBlbGVtPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbSk7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGVsZW0ubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgIGVsZW09ZWxlbVswXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmKGVsZW0pe1xyXG4gICAgICAgICAgICBzZXQud2lkdGg9ZWxlbS5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgc2V0LmhlaWdodD1lbGVtLm9mZnNldEhlaWdodDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBzY2FsZT1zZXQuc2NhbGU7XHJcbiAgICAgICAgdmFyIHdpZHRoPXNldC53aWR0aCpzY2FsZTtcclxuICAgICAgICB2YXIgaGVpZ2h0PXNldC5oZWlnaHQqc2NhbGU7XHJcbiAgICAgICAgaWYoIXdpZHRoIHx8ICFoZWlnaHQpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoVmlld1R4dCtcIuaXoOWuvemrmFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIHRoaXNFbGVtPVRoaXMuZWxlbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIHZhciBsb3dlckNzcz1bXCJcIixcInRyYW5zZm9ybS1vcmlnaW46MCAwO1wiLFwidHJhbnNmb3JtOnNjYWxlKFwiKygxL3NjYWxlKStcIik7XCJdO1xyXG4gICAgICAgIHRoaXNFbGVtLmlubmVySFRNTD0nPGRpdiBzdHlsZT1cIndpZHRoOicrc2V0LndpZHRoKydweDtoZWlnaHQ6JytzZXQuaGVpZ2h0KydweDtvdmVyZmxvdzpoaWRkZW5cIj48ZGl2IHN0eWxlPVwid2lkdGg6Jyt3aWR0aCsncHg7aGVpZ2h0OicraGVpZ2h0KydweDsnK2xvd2VyQ3NzLmpvaW4oXCItd2Via2l0LVwiKStsb3dlckNzcy5qb2luKFwiLW1zLVwiKStsb3dlckNzcy5qb2luKFwiLW1vei1cIikrbG93ZXJDc3Muam9pbihcIlwiKSsnXCI+PGNhbnZhcy8+PC9kaXY+PC9kaXY+JztcclxuICAgICAgICBcclxuICAgICAgICB2YXIgY2FudmFzPVRoaXMuY2FudmFzPXRoaXNFbGVtLnF1ZXJ5U2VsZWN0b3IoXCJjYW52YXNcIik7XHJcbiAgICAgICAgdmFyIGN0eD1UaGlzLmN0eD1jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aD13aWR0aDtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0PWhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICBUaGlzLmxpbmVhcjE9VGhpcy5nZW5MaW5lYXIoY3R4LHdpZHRoLHNldC5saW5lYXIxKTtcclxuICAgICAgICBUaGlzLmxpbmVhcjI9VGhpcy5nZW5MaW5lYXIoY3R4LHdpZHRoLHNldC5saW5lYXIyKTtcclxuICAgICAgICBUaGlzLmxpbmVhckJnPVRoaXMuZ2VuTGluZWFyKGN0eCxoZWlnaHQsc2V0LmxpbmVhckJnLHRydWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKGVsZW0pe1xyXG4gICAgICAgICAgICBlbGVtLmlubmVySFRNTD1cIlwiO1xyXG4gICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXNFbGVtKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIFRoaXMuX3BoYXNlPTA7XHJcbiAgICB9O1xyXG4gICAgZm4ucHJvdG90eXBlPVdhdmVWaWV3LnByb3RvdHlwZT17XHJcbiAgICAgICAgZ2VuTGluZWFyOmZ1bmN0aW9uKGN0eCxzaXplLGNvbG9ycyx0b3Ape1xyXG4gICAgICAgICAgICB2YXIgcnR2PWN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLDAsdG9wPzA6c2l6ZSx0b3A/c2l6ZTowKTtcclxuICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxjb2xvcnMubGVuZ3RoOyl7XHJcbiAgICAgICAgICAgICAgICBydHYuYWRkQ29sb3JTdG9wKGNvbG9yc1tpKytdLGNvbG9yc1tpKytdKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJ0djtcclxuICAgICAgICB9XHJcbiAgICAgICAgLGdlblBhdGg6ZnVuY3Rpb24oZnJlcXVlbmN5LGFtcGxpdHVkZSxwaGFzZSl7XHJcbiAgICAgICAgICAgIC8v5puy57q/55Sf5oiQ566X5rOV5Y+C6ICDIGh0dHBzOi8vZ2l0aHViLmNvbS9IYWxvTWFydGluL01DVm9pY2VXYXZlL2Jsb2IvZjZkYzI4OTc1ZmJlMGY3ZmM2Y2M0ZGJjMmU2MWIwYWE1NTc0ZTliYy9NQ1ZvaWNlV2F2ZS9NQ1ZvaWNlV2F2ZVZpZXcubSNMMjY4XHJcbiAgICAgICAgICAgIHZhciBydHY9W107XHJcbiAgICAgICAgICAgIHZhciBUaGlzPXRoaXMsc2V0PVRoaXMuc2V0O1xyXG4gICAgICAgICAgICB2YXIgc2NhbGU9c2V0LnNjYWxlO1xyXG4gICAgICAgICAgICB2YXIgd2lkdGg9c2V0LndpZHRoKnNjYWxlO1xyXG4gICAgICAgICAgICB2YXIgbWF4QW1wbGl0dWRlPXNldC5oZWlnaHQqc2NhbGUvMjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcih2YXIgeD0wO3g8d2lkdGg7eCs9c2NhbGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzY2FsaW5nPSgxK01hdGguY29zKE1hdGguUEkrKHgvd2lkdGgpKjIqTWF0aC5QSSkpLzI7XHJcbiAgICAgICAgICAgICAgICB2YXIgeT1zY2FsaW5nKm1heEFtcGxpdHVkZSphbXBsaXR1ZGUqTWF0aC5zaW4oMipNYXRoLlBJKih4L3dpZHRoKSpmcmVxdWVuY3krcGhhc2UpK21heEFtcGxpdHVkZTtcclxuICAgICAgICAgICAgICAgIHJ0di5wdXNoKHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBydHY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICxpbnB1dDpmdW5jdGlvbihwY21EYXRhLHBvd2VyTGV2ZWwsc2FtcGxlUmF0ZSl7XHJcbiAgICAgICAgICAgIHZhciBUaGlzPXRoaXM7XHJcbiAgICAgICAgICAgIFRoaXMuc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICBUaGlzLnBjbURhdGE9cGNtRGF0YTtcclxuICAgICAgICAgICAgVGhpcy5wY21Qb3M9MDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFRoaXMuaW5wdXRUaW1lPURhdGUubm93KCk7XHJcbiAgICAgICAgICAgIFRoaXMuc2NoZWR1bGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLHNjaGVkdWxlOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHZhciBUaGlzPXRoaXMsc2V0PVRoaXMuc2V0O1xyXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWw9TWF0aC5mbG9vcigxMDAwL3NldC5mcHMpO1xyXG4gICAgICAgICAgICBpZighVGhpcy50aW1lcil7XHJcbiAgICAgICAgICAgICAgICBUaGlzLnRpbWVyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgVGhpcy5zY2hlZHVsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgbm93PURhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHZhciBkcmF3VGltZT1UaGlzLmRyYXdUaW1lfHwwO1xyXG4gICAgICAgICAgICBpZihub3ctZHJhd1RpbWU8aW50ZXJ2YWwpe1xyXG4gICAgICAgICAgICAgICAgLy/msqHliLDpl7TpmpTml7bpl7TvvIzkuI3nu5jliLZcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgVGhpcy5kcmF3VGltZT1ub3c7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL+WIh+WIhuW9k+WJjemcgOimgeeahOe7mOWItuaVsOaNrlxyXG4gICAgICAgICAgICB2YXIgYnVmZmVyU2l6ZT1UaGlzLnNhbXBsZVJhdGUvc2V0LmZwcztcclxuICAgICAgICAgICAgdmFyIHBjbT1UaGlzLnBjbURhdGE7XHJcbiAgICAgICAgICAgIHZhciBwb3M9VGhpcy5wY21Qb3M7XHJcbiAgICAgICAgICAgIHZhciBsZW49TWF0aC5tYXgoMCwgTWF0aC5taW4oYnVmZmVyU2l6ZSxwY20ubGVuZ3RoLXBvcykpO1xyXG4gICAgICAgICAgICB2YXIgc3VtPTA7XHJcbiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8bGVuO2krKyxwb3MrKyl7XHJcbiAgICAgICAgICAgICAgICBzdW0rPU1hdGguYWJzKHBjbVtwb3NdKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgVGhpcy5wY21Qb3M9cG9zO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy/mjqjlhaXnu5jliLZcclxuICAgICAgICAgICAgaWYobGVuIHx8ICFzZXQua2VlcCl7XHJcbiAgICAgICAgICAgICAgICBUaGlzLmRyYXcoUmVjb3JkZXIuUG93ZXJMZXZlbChzdW0sIGxlbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFsZW4gJiYgbm93LVRoaXMuaW5wdXRUaW1lPjEzMDApe1xyXG4gICAgICAgICAgICAgICAgLy/otoXml7bmsqHmnInovpPlhaXvvIzlubLmjonlrprml7blmahcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoVGhpcy50aW1lcik7XHJcbiAgICAgICAgICAgICAgICBUaGlzLnRpbWVyPTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLGRyYXc6ZnVuY3Rpb24ocG93ZXJMZXZlbCl7XHJcbiAgICAgICAgICAgIHZhciBUaGlzPXRoaXMsc2V0PVRoaXMuc2V0O1xyXG4gICAgICAgICAgICB2YXIgY3R4PVRoaXMuY3R4O1xyXG4gICAgICAgICAgICB2YXIgc2NhbGU9c2V0LnNjYWxlO1xyXG4gICAgICAgICAgICB2YXIgd2lkdGg9c2V0LndpZHRoKnNjYWxlO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0PXNldC5oZWlnaHQqc2NhbGU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc3BlZWR4PXNldC5zcGVlZC9zZXQuZnBzO1xyXG4gICAgICAgICAgICB2YXIgcGhhc2U9VGhpcy5fcGhhc2UtPXNwZWVkeDsvL+S9jeenu+mAn+W6plxyXG4gICAgICAgICAgICB2YXIgcGhhc2UyPXBoYXNlK3NwZWVkeCpzZXQucGhhc2U7XHJcbiAgICAgICAgICAgIHZhciBhbXBsaXR1ZGU9cG93ZXJMZXZlbC8xMDA7XHJcbiAgICAgICAgICAgIHZhciBwYXRoMT1UaGlzLmdlblBhdGgoMixhbXBsaXR1ZGUscGhhc2UpO1xyXG4gICAgICAgICAgICB2YXIgcGF0aDI9VGhpcy5nZW5QYXRoKDEuOCxhbXBsaXR1ZGUscGhhc2UyKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8v5byA5aeL57uY5Yi25Zu+5b2iXHJcbiAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwwLHdpZHRoLGhlaWdodCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL+e7mOWItuWMheWbtOiDjOaZr1xyXG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgIGZvcih2YXIgaT0wLHg9MDt4PHdpZHRoO2krKyx4Kz1zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHg9PTApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHgscGF0aDFbaV0pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCxwYXRoMVtpXSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgIGZvcih2YXIgeD13aWR0aC0xO3g+PTA7aS0tLHgtPXNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgscGF0aDJbaV0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGU9VGhpcy5saW5lYXJCZztcclxuICAgICAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8v57uY5Yi257q/XHJcbiAgICAgICAgICAgIFRoaXMuZHJhd1BhdGgocGF0aDIsVGhpcy5saW5lYXIyKTtcclxuICAgICAgICAgICAgVGhpcy5kcmF3UGF0aChwYXRoMSxUaGlzLmxpbmVhcjEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAsZHJhd1BhdGg6ZnVuY3Rpb24ocGF0aCxsaW5lYXIpe1xyXG4gICAgICAgICAgICB2YXIgVGhpcz10aGlzLHNldD1UaGlzLnNldDtcclxuICAgICAgICAgICAgdmFyIGN0eD1UaGlzLmN0eDtcclxuICAgICAgICAgICAgdmFyIHNjYWxlPXNldC5zY2FsZTtcclxuICAgICAgICAgICAgdmFyIHdpZHRoPXNldC53aWR0aCpzY2FsZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgZm9yKHZhciBpPTAseD0wO3g8d2lkdGg7aSsrLHgrPXNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeD09MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCxwYXRoW2ldKTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgscGF0aFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjdHgubGluZVdpZHRoPXNldC5saW5lV2lkdGgqc2NhbGU7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZT1saW5lYXI7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgUmVjb3JkZXJbVmlld1R4dF09V2F2ZVZpZXc7XHJcbiAgICBcclxuICAgICAgICBcclxuICAgIH0pKCk7Il19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs
7
+ */
8
+ import Recorder from"recorder-core";!function(){var WaveView=function(e){return new fn(e)},e="WaveView",fn=function(t){var r=this,a={scale:2,speed:9,phase:21.8,fps:20,keep:!0,lineWidth:3,linear1:[0,"rgba(150,96,238,1)",.2,"rgba(170,79,249,1)",1,"rgba(53,199,253,1)"],linear2:[0,"rgba(209,130,255,0.6)",1,"rgba(53,199,255,0.6)"],linearBg:[0,"rgba(255,255,255,0.2)",1,"rgba(54,197,252,0.2)"]};for(var i in t)a[i]=t[i];r.set=t=a;var n=t.elem;n&&("string"==typeof n?n=document.querySelector(n):n.length&&(n=n[0])),n&&(t.width=n.offsetWidth,t.height=n.offsetHeight);var o=t.scale,h=t.width*o,l=t.height*o;if(!h||!l)throw new Error(e+"无宽高");var s=r.elem=document.createElement("div"),c=["","transform-origin:0 0;","transform:scale("+1/o+");"];s.innerHTML='<div style="width:'+t.width+"px;height:"+t.height+'px;overflow:hidden"><div style="width:'+h+"px;height:"+l+"px;"+c.join("-webkit-")+c.join("-ms-")+c.join("-moz-")+c.join("")+'"><canvas/></div></div>';var d=r.canvas=s.querySelector("canvas"),p=r.ctx=d.getContext("2d");d.width=h,d.height=l,r.linear1=r.genLinear(p,h,t.linear1),r.linear2=r.genLinear(p,h,t.linear2),r.linearBg=r.genLinear(p,l,t.linearBg,!0),n&&(n.innerHTML="",n.appendChild(s)),r._phase=0};fn.prototype=WaveView.prototype={genLinear:function(e,t,r,a){for(var i=e.createLinearGradient(0,0,a?0:t,a?t:0),n=0;n<r.length;)i.addColorStop(r[n++],r[n++]);return i},genPath:function(e,t,r){for(var a=[],i=this.set,n=i.scale,o=i.width*n,h=i.height*n/2,l=0;l<o;l+=n){var s=(1+Math.cos(Math.PI+l/o*2*Math.PI))/2*h*t*Math.sin(2*Math.PI*(l/o)*e+r)+h;a.push(s)}return a},input:function(e,t,r){var a=this;a.sampleRate=r,a.pcmData=e,a.pcmPos=0,a.inputTime=Date.now(),a.schedule()},schedule:function(){var e=this,t=e.set,r=Math.floor(1e3/t.fps);e.timer||(e.timer=setInterval((function(){e.schedule()}),r));var a=Date.now();if(!(a-(e.drawTime||0)<r)){e.drawTime=a;for(var i=e.sampleRate/t.fps,n=e.pcmData,o=e.pcmPos,h=Math.max(0,Math.min(i,n.length-o)),l=0,s=0;s<h;s++,o++)l+=Math.abs(n[o]);e.pcmPos=o,!h&&t.keep||e.draw(Recorder.PowerLevel(l,h)),!h&&a-e.inputTime>1300&&(clearInterval(e.timer),e.timer=0)}},draw:function(e){var t=this,r=t.set,a=t.ctx,i=r.scale,n=r.width*i,o=r.height*i,h=r.speed/r.fps,l=t._phase-=h,s=l+h*r.phase,c=e/100,d=t.genPath(2,c,l),p=t.genPath(1.8,c,s);a.clearRect(0,0,n,o),a.beginPath();for(var f=0,g=0;g<n;f++,g+=i)0==g?a.moveTo(g,d[f]):a.lineTo(g,d[f]);f--;for(g=n-1;g>=0;f--,g-=i)a.lineTo(g,p[f]);a.closePath(),a.fillStyle=t.linearBg,a.fill(),t.drawPath(p,t.linear2),t.drawPath(d,t.linear1)},drawPath:function(e,t){var r=this.set,a=this.ctx,i=r.scale,n=r.width*i;a.beginPath();for(var o=0,h=0;h<n;o++,h+=i)0==h?a.moveTo(h,e[o]):a.lineTo(h,e[o]);a.lineWidth=r.lineWidth*i,a.strokeStyle=t,a.stroke()}},Recorder[e]=WaveView}();
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9yZWNvcmRlci9leHRlbnNpb24td2F2ZXZpZXcubWpz`
10
+
@@ -1,34 +1,10 @@
1
- export function resampleAudio(frameBuffer, inputSampleRate, outputSampleRate) {
2
- let inputLength = frameBuffer.length;
3
- let outputLength = Math.floor((inputLength / inputSampleRate) * outputSampleRate);
4
- let outputBuffer = [];
5
- for (let i = 0; i < outputLength; i++) {
6
- let index = Math.floor(i * (inputSampleRate / outputSampleRate));
7
- outputBuffer[i] = frameBuffer[index];
8
- }
9
- return outputBuffer;
10
- }
11
- export function convertFrameBufferToBase64(frameBuffer) {
12
- // 创建一个存储转换后数据的Uint8Array
13
- const uint8Array = new Uint8Array(frameBuffer.length * 2); // 16位小端LE,每个样本占用2个字节
14
- // 将frameBuffer中的每个样本转换为16位小端字节序
15
- for (let i = 0; i < frameBuffer.length; i++) {
16
- const sample = frameBuffer[i];
17
- uint8Array[i * 2] = sample & 0xff; // 低字节
18
- uint8Array[i * 2 + 1] = (sample >> 8) & 0xff; // 高字节
19
- }
20
- // 使用btoa函数将Uint8Array转换为base64字符串
21
- const base64String = btoa(String.fromCharCode.apply(null, uint8Array));
22
- return base64String;
23
- }
24
- export function resampleBuffer(buffer, fromRate, toRate) {
25
- const ratio = fromRate / toRate;
26
- const length = Math.round(buffer.length / ratio);
27
- const result = new Int16Array(length);
28
- for (let i = 0; i < length; i++) {
29
- const j = Math.floor(i * ratio);
30
- result[i] = buffer[j];
31
- }
32
- return result;
33
- }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzYW1wbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvbGliL3Jlc2FtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBcUIsRUFBRSxlQUF1QixFQUFFLGdCQUF3QjtJQUNsRyxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3JDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRixJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7SUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNqRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUgsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFdBQXFCO0lBQ2hFLHlCQUF5QjtJQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0lBRWhGLGdDQUFnQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNO1FBQ3pDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU07SUFDeEQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFdkUsT0FBTyxZQUFZLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQWM7SUFDakYsTUFBTSxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmVzYW1wbGVBdWRpbyhmcmFtZUJ1ZmZlcjogbnVtYmVyW10sIGlucHV0U2FtcGxlUmF0ZTogbnVtYmVyLCBvdXRwdXRTYW1wbGVSYXRlOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICBsZXQgaW5wdXRMZW5ndGggPSBmcmFtZUJ1ZmZlci5sZW5ndGg7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gTWF0aC5mbG9vcigoaW5wdXRMZW5ndGggLyBpbnB1dFNhbXBsZVJhdGUpICogb3V0cHV0U2FtcGxlUmF0ZSk7XHJcbiAgICBsZXQgb3V0cHV0QnVmZmVyOiBudW1iZXJbXSA9IFtdO1xyXG4gIFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKGkgKiAoaW5wdXRTYW1wbGVSYXRlIC8gb3V0cHV0U2FtcGxlUmF0ZSkpO1xyXG4gICAgICBvdXRwdXRCdWZmZXJbaV0gPSBmcmFtZUJ1ZmZlcltpbmRleF07XHJcbiAgICB9XHJcbiAgXHJcbiAgICByZXR1cm4gb3V0cHV0QnVmZmVyO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NChmcmFtZUJ1ZmZlcjogbnVtYmVyW10pOiBzdHJpbmcge1xyXG4vLyDliJvlu7rkuIDkuKrlrZjlgqjovazmjaLlkI7mlbDmja7nmoRVaW50OEFycmF5XHJcbmNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShmcmFtZUJ1ZmZlci5sZW5ndGggKiAyKTsgLy8gMTbkvY3lsI/nq69MRe+8jOavj+S4quagt+acrOWNoOeUqDLkuKrlrZfoioJcclxuXHJcbi8vIOWwhmZyYW1lQnVmZmVy5Lit55qE5q+P5Liq5qC35pys6L2s5o2i5Li6MTbkvY3lsI/nq6/lrZfoioLluo9cclxuZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZUJ1ZmZlci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3Qgc2FtcGxlID0gZnJhbWVCdWZmZXJbaV07XHJcbiAgICB1aW50OEFycmF5W2kgKiAyXSA9IHNhbXBsZSAmIDB4ZmY7IC8vIOS9juWtl+iKglxyXG4gICAgdWludDhBcnJheVtpICogMiArIDFdID0gKHNhbXBsZSA+PiA4KSAmIDB4ZmY7IC8vIOmrmOWtl+iKglxyXG59XHJcblxyXG4vLyDkvb/nlKhidG9h5Ye95pWw5bCGVWludDhBcnJheei9rOaNouS4umJhc2U2NOWtl+espuS4slxyXG5jb25zdCBiYXNlNjRTdHJpbmcgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdWludDhBcnJheSkpO1xyXG5cclxucmV0dXJuIGJhc2U2NFN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc2FtcGxlQnVmZmVyKGJ1ZmZlcjogSW50MTZBcnJheSwgZnJvbVJhdGU6IG51bWJlciwgdG9SYXRlOiBudW1iZXIpOiBJbnQxNkFycmF5IHtcclxuICBjb25zdCByYXRpbyA9IGZyb21SYXRlIC8gdG9SYXRlO1xyXG4gIGNvbnN0IGxlbmd0aCA9IE1hdGgucm91bmQoYnVmZmVyLmxlbmd0aCAvIHJhdGlvKTtcclxuICBjb25zdCByZXN1bHQgPSBuZXcgSW50MTZBcnJheShsZW5ndGgpO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBqID0gTWF0aC5mbG9vcihpICogcmF0aW8pO1xyXG4gICAgcmVzdWx0W2ldID0gYnVmZmVyW2pdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufSJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/resample.mjs
7
+ */
8
+ export function resampleAudio(t,r,e){let o=t.length,n=Math.floor(o/r*e),l=[];for(let o=0;o<n;o++){let n=Math.floor(o*(r/e));l[o]=t[n]}return l}export function convertFrameBufferToBase64(t){const r=new Uint8Array(2*t.length);for(let e=0;e<t.length;e++){const o=t[e];r[2*e]=255&o,r[2*e+1]=o>>8&255}return btoa(String.fromCharCode.apply(null,r))}export function resampleBuffer(t,r,e){const o=r/e,n=Math.round(t.length/o),l=new Int16Array(n);for(let r=0;r<n;r++){const e=Math.floor(r*o);l[r]=t[e]}return l}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9yZXNhbXBsZS5tanM=`
10
+
@@ -1,189 +1,10 @@
1
- import Parse from "parse";
2
- import { AudioPlayer } from "../lib/audio/audio.player";
3
- import { FmPushAudioOutputStreamCallback } from "../lib/audio/streamer.microsoft";
4
- // import { FmodeTTSProviderMicrosoft } from "./provider-microsoft";
5
- // class FmodeTTSProviderMicrosoft{}
6
- import { PCMStreamer } from "../lib/audio/streamer.pcm";
7
- /**
8
- * FmodeTTS
9
- * 每个实例表示一次独立的语音合成服务
10
- */
11
- export class FmodeTTS {
12
- // 私有属性:全局配置 当前激活实例
13
- // 实现全局仅一个TTS在播放
14
- static { this.activeInstance = null; }
15
- stop() {
16
- if (FmodeTTS.activeInstance === this) {
17
- FmodeTTS.activeInstance = null;
18
- }
19
- this.audioPlayer?.stop();
20
- this.audioStream?.stop();
21
- this.provider?.stop();
22
- this.isPlaying = false;
23
- }
24
- constructor(config, uploadServ) {
25
- this.isPlaying = false;
26
- this.uploadServ = uploadServ;
27
- this.config = config;
28
- this.audioPlayer = AudioPlayer.getInstance();
29
- this.audioStream = new FmPushAudioOutputStreamCallback();
30
- // 初始化provider
31
- this.provider = config.provider; // || new FmodeTTSProviderMicrosoft();
32
- console.log("初始化provider", config, this.provider, this.provider.constructor);
33
- if (this.provider.constructor.toString().indexOf("Doubao") > -1) {
34
- // 创建 PCM 流播放器
35
- const pcmStreamer = new PCMStreamer(24000, 1, 16);
36
- config.audioStream = pcmStreamer;
37
- }
38
- else {
39
- config.audioStream = this.audioStream;
40
- }
41
- this.audioStream = config?.audioStream || this.audioStream;
42
- this.provider.initialize(config);
43
- this.provider.voiceConfig = config?.voiceConfig;
44
- this.provider.eventMap = this.eventMap;
45
- }
46
- extractTextFromXML(inputString) {
47
- if (!inputString || typeof inputString !== 'string') {
48
- return '';
49
- }
50
- const regex = />([^<]+)</g;
51
- const result = [];
52
- let matches;
53
- while ((matches = regex.exec(inputString)) !== null) {
54
- const text = matches[1]?.trim();
55
- if (text) {
56
- result.push(text);
57
- }
58
- }
59
- return result.join(' ');
60
- }
61
- extractSSMLContent(inputString) {
62
- if (!inputString || typeof inputString !== 'string') {
63
- return inputString || '';
64
- }
65
- const regex = /<speak.*?<\/speak>/s;
66
- const match = inputString.match(regex);
67
- return match?.[0] || inputString;
68
- }
69
- async speakAsync(textOrSSML, chatVoice, eventMap) {
70
- // 停止当前活动的其他实例
71
- if (FmodeTTS.activeInstance && FmodeTTS.activeInstance !== this) {
72
- FmodeTTS.activeInstance.stop();
73
- }
74
- FmodeTTS.activeInstance = this;
75
- if (!chatVoice) {
76
- const ChatVoice = Parse.Object.extend("ChatVoice");
77
- chatVoice = new ChatVoice();
78
- chatVoice.set("ssml", textOrSSML);
79
- chatVoice.set("content", this.extractTextFromXML(textOrSSML));
80
- const company = localStorage.getItem("company");
81
- company && chatVoice.set("company", { __type: "Pointer", className: "Company", objectId: company });
82
- Parse.User.current()?.id && chatVoice.set("user", Parse.User.current().toPointer());
83
- }
84
- // 检查缓存
85
- if (!chatVoice?.get("voiceFile")) {
86
- const orList = [];
87
- // if (chatVoice?.get("content")) {
88
- // orList.push({ content: chatVoice?.get("content") });
89
- // }
90
- if (textOrSSML) {
91
- orList.push({ ssml: textOrSSML });
92
- }
93
- const query = Parse.Query.fromJSON("ChatVoice", {
94
- include: "voiceFile",
95
- where: { $or: orList }
96
- });
97
- query.exists("voiceFile");
98
- query.addDescending('updatedAt');
99
- const exists = await query.first();
100
- chatVoice.set("voiceFile", exists?.get("voiceFile"));
101
- }
102
- console.log("Exists playAudioData", chatVoice?.get("voiceFile"));
103
- if (chatVoice?.get("voiceFile")) {
104
- this.playAudioData(chatVoice?.get("voiceFile")?.get("url"), chatVoice, eventMap);
105
- chatVoice.save();
106
- return chatVoice;
107
- }
108
- textOrSSML = this.extractSSMLContent(textOrSSML);
109
- this.isPlaying = true;
110
- return new Promise((resolve, reject) => {
111
- const startTime = Date.now();
112
- this.provider.synthesize(textOrSSML, async (result) => {
113
- const endTime = Date.now();
114
- const audioData = result?.audioData;
115
- let duration = Number(result?.audioDuration);
116
- if (this.config.provider == "microsoft") {
117
- duration = duration / 10000;
118
- }
119
- chatVoice.set("duration", duration);
120
- console.log("eventMap?.onResult", eventMap, duration);
121
- eventMap?.onResult?.({ duration: duration });
122
- // await this.playAudioData(audioData, chatVoice, eventMap); // 生成时已经在播放了,不需要再播放
123
- const blob = new Blob([audioData], { type: 'audio/wav' });
124
- await this.uploadAndSaveVoice(blob, chatVoice);
125
- console.log(`Audio synthesis finished. Duration: ${endTime - startTime} ms`);
126
- setTimeout(() => {
127
- this.isPlaying = false;
128
- eventMap?.onStop?.();
129
- }, 2000);
130
- resolve(chatVoice);
131
- }, (error) => {
132
- this.isPlaying = false;
133
- reject(`Error occurred during synthesis: ${error}`);
134
- }, () => {
135
- eventMap?.onStart?.();
136
- });
137
- });
138
- }
139
- async playAudioData(audioData, chatVoice, eventMap) {
140
- let url;
141
- if (audioData?.indexOf?.("http") >= -1) {
142
- url = audioData;
143
- }
144
- else {
145
- const blob = new Blob([audioData], { type: 'audio/wav' });
146
- url = URL.createObjectURL(blob);
147
- await this.uploadAndSaveVoice(blob, chatVoice);
148
- }
149
- eventMap?.onStart?.(chatVoice);
150
- this.isPlaying = true;
151
- const audioPlayer = this.audioPlayer;
152
- audioPlayer.setAudioEvent("onloadeddata", () => {
153
- const duration = audioPlayer.duration * 1000;
154
- if (!chatVoice?.get("duration")) {
155
- chatVoice.set("duration", duration);
156
- chatVoice.save();
157
- }
158
- eventMap?.onLoaded?.(audioPlayer);
159
- });
160
- // 设置事件监听
161
- ["onabort", "onerror", "onpause", "onended", "onclose"].forEach(event => {
162
- audioPlayer.setAudioEvent(event, () => {
163
- this.isPlaying = false;
164
- eventMap?.onStop?.();
165
- });
166
- });
167
- const playAudio = () => {
168
- audioPlayer.play(url).catch(() => {
169
- setTimeout(playAudio, 200);
170
- });
171
- };
172
- playAudio();
173
- }
174
- async uploadAndSaveVoice(blob, chatVoice) {
175
- if (!this.uploadServ)
176
- return null;
177
- const id = chatVoice?.id || this.uploadServ.genMd5(chatVoice?.get("content") || chatVoice?.get("ssml"));
178
- const now = new Date();
179
- const filename = `${id}${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}${now.getHours()}${now.getMinutes()}${now.getSeconds()}.wav`;
180
- const file = new File([blob], filename, { type: 'audio/wav' });
181
- const fileResult = await this.uploadServ.upload(file);
182
- if (fileResult?.id) {
183
- chatVoice.set("voiceFile", { __type: "Pointer", className: "Attachment", objectId: fileResult.id });
184
- await chatVoice.save();
185
- }
186
- return fileResult?.url || null;
187
- }
188
- }
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdHRzLWNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL3R0cy9mbW9kZS10dHMtY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixvRUFBb0U7QUFDcEUsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUt4RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNqQixtQkFBbUI7SUFDbkIsZ0JBQWdCO2FBQ0QsbUJBQWMsR0FBb0IsSUFBSSxBQUF4QixDQUF5QjtJQVl0RCxJQUFJO1FBQ0EsSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxNQU9YLEVBQUUsVUFBOEI7UUF2QjFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUF3QjlCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBRXBCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxD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QU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCxJQUFJLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNqQixTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sVUFBVSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgTm92YVVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmFnZS9zZXJ2aWNlLXVwbG9hZC9ub3ZhLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF1ZGlvUGxheWVyIH0gZnJvbSBcIi4uL2xpYi9hdWRpby9hdWRpby5wbGF5ZXJcIjtcclxuaW1wb3J0IHsgRm1QdXNoQXVkaW9PdXRwdXRTdHJlYW1DYWxsYmFjayB9IGZyb20gXCIuLi9saWIvYXVkaW8vc3RyZWFtZXIubWljcm9zb2Z0XCI7XHJcbmltcG9ydCB7IEZtb2RlVFRTRXZlbnQsIEZtb2RlVFRTUHJvdmlkZXIgfSBmcm9tIFwiLi9pbnQtdHRzLXByb3ZpZGVyXCI7XHJcbi8vIGltcG9ydCB7IEZtb2RlVFRTUHJvdmlkZXJNaWNyb3NvZnQgfSBmcm9tIFwiLi9wcm92aWRlci1taWNyb3NvZnRcIjtcclxuLy8gY2xhc3MgRm1vZGVUVFNQcm92aWRlck1pY3Jvc29mdHt9XHJcbmltcG9ydCB7IFBDTVN0cmVhbWVyIH0gZnJvbSBcIi4uL2xpYi9hdWRpby9zdHJlYW1lci5wY21cIjtcclxuaW1wb3J0IHsgQXVkaW9TdHJlYW1lciB9IGZyb20gXCIuLi9saWIvYXVkaW8vYXVkaW8uc3RyZWFtZXJcIjtcclxuaW1wb3J0IHsgRm1vZGVDaGF0Vm9pY2VDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9hZ2VudC9jaGF0L2ludGVyZmFjZVwiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBGbW9kZVRUU1xyXG4gKiDmr4/kuKrlrp7kvovooajnpLrkuIDmrKHni6znq4vnmoTor63pn7PlkIjmiJDmnI3liqFcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGbW9kZVRUUyB7XHJcbiAgICAvLyDnp4HmnInlsZ7mgKfvvJrlhajlsYDphY3nva4g5b2T5YmN5r+A5rS75a6e5L6LXHJcbiAgICAvLyDlrp7njrDlhajlsYDku4XkuIDkuKpUVFPlnKjmkq3mlL5cclxuICAgIHByaXZhdGUgc3RhdGljIGFjdGl2ZUluc3RhbmNlOiBGbW9kZVRUUyB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBwcml2YXRlIHByb3ZpZGVyOiBGbW9kZVRUU1Byb3ZpZGVyO1xyXG4gICAgZXZlbnRNYXA6IEZtb2RlVFRTRXZlbnQ7XHJcbiAgICB1cGxvYWRTZXJ2PzogTm92YVVwbG9hZFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgaXNQbGF5aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBhdWRpb1BsYXllcjogQXVkaW9QbGF5ZXI7XHJcbiAgICBhdWRpb1N0cmVhbTogQXVkaW9TdHJlYW1lcjtcclxuICAgIC8vIOmfs+iJslxyXG4gICAgdm9pY2VDb25maWc6Rm1vZGVDaGF0Vm9pY2VDb25maWd8dW5kZWZpbmVkXHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1ZGlvUGxheWVyPy5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5hdWRpb1N0cmVhbT8uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXI/LnN0b3AoKTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uZmlnOmFueVxyXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiB7XHJcbiAgICAgICAgcmVnaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgYXVkaW9TdHJlYW0/OkF1ZGlvU3RyZWFtZXIsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uS2V5Pzogc3RyaW5nLFxyXG4gICAgICAgIHRva2VuPzogc3RyaW5nLFxyXG4gICAgICAgIHByb3ZpZGVyPzogRm1vZGVUVFNQcm92aWRlciAvLyDlhYHorrjkvKDlhaXoh6rlrprkuYlwcm92aWRlclxyXG4gICAgICAgIHZvaWNlQ29uZmlnPzogRm1vZGVDaGF0Vm9pY2VDb25maWdcclxuICAgIH0sIHVwbG9hZFNlcnY/OiBOb3ZhVXBsb2FkU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkU2VydiA9IHVwbG9hZFNlcnY7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWdcclxuXHJcbiAgICAgICAgdGhpcy5hdWRpb1BsYXllciA9IEF1ZGlvUGxheWVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5hdWRpb1N0cmVhbSA9IG5ldyBGbVB1c2hBdWRpb091dHB1dFN0cmVhbUNhbGxiYWNrKCk7XHJcblxyXG4gICAgICAgIC8vIOWIneWni+WMlnByb3ZpZGVyXHJcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IGNvbmZpZy5wcm92aWRlciAvLyB8fCBuZXcgRm1vZGVUVFNQcm92aWRlck1pY3Jvc29mdCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5Yid5aeL5YyWcHJvdmlkZXJcIixjb25maWcsdGhpcy5wcm92aWRlcix0aGlzLnByb3ZpZGVyLmNvbnN0cnVjdG9yKVxyXG4gICAgICAgIGlmKHRoaXMucHJvdmlkZXIuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmRleE9mKFwiRG91YmFvXCIpPi0xICl7XHJcbiAgICAgICAgICAgIC8vIOWIm+W7uiBQQ00g5rWB5pKt5pS+5ZmoXHJcbiAgICAgICAgICAgIGNvbnN0IHBjbVN0cmVhbWVyID0gbmV3IFBDTVN0cmVhbWVyKDI0MDAwLCAxLCAxNik7XHJcbiAgICAgICAgICAgIGNvbmZpZy5hdWRpb1N0cmVhbSA9IHBjbVN0cmVhbWVyXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbmZpZy5hdWRpb1N0cmVhbSA9IHRoaXMuYXVkaW9TdHJlYW1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXVkaW9TdHJlYW0gPSBjb25maWc/LmF1ZGlvU3RyZWFtIHx8IHRoaXMuYXVkaW9TdHJlYW07XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvdmlkZXIuaW5pdGlhbGl6ZShjb25maWcpO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXIudm9pY2VDb25maWcgPSBjb25maWc/LnZvaWNlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucHJvdmlkZXIuZXZlbnRNYXAgPSB0aGlzLmV2ZW50TWFwO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0VGV4dEZyb21YTUwoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZyB8fCB0eXBlb2YgaW5wdXRTdHJpbmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjb25zdCByZWdleCA9IC8+KFtePF0rKTwvZztcclxuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IG1hdGNoZXM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICBcclxuICAgICAgICB3aGlsZSAoKG1hdGNoZXMgPSByZWdleC5leGVjKGlucHV0U3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoZXNbMV0/LnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKHRleHQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGV4dHJhY3RTU01MQ29udGVudChpbnB1dFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWlucHV0U3RyaW5nIHx8IHR5cGVvZiBpbnB1dFN0cmluZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0U3RyaW5nIHx8ICcnO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLzxzcGVhay4qPzxcXC9zcGVhaz4vcztcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyaW5nLm1hdGNoKHJlZ2V4KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2g/LlswXSB8fCBpbnB1dFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3BlYWtBc3luYyh0ZXh0T3JTU01MOiBzdHJpbmcsIGNoYXRWb2ljZT86IFBhcnNlLk9iamVjdCwgZXZlbnRNYXA/OiBhbnkpOiBQcm9taXNlPFBhcnNlLk9iamVjdD4ge1xyXG4gICAgICAgICAvLyDlgZzmraLlvZPliY3mtLvliqjnmoTlhbbku5blrp7kvotcclxuICAgICAgICAgaWYgKEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlICYmIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlICE9PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIEZtb2RlVFRTLmFjdGl2ZUluc3RhbmNlLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRm1vZGVUVFMuYWN0aXZlSW5zdGFuY2UgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIWNoYXRWb2ljZSkge1xyXG4gICAgICAgICAgICBjb25zdCBDaGF0Vm9pY2UgPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiQ2hhdFZvaWNlXCIpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2UgPSBuZXcgQ2hhdFZvaWNlKCk7XHJcbiAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJzc21sXCIsIHRleHRPclNTTUwpO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwiY29udGVudFwiLCB0aGlzLmV4dHJhY3RUZXh0RnJvbVhNTCh0ZXh0T3JTU01MKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBhbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNvbXBhbnlcIik7XHJcbiAgICAgICAgICAgIGNvbXBhbnkgJiYgY2hhdFZvaWNlLnNldChcImNvbXBhbnlcIiwgeyBfX3R5cGU6IFwiUG9pbnRlclwiLCBjbGFzc05hbWU6IFwiQ29tcGFueVwiLCBvYmplY3RJZDogY29tcGFueSB9KTtcclxuICAgICAgICAgICAgUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkICYmIGNoYXRWb2ljZS5zZXQoXCJ1c2VyXCIsIFBhcnNlLlVzZXIuY3VycmVudCgpLnRvUG9pbnRlcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOajgOafpee8k+WtmFxyXG4gICAgICAgIGlmICghY2hhdFZvaWNlPy5nZXQoXCJ2b2ljZUZpbGVcIikpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3JMaXN0ID0gW107XHJcbiAgICAgICAgICAgIC8vIGlmIChjaGF0Vm9pY2U/LmdldChcImNvbnRlbnRcIikpIHtcclxuICAgICAgICAgICAgLy8gICAgIG9yTGlzdC5wdXNoKHsgY29udGVudDogY2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpIH0pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0T3JTU01MKSB7XHJcbiAgICAgICAgICAgICAgICBvckxpc3QucHVzaCh7IHNzbWw6IHRleHRPclNTTUwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oXCJDaGF0Vm9pY2VcIiwge1xyXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogXCJ2b2ljZUZpbGVcIixcclxuICAgICAgICAgICAgICAgIHdoZXJlOiB7ICRvcjogb3JMaXN0IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHF1ZXJ5LmV4aXN0cyhcInZvaWNlRmlsZVwiKTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkRGVzY2VuZGluZygndXBkYXRlZEF0Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJ2b2ljZUZpbGVcIiwgZXhpc3RzPy5nZXQoXCJ2b2ljZUZpbGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFeGlzdHMgcGxheUF1ZGlvRGF0YVwiLCBjaGF0Vm9pY2U/LmdldChcInZvaWNlRmlsZVwiKSlcclxuICAgICAgICBpZiAoY2hhdFZvaWNlPy5nZXQoXCJ2b2ljZUZpbGVcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5QXVkaW9EYXRhKGNoYXRWb2ljZT8uZ2V0KFwidm9pY2VGaWxlXCIpPy5nZXQoXCJ1cmxcIiksIGNoYXRWb2ljZSwgZXZlbnRNYXApO1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2F2ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhdFZvaWNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dE9yU1NNTCA9IHRoaXMuZXh0cmFjdFNTTUxDb250ZW50KHRleHRPclNTTUwpO1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXIuc3ludGhlc2l6ZShcclxuICAgICAgICAgICAgICAgIHRleHRPclNTTUwsXHJcbiAgICAgICAgICAgICAgICBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9EYXRhID0gcmVzdWx0Py5hdWRpb0RhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IE51bWJlcihyZXN1bHQ/LmF1ZGlvRHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jb25maWcucHJvdmlkZXI9PVwibWljcm9zb2Z0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJkdXJhdGlvblwiLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudE1hcD8ub25SZXN1bHRcIixldmVudE1hcCxkdXJhdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBldmVudE1hcD8ub25SZXN1bHQ/Lih7ZHVyYXRpb246ZHVyYXRpb259KTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBhd2FpdCB0aGlzLnBsYXlBdWRpb0RhdGEoYXVkaW9EYXRhLCBjaGF0Vm9pY2UsIGV2ZW50TWFwKTsgLy8g55Sf5oiQ5pe25bey57uP5Zyo5pKt5pS+5LqG77yM5LiN6ZyA6KaB5YaN5pKt5pS+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthdWRpb0RhdGFdLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkQW5kU2F2ZVZvaWNlKGJsb2IsIGNoYXRWb2ljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEF1ZGlvIHN5bnRoZXNpcyBmaW5pc2hlZC4gRHVyYXRpb246ICR7ZW5kVGltZSAtIHN0YXJ0VGltZX0gbXNgKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RvcD8uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjaGF0Vm9pY2UpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBFcnJvciBvY2N1cnJlZCBkdXJpbmcgc3ludGhlc2lzOiAke2Vycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RhcnQ/LigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcGxheUF1ZGlvRGF0YShhdWRpb0RhdGE6IHN0cmluZywgY2hhdFZvaWNlOiBQYXJzZS5PYmplY3QsIGV2ZW50TWFwOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YT8uaW5kZXhPZj8uKFwiaHR0cFwiKSA+PSAtMSkge1xyXG4gICAgICAgICAgICB1cmwgPSBhdWRpb0RhdGE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFthdWRpb0RhdGFdLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgICAgICB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEFuZFNhdmVWb2ljZShibG9iLCBjaGF0Vm9pY2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnRNYXA/Lm9uU3RhcnQ/LihjaGF0Vm9pY2UpO1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBhdWRpb1BsYXllciA9IHRoaXMuYXVkaW9QbGF5ZXI7XHJcbiAgICAgICAgYXVkaW9QbGF5ZXIuc2V0QXVkaW9FdmVudChcIm9ubG9hZGVkZGF0YVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYXVkaW9QbGF5ZXIuZHVyYXRpb24gKiAxMDAwO1xyXG4gICAgICAgICAgICBpZiAoIWNoYXRWb2ljZT8uZ2V0KFwiZHVyYXRpb25cIikpIHtcclxuICAgICAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJkdXJhdGlvblwiLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2Uuc2F2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50TWFwPy5vbkxvYWRlZD8uKGF1ZGlvUGxheWVyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g6K6+572u5LqL5Lu255uR5ZCsXHJcbiAgICAgICAgW1wib25hYm9ydFwiLCBcIm9uZXJyb3JcIiwgXCJvbnBhdXNlXCIsIFwib25lbmRlZFwiLCBcIm9uY2xvc2VcIl0uZm9yRWFjaChldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoZXZlbnQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBldmVudE1hcD8ub25TdG9wPy4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBsYXlBdWRpbyA9ICgpID0+IHtcclxuICAgICAgICAgICAgYXVkaW9QbGF5ZXIucGxheSh1cmwpLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocGxheUF1ZGlvLCAyMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHBsYXlBdWRpbygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdXBsb2FkQW5kU2F2ZVZvaWNlKGJsb2I6IEJsb2IsIGNoYXRWb2ljZTogUGFyc2UuT2JqZWN0KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZFNlcnYpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IGNoYXRWb2ljZT8uaWQgfHwgdGhpcy51cGxvYWRTZXJ2Lmdlbk1kNShjaGF0Vm9pY2U/LmdldChcImNvbnRlbnRcIikgfHwgY2hhdFZvaWNlPy5nZXQoXCJzc21sXCIpKTtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7aWR9JHtub3cuZ2V0RnVsbFllYXIoKX0ke25vdy5nZXRNb250aCgpICsgMX0ke25vdy5nZXREYXRlKCl9JHtub3cuZ2V0SG91cnMoKX0ke25vdy5nZXRNaW51dGVzKCl9JHtub3cuZ2V0U2Vjb25kcygpfS53YXZgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pO1xyXG4gICAgICAgIGNvbnN0IGZpbGVSZXN1bHQgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnYudXBsb2FkKGZpbGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChmaWxlUmVzdWx0Py5pZCkge1xyXG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwidm9pY2VGaWxlXCIsIHsgX190eXBlOiBcIlBvaW50ZXJcIiwgY2xhc3NOYW1lOiBcIkF0dGFjaG1lbnRcIiwgb2JqZWN0SWQ6IGZpbGVSZXN1bHQuaWQgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNoYXRWb2ljZS5zYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmaWxlUmVzdWx0Py51cmwgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBcclxufSJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs
7
+ */
8
+ import{FmodeParse}from"@fmode/parse";const Parse=FmodeParse.with("nova");import{AudioPlayer}from"../lib/audio/audio.player";import{FmPushAudioOutputStreamCallback}from"../lib/audio/streamer.microsoft";import{PCMStreamer}from"../lib/audio/streamer.pcm";export class FmodeTTS{static{this.activeInstance=null}stop(){FmodeTTS.activeInstance===this&&(FmodeTTS.activeInstance=null),this.audioPlayer?.stop(),this.audioStream?.stop(),this.provider?.stop(),this.isPlaying=!1}constructor(e,t){if(this.isPlaying=!1,this.uploadServ=t,this.config=e,this.audioPlayer=AudioPlayer.getInstance(),this.audioStream=new FmPushAudioOutputStreamCallback,this.provider=e.provider,console.log("初始化provider",e,this.provider,this.provider.constructor),this.provider.constructor.toString().indexOf("Doubao")>-1){const t=new PCMStreamer(24e3,1,16);e.audioStream=t}else e.audioStream=this.audioStream;this.audioStream=e?.audioStream||this.audioStream,this.provider.initialize(e),this.provider.voiceConfig=e?.voiceConfig,this.provider.eventMap=this.eventMap}extractTextFromXML(e){if(!e||"string"!=typeof e)return"";const t=/>([^<]+)</g,o=[];let i;for(;null!==(i=t.exec(e));){const e=i[1]?.trim();e&&o.push(e)}return o.join(" ")}extractSSMLContent(e){if(!e||"string"!=typeof e)return e||"";const t=e.match(/<speak.*?<\/speak>/s);return t?.[0]||e}async speakAsync(e,t,o){if(FmodeTTS.activeInstance&&FmodeTTS.activeInstance!==this&&FmodeTTS.activeInstance.stop(),FmodeTTS.activeInstance=this,!t){const o=Parse.Object.extend("ChatVoice");(t=new o).set("ssml",e),t.set("content",this.extractTextFromXML(e));const i=localStorage.getItem("company");i&&t.set("company",{__type:"Pointer",className:"Company",objectId:i}),Parse.User.current()?.id&&t.set("user",Parse.User.current().toPointer())}if(!t?.get("voiceFile")){const o=[];e&&o.push({ssml:e});const i=Parse.Query.fromJSON("ChatVoice",{include:"voiceFile",where:{$or:o}});i.exists("voiceFile"),i.addDescending("updatedAt");const a=await i.first();t.set("voiceFile",a?.get("voiceFile"))}return console.log("Exists playAudioData",t?.get("voiceFile")),t?.get("voiceFile")?(this.playAudioData(t?.get("voiceFile")?.get("url"),t,o),t.save(),t):(e=this.extractSSMLContent(e),this.isPlaying=!0,new Promise(((i,a)=>{const s=Date.now();this.provider.synthesize(e,(async e=>{const a=Date.now(),n=e?.audioData;let r=Number(e?.audioDuration);"microsoft"==this.config.provider&&(r/=1e4),t.set("duration",r),console.log("eventMap?.onResult",o,r),o?.onResult?.({duration:r});const c=new Blob([n],{type:"audio/wav"});await this.uploadAndSaveVoice(c,t),console.log(`Audio synthesis finished. Duration: ${a-s} ms`),setTimeout((()=>{this.isPlaying=!1,o?.onStop?.()}),2e3),i(t)}),(e=>{this.isPlaying=!1,a(`Error occurred during synthesis: ${e}`)}),(()=>{o?.onStart?.()}))})))}async playAudioData(e,t,o){let i;if(e?.indexOf?.("http")>=-1)i=e;else{const o=new Blob([e],{type:"audio/wav"});i=URL.createObjectURL(o),await this.uploadAndSaveVoice(o,t)}o?.onStart?.(t),this.isPlaying=!0;const a=this.audioPlayer;a.setAudioEvent("onloadeddata",(()=>{const e=1e3*a.duration;t?.get("duration")||(t.set("duration",e),t.save()),o?.onLoaded?.(a)})),["onabort","onerror","onpause","onended","onclose"].forEach((e=>{a.setAudioEvent(e,(()=>{this.isPlaying=!1,o?.onStop?.()}))}));const playAudio=()=>{a.play(i).catch((()=>{setTimeout(playAudio,200)}))};playAudio()}async uploadAndSaveVoice(e,t){if(!this.uploadServ)return null;const o=t?.id||this.uploadServ.genMd5(t?.get("content")||t?.get("ssml")),i=new Date,a=`${o}${i.getFullYear()}${i.getMonth()+1}${i.getDate()}${i.getHours()}${i.getMinutes()}${i.getSeconds()}.wav`,s=new File([e],a,{type:"audio/wav"}),n=await this.uploadServ.upload(s);return n?.id&&(t.set("voiceFile",{__type:"Pointer",className:"Attachment",objectId:n.id}),await t.save()),n?.url||null}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL3R0cy9mbW9kZS10dHMtY2xhc3MubWpz`
10
+
@@ -1,5 +1,10 @@
1
- export * from "./fmode-tts-class";
2
- export * from "./provider-doubao";
3
- export * from "../lib/audio/streamer.pcm";
4
- // export * from "./provider-microsoft"
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvdHRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUE7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLDJCQUEyQixDQUFBO0FBRXpDLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLXR0cy1jbGFzc1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyLWRvdWJhb1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuLi9saWIvYXVkaW8vc3RyZWFtZXIucGNtXCJcclxuXHJcbi8vIGV4cG9ydCAqIGZyb20gXCIuL3Byb3ZpZGVyLW1pY3Jvc29mdFwiIl19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/tts/index.mjs
7
+ */
8
+ export*from"./fmode-tts-class";export*from"./provider-doubao";export*from"../lib/audio/streamer.pcm";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL3R0cy9pbmRleC5tanM=`
10
+
@@ -1,2 +1,10 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50LXR0cy1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS90dHMvaW50LXR0cy1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IEZtb2RlQ2hhdFZvaWNlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvYWdlbnQvY2hhdC9pbnRlcmZhY2VcIjtcclxuZXhwb3J0IGludGVyZmFjZSBGbW9kZVRUU0V2ZW50IHtcclxuICAgIG9uU3BlYWtCZWZvcmU/KCk6IHZvaWQ7XHJcbiAgICBvblN0cmVhbVN0YXJ0ZWQ/KCk6IHZvaWQ7XHJcbiAgICBvbkF1ZGlvQ29tcGxldGVkPygpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogVFRT5o+Q5L6b6ICF5o6l5Y+jXHJcbiAqIOaJgOacieWFt+S9k+eahFRUU+acjeWKoeWunueOsOmDveW6lOivpemBteW+quatpOaOpeWPo1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBGbW9kZVRUU1Byb3ZpZGVyIHtcclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyWVFRT5pyN5YqhXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIOmFjee9ruWPguaVsFxyXG4gICAgICovXHJcbiAgICBpbml0aWFsaXplKGNvbmZpZzogYW55KTogdm9pZDtcclxuXHJcbiAgICB2b2ljZUNvbmZpZz86Rm1vZGVDaGF0Vm9pY2VDb25maWdcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiDlkIjmiJDor63pn7NcclxuICAgICAqIEBwYXJhbSB0ZXh0T3JTU01MIOaWh+acrOaIllNTTUzlhoXlrrlcclxuICAgICAqIEBwYXJhbSBvblJlc3VsdCDnu5Pmnpzlm57osINcclxuICAgICAqIEBwYXJhbSBvbkVycm9yIOmUmeivr+Wbnuiwg1xyXG4gICAgICovXHJcbiAgICBzeW50aGVzaXplKHRleHRPclNTTUw6IHN0cmluZywgXHJcbiAgICAgICAgICAgICAgb25SZXN1bHQ6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgXHJcbiAgICAgICAgICAgICAgb25FcnJvcjogKGVycm9yOiBhbnkpID0+IHZvaWQsXHJcbiAgICAgICAgICAgICAgb25TdGFydDooKT0+IHZvaWRcclxuICAgICAgICAgICAgKTogdm9pZDtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiDlgZzmraLlvZPliY3lkIjmiJBcclxuICAgICAqL1xyXG4gICAgc3RvcCgpOiB2b2lkO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIOmUgOavgei1hOa6kFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlKCk6IHZvaWQ7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICog5LqL5Lu25pig5bCEXHJcbiAgICAgKi9cclxuICAgIGV2ZW50TWFwPzogRm1vZGVUVFNFdmVudDtcclxufSJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs
7
+ */
8
+ export{};
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL3R0cy9pbnQtdHRzLXByb3ZpZGVyLm1qcw==`
10
+