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.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,315 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';
|
|
4
|
-
import Parse from "parse";
|
|
5
|
-
import { NovaUploadService } from '../../../storage/service-upload/nova-upload.service';
|
|
6
|
-
import { drawDalle, getJimengImg, getJimengT_v, getJimengV_data, getJimengI_v } from './imagine-func';
|
|
7
|
-
import { ToastController } from '@ionic/angular';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common/http";
|
|
10
|
-
import * as i2 from "../../../nova-cloud/nova-cloud.service";
|
|
11
|
-
import * as i3 from "../../../storage/service-upload/nova-upload.service";
|
|
12
|
-
import * as i4 from "@ionic/angular";
|
|
13
|
-
/**
|
|
14
|
-
* ImagineService AI绘画服务
|
|
15
|
-
*/
|
|
16
|
-
export class ImagineService {
|
|
1
|
+
|
|
17
2
|
/**
|
|
18
|
-
*
|
|
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/service-fmai/service-imagine/imagine.service.mjs
|
|
19
7
|
*/
|
|
20
|
-
constructor(http, ncloud, uploadServ,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.uploadServ = uploadServ;
|
|
24
|
-
this.toastCtrl = toastCtrl;
|
|
25
|
-
this.taskDetailMap = {};
|
|
26
|
-
/**
|
|
27
|
-
* 我的绘画作品共享方法
|
|
28
|
-
*/
|
|
29
|
-
this.newWorkList = [];
|
|
30
|
-
this.myWorkList = [];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* DALL-E-3 图片生成函数
|
|
34
|
-
* @description
|
|
35
|
-
* @see
|
|
36
|
-
* https://p4.hosteagle.club/docs/api-reference?__cpo=aHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29t
|
|
37
|
-
* @returns
|
|
38
|
-
* {
|
|
39
|
-
"id": "lpJGiFwWeA", // 图片生成任务ID
|
|
40
|
-
"createdAt": "2024-11-27T12:18:14.463Z"
|
|
41
|
-
}
|
|
42
|
-
* @param {DalleOptions} options
|
|
43
|
-
* @param {string} options.prompt 1000 characters for dall-e-2 and 4000 characters for dall-e-3.
|
|
44
|
-
* @param {string} options.model dall-e-3 dall-e-2
|
|
45
|
-
* @param {string} options.quality dall-e-3 only hd means more details & consistency
|
|
46
|
-
* @param {string} options.response_format url | b64_json
|
|
47
|
-
* @param {string} options.size 1024x1024, 1792x1024, or 1024x1792 for dall-e-3
|
|
48
|
-
* @param {string} options.style vivid | natural dall-e-3 only
|
|
49
|
-
*/
|
|
50
|
-
async drawDalle(options) {
|
|
51
|
-
let work = await drawDalle(options);
|
|
52
|
-
if (work?.id)
|
|
53
|
-
this.newWorkList.unshift(work);
|
|
54
|
-
return work;
|
|
55
|
-
}
|
|
56
|
-
priceDalle(options) {
|
|
57
|
-
let priceList = [
|
|
58
|
-
{ "model": "dall-e-3", quality: null, "size": "1024x1024", "credit": 2 * 10 * 8 * 0.04 },
|
|
59
|
-
{ "model": "dall-e-3", quality: null, "size": "1024x1792", "credit": 2 * 10 * 8 * 0.08 },
|
|
60
|
-
{ "model": "dall-e-3", quality: null, "size": "1792x1024", "credit": 2 * 10 * 8 * 0.08 },
|
|
61
|
-
{ "model": "dall-e-3", quality: "hd", "size": "1024x1024", "credit": 2 * 10 * 8 * 0.08 },
|
|
62
|
-
{ "model": "dall-e-3", quality: "hd", "size": "1024x1792", "credit": 2 * 10 * 8 * 0.12 },
|
|
63
|
-
{ "model": "dall-e-3", quality: "hd", "size": "1792x1024", "credit": 2 * 10 * 8 * 0.12 },
|
|
64
|
-
{ "model": "dall-e-2", quality: null, "size": "1024x1024", "credit": 2 * 10 * 8 * 0.02 },
|
|
65
|
-
{ "model": "dall-e-2", quality: null, "size": "512x512", "credit": 2 * 10 * 8 * 0.018 },
|
|
66
|
-
{ "model": "dall-e-2", quality: null, "size": "256x256", "credit": 2 * 10 * 8 * 0.016 }
|
|
67
|
-
];
|
|
68
|
-
let price = priceList.find(item => item.model == options.model && item.quality == options.quality && item.size == options.size);
|
|
69
|
-
let credit = price?.credit || 2 * 10 * 8 * 0.12;
|
|
70
|
-
return credit;
|
|
71
|
-
}
|
|
72
|
-
priceStableDiffusion(options) {
|
|
73
|
-
let size = options.width * options.height;
|
|
74
|
-
let num = 0.3; //飞码能量换算常数
|
|
75
|
-
let credit = size * 0.000000763 * options.steps
|
|
76
|
-
+ size * 0.00002278 * (options?.upscale || 0)
|
|
77
|
-
+ (options?.hrSteps || 0) * size * (options?.hrScale || 0) * (options?.hrScale || 0) * 0.000000763
|
|
78
|
-
+ (options?.faceFix ? 2 : 0)
|
|
79
|
-
+ (options?.imgOptions?.removeBackground ? 2 : 0)
|
|
80
|
-
+ (options?.imgOptions?.redrawBackground ? 2 : 0)
|
|
81
|
-
+ (options?.imgOptions?.facePreservation ? 2 : 0)
|
|
82
|
-
+ (options?.imgOptions?.genderDetect ? 1 : 0)
|
|
83
|
-
+ (options?.controlnet?.units?.length || 0) * 2;
|
|
84
|
-
// console.log(credit);
|
|
85
|
-
credit = credit * num * options.batchSize;
|
|
86
|
-
// console.log(credit);
|
|
87
|
-
return credit;
|
|
88
|
-
}
|
|
89
|
-
b64DataToBase64Image(b64_json) {
|
|
90
|
-
let data = atob(b64_json);
|
|
91
|
-
let blob = new Blob([data], { type: 'image/webp' });
|
|
92
|
-
new Promise(resolve => {
|
|
93
|
-
// 使用 FileReader 将 Blob 对象转换为 base64 字符串
|
|
94
|
-
let reader = new FileReader();
|
|
95
|
-
reader.onloadend = function () {
|
|
96
|
-
let base64data = reader.result;
|
|
97
|
-
console.log(base64data);
|
|
98
|
-
resolve(base64data);
|
|
99
|
-
};
|
|
100
|
-
reader.readAsDataURL(blob);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Huashi6专用绘图函数
|
|
105
|
-
* @param reqBody
|
|
106
|
-
* @see
|
|
107
|
-
* 接口reqBody参数,参考:https://www.showdoc.com.cn/2307900595645609/10319675987319598
|
|
108
|
-
* 密码:123456
|
|
109
|
-
* @returns
|
|
110
|
-
*/
|
|
111
|
-
async draw(reqBody) {
|
|
112
|
-
let data = await this.ncloud.apig("aigc/sdapi/v1/draw", reqBody);
|
|
113
|
-
// 正常生成taskId后,获取数据添加到列表中
|
|
114
|
-
let taskId = data?.paintingSign;
|
|
115
|
-
if (taskId) {
|
|
116
|
-
setTimeout(async () => {
|
|
117
|
-
let query = new Parse.Query("ImagineWork");
|
|
118
|
-
query.equalTo("taskId", taskId);
|
|
119
|
-
let work = await query.first();
|
|
120
|
-
console.log(work);
|
|
121
|
-
if (work?.id)
|
|
122
|
-
this.newWorkList.unshift(work);
|
|
123
|
-
}, 1000);
|
|
124
|
-
}
|
|
125
|
-
return data;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* 已完成的直接加载,未完成的再接口更新
|
|
129
|
-
* @param taskId
|
|
130
|
-
* @returns
|
|
131
|
-
*/
|
|
132
|
-
async taskDetail(taskId) {
|
|
133
|
-
let data = await this.ncloud.apig("aigc/sdapi/v1/task/detail", { taskId: taskId });
|
|
134
|
-
console.log(data);
|
|
135
|
-
this.taskDetailMap[taskId] = data;
|
|
136
|
-
return data;
|
|
137
|
-
}
|
|
138
|
-
getMyWorkQuery() {
|
|
139
|
-
let user = Parse.User.current();
|
|
140
|
-
if (!user?.id)
|
|
141
|
-
return;
|
|
142
|
-
let query = this.getWorkQuery();
|
|
143
|
-
query.include("model", "module", "user");
|
|
144
|
-
query.equalTo("user", user.toPointer());
|
|
145
|
-
return query;
|
|
146
|
-
}
|
|
147
|
-
getWorkQuery() {
|
|
148
|
-
// 获取 1 分钟前的时间
|
|
149
|
-
let oneMinutesAgo = new Date(new Date().getTime() - 1 * 60 * 1000);
|
|
150
|
-
let query = Parse.Query.fromJSON("ImagineWork", {
|
|
151
|
-
where: {
|
|
152
|
-
// $or: [
|
|
153
|
-
// // 超时60秒,且进度不为0
|
|
154
|
-
// { createdAt: { $lte: oneMinutesAgo }, progress: { $ne: 0 } },
|
|
155
|
-
// // 60秒内,不限进度
|
|
156
|
-
// { createdAt: { $gt: oneMinutesAgo } }
|
|
157
|
-
// ]
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
query.include("model", "module", "user");
|
|
161
|
-
query.notEqualTo("isDeleted", true);
|
|
162
|
-
query.notEqualTo("isFailed", true);
|
|
163
|
-
query.doesNotExist("respData.error"); // DE 算力瓶颈
|
|
164
|
-
query.doesNotExist("respData.data.taskLimitCount"); // SD并发超限
|
|
165
|
-
query.addDescending("createdAt");
|
|
166
|
-
return query;
|
|
167
|
-
}
|
|
168
|
-
getimg() {
|
|
169
|
-
return new Promise((resolve, reject) => {
|
|
170
|
-
let input = document.createElement('input');
|
|
171
|
-
input.type = 'file';
|
|
172
|
-
input.click();
|
|
173
|
-
let handleChange = async () => {
|
|
174
|
-
input.removeEventListener('change', handleChange);
|
|
175
|
-
if (input.files && input.files.length > 0) {
|
|
176
|
-
let file = input.files[0];
|
|
177
|
-
let fileResult = await this.uploadServ.upload(file, (res) => {
|
|
178
|
-
console.log(res); // 上传进度,可以同步更新页面上传百分比
|
|
179
|
-
res.total.percent.toFixed(2); //上传进度
|
|
180
|
-
});
|
|
181
|
-
// 测试使用固定图片
|
|
182
|
-
// let fileResult = {
|
|
183
|
-
// url: "https://file-cloud.fmode.cn/E4KpGvTEto/20230808/s12uh1092414597.png"
|
|
184
|
-
// };
|
|
185
|
-
resolve(fileResult.url);
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
reject("未选择文件");
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
input.addEventListener('change', handleChange);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* 即梦图片生成函数
|
|
196
|
-
* @param options 图像参数
|
|
197
|
-
*/
|
|
198
|
-
async getJimengImg(options) {
|
|
199
|
-
let work_occupy = new Parse.Object('ImagineWork');
|
|
200
|
-
work_occupy.set('__pending', true);
|
|
201
|
-
work_occupy.set('__id', Symbol());
|
|
202
|
-
work_occupy.set('images', ['']);
|
|
203
|
-
this.newWorkList.unshift(work_occupy);
|
|
204
|
-
try {
|
|
205
|
-
let work = await getJimengImg(options);
|
|
206
|
-
let index = this.newWorkList?.findIndex(item => item?.get('__id') === work_occupy?.get('__id'));
|
|
207
|
-
if (index == -1)
|
|
208
|
-
return;
|
|
209
|
-
if (!work?.id) {
|
|
210
|
-
this.newWorkList.splice(index, 1);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
this.newWorkList.splice(index, 1, work);
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
let index = this.newWorkList?.findIndex(item => item?.get('__id') === work_occupy?.get('__id'));
|
|
217
|
-
if (index == -1)
|
|
218
|
-
return;
|
|
219
|
-
this.newWorkList.splice(index, 1);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* 即梦视频生成函数
|
|
224
|
-
* @param options 图像参数
|
|
225
|
-
* @param type 类型 文生视频无需填写,图生视频填'i_v'
|
|
226
|
-
* @returns
|
|
227
|
-
*/
|
|
228
|
-
async getJimengVideo(options, type) {
|
|
229
|
-
let work_occupy = new Parse.Object('ImagineWork');
|
|
230
|
-
work_occupy.set('__pending', true);
|
|
231
|
-
work_occupy.set('__id', Symbol());
|
|
232
|
-
work_occupy.set('provider', 'volcengine');
|
|
233
|
-
work_occupy.set('taskId', '1');
|
|
234
|
-
this.newWorkList.unshift(work_occupy);
|
|
235
|
-
try {
|
|
236
|
-
let work;
|
|
237
|
-
if (type == 'i_v') {
|
|
238
|
-
work = await getJimengI_v(options);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
work = await getJimengT_v(options);
|
|
242
|
-
}
|
|
243
|
-
let index = this.newWorkList?.findIndex(item => item?.get('__id') === work_occupy?.get('__id'));
|
|
244
|
-
if (index == -1)
|
|
245
|
-
return;
|
|
246
|
-
if (!work?.id) {
|
|
247
|
-
this.newWorkList.splice(index, 1);
|
|
248
|
-
this.setToast('创建有误,请稍后再试');
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
this.newWorkList.splice(index, 1, work);
|
|
252
|
-
}
|
|
253
|
-
catch (error) {
|
|
254
|
-
let index = this.newWorkList?.findIndex(item => item?.get('__id') === work_occupy?.get('__id'));
|
|
255
|
-
if (index == -1)
|
|
256
|
-
return;
|
|
257
|
-
this.newWorkList.splice(index, 1);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* 即梦视频请求结果
|
|
262
|
-
* @param video_by 获取类型:文生视频/图生视频 'text'|'img'
|
|
263
|
-
* @param workId 作品id
|
|
264
|
-
*/
|
|
265
|
-
async getJimengVideoData(video_by, workId) {
|
|
266
|
-
try {
|
|
267
|
-
let work = await getJimengV_data({ video_by, workId });
|
|
268
|
-
console.log('请求结果', work);
|
|
269
|
-
if (work?.error) {
|
|
270
|
-
this.setToast(work?.error?.message || work?.error?.msg || work?.err?.message || work?.err?.msg || '请求错误');
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if (work?.get('progress') !== 1 || work?.get('videos')?.length <= 0)
|
|
274
|
-
return;
|
|
275
|
-
let index = this.newWorkList?.findIndex(item => item?.id === workId);
|
|
276
|
-
if (index == -1)
|
|
277
|
-
return;
|
|
278
|
-
if (!work?.id) {
|
|
279
|
-
this.newWorkList.splice(index, 1);
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
this.newWorkList.splice(index, 1, work);
|
|
283
|
-
return work;
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
let index = this.newWorkList?.findIndex(item => item?.id === workId);
|
|
287
|
-
if (index == -1)
|
|
288
|
-
return;
|
|
289
|
-
this.newWorkList.splice(index, 1);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* 提示
|
|
294
|
-
* @param msg 提示语
|
|
295
|
-
*/
|
|
296
|
-
async setToast(msg) {
|
|
297
|
-
let toast = await this.toastCtrl.create({
|
|
298
|
-
duration: 1000,
|
|
299
|
-
message: msg || '请求错误',
|
|
300
|
-
color: 'primary',
|
|
301
|
-
icon: "information-circle",
|
|
302
|
-
position: "top"
|
|
303
|
-
});
|
|
304
|
-
toast.present();
|
|
305
|
-
}
|
|
306
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImagineService, deps: [{ token: i1.HttpClient }, { token: i2.NovaCloudService }, { token: i3.NovaUploadService }, { token: i4.ToastController }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
307
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImagineService, providedIn: 'root' }); }
|
|
308
|
-
}
|
|
309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImagineService, decorators: [{
|
|
310
|
-
type: Injectable,
|
|
311
|
-
args: [{
|
|
312
|
-
providedIn: 'root'
|
|
313
|
-
}]
|
|
314
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.NovaCloudService }, { type: i3.NovaUploadService }, { type: i4.ToastController }] });
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2luZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWltYWdpbmUvaW1hZ2luZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUV4RixPQUFPLEVBQ1MsU0FBUyxFQUV2QixZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBQyxZQUFZLEVBQ3pELE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFnRWpEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFFekI7O09BRUc7SUFDSCxZQUNVLElBQWdCLEVBQ2hCLE1BQXdCLEVBQ3hCLFVBQTZCLEVBQzdCLFNBQTBCO1FBSDFCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUE4R3BDLGtCQUFhLEdBQVEsRUFBRSxDQUFBO1FBRXZCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBd0IsRUFBRSxDQUFBO1FBQ3JDLGVBQVUsR0FBd0IsRUFBRSxDQUFBO0lBbkhoQyxDQUFDO0lBRUw7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJFO0lBQ0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFxQjtR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QUE7WUFDdkMsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQTtZQUNwRSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTTtZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUc7UUFDaEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksTUFBTTtZQUN0QixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQTtRQUNGLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDOytHQWxTVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ub3ZhLWNsb3VkL25vdmEtY2xvdWQuc2VydmljZSc7XHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgTm92YVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL25vdmEtdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgRGFsbGVPcHRpb25zLCBkcmF3RGFsbGUsXHJcbiAgamltZW5nSW1nT3B0aW9ucywgamltZW5nVF92T3B0aW9ucywgamltZW5nSV92T3B0aW9ucyxcclxuICBnZXRKaW1lbmdJbWcsIGdldEppbWVuZ1RfdiwgZ2V0SmltZW5nVl9kYXRhLGdldEppbWVuZ0lfdlxyXG59IGZyb20gJy4vaW1hZ2luZS1mdW5jJztcclxuaW1wb3J0IHsgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuXHJcbi8v6auY57qnQUnnu5jlm74gYXBp5paH5qGjIGh0dHBzOi8vd3d3LnNob3dkb2MuY29tLmNuLzIzMDc5MDA1OTU2NDU2MDkvMTAzMTk2NzcyNjYzMDUxMzhcclxuZXhwb3J0IGludGVyZmFjZSBTdGFibGVEaWZmdXNpb25PcHRpb25zIHtcclxuICBwcm9tcHQ6IHN0cmluZyAvL+aUr+aMgeS4reiLseaWh1xyXG4gIG1vZGVsU3R5bGVJZDogbnVtYmVyXHQvL+aooeWei+mjjuagvOmFjee9rklE77yM6K+35L2/55So5oiR5Lus5a6Y5pa55o+Q5L6b55qE6aOO5qC85YiX6KGoXHJcbiAgLy/ln7rnoYDlj4LmlbBcclxuICBuZWdhdGl2ZVByb21wdD86IHN0cmluZyAvL+S7heaUr+aMgeS4reaWh1xyXG5cclxuICB3aWR0aD86IG51bWJlclx0Ly/lrr3vvIzpu5jorqQ1MTIs5LiN5Y+v6LaF6L+HMjA0OFxyXG4gIGhlaWdodD86IG51bWJlclx0Ly/pq5jvvIzpu5jorqQ1MTIs5LiN5Y+v6LaF6L+HMjA0OFxyXG4gIHN0ZXBzPzogbnVtYmVyXHQvL+i/reS7o+atpeaVsO+8jOm7mOiupDIw77yM5LiN5Y+v6LaF6L+HNTBcclxuICBzZWVkPzogbnVtYmVyXHQvL+maj+acuuenjeWtkO+8jOm7mOiupOS4jeS8oOWImeS4uumaj+acuueUn+aIkFxyXG4gIGNmZ1NjYWxlPzogbnVtYmVyXHQvL+aPkOekuuivjeW8leWvvOezu+aVsO+8jOWPluWAvOiMg+WbtDEtMzBcclxuICAvL+mineWkluWPguaVsCDku4Xlm77nlJ/lm75cclxuICBoclNjYWxlPzogbnVtYmVyXHQvL+mrmOa4heS/ruWkjeWAjeeOh++8jOS7heWcqOaWh+eUn+WbvuaooeW8j+eUn+aViO+8jOWPluWAvOS4jeWPr+S7pei2hei/hzNcclxuICBoclN0ZXBzPzogbnVtYmVyXHQvL+mrmOa4hei/reS7o+atpeaVsO+8jOm7mOiupDIw77yM5LiN5Y+v6LaF6L+HMzDvvIjkuI3lu7rorq7lsJHkuo4xNe+8jOS8muS4pemHjeW9seWTjeeUu+mdoueUn+aIkOaViOaenO+8iVxyXG4gIC8v6aKd5aSW5Y+C5pWwICBcclxuICB1cHNjYWxlPzogbnVtYmVyXHQvL0FJ5pS+5aSn5YCN5pWw77yM5Y+W5YC85LiN5Y+v5Lul6LaF6L+HM1xyXG4gIGJhdGNoU2l6ZT86IG51bWJlclx0Ly/nlJ/miJDlm77niYfmlbDvvIzlj5blgLzkuI3lj6/ku6XotoXov4c2XHJcbiAgLy/pop3lpJblj4LmlbBcclxuICBmYWNlRml4PzogYm9vbGVhblx0Ly/mmK/lkKblvIDlj5HohLjpg6jkv67lpI3vvIzms6jmhI/vvIzlvIDlkK/mraTlip/og73pnIDpop3lpJbmiaPpmaQy56ev5YiGXHJcbiAgZGV0YWlsc0xldmVsPzogbnVtYmVyXHQvL+iEuOmDqOS/ruWkjee7huiKguWIu+eUu+etiee6p++8jOWPluWAvOiMg+WbtDEtOVxyXG4gIC8v5Lul5LiL5Li65Zu+55Sf5Zu+XHJcbiAgaW1nPzogc3RyaW5nIC8v5Zu+54mHVVJM5L+d6K+B5YWs572R5Y+v5p+l55yLXHJcbiAgaW1nT3B0aW9ucz86IGltZ09wdGlvbnNcclxuICBkZW5vaXNpbmdTdHJlbmd0aD86IG51bWJlclx0Ly/ph43nu5jluYXluqbvvIzku4XlnKhpbWflrZfmrrXmnInkvKDlgLznmoTml7blgJnnlJ/mlYjvvIzlj5blgLzojIPlm7QwfjHvvIzlj5blgLzotorlpKfnlLvpnaLkuI7lj4LogIPlm77lt67liKvotorlpKdcclxuICBjb250cm9sbmV0Pzoge1xyXG4gICAgdW5pdHM/OiBDb250cm9sbmV0VW5pdHNbXVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGltZ09wdGlvbnMg5Zu+5YOP6YWN572u5Y+C5pWwXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgaW1nT3B0aW9ucyB7XHJcbiAgcmVtb3ZlQmFja2dyb3VuZD86IGJvb2xlYW4gIC8v5piv5ZCm6Ieq5Yqo56e76Zmk5Zu+54mH5Lit55qE5Lq654mp6IOM5pmv77yM5LiA6Iis55So5LqO6YeN57uY6IOM5pmv5pyJ5pWI77yM5rOo5oSP77ya5byA5ZCv5q2k5Yqf6IO96ZyA6aKd5aSW5omj6ZmkMuenr+WIhlxyXG4gIHJlZHJhd0JhY2tncm91bmQ/OiBib29sZWFuICAvL+aYr+WQpuS/neeVmeeUu+mdouS4reeahOS4u+S9k++8jOS7hee7mOWItueUu+mdouS4reeahOiDjOaZr+azqOaEj++8muW8gOWQr+atpOWKn+iDvemcgOmineWkluaJo+mZpDLnp6/liIZcclxuICBtYWluT2JqZWN0VHlwZT86IFwiaHVtYW5cIiB8IFwiZ2VuZXJhbFwiICAvL+iHquWumuivhuWIq+eUu+mdouS4reeahOS4u+S9k++8jOeUqOS6juiDjOaZr+WkhOeQhuOAguWPluWAvO+8mmdlbmVyYWzvvJrpgJrnlKjlnLrmma/or4bliKvvvIznlKjkuo7oh6rliqjor4bliKvnlLvpnaLkuK3nmoTkuLvkvZPvvIxodW1hbu+8muivhuWIq+W5tuS/neeVmeeUu+mdouS4reeahOS6uueJqeOAguW9k3JlbW92ZUJhY2tncm91bmTmiJbogIVyZWRyYXdCYWNrZ3JvdW5k5Li6dHJ1ZeeahOaXtuWAme+8jOeUu+mdouS4reeahOS4u+S9k+exu+Wei++8jOivt+agueaNruaCqOeahOeUu+mdouS4reeahOWunumZheaDheWGteS8oOWAvO+8jOm7mOiupOS4umh1bWFuXHJcbiAgZmFjZVByZXNlcnZhdGlvbj86IGJvb2xlYW4gIC8v6Ieq5Yqo5qOA5rWL5Zu+54mH5Lit55qE5Lq66IS477yM5L2/55Sf5oiQ5ZCO55qE5Lq66IS45LiO5Y6f5aeL5Lq66IS45L+d5oyB6auY5bqm55u45Ly844CC5rOo5oSP77yM5byA5ZCv5q2k5Yqf6IO96ZyA6aKd5aSW5omj6ZmkMuenr+WIhlxyXG4gIGZhY2VQcmVzZXJ2YXRpb25Db3VudD86IG51bWJlclx0ICAvL+W8gOWQr+S6uuiEuOS/neaMgeWQju+8jOeUu+mdouS4reacgOWkmuWkhOeQhueahOS6uuiEuOaVsOmHj++8jOm7mOiupOS4ujHvvIzmnIDlpKflgLzlj6/ku6XkuLo1XHJcbiAgZ2VuZGVyRGV0ZWN0PzogYm9vbGVhbiBcdC8v5piv5ZCm6Ieq5Yqo5qOA5rWL5Zu+54mH5Lit55qE5Lq654mp5oCn5Yir77yM5bC96YeP5L2/55Sf5oiQ5YmN5ZCO55qE5Lq654mp5oCn5Yir5LiN5Y+R55Sf5Y+Y5YyW77yM5aaC5p6c5Zu+54mH5Lit5pyJ5aSa5Liq5Lq654mp5oCn5Yir5YiZ5pWI5p6c5Lya5LiN5YeG56Gu44CC5rOo5oSP77yM5byA5ZCv5q2k5Yqf6IO96ZyA6aKd5aSW5omj6ZmkMeenr+WIhlxyXG59XHJcblxyXG4vKipcclxuICogQ29udHJvbG5ldFVuaXRzIOaOp+WItue9kee7nOWNleWFg1xyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xuZXRVbml0cyB7XHJcbiAgaXNPcGVuPzogYm9vbGVhbiAgICAvLyAgICDmmK/lkKblkK/nlKjor6XmjqfliLblj4LmlbBcclxuICB0eXBlPzogc3RyaW5nICAgICAvL1x0XHRjb250cm9sbmV05bmy6aKE5b2i5byPXHJcbiAgcHJlcHJvY2Vzcz86IGJvb2xlYW4gICAgLy9cdFx05piv5ZCm6ZyA6KaB5a+55Y+C6ICD5Zu+6L+b6KGM6aKE5aSE55CG5o+Q5Y+W5Y+v55So5L+h5oGvXHJcbiAgaW1hZ2U/OiBzdHJpbmcgICAgIC8vXHRcdGNvbnRyb2xuZXTpnIDopoHlj4LogIPnmoTlm77niYfvvIzkuI3kvKDpu5jorqTkuLrlm77nlJ/lm77nmoTljp/lp4vlm77niYfvvIzlj6/ku6XkuLpiYXNlNjTlm77niYfmiJbogIXlm77niYd1cmxcclxuICBjb250cm9sTW9kZT86IG51bWJlciAgICAgLy9cdFx0Y29udHJvbG5ldOaOp+WItuaooeW8j++8jDDjgIHlubPooaHmqKHlvI8o6buY6K6kKSwx77ya5o+Q56S66K+N5pu06YeN6KaBLDLvvJpjb250cm9sbmV05pu06YeN6KaBXHJcbiAgd2VpZ2h0PzogbnVtYmVyICAgICAvL1x0XHRjb250cm9sbmV05p2D6YeN77yM6IyD5Zu05Li6MH4y77yM6buY6K6k5Li6MSxcclxuICBjb250cm9sU3RhcnQ/OiBudW1iZXIgICAgIC8vXHRcdGNvbnRyb2xuZXTnlJ/mlYjml7bmnLrvvIzojIPlm7TkuLowfjHvvIzpu5jorqTkuLowXHJcbiAgY29udHJvbEVuZD86IG51bWJlciAgICAgLy9cdFx0Y29udHJvbG5ldOmAgOWHuuaXtuacuu+8jOiMg+WbtOS4ujB+Me+8jOm7mOiupOS4ujFcclxuICBwYXJhbXNBPzogbnVtYmVyICAgICAvL1x0XHRjb250cm9sbmV06aKE5aSE55CG5Zmo5a+55bqU5Y+C5pWwQVxyXG4gIHBhcmFtc0I/OiBudW1iZXIgICAgIC8vXHRcdGNvbnRyb2xuZXTpooTlpITnkIblmajlr7nlupTlj4LmlbBCXHJcbiAgY29udHJvbEFycmF5PzogYW55W11cclxufVxyXG5cclxuLyoqXHJcbiAqIEltYWdpbmVTZXJ2aWNlIEFJ57uY55S75pyN5YqhXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnaW5lU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIOWbvueJh+eUn+aIkOaOpeWPo+S4u+acuuWcsOWdgFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBuY2xvdWQ6IE5vdmFDbG91ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVwbG9hZFNlcnY6IE5vdmFVcGxvYWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdEN0cmw6IFRvYXN0Q29udHJvbGxlcixcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBEQUxMLUUtMyDlm77niYfnlJ/miJDlh73mlbBcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBAc2VlIFxyXG4gICAqIGh0dHBzOi8vcDQuaG9zdGVhZ2xlLmNsdWIvZG9jcy9hcGktcmVmZXJlbmNlP19fY3BvPWFIUjBjSE02THk5d2JHRjBabTl5YlM1dmNHVnVZV2t1WTI5dFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqIHtcclxuICAgICAgICBcImlkXCI6IFwibHBKR2lGd1dlQVwiLCAvLyDlm77niYfnlJ/miJDku7vliqFJRFxyXG4gICAgICAgIFwiY3JlYXRlZEF0XCI6IFwiMjAyNC0xMS0yN1QxMjoxODoxNC40NjNaXCJcclxuICAgICAgfVxyXG4gICAqIEBwYXJhbSB7RGFsbGVPcHRpb25zfSBvcHRpb25zXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnByb21wdCAxMDAwIGNoYXJhY3RlcnMgZm9yIGRhbGwtZS0yIGFuZCA0MDAwIGNoYXJhY3RlcnMgZm9yIGRhbGwtZS0zLlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5tb2RlbCBkYWxsLWUtMyBkYWxsLWUtMlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gb3B0aW9ucy5xdWFsaXR5IGRhbGwtZS0zIG9ubHkgaGQgbWVhbnMgbW9yZSBkZXRhaWxzICYgY29uc2lzdGVuY3lcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMucmVzcG9uc2VfZm9ybWF0IHVybCB8IGI2NF9qc29uXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBvcHRpb25zLnNpemUgMTAyNHgxMDI0LCAxNzkyeDEwMjQsIG9yIDEwMjR4MTc5MiBmb3IgZGFsbC1lLTNcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG9wdGlvbnMuc3R5bGUgdml2aWQgfCBuYXR1cmFsIGRhbGwtZS0zIG9ubHlcclxuICAqL1xyXG4gIGFzeW5jIGRyYXdEYWxsZShvcHRpb25zOiBEYWxsZU9wdGlvbnMpIHtcclxuICAgIGxldCB3b3JrID0gYXdhaXQgZHJhd0RhbGxlKG9wdGlvbnMpO1xyXG4gICAgaWYgKHdvcms/LmlkKSB0aGlzLm5ld1dvcmtMaXN0LnVuc2hpZnQod29yaylcclxuICAgIHJldHVybiB3b3JrXHJcbiAgfVxyXG4gIHByaWNlRGFsbGUob3B0aW9uczogRGFsbGVPcHRpb25zKSB7XHJcbiAgICBsZXQgcHJpY2VMaXN0OiBBcnJheTxhbnk+ID0gW1xyXG4gICAgICB7IFwibW9kZWxcIjogXCJkYWxsLWUtM1wiLCBxdWFsaXR5OiBudWxsLCBcInNpemVcIjogXCIxMDI0eDEwMjRcIiwgXCJjcmVkaXRcIjogMiAqIDEwICogOCAqIDAuMDQgfSxcclxuICAgICAgeyBcIm1vZGVsXCI6IFwiZGFsbC1lLTNcIiwgcXVhbGl0eTogbnVsbCwgXCJzaXplXCI6IFwiMTAyNHgxNzkyXCIsIFwiY3JlZGl0XCI6IDIgKiAxMCAqIDggKiAwLjA4IH0sXHJcbiAgICAgIHsgXCJtb2RlbFwiOiBcImRhbGwtZS0zXCIsIHF1YWxpdHk6IG51bGwsIFwic2l6ZVwiOiBcIjE3OTJ4MTAyNFwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4wOCB9LFxyXG4gICAgICB7IFwibW9kZWxcIjogXCJkYWxsLWUtM1wiLCBxdWFsaXR5OiBcImhkXCIsIFwic2l6ZVwiOiBcIjEwMjR4MTAyNFwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4wOCB9LFxyXG4gICAgICB7IFwibW9kZWxcIjogXCJkYWxsLWUtM1wiLCBxdWFsaXR5OiBcImhkXCIsIFwic2l6ZVwiOiBcIjEwMjR4MTc5MlwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4xMiB9LFxyXG4gICAgICB7IFwibW9kZWxcIjogXCJkYWxsLWUtM1wiLCBxdWFsaXR5OiBcImhkXCIsIFwic2l6ZVwiOiBcIjE3OTJ4MTAyNFwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4xMiB9LFxyXG4gICAgICB7IFwibW9kZWxcIjogXCJkYWxsLWUtMlwiLCBxdWFsaXR5OiBudWxsLCBcInNpemVcIjogXCIxMDI0eDEwMjRcIiwgXCJjcmVkaXRcIjogMiAqIDEwICogOCAqIDAuMDIgfSxcclxuICAgICAgeyBcIm1vZGVsXCI6IFwiZGFsbC1lLTJcIiwgcXVhbGl0eTogbnVsbCwgXCJzaXplXCI6IFwiNTEyeDUxMlwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4wMTggfSxcclxuICAgICAgeyBcIm1vZGVsXCI6IFwiZGFsbC1lLTJcIiwgcXVhbGl0eTogbnVsbCwgXCJzaXplXCI6IFwiMjU2eDI1NlwiLCBcImNyZWRpdFwiOiAyICogMTAgKiA4ICogMC4wMTYgfVxyXG4gICAgXVxyXG4gICAgbGV0IHByaWNlID0gcHJpY2VMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLm1vZGVsID09IG9wdGlvbnMubW9kZWwgJiYgaXRlbS5xdWFsaXR5ID09IG9wdGlvbnMucXVhbGl0eSAmJiBpdGVtLnNpemUgPT0gb3B0aW9ucy5zaXplKVxyXG4gICAgbGV0IGNyZWRpdCA9IHByaWNlPy5jcmVkaXQgfHwgMiAqIDEwICogOCAqIDAuMTJcclxuICAgIHJldHVybiBjcmVkaXRcclxuICB9XHJcbiAgcHJpY2VTdGFibGVEaWZmdXNpb24ob3B0aW9uczogU3RhYmxlRGlmZnVzaW9uT3B0aW9ucykge1xyXG4gICAgbGV0IHNpemUgPSBvcHRpb25zLndpZHRoICogb3B0aW9ucy5oZWlnaHRcclxuICAgIGxldCBudW0gPSAwLjMgLy/po57noIHog73ph4/mjaLnrpfluLjmlbBcclxuICAgIGxldCBjcmVkaXQgPSBzaXplICogMC4wMDAwMDA3NjMgKiBvcHRpb25zLnN0ZXBzXHJcbiAgICAgICsgc2l6ZSAqIDAuMDAwMDIyNzggKiAob3B0aW9ucz8udXBzY2FsZSB8fCAwKVxyXG4gICAgICArIChvcHRpb25zPy5oclN0ZXBzIHx8IDApICogc2l6ZSAqIChvcHRpb25zPy5oclNjYWxlIHx8IDApICogKG9wdGlvbnM/LmhyU2NhbGUgfHwgMCkgKiAwLjAwMDAwMDc2M1xyXG4gICAgICArIChvcHRpb25zPy5mYWNlRml4ID8gMiA6IDApXHJcbiAgICAgICsgKG9wdGlvbnM/LmltZ09wdGlvbnM/LnJlbW92ZUJhY2tncm91bmQgPyAyIDogMClcclxuICAgICAgKyAob3B0aW9ucz8uaW1nT3B0aW9ucz8ucmVkcmF3QmFja2dyb3VuZCA/IDIgOiAwKVxyXG4gICAgICArIChvcHRpb25zPy5pbWdPcHRpb25zPy5mYWNlUHJlc2VydmF0aW9uID8gMiA6IDApXHJcbiAgICAgICsgKG9wdGlvbnM/LmltZ09wdGlvbnM/LmdlbmRlckRldGVjdCA/IDEgOiAwKVxyXG4gICAgICArIChvcHRpb25zPy5jb250cm9sbmV0Py51bml0cz8ubGVuZ3RoIHx8IDApICogMlxyXG4gICAgLy8gY29uc29sZS5sb2coY3JlZGl0KTtcclxuXHJcbiAgICBjcmVkaXQgPSBjcmVkaXQgKiBudW0gKiBvcHRpb25zLmJhdGNoU2l6ZVxyXG5cclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhjcmVkaXQpO1xyXG5cclxuICAgIHJldHVybiBjcmVkaXRcclxuICB9XHJcbiAgYjY0RGF0YVRvQmFzZTY0SW1hZ2UoYjY0X2pzb24pIHtcclxuICAgIGxldCBkYXRhID0gYXRvYihiNjRfanNvbilcclxuICAgIGxldCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6ICdpbWFnZS93ZWJwJyB9KTtcclxuICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAvLyDkvb/nlKggRmlsZVJlYWRlciDlsIYgQmxvYiDlr7nosaHovazmjaLkuLogYmFzZTY0IOWtl+espuS4slxyXG4gICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgYmFzZTY0ZGF0YSA9IHJlYWRlci5yZXN1bHQ7IGNvbnNvbGUubG9nKGJhc2U2NGRhdGEpXHJcbiAgICAgICAgcmVzb2x2ZShiYXNlNjRkYXRhKVxyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEh1YXNoaTbkuJPnlKjnu5jlm77lh73mlbBcclxuICAgKiBAcGFyYW0gcmVxQm9keSBcclxuICAgKiBAc2VlXHJcbiAgICog5o6l5Y+jcmVxQm9keeWPguaVsO+8jOWPguiAg++8mmh0dHBzOi8vd3d3LnNob3dkb2MuY29tLmNuLzIzMDc5MDA1OTU2NDU2MDkvMTAzMTk2NzU5ODczMTk1OThcclxuICAgKiDlr4bnoIHvvJoxMjM0NTZcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBhc3luYyBkcmF3KHJlcUJvZHk6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMubmNsb3VkLmFwaWcoXCJhaWdjL3NkYXBpL3YxL2RyYXdcIiwgcmVxQm9keSlcclxuICAgIC8vIOato+W4uOeUn+aIkHRhc2tJZOWQju+8jOiOt+WPluaVsOaNrua3u+WKoOWIsOWIl+ihqOS4rVxyXG4gICAgbGV0IHRhc2tJZCA9IGRhdGE/LnBhaW50aW5nU2lnblxyXG4gICAgaWYgKHRhc2tJZCkge1xyXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJJbWFnaW5lV29ya1wiKVxyXG4gICAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJ0YXNrSWRcIiwgdGFza0lkKTtcclxuICAgICAgICBsZXQgd29yayA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICAgICAgY29uc29sZS5sb2cod29yaylcclxuICAgICAgICBpZiAod29yaz8uaWQpIHRoaXMubmV3V29ya0xpc3QudW5zaGlmdCh3b3JrKVxyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOW3suWujOaIkOeahOebtOaOpeWKoOi9ve+8jOacquWujOaIkOeahOWGjeaOpeWPo+abtOaWsFxyXG4gICAqIEBwYXJhbSB0YXNrSWQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgYXN5bmMgdGFza0RldGFpbCh0YXNrSWQ6IHN0cmluZykge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMubmNsb3VkLmFwaWcoXCJhaWdjL3NkYXBpL3YxL3Rhc2svZGV0YWlsXCIsIHsgdGFza0lkOiB0YXNrSWQgfSlcclxuICAgIGNvbnNvbGUubG9nKGRhdGEpXHJcbiAgICB0aGlzLnRhc2tEZXRhaWxNYXBbdGFza0lkXSA9IGRhdGFcclxuICAgIHJldHVybiBkYXRhXHJcbiAgfVxyXG4gIHRhc2tEZXRhaWxNYXA6IGFueSA9IHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaIkeeahOe7mOeUu+S9nOWTgeWFseS6q+aWueazlVxyXG4gICAqL1xyXG4gIG5ld1dvcmtMaXN0OiBBcnJheTxQYXJzZS5PYmplY3Q+ID0gW11cclxuICBteVdvcmtMaXN0OiBBcnJheTxQYXJzZS5PYmplY3Q+ID0gW11cclxuICBnZXRNeVdvcmtRdWVyeSgpIHtcclxuICAgIGxldCB1c2VyID0gUGFyc2UuVXNlci5jdXJyZW50KClcclxuICAgIGlmICghdXNlcj8uaWQpIHJldHVyblxyXG4gICAgbGV0IHF1ZXJ5ID0gdGhpcy5nZXRXb3JrUXVlcnkoKVxyXG4gICAgcXVlcnkuaW5jbHVkZShcIm1vZGVsXCIsIFwibW9kdWxlXCIsIFwidXNlclwiKVxyXG4gICAgcXVlcnkuZXF1YWxUbyhcInVzZXJcIiwgdXNlci50b1BvaW50ZXIoKSk7XHJcbiAgICByZXR1cm4gcXVlcnlcclxuICB9XHJcbiAgZ2V0V29ya1F1ZXJ5KCkge1xyXG5cclxuICAgIC8vIOiOt+WPliAxIOWIhumSn+WJjeeahOaXtumXtFxyXG4gICAgbGV0IG9uZU1pbnV0ZXNBZ28gPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIDEgKiA2MCAqIDEwMDApO1xyXG5cclxuICAgIGxldCBxdWVyeSA9IFBhcnNlLlF1ZXJ5LmZyb21KU09OKFwiSW1hZ2luZVdvcmtcIiwge1xyXG4gICAgICB3aGVyZToge1xyXG4gICAgICAgIC8vICRvcjogW1xyXG4gICAgICAgIC8vICAgLy8g6LaF5pe2NjDnp5LvvIzkuJTov5vluqbkuI3kuLowXHJcbiAgICAgICAgLy8gICB7IGNyZWF0ZWRBdDogeyAkbHRlOiBvbmVNaW51dGVzQWdvIH0sIHByb2dyZXNzOiB7ICRuZTogMCB9IH0sXHJcbiAgICAgICAgLy8gICAvLyA2MOenkuWGhe+8jOS4jemZkOi/m+W6plxyXG4gICAgICAgIC8vICAgeyBjcmVhdGVkQXQ6IHsgJGd0OiBvbmVNaW51dGVzQWdvIH0gfVxyXG4gICAgICAgIC8vIF1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBxdWVyeS5pbmNsdWRlKFwibW9kZWxcIiwgXCJtb2R1bGVcIiwgXCJ1c2VyXCIpO1xyXG4gICAgcXVlcnkubm90RXF1YWxUbyhcImlzRGVsZXRlZFwiLCB0cnVlKVxyXG4gICAgcXVlcnkubm90RXF1YWxUbyhcImlzRmFpbGVkXCIsIHRydWUpXHJcbiAgICBxdWVyeS5kb2VzTm90RXhpc3QoXCJyZXNwRGF0YS5lcnJvclwiKSAvLyBERSDnrpflipvnk7bpoohcclxuICAgIHF1ZXJ5LmRvZXNOb3RFeGlzdChcInJlc3BEYXRhLmRhdGEudGFza0xpbWl0Q291bnRcIikgLy8gU0Tlubblj5HotoXpmZBcclxuICAgIHF1ZXJ5LmFkZERlc2NlbmRpbmcoXCJjcmVhdGVkQXRcIik7XHJcbiAgICByZXR1cm4gcXVlcnk7XHJcbiAgfVxyXG4gIGdldGltZygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgaW5wdXQudHlwZSA9ICdmaWxlJztcclxuICAgICAgaW5wdXQuY2xpY2soKTtcclxuXHJcbiAgICAgIGxldCBoYW5kbGVDaGFuZ2UgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlQ2hhbmdlKTtcclxuICAgICAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcclxuICAgICAgICAgIGxldCBmaWxlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2LnVwbG9hZChmaWxlLCAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcykgLy8g5LiK5Lyg6L+b5bqm77yM5Y+v5Lul5ZCM5q2l5pu05paw6aG16Z2i5LiK5Lyg55m+5YiG5q+UXHJcbiAgICAgICAgICAgIHJlcy50b3RhbC5wZXJjZW50LnRvRml4ZWQoMikvL+S4iuS8oOi/m+W6plxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyDmtYvor5Xkvb/nlKjlm7rlrprlm77niYdcclxuICAgICAgICAgIC8vIGxldCBmaWxlUmVzdWx0ID0ge1xyXG4gICAgICAgICAgLy8gICB1cmw6IFwiaHR0cHM6Ly9maWxlLWNsb3VkLmZtb2RlLmNuL0U0S3BHdlRFdG8vMjAyMzA4MDgvczEydWgxMDkyNDE0NTk3LnBuZ1wiXHJcbiAgICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAgIHJlc29sdmUoZmlsZVJlc3VsdC51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoXCLmnKrpgInmi6nmlofku7ZcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlQ2hhbmdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiDljbPmoqblm77niYfnlJ/miJDlh73mlbBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyAg5Zu+5YOP5Y+C5pWwXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0SmltZW5nSW1nKG9wdGlvbnM6IGppbWVuZ0ltZ09wdGlvbnMpIHtcclxuICAgIGxldCB3b3JrX29jY3VweSA9IG5ldyBQYXJzZS5PYmplY3QoJ0ltYWdpbmVXb3JrJylcclxuICAgIHdvcmtfb2NjdXB5LnNldCgnX19wZW5kaW5nJywgdHJ1ZSlcclxuICAgIHdvcmtfb2NjdXB5LnNldCgnX19pZCcsIFN5bWJvbCgpKVxyXG4gICAgd29ya19vY2N1cHkuc2V0KCdpbWFnZXMnLCBbJyddKVxyXG4gICAgdGhpcy5uZXdXb3JrTGlzdC51bnNoaWZ0KHdvcmtfb2NjdXB5KVxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHdvcmsgPSBhd2FpdCBnZXRKaW1lbmdJbWcob3B0aW9ucylcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5uZXdXb3JrTGlzdD8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbT8uZ2V0KCdfX2lkJykgPT09IHdvcmtfb2NjdXB5Py5nZXQoJ19faWQnKSlcclxuICAgICAgaWYgKGluZGV4ID09IC0xKSByZXR1cm5cclxuICAgICAgaWYgKCF3b3JrPy5pZCkge1xyXG4gICAgICAgIHRoaXMubmV3V29ya0xpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubmV3V29ya0xpc3Quc3BsaWNlKGluZGV4LCAxLCB3b3JrKVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5uZXdXb3JrTGlzdD8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbT8uZ2V0KCdfX2lkJykgPT09IHdvcmtfb2NjdXB5Py5nZXQoJ19faWQnKSlcclxuICAgICAgaWYgKGluZGV4ID09IC0xKSByZXR1cm5cclxuICAgICAgdGhpcy5uZXdXb3JrTGlzdC5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDljbPmoqbop4bpopHnlJ/miJDlh73mlbBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyDlm77lg4/lj4LmlbBcclxuICAgKiBAcGFyYW0gdHlwZSDnsbvlnosg5paH55Sf6KeG6aKR5peg6ZyA5aGr5YaZ77yM5Zu+55Sf6KeG6aKR5aGrJ2lfdidcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBhc3luYyBnZXRKaW1lbmdWaWRlbyhvcHRpb25zLCB0eXBlPykge1xyXG4gICAgbGV0IHdvcmtfb2NjdXB5ID0gbmV3IFBhcnNlLk9iamVjdCgnSW1hZ2luZVdvcmsnKVxyXG4gICAgd29ya19vY2N1cHkuc2V0KCdfX3BlbmRpbmcnLCB0cnVlKVxyXG4gICAgd29ya19vY2N1cHkuc2V0KCdfX2lkJywgU3ltYm9sKCkpXHJcbiAgICB3b3JrX29jY3VweS5zZXQoJ3Byb3ZpZGVyJywgJ3ZvbGNlbmdpbmUnKVxyXG4gICAgd29ya19vY2N1cHkuc2V0KCd0YXNrSWQnLCAnMScpXHJcbiAgICB0aGlzLm5ld1dvcmtMaXN0LnVuc2hpZnQod29ya19vY2N1cHkpXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgd29ya1xyXG4gICAgICBpZiAodHlwZSA9PSAnaV92Jykge1xyXG4gICAgICAgIHdvcmsgPSBhd2FpdCBnZXRKaW1lbmdJX3Yob3B0aW9ucylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB3b3JrID0gYXdhaXQgZ2V0SmltZW5nVF92KG9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5uZXdXb3JrTGlzdD8uZmluZEluZGV4KGl0ZW0gPT4gaXRlbT8uZ2V0KCdfX2lkJykgPT09IHdvcmtfb2NjdXB5Py5nZXQoJ19faWQnKSlcclxuICAgICAgaWYgKGluZGV4ID09IC0xKSByZXR1cm5cclxuICAgICAgaWYgKCF3b3JrPy5pZCkge1xyXG4gICAgICAgIHRoaXMubmV3V29ya0xpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgIHRoaXMuc2V0VG9hc3QoJ+WIm+W7uuacieivr++8jOivt+eojeWQjuWGjeivlScpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5uZXdXb3JrTGlzdC5zcGxpY2UoaW5kZXgsIDEsIHdvcmspXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm5ld1dvcmtMaXN0Py5maW5kSW5kZXgoaXRlbSA9PiBpdGVtPy5nZXQoJ19faWQnKSA9PT0gd29ya19vY2N1cHk/LmdldCgnX19pZCcpKVxyXG4gICAgICBpZiAoaW5kZXggPT0gLTEpIHJldHVyblxyXG4gICAgICB0aGlzLm5ld1dvcmtMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgKiDljbPmoqbop4bpopHor7fmsYLnu5PmnpxcclxuICAqIEBwYXJhbSB2aWRlb19ieSDojrflj5bnsbvlnovvvJrmlofnlJ/op4bpopEv5Zu+55Sf6KeG6aKRICd0ZXh0J3wnaW1nJ1xyXG4gICogQHBhcmFtIHdvcmtJZCDkvZzlk4FpZFxyXG4gICovXHJcbiAgYXN5bmMgZ2V0SmltZW5nVmlkZW9EYXRhKHZpZGVvX2J5OiAndGV4dCcgfCAnaW1nJywgd29ya0lkKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgd29yayA9IGF3YWl0IGdldEppbWVuZ1ZfZGF0YSh7IHZpZGVvX2J5LCB3b3JrSWQgfSlcclxuICAgICAgY29uc29sZS5sb2coJ+ivt+axgue7k+aenCcsIHdvcmspXHJcbiAgICAgIGlmICh3b3JrPy5lcnJvcikge1xyXG4gICAgICAgIHRoaXMuc2V0VG9hc3Qod29yaz8uZXJyb3I/Lm1lc3NhZ2UgfHwgd29yaz8uZXJyb3I/Lm1zZyB8fCB3b3JrPy5lcnI/Lm1lc3NhZ2UgfHwgd29yaz8uZXJyPy5tc2cgfHwgJ+ivt+axgumUmeivrycpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdvcms/LmdldCgncHJvZ3Jlc3MnKSAhPT0gMSB8fCB3b3JrPy5nZXQoJ3ZpZGVvcycpPy5sZW5ndGggPD0gMCkgcmV0dXJuXHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubmV3V29ya0xpc3Q/LmZpbmRJbmRleChpdGVtID0+IGl0ZW0/LmlkID09PSB3b3JrSWQpXHJcbiAgICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuXHJcbiAgICAgIGlmICghd29yaz8uaWQpIHtcclxuICAgICAgICB0aGlzLm5ld1dvcmtMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm5ld1dvcmtMaXN0LnNwbGljZShpbmRleCwgMSwgd29yaylcclxuICAgICAgcmV0dXJuIHdvcmtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMubmV3V29ya0xpc3Q/LmZpbmRJbmRleChpdGVtID0+IGl0ZW0/LmlkID09PSB3b3JrSWQpXHJcbiAgICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuXHJcbiAgICAgIHRoaXMubmV3V29ya0xpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5o+Q56S6XHJcbiAgICogQHBhcmFtIG1zZyDmj5DnpLror61cclxuICAgKi9cclxuICBhc3luYyBzZXRUb2FzdChtc2cpIHtcclxuICAgIGxldCB0b2FzdCA9IGF3YWl0IHRoaXMudG9hc3RDdHJsLmNyZWF0ZSh7XHJcbiAgICAgIGR1cmF0aW9uOiAxMDAwLFxyXG4gICAgICBtZXNzYWdlOiBtc2cgfHwgJ+ivt+axgumUmeivrycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIGljb246IFwiaW5mb3JtYXRpb24tY2lyY2xlXCIsXHJcbiAgICAgIHBvc2l0aW9uOiBcInRvcFwiXHJcbiAgICB9KVxyXG4gICAgdG9hc3QucHJlc2VudCgpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG5cclxuIl19
|
|
8
|
+
import{HttpClient}from"@angular/common/http";import{Injectable}from"@angular/core";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import{FmodeParse}from"@fmode/parse";import{NovaUploadService}from"../../../storage/service-upload/nova-upload.service";import{drawDalle,getJimengImg,getJimengT_v,getJimengV_data,getJimengI_v}from"./imagine-func";import{ToastController}from"@ionic/angular";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"../../../nova-cloud/nova-cloud.service";import*as i3 from"../../../storage/service-upload/nova-upload.service";import*as i4 from"@ionic/angular";const Parse=FmodeParse.with("nova");export class ImagineService{constructor(e,t,i,r){this.http=e,this.ncloud=t,this.uploadServ=i,this.toastCtrl=r,this.taskDetailMap={},this.newWorkList=[],this.myWorkList=[]}async drawDalle(e){let t=await drawDalle(e);return t?.id&&this.newWorkList.unshift(t),t}priceDalle(e){let t=[{model:"dall-e-3",quality:null,size:"1024x1024",credit:6.4},{model:"dall-e-3",quality:null,size:"1024x1792",credit:12.8},{model:"dall-e-3",quality:null,size:"1792x1024",credit:12.8},{model:"dall-e-3",quality:"hd",size:"1024x1024",credit:12.8},{model:"dall-e-3",quality:"hd",size:"1024x1792",credit:19.2},{model:"dall-e-3",quality:"hd",size:"1792x1024",credit:19.2},{model:"dall-e-2",quality:null,size:"1024x1024",credit:3.2},{model:"dall-e-2",quality:null,size:"512x512",credit:2.88},{model:"dall-e-2",quality:null,size:"256x256",credit:2.56}].find((t=>t.model==e.model&&t.quality==e.quality&&t.size==e.size));return t?.credit||19.2}priceStableDiffusion(e){let t=e.width*e.height,i=763e-9*t*e.steps+2278e-8*t*(e?.upscale||0)+(e?.hrSteps||0)*t*(e?.hrScale||0)*(e?.hrScale||0)*763e-9+(e?.faceFix?2:0)+(e?.imgOptions?.removeBackground?2:0)+(e?.imgOptions?.redrawBackground?2:0)+(e?.imgOptions?.facePreservation?2:0)+(e?.imgOptions?.genderDetect?1:0)+2*(e?.controlnet?.units?.length||0);return i=.3*i*e.batchSize,i}b64DataToBase64Image(e){let t=atob(e),i=new Blob([t],{type:"image/webp"});new Promise((e=>{let t=new FileReader;t.onloadend=function(){let i=t.result;console.log(i),e(i)},t.readAsDataURL(i)}))}async draw(e){let t=await this.ncloud.apig("aigc/sdapi/v1/draw",e),i=t?.paintingSign;return i&&setTimeout((async()=>{let e=new Parse.Query("ImagineWork");e.equalTo("taskId",i);let t=await e.first();console.log(t),t?.id&&this.newWorkList.unshift(t)}),1e3),t}async taskDetail(e){let t=await this.ncloud.apig("aigc/sdapi/v1/task/detail",{taskId:e});return console.log(t),this.taskDetailMap[e]=t,t}getMyWorkQuery(){let e=Parse.User.current();if(!e?.id)return;let t=this.getWorkQuery();return t.include("model","module","user"),t.equalTo("user",e.toPointer()),t}getWorkQuery(){new Date((new Date).getTime()-6e4);let e=Parse.Query.fromJSON("ImagineWork",{where:{}});return e.include("model","module","user"),e.notEqualTo("isDeleted",!0),e.notEqualTo("isFailed",!0),e.doesNotExist("respData.error"),e.doesNotExist("respData.data.taskLimitCount"),e.addDescending("createdAt"),e}getimg(){return new Promise(((e,t)=>{let i=document.createElement("input");i.type="file",i.click();let handleChange=async()=>{if(i.removeEventListener("change",handleChange),i.files&&i.files.length>0){let t=i.files[0],r=await this.uploadServ.upload(t,(e=>{console.log(e),e.total.percent.toFixed(2)}));e(r.url)}else t("未选择文件")};i.addEventListener("change",handleChange)}))}async getJimengImg(e){let t=new Parse.Object("ImagineWork");t.set("__pending",!0),t.set("__id",Symbol()),t.set("images",[""]),this.newWorkList.unshift(t);try{let i=await getJimengImg(e),r=this.newWorkList?.findIndex((e=>e?.get("__id")===t?.get("__id")));if(-1==r)return;if(!i?.id)return void this.newWorkList.splice(r,1);this.newWorkList.splice(r,1,i)}catch(e){let i=this.newWorkList?.findIndex((e=>e?.get("__id")===t?.get("__id")));if(-1==i)return;this.newWorkList.splice(i,1)}}async getJimengVideo(e,t){let i=new Parse.Object("ImagineWork");i.set("__pending",!0),i.set("__id",Symbol()),i.set("provider","volcengine"),i.set("taskId","1"),this.newWorkList.unshift(i);try{let r;r="i_v"==t?await getJimengI_v(e):await getJimengT_v(e);let o=this.newWorkList?.findIndex((e=>e?.get("__id")===i?.get("__id")));if(-1==o)return;if(!r?.id)return this.newWorkList.splice(o,1),void this.setToast("创建有误,请稍后再试");this.newWorkList.splice(o,1,r)}catch(e){let t=this.newWorkList?.findIndex((e=>e?.get("__id")===i?.get("__id")));if(-1==t)return;this.newWorkList.splice(t,1)}}async getJimengVideoData(e,t){try{let i=await getJimengV_data({video_by:e,workId:t});if(console.log("请求结果",i),i?.error)return void this.setToast(i?.error?.message||i?.error?.msg||i?.err?.message||i?.err?.msg||"请求错误");if(1!==i?.get("progress")||i?.get("videos")?.length<=0)return;let r=this.newWorkList?.findIndex((e=>e?.id===t));if(-1==r)return;return i?.id?(this.newWorkList.splice(r,1,i),i):void this.newWorkList.splice(r,1)}catch(e){let i=this.newWorkList?.findIndex((e=>e?.id===t));if(-1==i)return;this.newWorkList.splice(i,1)}}async setToast(e){(await this.toastCtrl.create({duration:1e3,message:e||"请求错误",color:"primary",icon:"information-circle",position:"top"})).present()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ImagineService,deps:[{token:i1.HttpClient},{token:i2.NovaCloudService},{token:i3.NovaUploadService},{token:i4.ToastController}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ImagineService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ImagineService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.HttpClient},{type:i2.NovaCloudService},{type:i3.NovaUploadService},{type:i4.ToastController}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWltYWdpbmUvaW1hZ2luZS5zZXJ2aWNlLm1qcw==`
|
|
10
|
+
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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/service-fmai/service-imagine/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./imagine.service";export*from"./imagine-work";export*from"./imagine-func";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWltYWdpbmUvaW5kZXgubWpz`
|
|
10
|
+
|
|
@@ -1,62 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import * as
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i3 from "@angular/material/button";
|
|
12
|
-
import * as i4 from "ng-zorro-antd/pipes";
|
|
13
|
-
export class FmOfficeViewerComponent {
|
|
14
|
-
constructor(domSan, modalCtrl) {
|
|
15
|
-
this.domSan = domSan;
|
|
16
|
-
this.modalCtrl = modalCtrl;
|
|
17
|
-
this.officeHost = "https://office.fmode.cn/browser/baa6eef/cool.html";
|
|
18
|
-
// /hosting/discovery
|
|
19
|
-
// /hosting/capabilities ."productVersionHash": "baa6eef",
|
|
20
|
-
// /browser/dist/admin/admin.html
|
|
21
|
-
this.wopiHost = "https://server.fmode.cn/api/office";
|
|
22
|
-
this.permission = "readonly";
|
|
23
|
-
this.showHeader = false;
|
|
24
|
-
}
|
|
25
|
-
back() {
|
|
26
|
-
this.modalCtrl.dismiss();
|
|
27
|
-
}
|
|
28
|
-
ngOnInit() {
|
|
29
|
-
this.genSafeUrl();
|
|
30
|
-
}
|
|
31
|
-
genSafeUrl() {
|
|
32
|
-
if (this.fileId) {
|
|
33
|
-
let url = `${this.officeHost}?lang=zh-cn&permission=${this.permission}&WOPISrc=${this.wopiHost}/wopi/files/${this.fileId}`;
|
|
34
|
-
this.safeUrl = this.domSan.bypassSecurityTrustResourceUrl(url);
|
|
35
|
-
this.loadAttachment(this.fileId);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
async loadAttachment(id) {
|
|
39
|
-
let query = new Parse.Query("Attachment");
|
|
40
|
-
this.attach = await query.get(id);
|
|
41
|
-
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmOfficeViewerComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FmOfficeViewerComponent, isStandalone: true, selector: "fm-office-viewer", inputs: { officeHost: "officeHost", wopiHost: "wopiHost", fileId: "fileId", permission: "permission", showHeader: "showHeader" }, ngImport: i0, template: "@if(showHeader&&attach?.id){\r\n <div class=\"filebar\">\r\n <!-- \u6587\u4EF6\u4FE1\u606F -->\r\n <div class=\"file-info\" style=\"display:flex;align-items:center;\">\r\n <!-- \u56FE\u6807+\u5927\u5C0F -->\r\n <ion-icon [src]=\"attach?.get('url') | filetype\"></ion-icon>\r\n <span class=\"size\">{{attach?.get(\"size\") | nzBytes }}</span>\r\n </div>\r\n <!-- \u6807\u9898 -->\r\n <div class=\"title\">\r\n {{attach?.get(\"name\") || '\u672A\u547D\u540D'}}\r\n </div>\r\n <!-- \u64CD\u4F5C\u533A\u57DF -->\r\n <div class=\"actions\" style=\"display:flex;align-items:center;justify-content: flex-end;\">\r\n <!-- \u5173\u95ED -->\r\n <button mat-button (click)=\"back()\" aria-label=\"\u9884\u89C8\">\r\n \u5173\u95ED\r\n </button>\r\n </div>\r\n </div>\r\n}\r\n@if(safeUrl){\r\n <iframe [src]=\"safeUrl\" frameborder=\"0\" allow=\"clipboard-read *; clipboard-write *\"></iframe> \r\n}", styles: ["iframe{width:100%;height:100%}.filebar{display:flex;justify-content:space-between;align-items:center;padding:5px 15px}.filebar .file-info{max-width:80px}.filebar .title{flex:1;font-weight:700;margin-left:5px;margin-right:5px;max-width:220px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:5px 15px;text-align:center}.filebar mat-card-content{color:#333}.filebar ion-icon{font-size:28px;min-width:30px}.filebar ion-chip{color:#333}.filebar .actions{max-width:104px}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: NzPipesModule }, { kind: "pipe", type: i4.NzBytesPipe, name: "nzBytes" }, { kind: "pipe", type: FiletypePipe, name: "filetype" }] }); }
|
|
44
|
-
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmOfficeViewerComponent, decorators: [{
|
|
46
|
-
type: Component,
|
|
47
|
-
args: [{ selector: 'fm-office-viewer', standalone: true, imports: [
|
|
48
|
-
IonIcon, MatButtonModule,
|
|
49
|
-
NzPipesModule, FiletypePipe
|
|
50
|
-
], template: "@if(showHeader&&attach?.id){\r\n <div class=\"filebar\">\r\n <!-- \u6587\u4EF6\u4FE1\u606F -->\r\n <div class=\"file-info\" style=\"display:flex;align-items:center;\">\r\n <!-- \u56FE\u6807+\u5927\u5C0F -->\r\n <ion-icon [src]=\"attach?.get('url') | filetype\"></ion-icon>\r\n <span class=\"size\">{{attach?.get(\"size\") | nzBytes }}</span>\r\n </div>\r\n <!-- \u6807\u9898 -->\r\n <div class=\"title\">\r\n {{attach?.get(\"name\") || '\u672A\u547D\u540D'}}\r\n </div>\r\n <!-- \u64CD\u4F5C\u533A\u57DF -->\r\n <div class=\"actions\" style=\"display:flex;align-items:center;justify-content: flex-end;\">\r\n <!-- \u5173\u95ED -->\r\n <button mat-button (click)=\"back()\" aria-label=\"\u9884\u89C8\">\r\n \u5173\u95ED\r\n </button>\r\n </div>\r\n </div>\r\n}\r\n@if(safeUrl){\r\n <iframe [src]=\"safeUrl\" frameborder=\"0\" allow=\"clipboard-read *; clipboard-write *\"></iframe> \r\n}", styles: ["iframe{width:100%;height:100%}.filebar{display:flex;justify-content:space-between;align-items:center;padding:5px 15px}.filebar .file-info{max-width:80px}.filebar .title{flex:1;font-weight:700;margin-left:5px;margin-right:5px;max-width:220px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:5px 15px;text-align:center}.filebar mat-card-content{color:#333}.filebar ion-icon{font-size:28px;min-width:30px}.filebar ion-chip{color:#333}.filebar .actions{max-width:104px}\n"] }]
|
|
51
|
-
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.ModalController }], propDecorators: { officeHost: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], wopiHost: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], fileId: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], permission: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], showHeader: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm0tb2ZmaWNlLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvc3RvcnkvZm0tb2ZmaWNlLXZpZXdlci9mbS1vZmZpY2Utdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy9zdG9yeS9mbS1vZmZpY2Utdmlld2VyL2ZtLW9mZmljZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7OztBQVkxQixNQUFNLE9BQU8sdUJBQXVCO0lBbUJsQyxZQUNVLE1BQW1CLEVBQ25CLFNBQXlCO1FBRHpCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFsQm5DLGVBQVUsR0FBVSxtREFBbUQsQ0FBQTtRQUN2RSxxQkFBcUI7UUFDckIsMERBQTBEO1FBQzFELGlDQUFpQztRQUVqQyxhQUFRLEdBQVUsb0NBQW9DLENBQUE7UUFLdEQsZUFBVSxHQUFVLFVBQVUsQ0FBQTtRQUc5QixlQUFVLEdBQVcsS0FBSyxDQUFDO0lBTzNCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDO1lBQ2QsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSwwQkFBMEIsSUFBSSxDQUFDLFVBQVUsWUFBWSxJQUFJLENBQUMsUUFBUSxlQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUMxSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQVM7UUFDNUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXBDLENBQUM7K0dBM0NVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhNQ2xCcEMsNGhDQXVCQyw4aEJEVEcsT0FBTywwSkFBQyxlQUFlLDJOQUN2QixhQUFhLG1GQUFDLFlBQVk7OzRGQUdqQix1QkFBdUI7a0JBVm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGNBR2hCLElBQUksV0FDUjt3QkFDTixPQUFPLEVBQUMsZUFBZTt3QkFDdkIsYUFBYSxFQUFDLFlBQVk7cUJBQzNCOytHQUtELFVBQVU7c0JBRFQsS0FBSztnQkFNTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSW9uSWNvbiwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XHJcbmltcG9ydCB7IE56UGlwZXNNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3BpcGVzJztcclxuaW1wb3J0IHsgRmlsZXR5cGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vaWNvbic7XHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm0tb2ZmaWNlLXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZtLW9mZmljZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZtLW9mZmljZS12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6W1xyXG4gICAgSW9uSWNvbixNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBOelBpcGVzTW9kdWxlLEZpbGV0eXBlUGlwZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZtT2ZmaWNlVmlld2VyQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgb2ZmaWNlSG9zdDpzdHJpbmcgPSBcImh0dHBzOi8vb2ZmaWNlLmZtb2RlLmNuL2Jyb3dzZXIvYmFhNmVlZi9jb29sLmh0bWxcIlxyXG4gIC8vIC9ob3N0aW5nL2Rpc2NvdmVyeVxyXG4gIC8vIC9ob3N0aW5nL2NhcGFiaWxpdGllcyAuXCJwcm9kdWN0VmVyc2lvbkhhc2hcIjogXCJiYWE2ZWVmXCIsXHJcbiAgLy8gL2Jyb3dzZXIvZGlzdC9hZG1pbi9hZG1pbi5odG1sXHJcbiAgQElucHV0KClcclxuICB3b3BpSG9zdDpzdHJpbmcgPSBcImh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL2FwaS9vZmZpY2VcIlxyXG4gIEBJbnB1dCgpXHJcbiAgZmlsZUlkOnN0cmluZ3x1bmRlZmluZWQgLy8gQXR0YWNobWVudC5vYmplY3RJZFxyXG4gIGF0dGFjaDpQYXJzZS5PYmplY3R8dW5kZWZpbmVkXHJcbiAgQElucHV0KClcclxuICBwZXJtaXNzaW9uOnN0cmluZyA9IFwicmVhZG9ubHlcIlxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNob3dIZWFkZXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzYWZlVXJsOlNhZmVSZXNvdXJjZVVybHx1bmRlZmluZWRcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZG9tU2FuOkRvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOk1vZGFsQ29udHJvbGxlclxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgYmFjaygpe1xyXG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ2VuU2FmZVVybCgpXHJcbiAgfVxyXG5cclxuICBnZW5TYWZlVXJsKCl7XHJcbiAgICBpZih0aGlzLmZpbGVJZCl7XHJcbiAgICAgIGxldCB1cmwgPSBgJHt0aGlzLm9mZmljZUhvc3R9P2xhbmc9emgtY24mcGVybWlzc2lvbj0ke3RoaXMucGVybWlzc2lvbn0mV09QSVNyYz0ke3RoaXMud29waUhvc3R9L3dvcGkvZmlsZXMvJHt0aGlzLmZpbGVJZH1gXHJcbiAgICAgIHRoaXMuc2FmZVVybCA9IHRoaXMuZG9tU2FuLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpXHJcbiAgICAgIHRoaXMubG9hZEF0dGFjaG1lbnQodGhpcy5maWxlSWQpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGxvYWRBdHRhY2htZW50KGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBdHRhY2htZW50XCIpO1xyXG4gICAgdGhpcy5hdHRhY2ggPSBhd2FpdCBxdWVyeS5nZXQoaWQpO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIkBpZihzaG93SGVhZGVyJiZhdHRhY2g/LmlkKXtcclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlYmFyXCI+XHJcbiAgICAgICAgPCEtLSDmlofku7bkv6Hmga8gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaW5mb1wiIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cclxuICAgICAgICAgIDwhLS0g5Zu+5qCHK+Wkp+WwjyAtLT5cclxuICAgICAgICAgICAgPGlvbi1pY29uIFtzcmNdPVwiYXR0YWNoPy5nZXQoJ3VybCcpIHwgZmlsZXR5cGVcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpemVcIj57e2F0dGFjaD8uZ2V0KFwic2l6ZVwiKSB8IG56Qnl0ZXMgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDmoIfpopggLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAge3thdHRhY2g/LmdldChcIm5hbWVcIikgfHwgJ+acquWRveWQjSd9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g5pON5L2c5Yy65Z+fIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+XHJcbiAgICAgICAgICAgIDwhLS0g5YWz6ZetIC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImJhY2soKVwiIGFyaWEtbGFiZWw9XCLpooTop4hcIj5cclxuICAgICAgICAgICAgICAgIOWFs+mXrVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcbkBpZihzYWZlVXJsKXtcclxuICAgIDxpZnJhbWUgW3NyY109XCJzYWZlVXJsXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3c9XCJjbGlwYm9hcmQtcmVhZCAqOyBjbGlwYm9hcmQtd3JpdGUgKlwiPjwvaWZyYW1lPiBcclxufSJdfQ==
|
|
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/story/fm-office-viewer/fm-office-viewer.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input}from"@angular/core";import{MatButtonModule}from"@angular/material/button";import{DomSanitizer}from"@angular/platform-browser";import{IonIcon,ModalController}from"@ionic/angular/standalone";import{NzPipesModule}from"ng-zorro-antd/pipes";import{FiletypePipe}from"../../../icon";import{FmodeParse}from"@fmode/parse";import*as i0 from"@angular/core";import*as i1 from"@angular/platform-browser";import*as i2 from"@ionic/angular/standalone";import*as i3 from"@angular/material/button";import*as i4 from"ng-zorro-antd/pipes";const Parse=FmodeParse.with("nova");export class FmOfficeViewerComponent{constructor(e,t){this.domSan=e,this.modalCtrl=t,this.officeHost="https://office.fmode.cn/browser/baa6eef/cool.html",this.wopiHost="https://server.fmode.cn/api/office",this.permission="readonly",this.showHeader=!1}back(){this.modalCtrl.dismiss()}ngOnInit(){this.genSafeUrl()}genSafeUrl(){if(this.fileId){let e=`${this.officeHost}?lang=zh-cn&permission=${this.permission}&WOPISrc=${this.wopiHost}/wopi/files/${this.fileId}`;this.safeUrl=this.domSan.bypassSecurityTrustResourceUrl(e),this.loadAttachment(this.fileId)}}async loadAttachment(e){let t=new Parse.Query("Attachment");this.attach=await t.get(e)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmOfficeViewerComponent,deps:[{token:i1.DomSanitizer},{token:i2.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"17.3.12",type:FmOfficeViewerComponent,isStandalone:!0,selector:"fm-office-viewer",inputs:{officeHost:"officeHost",wopiHost:"wopiHost",fileId:"fileId",permission:"permission",showHeader:"showHeader"},ngImport:i0,template:'@if(showHeader&&attach?.id){\n <div class="filebar">\n \x3c!-- 文件信息 --\x3e\n <div class="file-info" style="display:flex;align-items:center;">\n \x3c!-- 图标+大小 --\x3e\n <ion-icon [src]="attach?.get(\'url\') | filetype"></ion-icon>\n <span class="size">{{attach?.get("size") | nzBytes }}</span>\n </div>\n \x3c!-- 标题 --\x3e\n <div class="title">\n {{attach?.get("name") || \'未命名\'}}\n </div>\n \x3c!-- 操作区域 --\x3e\n <div class="actions" style="display:flex;align-items:center;justify-content: flex-end;">\n \x3c!-- 关闭 --\x3e\n <button mat-button (click)="back()" aria-label="预览">\n 关闭\n </button>\n </div>\n </div>\n}\n@if(safeUrl){\n <iframe [src]="safeUrl" frameborder="0" allow="clipboard-read *; clipboard-write *"></iframe> \n}',styles:["iframe{width:100%;height:100%}.filebar{display:flex;justify-content:space-between;align-items:center;padding:5px 15px}.filebar .file-info{max-width:80px}.filebar .title{flex:1;font-weight:700;margin-left:5px;margin-right:5px;max-width:220px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:5px 15px;text-align:center}.filebar mat-card-content{color:#333}.filebar ion-icon{font-size:28px;min-width:30px}.filebar ion-chip{color:#333}.filebar .actions{max-width:104px}\n"],dependencies:[{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"ngmodule",type:MatButtonModule},{kind:"component",type:i3.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",exportAs:["matButton"]},{kind:"ngmodule",type:NzPipesModule},{kind:"pipe",type:i4.NzBytesPipe,name:"nzBytes"},{kind:"pipe",type:FiletypePipe,name:"filetype"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmOfficeViewerComponent,decorators:[{type:Component,args:[{selector:"fm-office-viewer",standalone:!0,imports:[IonIcon,MatButtonModule,NzPipesModule,FiletypePipe],template:'@if(showHeader&&attach?.id){\n <div class="filebar">\n \x3c!-- 文件信息 --\x3e\n <div class="file-info" style="display:flex;align-items:center;">\n \x3c!-- 图标+大小 --\x3e\n <ion-icon [src]="attach?.get(\'url\') | filetype"></ion-icon>\n <span class="size">{{attach?.get("size") | nzBytes }}</span>\n </div>\n \x3c!-- 标题 --\x3e\n <div class="title">\n {{attach?.get("name") || \'未命名\'}}\n </div>\n \x3c!-- 操作区域 --\x3e\n <div class="actions" style="display:flex;align-items:center;justify-content: flex-end;">\n \x3c!-- 关闭 --\x3e\n <button mat-button (click)="back()" aria-label="预览">\n 关闭\n </button>\n </div>\n </div>\n}\n@if(safeUrl){\n <iframe [src]="safeUrl" frameborder="0" allow="clipboard-read *; clipboard-write *"></iframe> \n}',styles:["iframe{width:100%;height:100%}.filebar{display:flex;justify-content:space-between;align-items:center;padding:5px 15px}.filebar .file-info{max-width:80px}.filebar .title{flex:1;font-weight:700;margin-left:5px;margin-right:5px;max-width:220px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:5px 15px;text-align:center}.filebar mat-card-content{color:#333}.filebar ion-icon{font-size:28px;min-width:30px}.filebar ion-chip{color:#333}.filebar .actions{max-width:104px}\n"]}]}],ctorParameters:()=>[{type:i1.DomSanitizer},{type:i2.ModalController}],propDecorators:{officeHost:[{type:Input}],wopiHost:[{type:Input}],fileId:[{type:Input}],permission:[{type:Input}],showHeader:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3N0b3J5L2ZtLW9mZmljZS12aWV3ZXIvZm0tb2ZmaWNlLXZpZXdlci5jb21wb25lbnQubWpz`
|
|
10
|
+
|