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,232 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// MARK: - 基本方法
|
|
12
|
-
static extend(className) {
|
|
13
|
-
return class extends FmodeObject {
|
|
14
|
-
constructor() {
|
|
15
|
-
super(className);
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
toPointer() {
|
|
20
|
-
return {
|
|
21
|
-
__type: 'Pointer',
|
|
22
|
-
className: this.className,
|
|
23
|
-
objectId: this.id
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
// Update the toJSON method to properly format dates and pointers
|
|
27
|
-
toJSON() {
|
|
28
|
-
const json = {
|
|
29
|
-
__type: 'Object',
|
|
30
|
-
className: this.className,
|
|
31
|
-
...this.data
|
|
32
|
-
};
|
|
33
|
-
if (this.id) {
|
|
34
|
-
json.objectId = this.id;
|
|
35
|
-
}
|
|
36
|
-
// Format dates properly
|
|
37
|
-
try {
|
|
38
|
-
if (this.createdAt) {
|
|
39
|
-
if (typeof this.createdAt == "string") {
|
|
40
|
-
this.createdAt = new Date(this.createdAt);
|
|
41
|
-
}
|
|
42
|
-
json.createdAt = { __type: 'Date', iso: this.createdAt.toISOString() };
|
|
43
|
-
}
|
|
44
|
-
if (this.updatedAt) {
|
|
45
|
-
if (typeof this.updatedAt == "string") {
|
|
46
|
-
this.updatedAt = new Date(this.updatedAt);
|
|
47
|
-
}
|
|
48
|
-
console.log(this.updatedAt);
|
|
49
|
-
json.updatedAt = { __type: 'Date', iso: this.updatedAt.toISOString() };
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch (err) { }
|
|
53
|
-
// Handle ACL
|
|
54
|
-
if (this.ACL) {
|
|
55
|
-
json.ACL = this.ACL;
|
|
56
|
-
}
|
|
57
|
-
return json;
|
|
58
|
-
}
|
|
59
|
-
// MARK: - 属性操作
|
|
60
|
-
get(key) {
|
|
61
|
-
return this.data[key];
|
|
62
|
-
}
|
|
63
|
-
set(key, value) {
|
|
64
|
-
if (typeof key === 'object') {
|
|
65
|
-
Object.assign(this.data, key);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
this.data[key] = value;
|
|
69
|
-
}
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
unset(key) {
|
|
73
|
-
delete this.data[key];
|
|
74
|
-
return this;
|
|
75
|
-
}
|
|
76
|
-
increment(key, amount = 1) {
|
|
77
|
-
const current = this.get(key) || 0;
|
|
78
|
-
this.set(key, current + amount);
|
|
79
|
-
return this;
|
|
80
|
-
}
|
|
81
|
-
add(key, items) {
|
|
82
|
-
const current = this.get(key) || [];
|
|
83
|
-
this.set(key, [...current, ...items]);
|
|
84
|
-
return this;
|
|
85
|
-
}
|
|
86
|
-
addUnique(key, items) {
|
|
87
|
-
const current = new Set(this.get(key) || new Set());
|
|
88
|
-
items.forEach(item => current.add(item));
|
|
89
|
-
this.set(key, Array.from(current));
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
remove(key, items) {
|
|
93
|
-
const current = this.get(key) || [];
|
|
94
|
-
const toRemove = new Set(items);
|
|
95
|
-
this.set(key, current.filter((item) => !toRemove.has(item)));
|
|
96
|
-
return this;
|
|
97
|
-
}
|
|
98
|
-
// MARK: - CRUD 操作
|
|
99
|
-
// Update the save method to use the proper toJSON format
|
|
100
|
-
async save(options) {
|
|
101
|
-
if (!FmodeObject._instance)
|
|
102
|
-
throw new Error('Not initialized');
|
|
103
|
-
const method = this.id ? 'PUT' : 'POST';
|
|
104
|
-
let url = `${FmodeObject._instance.serverURL}/classes/${this.className}`;
|
|
105
|
-
if (this.id)
|
|
106
|
-
url += `/${this.id}`;
|
|
107
|
-
const headers = {
|
|
108
|
-
'Content-Type': 'application/json',
|
|
109
|
-
'X-Parse-Application-Id': FmodeObject._instance.appId
|
|
110
|
-
};
|
|
111
|
-
if (options?.useMasterKey && FmodeObject._instance.config.masterKey) {
|
|
112
|
-
headers['X-Parse-Master-Key'] = FmodeObject._instance.config.masterKey;
|
|
113
|
-
}
|
|
114
|
-
// Get clean JSON representation
|
|
115
|
-
const data = this.toJSON();
|
|
116
|
-
delete data.createdAt; // These are handled by server
|
|
117
|
-
delete data.updatedAt;
|
|
118
|
-
delete data.__type;
|
|
119
|
-
delete data.className;
|
|
120
|
-
// Convert any nested FmodeObjects to pointers
|
|
121
|
-
for (const key in data) {
|
|
122
|
-
if (this.get(key)?.toPointer) {
|
|
123
|
-
data[key] = this.get(key).toPointer();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
const response = await fetch(url, {
|
|
127
|
-
method,
|
|
128
|
-
headers,
|
|
129
|
-
body: JSON.stringify(data)
|
|
130
|
-
});
|
|
131
|
-
console.log(JSON.stringify(data));
|
|
132
|
-
const result = await response.json();
|
|
133
|
-
console.log(result);
|
|
134
|
-
if (result.error)
|
|
135
|
-
throw new Error(result.error);
|
|
136
|
-
this.id = result.objectId || this.id;
|
|
137
|
-
this.createdAt = new Date(result.createdAt || this.createdAt);
|
|
138
|
-
this.updatedAt = new Date(result.updatedAt || this.updatedAt);
|
|
139
|
-
return this;
|
|
140
|
-
}
|
|
141
|
-
async destroy(options) {
|
|
142
|
-
if (!this.id)
|
|
143
|
-
throw new Error('Cannot destroy unsaved object');
|
|
144
|
-
if (!FmodeObject._instance)
|
|
145
|
-
throw new Error('Not initialized');
|
|
146
|
-
const headers = {
|
|
147
|
-
'X-Parse-Application-Id': FmodeObject._instance.appId
|
|
148
|
-
};
|
|
149
|
-
if (options?.useMasterKey && FmodeObject._instance.config.masterKey) {
|
|
150
|
-
headers['X-Parse-Master-Key'] = FmodeObject._instance.config.masterKey;
|
|
151
|
-
}
|
|
152
|
-
const url = `${FmodeObject._instance.serverURL}/classes/${this.className}/${this.id}`;
|
|
153
|
-
const response = await fetch(url, {
|
|
154
|
-
method: 'DELETE',
|
|
155
|
-
headers
|
|
156
|
-
});
|
|
157
|
-
if (!response.ok) {
|
|
158
|
-
const result = await response.json();
|
|
159
|
-
throw new Error(result.error || 'Failed to delete object');
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// MARK: - 静态方法
|
|
163
|
-
static async create(className, attributes, options) {
|
|
164
|
-
const obj = new this(className);
|
|
165
|
-
obj.set(attributes);
|
|
166
|
-
return obj.save(options);
|
|
167
|
-
}
|
|
168
|
-
static async fetchAll(objects, options) {
|
|
169
|
-
if (!FmodeObject._instance)
|
|
170
|
-
throw new Error('Not initialized');
|
|
171
|
-
if (objects.length === 0)
|
|
172
|
-
return [];
|
|
173
|
-
const headers = {
|
|
174
|
-
'Content-Type': 'application/json',
|
|
175
|
-
'X-Parse-Application-Id': FmodeObject._instance.appId
|
|
176
|
-
};
|
|
177
|
-
if (options?.useMasterKey && FmodeObject._instance.config.masterKey) {
|
|
178
|
-
headers['X-Parse-Master-Key'] = FmodeObject._instance.config.masterKey;
|
|
179
|
-
}
|
|
180
|
-
const url = `${FmodeObject._instance.serverURL}/batch`;
|
|
181
|
-
const requests = objects.map(obj => ({
|
|
182
|
-
method: 'GET',
|
|
183
|
-
path: `/classes/${obj.className}/${obj.id}`
|
|
184
|
-
}));
|
|
185
|
-
const response = await fetch(url, {
|
|
186
|
-
method: 'POST',
|
|
187
|
-
headers,
|
|
188
|
-
body: JSON.stringify({ requests })
|
|
189
|
-
});
|
|
190
|
-
const results = await response.json();
|
|
191
|
-
if (results.error)
|
|
192
|
-
throw new Error(results.error);
|
|
193
|
-
return results.map((result, index) => {
|
|
194
|
-
const obj = objects[index];
|
|
195
|
-
obj.set(result.success);
|
|
196
|
-
return obj;
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
// MARK: - 关系操作
|
|
200
|
-
relation(key) {
|
|
201
|
-
return new FmodeRelation(this, key);
|
|
202
|
-
}
|
|
203
|
-
// MARK: - 文件处理
|
|
204
|
-
static async fromFile(name, data, type) {
|
|
205
|
-
if (!FmodeObject._instance)
|
|
206
|
-
throw new Error('Not initialized');
|
|
207
|
-
const fileData = new FormData();
|
|
208
|
-
fileData.append('file', data, name);
|
|
209
|
-
const headers = {
|
|
210
|
-
'X-Parse-Application-Id': FmodeObject._instance.appId
|
|
211
|
-
};
|
|
212
|
-
const url = `${FmodeObject._instance.serverURL}/files/${name}`;
|
|
213
|
-
const response = await fetch(url, {
|
|
214
|
-
method: 'POST',
|
|
215
|
-
headers,
|
|
216
|
-
body: fileData
|
|
217
|
-
});
|
|
218
|
-
const result = await response.json();
|
|
219
|
-
if (result.error)
|
|
220
|
-
throw new Error(result.error);
|
|
221
|
-
return {
|
|
222
|
-
__type: 'File',
|
|
223
|
-
name: result.name,
|
|
224
|
-
url: result.url
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
// 添加静态方法到类上
|
|
229
|
-
// FmodeObject.registerSubclass = function(className: string, clazz: typeof FmodeObject) {
|
|
230
|
-
// // 子类注册逻辑
|
|
231
|
-
// };
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUub2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLm9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF1QnBELE1BQU0sT0FBTyxXQUFXO2FBQ2YsY0FBUyxHQUFlLElBQUksQUFBbkIsQ0FBb0I7SUFFcEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFhO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFTRCxZQUFZLFNBQWlCO1FBRjdCLFNBQUksR0FBd0IsRUFBRSxDQUFDO1FBRzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO0lBRWYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQjtRQUM3QixPQUFPLEtBQU0sU0FBUSxXQUFXO1lBQzlCO2dCQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQixDQUFDO1NBQ0ssQ0FBQztJQUNYLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTztZQUNMLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUc7U0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRCxpRUFBaUU7SUFDbkUsTUFBTTtRQUNKLE1BQU0sSUFBSSxHQUF3QjtZQUNoQyxNQUFNLEVBQUUsUUFBUTtZQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsR0FBRyxJQUFJLENBQUMsSUFBSTtTQUNiLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUcsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFHLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBRSxRQUFRLEVBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQzNDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLElBQUcsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFFLFFBQVEsRUFBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDM0MsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN6RSxDQUFDO1FBQ0gsQ0FBQztRQUFBLE9BQU0sR0FBRyxFQUFDLENBQUMsQ0FBQSxDQUFDO1FBRWIsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFHQyxlQUFlO0lBRWYsR0FBRyxDQUFDLEdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFpQyxFQUFFLEtBQVc7UUFDaEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFZO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBWTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVyxFQUFFLEtBQVk7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFFcEIseURBQXlEO0lBQ3pELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBb0M7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3hDLElBQUksR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pFLElBQUksSUFBSSxDQUFDLEVBQUU7WUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFbEMsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsd0JBQXdCLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQ3RELENBQUM7UUFFRixJQUFJLE9BQU8sRUFBRSxZQUFZLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEUsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDhCQUE4QjtRQUNyRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV0Qiw4Q0FBOEM7UUFDOUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU07WUFDTixPQUFPO1lBQ1AsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWpDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkIsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW9DO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFL0QsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSztTQUN0RCxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsWUFBWSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsWUFBWSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0RixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTztTQUNSLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLHlCQUF5QixDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO0lBRWYsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2pCLFNBQWlCLEVBQ2pCLFVBQStCLEVBQy9CLE9BQW9DO1FBRXBDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBTSxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDbkIsT0FBWSxFQUNaLE9BQW9DO1FBRXBDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXBDLE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSztTQUN0RCxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsWUFBWSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsUUFBUSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLFlBQVksR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1NBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTztZQUNQLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxPQUFPLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO0lBRWYsUUFBUSxDQUF3QixHQUFXO1FBQ3pDLE9BQU8sSUFBSSxhQUFhLENBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxlQUFlO0lBRWYsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ25CLElBQVksRUFDWixJQUF1QixFQUN2QixJQUFhO1FBRWIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBDLE1BQU0sT0FBTyxHQUEyQjtZQUN0Qyx3QkFBd0IsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUs7U0FDdEQsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTztZQUNQLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE9BQU87WUFDTCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7U0FDaEIsQ0FBQztJQUNKLENBQUM7O0FBR0gsWUFBWTtBQUNaLDBGQUEwRjtBQUMxRixjQUFjO0FBQ2QsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZtb2RlUXVlcnkgfSBmcm9tIFwiLi9mbW9kZS5xdWVyeVwiO1xyXG5pbXBvcnQgeyBGbW9kZUFDTCB9IGZyb20gXCIuL2RhdGF0eXBlL2FjbFwiO1xyXG5pbXBvcnQgeyBGbW9kZUdlb1BvaW50IH0gZnJvbSBcIi4vZGF0YXR5cGUvZ2VvcG9pbnRcIjtcclxuaW1wb3J0IHsgRm1vZGVSZWxhdGlvbiB9IGZyb20gXCIuL2RhdGF0eXBlL3JlbGF0aW9uXCI7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBDb3JlIFR5cGVzID09PT09PT09PT09PT09PT09PT09XHJcbnR5cGUgQUNMID0gUmVjb3JkPHN0cmluZywgeyByZWFkOiBib29sZWFuOyB3cml0ZTogYm9vbGVhbiB9PjtcclxudHlwZSBGaWxlID0geyBfX3R5cGU6ICdGaWxlJzsgbmFtZTogc3RyaW5nOyB1cmw6IHN0cmluZyB9O1xyXG50eXBlIEdlb1BvaW50ID0gRm1vZGVHZW9Qb2ludHx7IF9fdHlwZTogJ0dlb1BvaW50JzsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfTtcclxudHlwZSBSZWxhdGlvbjxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+ID0ge1xyXG4gIF9fdHlwZTogJ1JlbGF0aW9uJztcclxuICBjbGFzc05hbWU6IHN0cmluZztcclxuICBhZGQ6IChvYmplY3RzOiBUW10pID0+IHZvaWQ7XHJcbiAgcmVtb3ZlOiAob2JqZWN0czogVFtdKSA9PiB2b2lkO1xyXG4gIHF1ZXJ5OiAoKSA9PiBGbW9kZVF1ZXJ5PFQ+O1xyXG59O1xyXG5cclxudHlwZSBQb2ludGVyID0geyBfX3R5cGU6ICdQb2ludGVyJzsgY2xhc3NOYW1lOiBzdHJpbmc7IG9iamVjdElkOiBzdHJpbmcgfTtcclxudHlwZSBCYXNlQXR0cmlidXRlcyA9IHtcclxuICBpZD86IHN0cmluZztcclxuICBjcmVhdGVkQXQ/OiBEYXRlO1xyXG4gIHVwZGF0ZWRBdD86IERhdGU7XHJcbiAgQUNMPzogQUNMIHwgRm1vZGVBQ0w7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlT2JqZWN0IHtcclxuICBzdGF0aWMgX2luc3RhbmNlOiBhbnkgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBzdGF0aWMgYmluZEluc3RhbmNlKGluc3RhbmNlOiBhbnkpIHtcclxuICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBjbGFzc05hbWU6IHN0cmluZztcclxuICBpZD86IHN0cmluZztcclxuICBjcmVhdGVkQXQ/OiBEYXRlO1xyXG4gIHVwZGF0ZWRBdD86IERhdGU7XHJcbiAgQUNMPzogQUNMO1xyXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSDln7rmnKzmlrnms5VcclxuXHJcbiAgc3RhdGljIGV4dGVuZChjbGFzc05hbWU6IHN0cmluZyk6IHR5cGVvZiBGbW9kZU9iamVjdCB7XHJcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBGbW9kZU9iamVjdCB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKGNsYXNzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0gYXMgYW55O1xyXG4gIH1cclxuXHJcbiAgdG9Qb2ludGVyKCk6IFBvaW50ZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgX190eXBlOiAnUG9pbnRlcicsXHJcbiAgICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmlkIVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSB0aGUgdG9KU09OIG1ldGhvZCB0byBwcm9wZXJseSBmb3JtYXQgZGF0ZXMgYW5kIHBvaW50ZXJzXHJcbnRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgX190eXBlOiAnT2JqZWN0JyxcclxuICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsXHJcbiAgICAuLi50aGlzLmRhdGFcclxuICB9O1xyXG5cclxuICBpZiAodGhpcy5pZCkge1xyXG4gICAganNvbi5vYmplY3RJZCA9IHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICAvLyBGb3JtYXQgZGF0ZXMgcHJvcGVybHlcclxuICB0cnl7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVkQXQpIHtcclxuICAgICAgICBpZih0eXBlb2YgdGhpcy5jcmVhdGVkQXQ9PVwic3RyaW5nXCIpe1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUodGhpcy5jcmVhdGVkQXQpXHJcbiAgICAgIH1cclxuICAgICAganNvbi5jcmVhdGVkQXQgPSB7IF9fdHlwZTogJ0RhdGUnLCBpc286IHRoaXMuY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCkgfTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVwZGF0ZWRBdCkge1xyXG4gICAgICBpZih0eXBlb2YgdGhpcy51cGRhdGVkQXQ9PVwic3RyaW5nXCIpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlZEF0ID0gbmV3IERhdGUodGhpcy51cGRhdGVkQXQpXHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2codGhpcy51cGRhdGVkQXQpXHJcbiAgICAgIGpzb24udXBkYXRlZEF0ID0geyBfX3R5cGU6ICdEYXRlJywgaXNvOiB0aGlzLnVwZGF0ZWRBdC50b0lTT1N0cmluZygpIH07XHJcbiAgICB9XHJcbiAgfWNhdGNoKGVycil7fVxyXG4gIFxyXG4gIC8vIEhhbmRsZSBBQ0xcclxuICBpZiAodGhpcy5BQ0wpIHtcclxuICAgIGpzb24uQUNMID0gdGhpcy5BQ0w7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ganNvbjtcclxufVxyXG5cclxuXHJcbiAgLy8gTUFSSzogLSDlsZ7mgKfmk43kvZxcclxuXHJcbiAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFba2V5XTtcclxuICB9XHJcblxyXG4gIHNldChrZXk6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4sIHZhbHVlPzogYW55KTogdGhpcyB7XHJcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1bnNldChrZXk6IHN0cmluZyk6IHRoaXMge1xyXG4gICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBpbmNyZW1lbnQoa2V5OiBzdHJpbmcsIGFtb3VudCA9IDEpOiB0aGlzIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldChrZXkpIHx8IDA7XHJcbiAgICB0aGlzLnNldChrZXksIGN1cnJlbnQgKyBhbW91bnQpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGQoa2V5OiBzdHJpbmcsIGl0ZW1zOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KGtleSkgfHwgW107XHJcbiAgICB0aGlzLnNldChrZXksIFsuLi5jdXJyZW50LCAuLi5pdGVtc10pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRVbmlxdWUoa2V5OiBzdHJpbmcsIGl0ZW1zOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgY29uc3QgY3VycmVudCA9IG5ldyBTZXQodGhpcy5nZXQoa2V5KSB8fCBuZXcgU2V0KCkpO1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IGN1cnJlbnQuYWRkKGl0ZW0pKTtcclxuICAgIHRoaXMuc2V0KGtleSwgQXJyYXkuZnJvbShjdXJyZW50KSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHJlbW92ZShrZXk6IHN0cmluZywgaXRlbXM6IGFueVtdKTogdGhpcyB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoa2V5KSB8fCBbXTtcclxuICAgIGNvbnN0IHRvUmVtb3ZlID0gbmV3IFNldChpdGVtcyk7XHJcbiAgICB0aGlzLnNldChrZXksIGN1cnJlbnQuZmlsdGVyKChpdGVtOiBhbnkpID0+ICF0b1JlbW92ZS5oYXMoaXRlbSkpKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSBDUlVEIOaTjeS9nFxyXG5cclxuLy8gVXBkYXRlIHRoZSBzYXZlIG1ldGhvZCB0byB1c2UgdGhlIHByb3BlciB0b0pTT04gZm9ybWF0XHJcbmFzeW5jIHNhdmUob3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9KTogUHJvbWlzZTx0aGlzPiB7XHJcbiAgaWYgKCFGbW9kZU9iamVjdC5faW5zdGFuY2UpIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkJyk7XHJcblxyXG4gIGNvbnN0IG1ldGhvZCA9IHRoaXMuaWQgPyAnUFVUJyA6ICdQT1NUJztcclxuICBsZXQgdXJsID0gYCR7Rm1vZGVPYmplY3QuX2luc3RhbmNlLnNlcnZlclVSTH0vY2xhc3Nlcy8ke3RoaXMuY2xhc3NOYW1lfWA7XHJcbiAgaWYgKHRoaXMuaWQpIHVybCArPSBgLyR7dGhpcy5pZH1gO1xyXG5cclxuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogRm1vZGVPYmplY3QuX2luc3RhbmNlLmFwcElkXHJcbiAgfTtcclxuXHJcbiAgaWYgKG9wdGlvbnM/LnVzZU1hc3RlcktleSAmJiBGbW9kZU9iamVjdC5faW5zdGFuY2UuY29uZmlnLm1hc3RlcktleSkge1xyXG4gICAgaGVhZGVyc1snWC1QYXJzZS1NYXN0ZXItS2V5J10gPSBGbW9kZU9iamVjdC5faW5zdGFuY2UuY29uZmlnLm1hc3RlcktleTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBjbGVhbiBKU09OIHJlcHJlc2VudGF0aW9uXHJcbiAgY29uc3QgZGF0YSA9IHRoaXMudG9KU09OKCk7XHJcbiAgZGVsZXRlIGRhdGEuY3JlYXRlZEF0OyAvLyBUaGVzZSBhcmUgaGFuZGxlZCBieSBzZXJ2ZXJcclxuICBkZWxldGUgZGF0YS51cGRhdGVkQXQ7XHJcbiAgZGVsZXRlIGRhdGEuX190eXBlO1xyXG4gIGRlbGV0ZSBkYXRhLmNsYXNzTmFtZTtcclxuXHJcbiAgLy8gQ29udmVydCBhbnkgbmVzdGVkIEZtb2RlT2JqZWN0cyB0byBwb2ludGVyc1xyXG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgIGlmICh0aGlzLmdldChrZXkpPy50b1BvaW50ZXIpIHtcclxuICAgICAgZGF0YVtrZXldID0gdGhpcy5nZXQoa2V5KS50b1BvaW50ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICBtZXRob2QsXHJcbiAgICBoZWFkZXJzLFxyXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSlcclxuICB9KTtcclxuXHJcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcblxyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcik7XHJcblxyXG4gIHRoaXMuaWQgPSByZXN1bHQub2JqZWN0SWQgfHwgdGhpcy5pZDtcclxuICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHJlc3VsdC5jcmVhdGVkQXQgfHwgdGhpcy5jcmVhdGVkQXQpO1xyXG4gIHRoaXMudXBkYXRlZEF0ID0gbmV3IERhdGUocmVzdWx0LnVwZGF0ZWRBdCB8fCB0aGlzLnVwZGF0ZWRBdCk7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn1cclxuICBhc3luYyBkZXN0cm95KG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmlkKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXN0cm95IHVuc2F2ZWQgb2JqZWN0Jyk7XHJcbiAgICBpZiAoIUZtb2RlT2JqZWN0Ll9pbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW5pdGlhbGl6ZWQnKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAob3B0aW9ucz8udXNlTWFzdGVyS2V5ICYmIEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gRm1vZGVPYmplY3QuX2luc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7Rm1vZGVPYmplY3QuX2luc3RhbmNlLnNlcnZlclVSTH0vY2xhc3Nlcy8ke3RoaXMuY2xhc3NOYW1lfS8ke3RoaXMuaWR9YDtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXHJcbiAgICAgIGhlYWRlcnNcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZGVsZXRlIG9iamVjdCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSDpnZnmgIHmlrnms5VcclxuXHJcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZTxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+KFxyXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXHJcbiAgICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgb3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9XHJcbiAgKTogUHJvbWlzZTxUPiB7XHJcbiAgICBjb25zdCBvYmogPSBuZXcgdGhpcyhjbGFzc05hbWUpIGFzIFQ7XHJcbiAgICBvYmouc2V0KGF0dHJpYnV0ZXMpO1xyXG4gICAgcmV0dXJuIG9iai5zYXZlKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFzeW5jIGZldGNoQWxsPFQgZXh0ZW5kcyBGbW9kZU9iamVjdD4oXHJcbiAgICBvYmplY3RzOiBUW10sXHJcbiAgICBvcHRpb25zPzogeyB1c2VNYXN0ZXJLZXk/OiBib29sZWFuIH1cclxuICApOiBQcm9taXNlPFRbXT4ge1xyXG4gICAgaWYgKCFGbW9kZU9iamVjdC5faW5zdGFuY2UpIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkJyk7XHJcbiAgICBpZiAob2JqZWN0cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAob3B0aW9ucz8udXNlTWFzdGVyS2V5ICYmIEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gRm1vZGVPYmplY3QuX2luc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7Rm1vZGVPYmplY3QuX2luc3RhbmNlLnNlcnZlclVSTH0vYmF0Y2hgO1xyXG4gICAgY29uc3QgcmVxdWVzdHMgPSBvYmplY3RzLm1hcChvYmogPT4gKHtcclxuICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgcGF0aDogYC9jbGFzc2VzLyR7b2JqLmNsYXNzTmFtZX0vJHtvYmouaWR9YFxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHJlcXVlc3RzIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgaWYgKHJlc3VsdHMuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHRzLmVycm9yKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IG9iamVjdHNbaW5kZXhdO1xyXG4gICAgICBvYmouc2V0KHJlc3VsdC5zdWNjZXNzKTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSDlhbPns7vmk43kvZxcclxuXHJcbiAgcmVsYXRpb248VCBleHRlbmRzIEZtb2RlT2JqZWN0PihrZXk6IHN0cmluZyk6IEZtb2RlUmVsYXRpb248VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBGbW9kZVJlbGF0aW9uPFQ+KHRoaXMsIGtleSk7XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIOaWh+S7tuWkhOeQhlxyXG5cclxuICBzdGF0aWMgYXN5bmMgZnJvbUZpbGUoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBCbG9iIHwgRmlsZSB8IGFueSxcclxuICAgIHR5cGU/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIGlmICghRm1vZGVPYmplY3QuX2luc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbml0aWFsaXplZCcpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVEYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmaWxlRGF0YS5hcHBlbmQoJ2ZpbGUnLCBkYXRhLCBuYW1lKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSBgJHtGbW9kZU9iamVjdC5faW5zdGFuY2Uuc2VydmVyVVJMfS9maWxlcy8ke25hbWV9YDtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICBib2R5OiBmaWxlRGF0YVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcik7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgX190eXBlOiAnRmlsZScsXHJcbiAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICB1cmw6IHJlc3VsdC51cmxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG4vLyDmt7vliqDpnZnmgIHmlrnms5XliLDnsbvkuIpcclxuLy8gRm1vZGVPYmplY3QucmVnaXN0ZXJTdWJjbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZTogc3RyaW5nLCBjbGF6ejogdHlwZW9mIEZtb2RlT2JqZWN0KSB7XHJcbi8vICAgLy8g5a2Q57G75rOo5YaM6YC76L6RXHJcbi8vIH07Il19
|
|
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/core/parse/fmode.object.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{FmodeRelation}from"./datatype/relation";export class FmodeObject{static{this._instance=null}static bindInstance(e){this._instance=e}constructor(e){this.data={},this.className=e}static extend(e){const t=class extends FmodeObject{constructor(){super(e)}};return t.extend=FmodeObject.extend,t.create=FmodeObject.create,t.fetchAll=FmodeObject.fetchAll,t.fromFile=FmodeObject.fromFile,t.bindInstance=FmodeObject.bindInstance,t._instance=FmodeObject._instance,t}toPointer(){return{__type:"Pointer",className:this.className,objectId:this.id}}toJSON(){const e={__type:"Object",className:this.className,...this.data};this.id&&(e.objectId=this.id);try{this.createdAt&&("string"==typeof this.createdAt&&(this.createdAt=new Date(this.createdAt)),e.createdAt={__type:"Date",iso:this.createdAt.toISOString()}),this.updatedAt&&("string"==typeof this.updatedAt&&(this.updatedAt=new Date(this.updatedAt)),console.log(this.updatedAt),e.updatedAt={__type:"Date",iso:this.updatedAt.toISOString()})}catch(e){}return this.ACL&&(e.ACL=this.ACL),e}get(e){return this.data[e]}set(e,t){return"object"==typeof e?Object.assign(this.data,e):this.data[e]=t,this}unset(e){return delete this.data[e],this}increment(e,t=1){const s=this.get(e)||0;return this.set(e,s+t),this}add(e,t){const s=this.get(e)||[];return this.set(e,[...s,...t]),this}addUnique(e,t){const s=new Set(this.get(e)||new Set);return t.forEach((e=>s.add(e))),this.set(e,Array.from(s)),this}remove(e,t){const s=this.get(e)||[],n=new Set(t);return this.set(e,s.filter((e=>!n.has(e)))),this}async save(e){if(!FmodeObject._instance)throw new Error("Not initialized");const t=this.id?"PUT":"POST";let s=`${FmodeObject._instance.serverURL}/classes/${this.className}`;this.id&&(s+=`/${this.id}`);const n={"Content-Type":"application/json","X-Parse-Application-Id":FmodeObject._instance.appId};if(e?.useMasterKey&&FmodeObject._instance.config.masterKey)n["X-Parse-Master-Key"]=FmodeObject._instance.config.masterKey;else{const e=FmodeObject._instance.sessionToken;e&&(n["X-Parse-Session-Token"]=e)}const i=this.toJSON();delete i.createdAt,delete i.updatedAt,delete i.__type,delete i.className;for(const e in i)this.get(e)?.toPointer&&(i[e]=this.get(e).toPointer());const a=await fetch(s,{method:t,headers:n,body:JSON.stringify(i)});console.log(JSON.stringify(i));const o=await a.json();if(console.log(o),o.error)throw new Error(o.error);return this.id=o.objectId||this.id,this.createdAt=new Date(o.createdAt||this.createdAt),this.updatedAt=new Date(o.updatedAt||this.updatedAt),this}async destroy(e){if(!this.id)throw new Error("Cannot destroy unsaved object");if(!FmodeObject._instance)throw new Error("Not initialized");const t={"X-Parse-Application-Id":FmodeObject._instance.appId};if(e?.useMasterKey&&FmodeObject._instance.config.masterKey)t["X-Parse-Master-Key"]=FmodeObject._instance.config.masterKey;else{const e=FmodeObject._instance.sessionToken;e&&(t["X-Parse-Session-Token"]=e)}const s=`${FmodeObject._instance.serverURL}/classes/${this.className}/${this.id}`,n=await fetch(s,{method:"DELETE",headers:t});if(!n.ok){const e=await n.json();throw new Error(e.error||"Failed to delete object")}}static async create(e,t,s){const n=new this(e);return n.set(t),n.save(s)}static async fetchAll(e,t){if(!FmodeObject._instance)throw new Error("Not initialized");if(0===e.length)return[];const s={"Content-Type":"application/json","X-Parse-Application-Id":FmodeObject._instance.appId};if(t?.useMasterKey&&FmodeObject._instance.config.masterKey)s["X-Parse-Master-Key"]=FmodeObject._instance.config.masterKey;else{const e=FmodeObject._instance.sessionToken;e&&(s["X-Parse-Session-Token"]=e)}const n=`${FmodeObject._instance.serverURL}/batch`,i=e.map((e=>({method:"GET",path:`/classes/${e.className}/${e.id}`}))),a=await fetch(n,{method:"POST",headers:s,body:JSON.stringify({requests:i})}),o=await a.json();if(o.error)throw new Error(o.error);return o.map(((t,s)=>{const n=e[s];return n.set(t.success),n}))}relation(e){return new FmodeRelation(this,e)}static async fromFile(e,t,s){if(!FmodeObject._instance)throw new Error("Not initialized");const n=new FormData;n.append("file",t,e);const i={"X-Parse-Application-Id":FmodeObject._instance.appId},a=FmodeObject._instance.sessionToken;a&&(i["X-Parse-Session-Token"]=a);const o=`${FmodeObject._instance.serverURL}/files/${e}`,r=await fetch(o,{method:"POST",headers:i,body:n}),c=await r.json();if(c.error)throw new Error(c.error);return{__type:"File",name:c.name,url:c.url}}}
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLm9iamVjdC5tanM=`
|
|
10
|
+
|
|
@@ -1,84 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class FmodeParse {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(config) {
|
|
12
|
-
this.config = config;
|
|
13
|
-
this.Object = FmodeObject;
|
|
14
|
-
this.Query = FmodeQuery;
|
|
15
|
-
this.User = FmodeUser;
|
|
16
|
-
this.GeoPoint = FmodeGeoPoint;
|
|
17
|
-
this.File = FmodeFile;
|
|
18
|
-
this.ACL = FmodeACL;
|
|
19
|
-
this.Relation = FmodeRelation;
|
|
20
|
-
// 绑定当前实例到静态类
|
|
21
|
-
FmodeObject.bindInstance(this);
|
|
22
|
-
FmodeQuery.bindInstance(this);
|
|
23
|
-
FmodeUser.bindInstance(this);
|
|
24
|
-
FmodeGeoPoint.bindInstance(this);
|
|
25
|
-
FmodeRelation.bindInstance(this);
|
|
26
|
-
FmodeFile.bindInstance(this);
|
|
27
|
-
FmodeACL.bindInstance(this);
|
|
28
|
-
}
|
|
29
|
-
static initialize(config) {
|
|
30
|
-
let instance;
|
|
31
|
-
if (typeof config === 'string') {
|
|
32
|
-
// 简单初始化 - 设置默认实例
|
|
33
|
-
let devServerUrl = "https://dev.fmode.cn/parse";
|
|
34
|
-
if (typeof location !== 'undefined' && location.protocol === "http:") {
|
|
35
|
-
devServerUrl = "http://dev.fmode.cn:1337/parse";
|
|
36
|
-
}
|
|
37
|
-
instance = new FmodeParse({
|
|
38
|
-
appId: config,
|
|
39
|
-
serverURL: devServerUrl
|
|
40
|
-
});
|
|
41
|
-
this._defaultInstance = instance;
|
|
42
|
-
this._instances['default'] = instance;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// 多配置初始化
|
|
46
|
-
instance = new FmodeParse(config);
|
|
47
|
-
if (config.config) {
|
|
48
|
-
// 如果有指定config名称,则存储为命名实例
|
|
49
|
-
this._instances[config.config] = instance;
|
|
50
|
-
}
|
|
51
|
-
// 如果没有指定config名称,或者config名称为'default',则设为默认实例
|
|
52
|
-
if (!config.config || config.config === 'default') {
|
|
53
|
-
this._defaultInstance = instance;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return instance;
|
|
57
|
-
}
|
|
58
|
-
static with(configName) {
|
|
59
|
-
return this._instances[configName] || this._defaultInstance;
|
|
60
|
-
}
|
|
61
|
-
get serverURL() {
|
|
62
|
-
return this.config.serverURL;
|
|
63
|
-
}
|
|
64
|
-
set serverURL(url) {
|
|
65
|
-
this.config.serverURL = url;
|
|
66
|
-
}
|
|
67
|
-
get appId() {
|
|
68
|
-
return this.config.appId;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// 兼容旧版全局用法
|
|
72
|
-
const defaultExport = new Proxy(FmodeParse, {
|
|
73
|
-
apply(target, thisArg, args) {
|
|
74
|
-
return FmodeParse.initialize.apply(target, args);
|
|
75
|
-
},
|
|
76
|
-
get(target, prop) {
|
|
77
|
-
if (prop in target) {
|
|
78
|
-
return target[prop];
|
|
79
|
-
}
|
|
80
|
-
return FmodeParse.with('default')[prop];
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
export { FmodeParse as default, defaultExport as FmodeParse };
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUucGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvcGFyc2UvZm1vZGUucGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsTUFBTSxVQUFVO2FBQ0MsZUFBVSxHQUErQixFQUFFLENBQUM7YUFDNUMscUJBQWdCLEdBQXNCLElBQUksQ0FBQztJQVUxRCxZQUEyQixNQUFtQjtRQUFuQixXQUFNLEdBQU4sTUFBTSxDQUFhO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBRTlCLGFBQWE7UUFDYixXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWlDO1FBQ2pELElBQUksUUFBb0IsQ0FBQztRQUV6QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLGlCQUFpQjtZQUNqQixJQUFJLFlBQVksR0FBRyw0QkFBNEIsQ0FBQTtZQUMvQyxJQUFHLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBQyxDQUFDO2dCQUNuRSxZQUFZLEdBQUcsZ0NBQWdDLENBQUE7WUFDakQsQ0FBQztZQUNELFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsU0FBUyxFQUFFLFlBQVk7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVM7WUFDVCxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQzVDLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQWtCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWlCLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEdBQVc7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7O0FBR0gsV0FBVztBQUNYLE1BQU0sYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtJQUMxQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJO1FBQ3pCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUk7UUFDZCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFRLE1BQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRixDQVFBLENBQUM7QUFFRixPQUFPLEVBQUUsVUFBVSxJQUFJLE9BQU8sRUFBRSxhQUFhLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbW9kZUFDTCB9IGZyb20gJy4vZGF0YXR5cGUvYWNsJztcclxuaW1wb3J0IHsgRm1vZGVGaWxlIH0gZnJvbSAnLi9kYXRhdHlwZS9maWxlJztcclxuaW1wb3J0IHsgRm1vZGVHZW9Qb2ludCB9IGZyb20gJy4vZGF0YXR5cGUvZ2VvcG9pbnQnO1xyXG5pbXBvcnQgeyBGbW9kZVJlbGF0aW9uIH0gZnJvbSAnLi9kYXRhdHlwZS9yZWxhdGlvbic7XHJcbmltcG9ydCB7IEZtb2RlT2JqZWN0IH0gZnJvbSAnLi9mbW9kZS5vYmplY3QnO1xyXG5pbXBvcnQgeyBGbW9kZVF1ZXJ5IH0gZnJvbSAnLi9mbW9kZS5xdWVyeSc7XHJcbmltcG9ydCB7IEZtb2RlVXNlciB9IGZyb20gJy4vZm1vZGUudXNlcic7XHJcbmltcG9ydCB7IEZtb2RlQ29uZmlnLCBGbW9kZUluaXRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5jbGFzcyBGbW9kZVBhcnNlIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2VzOiBSZWNvcmQ8c3RyaW5nLCBGbW9kZVBhcnNlPiA9IHt9O1xyXG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0SW5zdGFuY2U6IEZtb2RlUGFyc2UgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBwdWJsaWMgcmVhZG9ubHkgT2JqZWN0OiB0eXBlb2YgRm1vZGVPYmplY3Q7XHJcbiAgcHVibGljIHJlYWRvbmx5IFF1ZXJ5OiB0eXBlb2YgRm1vZGVRdWVyeTtcclxuICBwdWJsaWMgcmVhZG9ubHkgVXNlcjogdHlwZW9mIEZtb2RlVXNlcjtcclxuICBwdWJsaWMgcmVhZG9ubHkgRmlsZTogdHlwZW9mIEZtb2RlRmlsZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgUmVsYXRpb246IHR5cGVvZiBGbW9kZVJlbGF0aW9uO1xyXG4gIHB1YmxpYyByZWFkb25seSBBQ0w6IHR5cGVvZiBGbW9kZUFDTDtcclxuICBwdWJsaWMgcmVhZG9ubHkgR2VvUG9pbnQ6IHR5cGVvZiBGbW9kZUdlb1BvaW50O1xyXG4gIFxyXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIGNvbmZpZzogRm1vZGVDb25maWcpIHtcclxuICAgIHRoaXMuT2JqZWN0ID0gRm1vZGVPYmplY3Q7XHJcbiAgICB0aGlzLlF1ZXJ5ID0gRm1vZGVRdWVyeTtcclxuICAgIHRoaXMuVXNlciA9IEZtb2RlVXNlcjtcclxuICAgIHRoaXMuR2VvUG9pbnQgPSBGbW9kZUdlb1BvaW50O1xyXG4gICAgdGhpcy5GaWxlID0gRm1vZGVGaWxlO1xyXG4gICAgdGhpcy5BQ0wgPSBGbW9kZUFDTDtcclxuICAgIHRoaXMuUmVsYXRpb24gPSBGbW9kZVJlbGF0aW9uO1xyXG4gICAgXHJcbiAgICAvLyDnu5HlrprlvZPliY3lrp7kvovliLDpnZnmgIHnsbtcclxuICAgIEZtb2RlT2JqZWN0LmJpbmRJbnN0YW5jZSh0aGlzKTtcclxuICAgIEZtb2RlUXVlcnkuYmluZEluc3RhbmNlKHRoaXMpO1xyXG4gICAgRm1vZGVVc2VyLmJpbmRJbnN0YW5jZSh0aGlzKTtcclxuICAgIEZtb2RlR2VvUG9pbnQuYmluZEluc3RhbmNlKHRoaXMpO1xyXG4gICAgRm1vZGVSZWxhdGlvbi5iaW5kSW5zdGFuY2UodGhpcyk7XHJcbiAgICBGbW9kZUZpbGUuYmluZEluc3RhbmNlKHRoaXMpO1xyXG4gICAgRm1vZGVBQ0wuYmluZEluc3RhbmNlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGluaXRpYWxpemUoY29uZmlnOiBzdHJpbmcgfCBGbW9kZUluaXRPcHRpb25zKTogRm1vZGVQYXJzZSB7XHJcbiAgICBsZXQgaW5zdGFuY2U6IEZtb2RlUGFyc2U7XHJcbiAgICBcclxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyDnroDljZXliJ3lp4vljJYgLSDorr7nva7pu5jorqTlrp7kvotcclxuICAgICAgbGV0IGRldlNlcnZlclVybCA9IFwiaHR0cHM6Ly9kZXYuZm1vZGUuY24vcGFyc2VcIlxyXG4gICAgICBpZih0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIGxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHA6XCIpe1xyXG4gICAgICAgIGRldlNlcnZlclVybCA9IFwiaHR0cDovL2Rldi5mbW9kZS5jbjoxMzM3L3BhcnNlXCJcclxuICAgICAgfVxyXG4gICAgICBpbnN0YW5jZSA9IG5ldyBGbW9kZVBhcnNlKHtcclxuICAgICAgICBhcHBJZDogY29uZmlnLFxyXG4gICAgICAgIHNlcnZlclVSTDogZGV2U2VydmVyVXJsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9kZWZhdWx0SW5zdGFuY2UgPSBpbnN0YW5jZTtcclxuICAgICAgdGhpcy5faW5zdGFuY2VzWydkZWZhdWx0J10gPSBpbnN0YW5jZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOWkmumFjee9ruWIneWni+WMllxyXG4gICAgICBpbnN0YW5jZSA9IG5ldyBGbW9kZVBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY29uZmlnLmNvbmZpZykge1xyXG4gICAgICAgIC8vIOWmguaenOacieaMh+WummNvbmZpZ+WQjeensO+8jOWImeWtmOWCqOS4uuWRveWQjeWunuS+i1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlc1tjb25maWcuY29uZmlnXSA9IGluc3RhbmNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyDlpoLmnpzmsqHmnInmjIflrppjb25maWflkI3np7DvvIzmiJbogIVjb25maWflkI3np7DkuLonZGVmYXVsdCfvvIzliJnorr7kuLrpu5jorqTlrp7kvotcclxuICAgICAgaWYgKCFjb25maWcuY29uZmlnIHx8IGNvbmZpZy5jb25maWcgPT09ICdkZWZhdWx0Jykge1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRJbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3aXRoKGNvbmZpZ05hbWU6IHN0cmluZyk6IEZtb2RlUGFyc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlc1tjb25maWdOYW1lXSB8fCB0aGlzLl9kZWZhdWx0SW5zdGFuY2UhO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlcnZlclVSTCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5zZXJ2ZXJVUkw7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VydmVyVVJMKHVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5zZXJ2ZXJVUkwgPSB1cmw7XHJcbiAgfVxyXG5cclxuICBnZXQgYXBwSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXBwSWQ7XHJcbiAgfVxyXG59XHJcblxyXG4vLyDlhbzlrrnml6fniYjlhajlsYDnlKjms5VcclxuY29uc3QgZGVmYXVsdEV4cG9ydCA9IG5ldyBQcm94eShGbW9kZVBhcnNlLCB7XHJcbiAgYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSB7XHJcbiAgICByZXR1cm4gRm1vZGVQYXJzZS5pbml0aWFsaXplLmFwcGx5KHRhcmdldCwgYXJncyk7XHJcbiAgfSxcclxuICBnZXQodGFyZ2V0LCBwcm9wKSB7XHJcbiAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcclxuICAgICAgcmV0dXJuICh0YXJnZXQgYXMgYW55KVtwcm9wXTtcclxuICAgIH1cclxuICAgIHJldHVybiBGbW9kZVBhcnNlLndpdGgoJ2RlZmF1bHQnKVtwcm9wXTtcclxuICB9XHJcbn0pIGFzIHR5cGVvZiBGbW9kZVBhcnNlICYge1xyXG4gIE9iamVjdDogdHlwZW9mIEZtb2RlT2JqZWN0O1xyXG4gIFF1ZXJ5OiB0eXBlb2YgRm1vZGVRdWVyeTtcclxuICBVc2VyOiB0eXBlb2YgRm1vZGVVc2VyO1xyXG4gIEFDTDogdHlwZW9mIEZtb2RlQUNMO1xyXG4gIFJlbGF0aW9uOiB0eXBlb2YgRm1vZGVSZWxhdGlvbjtcclxuICBHZW9Qb2ludDogdHlwZW9mIEZtb2RlR2VvUG9pbnQ7XHJcbiAgRmlsZTogdHlwZW9mIEZtb2RlRmlsZTtcclxufTtcclxuXHJcbmV4cG9ydCB7IEZtb2RlUGFyc2UgYXMgZGVmYXVsdCwgZGVmYXVsdEV4cG9ydCBhcyBGbW9kZVBhcnNlIH07Il19
|
|
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/core/parse/fmode.parse.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{FmodeACL}from"./datatype/acl";import{FmodeFile}from"./datatype/file";import{FmodeGeoPoint}from"./datatype/geopoint";import{FmodeRelation}from"./datatype/relation";import{FmodeObject}from"./fmode.object";import{FmodeQuery}from"./fmode.query";import{FmodeUser}from"./fmode.user";import{FmodeCloud}from"./fmode.cloud";class FmodeParse{static{this._instances={}}static{this._defaultInstance=null}constructor(e){this.config=e,this.Object=FmodeObject,this.Query=FmodeQuery,this.User=FmodeUser,this.GeoPoint=FmodeGeoPoint,this.File=FmodeFile,this.ACL=FmodeACL,this.Relation=FmodeRelation,this.Cloud=FmodeCloud.getInstance(),FmodeObject.bindInstance(this),FmodeQuery.bindInstance(this),FmodeUser.bindInstance(this),FmodeGeoPoint.bindInstance(this),FmodeRelation.bindInstance(this),FmodeFile.bindInstance(this),FmodeACL.bindInstance(this),this.Cloud.bindInstance(this.config)}static initialize(e){let t;if("string"==typeof e){let o="http://dev.fmode.cn:1337/parse";"undefined"!=typeof location&&"https:"===location.protocol&&(o="https://dev.fmode.cn/parse"),t=new FmodeParse({appId:e,serverURL:o}),this._defaultInstance=t,this._instances.default=t}else t=new FmodeParse(e),e.config&&(this._instances[e.config]=t),e.config&&"default"!==e.config||(this._defaultInstance=t);return t}static with(e){let t=new FmodeParse({appId:"ncloudmaster",serverURL:"https://server.fmode.cn/parse"});return this._instances.nova=t,this._instances[e]||this._defaultInstance}get serverURL(){return this.config.serverURL}set serverURL(e){this.config.serverURL=e}get appId(){return this.config.appId}get sessionToken(){if(this.config.sessionToken)return this.config.sessionToken;const e=this.User.current();return e?.sessionToken}set sessionToken(e){this.config.sessionToken=e}}!function(e){e.Object=FmodeObject,e.Query=FmodeQuery,e.User=FmodeUser,e.File=FmodeFile,e.Relation=FmodeRelation,e.ACL=FmodeACL,e.GeoPoint=FmodeGeoPoint,e.Cloud=FmodeCloud.getInstance()}(FmodeParse||(FmodeParse={}));const defaultExport=new Proxy(FmodeParse,{apply:(e,t,o)=>FmodeParse.initialize.apply(e,o),get:(e,t)=>t in e?e[t]:t in FmodeParse?FmodeParse[t]:FmodeParse.with("default")[t]});export{FmodeParse as default,defaultExport as FmodeParse};
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLnBhcnNlLm1qcw==`
|
|
10
|
+
|