fmode-ng 0.0.113 → 0.0.115

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +37 -37
  3. package/esm2022/fmode-ng.mjs +10 -5
  4. package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
  5. package/esm2022/lib/aigc/agent/index.mjs +10 -3
  6. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  10. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
  12. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
  13. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
  14. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  15. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  16. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
  17. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
  18. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  19. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
  20. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  21. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  22. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  23. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
  24. package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
  25. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
  26. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
  27. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
  28. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
  29. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
  30. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
  31. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  32. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  33. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
  35. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  36. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  37. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
  38. package/esm2022/lib/aigc/index.mjs +10 -14
  39. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  40. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
  41. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
  42. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  43. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  44. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  45. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  46. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  47. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
  48. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
  49. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
  50. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
  51. package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
  52. package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
  53. package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
  54. package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
  55. package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
  56. package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
  57. package/esm2022/lib/aigc/story/index.mjs +10 -6
  58. package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
  59. package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
  60. package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
  61. package/esm2022/lib/aigc/story/story.service.mjs +10 -35
  62. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
  63. package/esm2022/lib/aigc/voice/index.mjs +10 -7
  64. package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
  65. package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
  66. package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
  67. package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
  68. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  69. package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
  70. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  71. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
  72. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
  73. package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
  74. package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
  75. package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
  76. package/esm2022/lib/code/index.mjs +10 -2
  77. package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
  78. package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
  79. package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
  80. package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
  81. package/esm2022/lib/core/agent/chat/index.mjs +10 -4
  82. package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
  83. package/esm2022/lib/core/agent/index.mjs +10 -6
  84. package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
  85. package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
  86. package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
  87. package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
  88. package/esm2022/lib/core/agent/story/index.mjs +10 -2
  89. package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
  90. package/esm2022/lib/core/agent/task/index.mjs +10 -2
  91. package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
  92. package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
  93. package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
  94. package/esm2022/lib/core/index.mjs +10 -4
  95. package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
  96. package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
  97. package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
  98. package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
  99. package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
  100. package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
  101. package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
  102. package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
  103. package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
  104. package/esm2022/lib/core/parse/index.mjs +10 -5
  105. package/esm2022/lib/core/parse/types.mjs +10 -2
  106. package/esm2022/lib/core/voice/index.mjs +10 -3
  107. package/esm2022/lib/core/voice/tts/index.mjs +10 -2
  108. package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
  109. package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
  110. package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
  111. package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
  112. package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
  113. package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
  114. package/esm2022/lib/icon/filetype/index.mjs +10 -12
  115. package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
  116. package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
  117. package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
  118. package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
  119. package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
  120. package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
  121. package/esm2022/lib/icon/index.mjs +10 -2
  122. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
  123. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  124. package/esm2022/lib/map/index.mjs +10 -4
  125. package/esm2022/lib/map/map.module.mjs +10 -61
  126. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
  127. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
  128. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
  129. package/esm2022/lib/nova-cloud/index.mjs +10 -3
  130. package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
  131. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
  132. package/esm2022/lib/payment/index.mjs +10 -2
  133. package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
  134. package/esm2022/lib/payment/payment.service.mjs +10 -202
  135. package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
  136. package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
  137. package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
  138. package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
  139. package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
  140. package/esm2022/lib/person/index.mjs +10 -5
  141. package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
  142. package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
  143. package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
  144. package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
  145. package/esm2022/lib/person/person.service.mjs +8 -193
  146. package/esm2022/lib/platform/cross.service.mjs +10 -62
  147. package/esm2022/lib/platform/index.mjs +10 -2
  148. package/esm2022/lib/social/index.mjs +10 -2
  149. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
  150. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  151. package/esm2022/lib/storage/index.mjs +10 -5
  152. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
  153. package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
  154. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
  155. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  156. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
  157. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  158. package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
  159. package/esm2022/lib/storage/storage.module.mjs +10 -42
  160. package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
  161. package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
  162. package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
  163. package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
  164. package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
  165. package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
  166. package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
  167. package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
  168. package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
  169. package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
  170. package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
  171. package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
  172. package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
  173. package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
  174. package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
  175. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
  176. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
  177. package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
  178. package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
  179. package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
  180. package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
  181. package/esm2022/lib/text/index.mjs +10 -4
  182. package/esm2022/lib/user/account/account.service.mjs +10 -222
  183. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  184. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
  185. package/esm2022/lib/user/index.mjs +10 -17
  186. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  187. package/esm2022/lib/user/login/auth.service.mjs +8 -433
  188. package/esm2022/lib/user/login/login.component.mjs +10 -916
  189. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
  190. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  191. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  192. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
  193. package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
  194. package/esm2022/lib/user/profile/profile.module.mjs +10 -54
  195. package/esm2022/lib/user/staff/index.mjs +10 -4
  196. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  197. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  198. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  199. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  200. package/esm2022/lib/user/user.module.mjs +10 -102
  201. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  202. package/esm2022/lib/video/index.mjs +10 -2
  203. package/esm2022/public-api.mjs +10 -21
  204. package/fesm2022/fmode-ng.mjs +7 -19788
  205. package/fesm2022/fmode-ng.mjs.map +1 -1
  206. package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
  207. package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
  208. package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
  209. package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
  210. package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
  211. package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
  212. package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
  213. package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
  214. package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
  215. package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
  216. package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
  217. package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
  218. package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
  219. package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
  220. package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
  221. package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
  222. package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
  223. package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
  224. package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
  225. package/lib/aigc/story/story.service.d.ts +3 -2
  226. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  227. package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
  228. package/lib/core/agent/story/agent.story.d.ts +8 -8
  229. package/lib/core/parse/datatype/geopoint.d.ts +5 -1
  230. package/lib/core/parse/fmode.cloud.d.ts +32 -0
  231. package/lib/core/parse/fmode.object.d.ts +2 -2
  232. package/lib/core/parse/fmode.parse.d.ts +15 -9
  233. package/lib/core/parse/fmode.query.d.ts +41 -2
  234. package/lib/core/parse/fmode.user.d.ts +1 -0
  235. package/lib/core/parse/index.d.ts +1 -0
  236. package/lib/core/parse/types.d.ts +2 -0
  237. package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
  238. package/lib/payment/payment/payment.component.d.ts +3 -3
  239. package/lib/payment/payment.service.d.ts +4 -4
  240. package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
  241. package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
  242. package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
  243. package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
  244. package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
  245. package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
  246. package/lib/person/person-detail/person-detail.component.d.ts +4 -4
  247. package/lib/person/person.service.d.ts +7 -7
  248. package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
  249. package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
  250. package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
  251. package/lib/text/fm-article-editor/article.service.d.ts +12 -12
  252. package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
  253. package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
  254. package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
  255. package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
  256. package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
  257. package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
  258. package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
  259. package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
  260. package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
  261. package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
  262. package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
  263. package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
  264. package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
  265. package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
  266. package/lib/user/account/account.service.d.ts +2 -2
  267. package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
  268. package/lib/user/login/auth.service.d.ts +5 -5
  269. package/lib/user/login/login.component.d.ts +3 -3
  270. package/lib/user/profile/auth-profile.service.d.ts +8 -8
  271. package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
  272. package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
  273. package/lib/user/staff/staff.service.d.ts +3 -3
  274. package/lib/user/user-name.pipe.d.ts +2 -2
  275. package/package.json +12 -18
@@ -1,502 +1,10 @@
1
- import { FmodeObject } from './fmode.object';
2
- export class FmodeQuery {
3
- static { this._instance = null; }
4
- static bindInstance(instance) {
5
- this._instance = instance;
6
- }
7
- static get instance() {
8
- if (!this._instance)
9
- throw new Error('FmodeParse not initialized');
10
- return this._instance;
11
- }
12
- constructor(className) {
13
- this.where = {};
14
- this._include = [];
15
- this._select = [];
16
- this._count = false;
17
- // 静态方法
18
- this.or = function (...queries) {
19
- if (queries.length === 0)
20
- throw new Error('At least one query required');
21
- const className = queries[0].className;
22
- if (queries.some(q => q.className !== className)) {
23
- throw new Error('All queries must be for the same class');
24
- }
25
- const combined = new FmodeQuery(className);
26
- combined.where = { $or: queries.map(q => q.where) };
27
- return combined;
28
- };
29
- this.and = function (...queries) {
30
- if (queries.length === 0)
31
- throw new Error('At least one query required');
32
- const className = queries[0].className;
33
- if (queries.some(q => q.className !== className)) {
34
- throw new Error('All queries must be for the same class');
35
- }
36
- const combined = new FmodeQuery(className);
37
- combined.where = { $and: queries.map(q => q.where) };
38
- return combined;
39
- };
40
- this.className = typeof className === 'string' ? className : className.prototype.constructor.name;
41
- }
42
- // MARK: - 条件方法
43
- equalTo(key, value) {
44
- this.where[key] = value;
45
- return this;
46
- }
47
- notEqualTo(key, value) {
48
- this.where[key] = { $ne: value };
49
- return this;
50
- }
51
- lessThan(key, value) {
52
- this.where[key] = { $lt: value };
53
- return this;
54
- }
55
- lessThanOrEqualTo(key, value) {
56
- this.where[key] = { $lte: value };
57
- return this;
58
- }
59
- greaterThan(key, value) {
60
- this.where[key] = { $gt: value };
61
- return this;
62
- }
63
- greaterThanOrEqualTo(key, value) {
64
- this.where[key] = { $gte: value };
65
- return this;
66
- }
67
- containedIn(key, values) {
68
- this.where[key] = { $in: values };
69
- return this;
70
- }
71
- notContainedIn(key, values) {
72
- this.where[key] = { $nin: values };
73
- return this;
74
- }
75
- exists(key) {
76
- this.where[key] = { $exists: true };
77
- return this;
78
- }
79
- doesNotExist(key) {
80
- this.where[key] = { $exists: false };
81
- return this;
82
- }
83
- containsAll(key, values) {
84
- this.where[key] = { $all: values };
85
- return this;
86
- }
87
- contains(key, substring) {
88
- this.where[key] = { $regex: substring, $options: 'i' };
89
- return this;
90
- }
91
- startsWith(key, prefix) {
92
- this.where[key] = { $regex: `^${prefix}`, $options: 'i' };
93
- return this;
94
- }
95
- endsWith(key, suffix) {
96
- this.where[key] = { $regex: `${suffix}$`, $options: 'i' };
97
- return this;
98
- }
99
- matches(key, regex, modifiers) {
100
- this.where[key] = { $regex: regex.source, $options: modifiers };
101
- return this;
102
- }
103
- matchesQuery(key, query) {
104
- this.where[key] = { $inQuery: { className: query.className, where: query.where } };
105
- return this;
106
- }
107
- doesNotMatchQuery(key, query) {
108
- this.where[key] = { $notInQuery: { className: query.className, where: query.where } };
109
- return this;
110
- }
111
- matchesKeyInQuery(key, queryKey, query) {
112
- this.where[key] = { $select: { key: queryKey, query: { className: query.className, where: query.where } } };
113
- return this;
114
- }
115
- doesNotMatchKeyInQuery(key, queryKey, query) {
116
- this.where[key] = { $dontSelect: { key: queryKey, query: { className: query.className, where: query.where } } };
117
- return this;
118
- }
119
- near(key, point) {
120
- this.where[key] = { $nearSphere: point };
121
- return this;
122
- }
123
- withinRadians(key, point, distance) {
124
- this.where[key] = { $nearSphere: point, $maxDistance: distance };
125
- return this;
126
- }
127
- withinMiles(key, point, distance) {
128
- return this.withinRadians(key, point, distance / 3959);
129
- }
130
- withinKilometers(key, point, distance) {
131
- return this.withinRadians(key, point, distance / 6371);
132
- }
133
- withinGeoBox(key, southwest, northeast) {
134
- this.where[key] = { $within: { $box: [southwest, northeast] } };
135
- return this;
136
- }
137
- polygonContains(key, points) {
138
- this.where[key] = { $geoWithin: { $polygon: points } };
139
- return this;
140
- }
141
- // Add these methods to the FmodeQuery class
142
- // MARK: - Relation Methods
1
+
143
2
  /**
144
- * Adds a relation constraint to the query
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.query.mjs
145
7
  */
146
- relatedTo(parent, key) {
147
- if (!parent.id) {
148
- throw new Error('Parent object must have an ID');
149
- }
150
- this.where['$relatedTo'] = {
151
- object: parent.toPointer(),
152
- key: key
153
- };
154
- return this;
155
- }
156
- /**
157
- * Adds a relation constraint for a specific object
158
- */
159
- relatedToObject(parent, relationKey) {
160
- if (!parent.id) {
161
- throw new Error('Parent object must have an ID');
162
- }
163
- this.where['$relatedTo'] = {
164
- object: parent.toPointer(),
165
- key: relationKey
166
- };
167
- return this;
168
- }
169
- /**
170
- * Adds a relation constraint for a specific query
171
- */
172
- relatedToQuery(parentClass, relationKey, query) {
173
- this.where['$relatedTo'] = {
174
- key: relationKey,
175
- query: {
176
- className: parentClass,
177
- where: query.where
178
- }
179
- };
180
- return this;
181
- }
182
- // MARK: - Pointer Query Helpers
183
- /**
184
- * Matches objects that have a pointer to the given object
185
- */
186
- matchesPointer(key, object) {
187
- if (!object.id) {
188
- throw new Error('Object must have an ID');
189
- }
190
- this.where[key] = object.toPointer();
191
- return this;
192
- }
193
- /**
194
- * Matches objects that have a pointer to any of the given objects
195
- */
196
- matchesAnyPointer(key, objects) {
197
- const pointers = objects.map(obj => {
198
- if (!obj.id)
199
- throw new Error('All objects must have IDs');
200
- return obj.toPointer();
201
- });
202
- this.where[key] = { '$in': pointers };
203
- return this;
204
- }
205
- // MARK: - Relation Query Execution
206
- /**
207
- * Finds objects in a relation (alternative to using relatedTo)
208
- */
209
- static async findRelation(parent, relationKey, options) {
210
- if (!parent.id) {
211
- throw new Error('Parent object must have an ID');
212
- }
213
- const query = new FmodeQuery(parent.className)
214
- .relatedTo(parent, relationKey);
215
- return query.find(options);
216
- }
217
- /**
218
- * Counts objects in a relation
219
- */
220
- static async countRelation(parent, relationKey, options) {
221
- if (!parent.id) {
222
- throw new Error('Parent object must have an ID');
223
- }
224
- const query = new FmodeQuery(parent.className)
225
- .relatedTo(parent, relationKey);
226
- return query.count(options);
227
- }
228
- // MARK: - Relation Management
229
- /**
230
- * Adds objects to a relation (static helper)
231
- */
232
- static async addToRelation(parent, relationKey, objects, options) {
233
- if (!parent.id) {
234
- throw new Error('Parent object must have an ID');
235
- }
236
- if (objects.some(obj => !obj.id)) {
237
- throw new Error('All objects to add must have IDs');
238
- }
239
- const pointers = objects.map(obj => obj.toPointer());
240
- const url = `${FmodeQuery.instance.serverURL}/classes/${parent.className}/${parent.id}`;
241
- const headers = {
242
- 'Content-Type': 'application/json',
243
- 'X-Parse-Application-Id': FmodeQuery.instance.appId
244
- };
245
- if (options?.useMasterKey && FmodeQuery.instance.config.masterKey) {
246
- headers['X-Parse-Master-Key'] = FmodeQuery.instance.config.masterKey;
247
- }
248
- const response = await fetch(url, {
249
- method: 'PUT',
250
- headers,
251
- body: JSON.stringify({
252
- [relationKey]: {
253
- '__op': 'AddRelation',
254
- 'objects': pointers
255
- }
256
- })
257
- });
258
- if (!response.ok) {
259
- const result = await response.json();
260
- throw new Error(result.error || 'Failed to add to relation');
261
- }
262
- }
263
- /**
264
- * Removes objects from a relation (static helper)
265
- */
266
- static async removeFromRelation(parent, relationKey, objects, options) {
267
- if (!parent.id) {
268
- throw new Error('Parent object must have an ID');
269
- }
270
- if (objects.some(obj => !obj.id)) {
271
- throw new Error('All objects to remove must have IDs');
272
- }
273
- const pointers = objects.map(obj => obj.toPointer());
274
- const url = `${FmodeQuery.instance.serverURL}/classes/${parent.className}/${parent.id}`;
275
- const headers = {
276
- 'Content-Type': 'application/json',
277
- 'X-Parse-Application-Id': FmodeQuery.instance.appId
278
- };
279
- if (options?.useMasterKey && FmodeQuery.instance.config.masterKey) {
280
- headers['X-Parse-Master-Key'] = FmodeQuery.instance.config.masterKey;
281
- }
282
- const response = await fetch(url, {
283
- method: 'PUT',
284
- headers,
285
- body: JSON.stringify({
286
- [relationKey]: {
287
- '__op': 'RemoveRelation',
288
- 'objects': pointers
289
- }
290
- })
291
- });
292
- if (!response.ok) {
293
- const result = await response.json();
294
- throw new Error(result.error || 'Failed to remove from relation');
295
- }
296
- }
297
- // MARK: - 查询选项
298
- include(...keys) {
299
- this._include = keys;
300
- return this;
301
- }
302
- select(...keys) {
303
- this._select = keys;
304
- return this;
305
- }
306
- limit(count) {
307
- this._limit = count;
308
- return this;
309
- }
310
- skip(count) {
311
- this._skip = count;
312
- return this;
313
- }
314
- ascending(...keys) {
315
- this._order = keys.map(key => key.startsWith('-') ? key.substring(1) : key);
316
- return this;
317
- }
318
- descending(...keys) {
319
- this._order = keys.map(key => key.startsWith('-') ? key.substring(1) : `-${key}`);
320
- return this;
321
- }
322
- addAscending(...keys) {
323
- if (!this._order)
324
- this._order = [];
325
- this._order.push(...keys);
326
- return this;
327
- }
328
- addDescending(...keys) {
329
- if (!this._order)
330
- this._order = [];
331
- this._order.push(...keys.map(key => `-${key}`));
332
- return this;
333
- }
334
- readPreference(pref) {
335
- this._readPreference = pref;
336
- return this;
337
- }
338
- includeReadPreference(pref) {
339
- this._includeReadPreference = pref;
340
- return this;
341
- }
342
- subqueryReadPreference(pref) {
343
- this._subqueryReadPreference = pref;
344
- return this;
345
- }
346
- hint(hint) {
347
- this.hint = hint;
348
- return this;
349
- }
350
- maxTimeMS(ms) {
351
- this._maxTimeMS = ms;
352
- return this;
353
- }
354
- explain(explain = true) {
355
- this._explain = explain;
356
- return this;
357
- }
358
- withCount(withCount = true) {
359
- this._count = withCount;
360
- return this;
361
- }
362
- // MARK: - 查询执行
363
- async find(options) {
364
- const url = new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}`);
365
- const params = this._buildQueryParams();
366
- Object.entries(params).forEach(([key, value]) => {
367
- if (value !== undefined) {
368
- url.searchParams.set(key, typeof value === 'string' ? value : JSON.stringify(value));
369
- }
370
- });
371
- const headers = {
372
- 'X-Parse-Application-Id': FmodeQuery.instance.appId
373
- };
374
- if (options?.useMasterKey && FmodeQuery.instance.config.masterKey) {
375
- headers['X-Parse-Master-Key'] = FmodeQuery.instance.config.masterKey;
376
- }
377
- if (this._sessionToken) {
378
- headers['X-Parse-Session-Token'] = this._sessionToken;
379
- }
380
- const response = await fetch(url.toString(), { headers });
381
- const result = await response.json();
382
- if (result.error)
383
- throw new Error(result.error);
384
- return result.results.map((data) => {
385
- const obj = new FmodeObject(this.className);
386
- obj.set(data);
387
- obj.id = data.objectId;
388
- // console.log("data",data)
389
- obj.createdAt = new Date(data.createdAt);
390
- obj.updatedAt = new Date(data.updatedAt || data.createdAt);
391
- return obj;
392
- });
393
- }
394
- async first(options) {
395
- this.limit(1);
396
- const results = await this.find(options);
397
- return results[0] || null;
398
- }
399
- async get(objectId, options) {
400
- const url = new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}/${objectId}`);
401
- if (this.include.length > 0) {
402
- url.searchParams.set('include', this._include.join(','));
403
- }
404
- const headers = {
405
- 'X-Parse-Application-Id': FmodeQuery.instance.appId
406
- };
407
- if (options?.useMasterKey && FmodeQuery.instance.config.masterKey) {
408
- headers['X-Parse-Master-Key'] = FmodeQuery.instance.config.masterKey;
409
- }
410
- if (this._sessionToken) {
411
- headers['X-Parse-Session-Token'] = this._sessionToken;
412
- }
413
- const response = await fetch(url.toString(), { headers });
414
- const result = await response.json();
415
- console.log(url, result);
416
- if (result.error)
417
- throw new Error(result.error);
418
- const obj = new FmodeObject(this.className);
419
- obj.set(result);
420
- obj.id = result.objectId;
421
- obj.createdAt = new Date(result.createdAt);
422
- obj.updatedAt = new Date(result.updatedAt || result.createdAt);
423
- return obj;
424
- }
425
- async count(options) {
426
- this.withCount();
427
- const url = new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}`);
428
- url.searchParams.set('count', '1');
429
- url.searchParams.set('limit', '0');
430
- if (Object.keys(this.where).length > 0) {
431
- url.searchParams.set('where', JSON.stringify(this.where));
432
- }
433
- const headers = {
434
- 'X-Parse-Application-Id': FmodeQuery.instance.appId
435
- };
436
- if (options?.useMasterKey && FmodeQuery.instance.config.masterKey) {
437
- headers['X-Parse-Master-Key'] = FmodeQuery.instance.config.masterKey;
438
- }
439
- const response = await fetch(url.toString(), { headers });
440
- const result = await response.json();
441
- if (result.error)
442
- throw new Error(result.error);
443
- return result.count || 0;
444
- }
445
- // MARK: - 辅助方法
446
- _buildQueryParams() {
447
- const params = {};
448
- if (Object.keys(this.where).length > 0) {
449
- params.where = this.where;
450
- }
451
- if (this._include.length > 0) {
452
- params.include = this._include.join(',');
453
- }
454
- if (this._select.length > 0) {
455
- params.keys = this._select.join(',');
456
- }
457
- if (this._limit !== undefined) {
458
- params.limit = this._limit;
459
- }
460
- if (this._skip !== undefined) {
461
- params.skip = this._skip;
462
- }
463
- if (this._order) {
464
- params.order = this._order.join(',');
465
- }
466
- if (this._count) {
467
- params.count = 1;
468
- }
469
- if (this._explain) {
470
- params.explain = true;
471
- }
472
- if (this._hint) {
473
- params.hint = this._hint;
474
- }
475
- if (this._maxTimeMS) {
476
- params.maxTimeMS = this._maxTimeMS;
477
- }
478
- return params;
479
- }
480
- // MARK: - 订阅/实时查询 (简化版)
481
- subscribe() {
482
- // 简化的实时查询实现
483
- const eventTarget = new EventTarget();
484
- // 实际实现应该使用 WebSocket 或其他实时通信方式
485
- const checkForUpdates = async () => {
486
- try {
487
- const results = await this.find();
488
- eventTarget.dispatchEvent(new CustomEvent('update', { detail: results }));
489
- }
490
- catch (error) {
491
- eventTarget.dispatchEvent(new CustomEvent('error', { detail: error }));
492
- }
493
- };
494
- const intervalId = setInterval(checkForUpdates, 5000);
495
- // 添加取消订阅方法
496
- eventTarget.unsubscribe = () => {
497
- clearInterval(intervalId);
498
- };
499
- return eventTarget;
500
- }
501
- }
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvcGFyc2UvZm1vZGUucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBd0I3QyxNQUFNLE9BQU8sVUFBVTthQUNKLGNBQVMsR0FBZSxJQUFJLEFBQW5CLENBQW9CO0lBRTVDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBYTtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRU8sTUFBTSxLQUFLLFFBQVE7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBc0JELFlBQVksU0FBZ0M7UUFuQjVDLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBQzVCLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUl2QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBMGxCZixPQUFPO1FBQ1AsT0FBRSxHQUFHLFVBQWdDLEdBQUcsT0FBd0I7WUFDOUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFD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QUFJLEVBQUUsQ0FBQztnQkFDbEMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNiLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRSxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0RCxXQUFXO1FBQ1YsV0FBbUIsQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3BDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm1vZGVPYmplY3QgfSBmcm9tICcuL2Ztb2RlLm9iamVjdCc7XHJcblxyXG50eXBlIFF1ZXJ5Q29uZGl0aW9ucyA9IHtcclxuICAgICRsdD86IGFueTtcclxuICAgICRsdGU/OiBhbnk7XHJcbiAgICAkZ3Q/OiBhbnk7XHJcbiAgICAkZ3RlPzogYW55O1xyXG4gICAgJG5lPzogYW55O1xyXG4gICAgJGluPzogYW55W107XHJcbiAgICAkbmluPzogYW55W107XHJcbiAgICAkZXhpc3RzPzogYm9vbGVhbjtcclxuICAgICRzZWxlY3Q/OiBhbnk7XHJcbiAgICAkZG9udFNlbGVjdD86IGFueTtcclxuICAgICRhbGw/OiBhbnlbXTtcclxuICAgICRyZWdleD86IFJlZ0V4cCB8IHN0cmluZztcclxuICAgICR0ZXh0PzogeyAkc2VhcmNoOiBzdHJpbmc7ICRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjsgJGRpYWNyaXRpY1NlbnNpdGl2ZT86IGJvb2xlYW4gfTtcclxuICAgICRuZWFyU3BoZXJlPzogYW55O1xyXG4gICAgJHdpdGhpbj86IGFueTtcclxuICAgICRtYXhEaXN0YW5jZT86IG51bWJlcjtcclxuICAgICRvcj86IFF1ZXJ5Q29uZGl0aW9uc1tdO1xyXG4gICAgJGFuZD86IFF1ZXJ5Q29uZGl0aW9uc1tdO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlUXVlcnk8VCBleHRlbmRzIEZtb2RlT2JqZWN0ID0gRm1vZGVPYmplY3Q+IHtcclxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogYW55IHwgbnVsbCA9IG51bGw7XHJcbiAgICBcclxuICAgIHN0YXRpYyBiaW5kSW5zdGFuY2UoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdGbW9kZVBhcnNlIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzc05hbWU6IHN0cmluZztcclxuICAgIHdoZXJlOiBRdWVyeUNvbmRpdGlvbnMgPSB7fTtcclxuICAgIF9pbmNsdWRlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgX3NlbGVjdDogc3RyaW5nW10gPSBbXTtcclxuICAgIF9saW1pdD86IG51bWJlcjtcclxuICAgIF9za2lwPzogbnVtYmVyO1xyXG4gICAgX29yZGVyPzogc3RyaW5nW107XHJcbiAgICBfY291bnQgPSBmYWxzZTtcclxuICAgIF9rZXlzPzogc3RyaW5nO1xyXG4gICAgX3JlYWRQcmVmZXJlbmNlPzogc3RyaW5nO1xyXG4gICAgX2luY2x1ZGVSZWFkUHJlZmVyZW5jZT86IHN0cmluZztcclxuICAgIF9zdWJxdWVyeVJlYWRQcmVmZXJlbmNlPzogc3RyaW5nO1xyXG4gICAgX2V4cGxhaW4/OiBib29sZWFuO1xyXG4gICAgX2hpbnQ/OiBhbnk7XHJcbiAgICBfbWF4VGltZU1TPzogbnVtYmVyO1xyXG4gICAgX3RyYWNpbmc/OiBib29sZWFuO1xyXG4gICAgX2xvY2FsRGF0YXN0b3JlPzogYm9vbGVhbjtcclxuICAgIF9zZXNzaW9uVG9rZW4/OiBzdHJpbmc7XHJcbiAgICBfY29udGV4dD86IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZyB8IHsgbmV3KCk6IFQgfSkge1xyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdHlwZW9mIGNsYXNzTmFtZSA9PT0gJ3N0cmluZycgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTUFSSzogLSDmnaHku7bmlrnms5VcclxuXHJcbiAgICBlcXVhbFRvKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbm90RXF1YWxUbyhrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJG5lOiB2YWx1ZSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGxlc3NUaGFuKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkbHQ6IHZhbHVlIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGVzc1RoYW5PckVxdWFsVG8oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRsdGU6IHZhbHVlIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JlYXRlclRoYW4oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRndDogdmFsdWUgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBncmVhdGVyVGhhbk9yRXF1YWxUbyhrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJGd0ZTogdmFsdWUgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjb250YWluZWRJbihrZXk6IHN0cmluZywgdmFsdWVzOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJGluOiB2YWx1ZXMgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBub3RDb250YWluZWRJbihrZXk6IHN0cmluZywgdmFsdWVzOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJG5pbjogdmFsdWVzIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RzKGtleTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkZXhpc3RzOiB0cnVlIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZG9lc05vdEV4aXN0KGtleTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkZXhpc3RzOiBmYWxzZSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnRhaW5zQWxsKGtleTogc3RyaW5nLCB2YWx1ZXM6IGFueVtdKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkYWxsOiB2YWx1ZXMgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjb250YWlucyhrZXk6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRyZWdleDogc3Vic3RyaW5nLCAkb3B0aW9uczogJ2knIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRzV2l0aChrZXk6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRyZWdleDogYF4ke3ByZWZpeH1gLCAkb3B0aW9uczogJ2knIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZW5kc1dpdGgoa2V5OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkcmVnZXg6IGAke3N1ZmZpeH0kYCwgJG9wdGlvbnM6ICdpJyB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGNoZXMoa2V5OiBzdHJpbmcsIHJlZ2V4OiBSZWdFeHAsIG1vZGlmaWVycz86IHN0cmluZyk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJHJlZ2V4OiByZWdleC5zb3VyY2UsICRvcHRpb25zOiBtb2RpZmllcnMgfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBtYXRjaGVzUXVlcnkoa2V5OiBzdHJpbmcsIHF1ZXJ5OiBGbW9kZVF1ZXJ5KTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkaW5RdWVyeTogeyBjbGFzc05hbWU6IHF1ZXJ5LmNsYXNzTmFtZSwgd2hlcmU6IHF1ZXJ5LndoZXJlIH0gfTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBkb2VzTm90TWF0Y2hRdWVyeShrZXk6IHN0cmluZywgcXVlcnk6IEZtb2RlUXVlcnkpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRub3RJblF1ZXJ5OiB7IGNsYXNzTmFtZTogcXVlcnkuY2xhc3NOYW1lLCB3aGVyZTogcXVlcnkud2hlcmUgfSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGNoZXNLZXlJblF1ZXJ5KGtleTogc3RyaW5nLCBxdWVyeUtleTogc3RyaW5nLCBxdWVyeTogRm1vZGVRdWVyeSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMud2hlcmVba2V5XSA9IHsgJHNlbGVjdDogeyBrZXk6IHF1ZXJ5S2V5LCBxdWVyeTogeyBjbGFzc05hbWU6IHF1ZXJ5LmNsYXNzTmFtZSwgd2hlcmU6IHF1ZXJ5LndoZXJlIH0gfSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGRvZXNOb3RNYXRjaEtleUluUXVlcnkoa2V5OiBzdHJpbmcsIHF1ZXJ5S2V5OiBzdHJpbmcsIHF1ZXJ5OiBGbW9kZVF1ZXJ5KTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy53aGVyZVtrZXldID0geyAkZG9udFNlbGVjdDogeyBrZXk6IHF1ZXJ5S2V5LCBxdWVyeTogeyBjbGFzc05hbWU6IHF1ZXJ5LmNsYXNzTmFtZSwgd2hlcmU6IHF1ZXJ5LndoZXJlIH0gfSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG5lYXIoa2V5OiBzdHJpbmcsIHBvaW50OiB7IGxhdGl0dWRlOiBudW1iZXI7IGxvbmdpdHVkZTogbnVtYmVyIH0pOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRuZWFyU3BoZXJlOiBwb2ludCB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhpblJhZGlhbnMoa2V5OiBzdHJpbmcsIHBvaW50OiB7IGxhdGl0dWRlOiBudW1iZXI7IGxvbmdpdHVkZTogbnVtYmVyIH0sIGRpc3RhbmNlOiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRuZWFyU3BoZXJlOiBwb2ludCwgJG1heERpc3RhbmNlOiBkaXN0YW5jZSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhpbk1pbGVzKGtleTogc3RyaW5nLCBwb2ludDogeyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlciB9LCBkaXN0YW5jZTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aGluUmFkaWFucyhrZXksIHBvaW50LCBkaXN0YW5jZSAvIDM5NTkpO1xyXG4gICAgfVxyXG5cclxuICAgIHdpdGhpbktpbG9tZXRlcnMoa2V5OiBzdHJpbmcsIHBvaW50OiB7IGxhdGl0dWRlOiBudW1iZXI7IGxvbmdpdHVkZTogbnVtYmVyIH0sIGRpc3RhbmNlOiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXRoaW5SYWRpYW5zKGtleSwgcG9pbnQsIGRpc3RhbmNlIC8gNjM3MSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aGluR2VvQm94KGtleTogc3RyaW5nLCBzb3V0aHdlc3Q6IHsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfSwgbm9ydGhlYXN0OiB7IGxhdGl0dWRlOiBudW1iZXI7IGxvbmdpdHVkZTogbnVtYmVyIH0pOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICR3aXRoaW46IHsgJGJveDogW3NvdXRod2VzdCwgbm9ydGhlYXN0XSB9IH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcG9seWdvbkNvbnRhaW5zKGtleTogc3RyaW5nLCBwb2ludHM6IEFycmF5PHsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfT4pOiB0aGlzIHtcclxuICAgICAgICB0aGlzLndoZXJlW2tleV0gPSB7ICRnZW9XaXRoaW46IHsgJHBvbHlnb246IHBvaW50cyB9IH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICAvLyBBZGQgdGhlc2UgbWV0aG9kcyB0byB0aGUgRm1vZGVRdWVyeSBjbGFzc1xyXG5cclxuLy8gTUFSSzogLSBSZWxhdGlvbiBNZXRob2RzXHJcblxyXG4vKipcclxuICogQWRkcyBhIHJlbGF0aW9uIGNvbnN0cmFpbnQgdG8gdGhlIHF1ZXJ5XHJcbiAqL1xyXG5yZWxhdGVkVG8ocGFyZW50OiBGbW9kZU9iamVjdCwga2V5OiBzdHJpbmcpOiB0aGlzIHtcclxuICAgIGlmICghcGFyZW50LmlkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgb2JqZWN0IG11c3QgaGF2ZSBhbiBJRCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aGVyZVsnJHJlbGF0ZWRUbyddID0ge1xyXG4gICAgICAgIG9iamVjdDogcGFyZW50LnRvUG9pbnRlcigpLFxyXG4gICAgICAgIGtleToga2V5XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgcmVsYXRpb24gY29uc3RyYWludCBmb3IgYSBzcGVjaWZpYyBvYmplY3RcclxuICovXHJcbnJlbGF0ZWRUb09iamVjdChwYXJlbnQ6IEZtb2RlT2JqZWN0LCByZWxhdGlvbktleTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICBpZiAoIXBhcmVudC5pZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IG9iamVjdCBtdXN0IGhhdmUgYW4gSUQnKTtcclxuICAgIH1cclxuICAgIHRoaXMud2hlcmVbJyRyZWxhdGVkVG8nXSA9IHtcclxuICAgICAgICBvYmplY3Q6IHBhcmVudC50b1BvaW50ZXIoKSxcclxuICAgICAgICBrZXk6IHJlbGF0aW9uS2V5XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIGEgcmVsYXRpb24gY29uc3RyYWludCBmb3IgYSBzcGVjaWZpYyBxdWVyeVxyXG4gKi9cclxucmVsYXRlZFRvUXVlcnkocGFyZW50Q2xhc3M6IHN0cmluZywgcmVsYXRpb25LZXk6IHN0cmluZywgcXVlcnk6IEZtb2RlUXVlcnkpOiB0aGlzIHtcclxuICAgIHRoaXMud2hlcmVbJyRyZWxhdGVkVG8nXSA9IHtcclxuICAgICAgICBrZXk6IHJlbGF0aW9uS2V5LFxyXG4gICAgICAgIHF1ZXJ5OiB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogcGFyZW50Q2xhc3MsXHJcbiAgICAgICAgICAgIHdoZXJlOiBxdWVyeS53aGVyZVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcztcclxufVxyXG5cclxuLy8gTUFSSzogLSBQb2ludGVyIFF1ZXJ5IEhlbHBlcnNcclxuXHJcbi8qKlxyXG4gKiBNYXRjaGVzIG9iamVjdHMgdGhhdCBoYXZlIGEgcG9pbnRlciB0byB0aGUgZ2l2ZW4gb2JqZWN0XHJcbiAqL1xyXG5tYXRjaGVzUG9pbnRlcihrZXk6IHN0cmluZywgb2JqZWN0OiBGbW9kZU9iamVjdCk6IHRoaXMge1xyXG4gICAgaWYgKCFvYmplY3QuaWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCBtdXN0IGhhdmUgYW4gSUQnKTtcclxuICAgIH1cclxuICAgIHRoaXMud2hlcmVba2V5XSA9IG9iamVjdC50b1BvaW50ZXIoKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59XHJcblxyXG4vKipcclxuICogTWF0Y2hlcyBvYmplY3RzIHRoYXQgaGF2ZSBhIHBvaW50ZXIgdG8gYW55IG9mIHRoZSBnaXZlbiBvYmplY3RzXHJcbiAqL1xyXG5tYXRjaGVzQW55UG9pbnRlcihrZXk6IHN0cmluZywgb2JqZWN0czogRm1vZGVPYmplY3RbXSk6IHRoaXMge1xyXG4gICAgY29uc3QgcG9pbnRlcnMgPSBvYmplY3RzLm1hcChvYmogPT4ge1xyXG4gICAgICAgIGlmICghb2JqLmlkKSB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBvYmplY3RzIG11c3QgaGF2ZSBJRHMnKTtcclxuICAgICAgICByZXR1cm4gb2JqLnRvUG9pbnRlcigpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLndoZXJlW2tleV0gPSB7ICckaW4nOiBwb2ludGVycyB9O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbi8vIE1BUks6IC0gUmVsYXRpb24gUXVlcnkgRXhlY3V0aW9uXHJcblxyXG4vKipcclxuICogRmluZHMgb2JqZWN0cyBpbiBhIHJlbGF0aW9uIChhbHRlcm5hdGl2ZSB0byB1c2luZyByZWxhdGVkVG8pXHJcbiAqL1xyXG5zdGF0aWMgYXN5bmMgZmluZFJlbGF0aW9uPFQgZXh0ZW5kcyBGbW9kZU9iamVjdD4oXHJcbiAgICBwYXJlbnQ6IEZtb2RlT2JqZWN0LFxyXG4gICAgcmVsYXRpb25LZXk6IHN0cmluZyxcclxuICAgIG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfVxyXG4pOiBQcm9taXNlPFRbXT4ge1xyXG4gICAgaWYgKCFwYXJlbnQuaWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBvYmplY3QgbXVzdCBoYXZlIGFuIElEJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IEZtb2RlUXVlcnk8VD4ocGFyZW50LmNsYXNzTmFtZSlcclxuICAgICAgICAucmVsYXRlZFRvKHBhcmVudCwgcmVsYXRpb25LZXkpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcXVlcnkuZmluZChvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvdW50cyBvYmplY3RzIGluIGEgcmVsYXRpb25cclxuICovXHJcbnN0YXRpYyBhc3luYyBjb3VudFJlbGF0aW9uKFxyXG4gICAgcGFyZW50OiBGbW9kZU9iamVjdCxcclxuICAgIHJlbGF0aW9uS2V5OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzogeyB1c2VNYXN0ZXJLZXk/OiBib29sZWFuIH1cclxuKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGlmICghcGFyZW50LmlkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgb2JqZWN0IG11c3QgaGF2ZSBhbiBJRCcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBxdWVyeSA9IG5ldyBGbW9kZVF1ZXJ5KHBhcmVudC5jbGFzc05hbWUpXHJcbiAgICAgICAgLnJlbGF0ZWRUbyhwYXJlbnQsIHJlbGF0aW9uS2V5KTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHF1ZXJ5LmNvdW50KG9wdGlvbnMpO1xyXG59XHJcblxyXG4vLyBNQVJLOiAtIFJlbGF0aW9uIE1hbmFnZW1lbnRcclxuXHJcbi8qKlxyXG4gKiBBZGRzIG9iamVjdHMgdG8gYSByZWxhdGlvbiAoc3RhdGljIGhlbHBlcilcclxuICovXHJcbnN0YXRpYyBhc3luYyBhZGRUb1JlbGF0aW9uPFQgZXh0ZW5kcyBGbW9kZU9iamVjdD4oXHJcbiAgICBwYXJlbnQ6IEZtb2RlT2JqZWN0LFxyXG4gICAgcmVsYXRpb25LZXk6IHN0cmluZyxcclxuICAgIG9iamVjdHM6IFRbXSxcclxuICAgIG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfVxyXG4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcGFyZW50LmlkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgb2JqZWN0IG11c3QgaGF2ZSBhbiBJRCcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAob2JqZWN0cy5zb21lKG9iaiA9PiAhb2JqLmlkKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWxsIG9iamVjdHMgdG8gYWRkIG11c3QgaGF2ZSBJRHMnKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgcG9pbnRlcnMgPSBvYmplY3RzLm1hcChvYmogPT4gb2JqLnRvUG9pbnRlcigpKTtcclxuICAgIFxyXG4gICAgY29uc3QgdXJsID0gYCR7Rm1vZGVRdWVyeS5pbnN0YW5jZS5zZXJ2ZXJVUkx9L2NsYXNzZXMvJHtwYXJlbnQuY2xhc3NOYW1lfS8ke3BhcmVudC5pZH1gO1xyXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogRm1vZGVRdWVyeS5pbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAob3B0aW9ucz8udXNlTWFzdGVyS2V5ICYmIEZtb2RlUXVlcnkuaW5zdGFuY2UuY29uZmlnLm1hc3RlcktleSkge1xyXG4gICAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgW3JlbGF0aW9uS2V5XToge1xyXG4gICAgICAgICAgICAgICAgJ19fb3AnOiAnQWRkUmVsYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgJ29iamVjdHMnOiBwb2ludGVyc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIGFkZCB0byByZWxhdGlvbicpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBvYmplY3RzIGZyb20gYSByZWxhdGlvbiAoc3RhdGljIGhlbHBlcilcclxuICovXHJcbnN0YXRpYyBhc3luYyByZW1vdmVGcm9tUmVsYXRpb248VCBleHRlbmRzIEZtb2RlT2JqZWN0PihcclxuICAgIHBhcmVudDogRm1vZGVPYmplY3QsXHJcbiAgICByZWxhdGlvbktleTogc3RyaW5nLFxyXG4gICAgb2JqZWN0czogVFtdLFxyXG4gICAgb3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9XHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFwYXJlbnQuaWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBvYmplY3QgbXVzdCBoYXZlIGFuIElEJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChvYmplY3RzLnNvbWUob2JqID0+ICFvYmouaWQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgb2JqZWN0cyB0byByZW1vdmUgbXVzdCBoYXZlIElEcycpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBwb2ludGVycyA9IG9iamVjdHMubWFwKG9iaiA9PiBvYmoudG9Qb2ludGVyKCkpO1xyXG4gICAgXHJcbiAgICBjb25zdCB1cmwgPSBgJHtGbW9kZVF1ZXJ5Lmluc3RhbmNlLnNlcnZlclVSTH0vY2xhc3Nlcy8ke3BhcmVudC5jbGFzc05hbWV9LyR7cGFyZW50LmlkfWA7XHJcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBGbW9kZVF1ZXJ5Lmluc3RhbmNlLmFwcElkXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChvcHRpb25zPy51c2VNYXN0ZXJLZXkgJiYgRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgICAgaGVhZGVyc1snWC1QYXJzZS1NYXN0ZXItS2V5J10gPSBGbW9kZVF1ZXJ5Lmluc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBbcmVsYXRpb25LZXldOiB7XHJcbiAgICAgICAgICAgICAgICAnX19vcCc6ICdSZW1vdmVSZWxhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAnb2JqZWN0cyc6IHBvaW50ZXJzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVtb3ZlIGZyb20gcmVsYXRpb24nKTtcclxuICAgIH1cclxufVxyXG5cclxuICAgIC8vIE1BUks6IC0g5p+l6K+i6YCJ6aG5XHJcblxyXG4gICAgaW5jbHVkZSguLi5rZXlzOiBzdHJpbmdbXSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGUgPSBrZXlzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdCguLi5rZXlzOiBzdHJpbmdbXSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdCA9IGtleXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGltaXQoY291bnQ6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuX2xpbWl0ID0gY291bnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2tpcChjb3VudDogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5fc2tpcCA9IGNvdW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzY2VuZGluZyguLi5rZXlzOiBzdHJpbmdbXSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuX29yZGVyID0ga2V5cy5tYXAoa2V5ID0+IGtleS5zdGFydHNXaXRoKCctJykgPyBrZXkuc3Vic3RyaW5nKDEpIDoga2V5KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBkZXNjZW5kaW5nKC4uLmtleXM6IHN0cmluZ1tdKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5fb3JkZXIgPSBrZXlzLm1hcChrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJy0nKSA/IGtleS5zdWJzdHJpbmcoMSkgOiBgLSR7a2V5fWApO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFzY2VuZGluZyguLi5rZXlzOiBzdHJpbmdbXSk6IHRoaXMge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3JkZXIpIHRoaXMuX29yZGVyID0gW107XHJcbiAgICAgICAgdGhpcy5fb3JkZXIucHVzaCguLi5rZXlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBhZGREZXNjZW5kaW5nKC4uLmtleXM6IHN0cmluZ1tdKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9vcmRlcikgdGhpcy5fb3JkZXIgPSBbXTtcclxuICAgICAgICB0aGlzLl9vcmRlci5wdXNoKC4uLmtleXMubWFwKGtleSA9PiBgLSR7a2V5fWApKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICByZWFkUHJlZmVyZW5jZShwcmVmOiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLl9yZWFkUHJlZmVyZW5jZSA9IHByZWY7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jbHVkZVJlYWRQcmVmZXJlbmNlKHByZWY6IHN0cmluZyk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IHByZWY7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZShwcmVmOiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLl9zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gcHJlZjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBoaW50KGhpbnQ6IGFueSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuaGludCA9IGhpbnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbWF4VGltZU1TKG1zOiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLl9tYXhUaW1lTVMgPSBtcztcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBleHBsYWluKGV4cGxhaW4gPSB0cnVlKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5fZXhwbGFpbiA9IGV4cGxhaW47XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aENvdW50KHdpdGhDb3VudCA9IHRydWUpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLl9jb3VudCA9IHdpdGhDb3VudDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gTUFSSzogLSDmn6Xor6LmiafooYxcclxuXHJcbiAgICBhc3luYyBmaW5kKG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfSk6IFByb21pc2U8VFtdPiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtGbW9kZVF1ZXJ5Lmluc3RhbmNlLnNlcnZlclVSTH0vY2xhc3Nlcy8ke3RoaXMuY2xhc3NOYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX2J1aWxkUXVlcnlQYXJhbXMoKTtcclxuICAgICAgICBcclxuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogRm1vZGVRdWVyeS5pbnN0YW5jZS5hcHBJZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zPy51c2VNYXN0ZXJLZXkgJiYgRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25Ub2tlbikge1xyXG4gICAgICAgICAgICBoZWFkZXJzWydYLVBhcnNlLVNlc3Npb24tVG9rZW4nXSA9IHRoaXMuX3Nlc3Npb25Ub2tlbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHsgaGVhZGVycyB9KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdHMubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0gbmV3IEZtb2RlT2JqZWN0KHRoaXMuY2xhc3NOYW1lKSBhcyBUO1xyXG4gICAgICAgICAgICBvYmouc2V0KGRhdGEpO1xyXG4gICAgICAgICAgICBvYmouaWQgPSBkYXRhLm9iamVjdElkO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImRhdGFcIixkYXRhKVxyXG4gICAgICAgICAgICBvYmouY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBvYmoudXBkYXRlZEF0ID0gbmV3IERhdGUoZGF0YS51cGRhdGVkQXQgfHwgZGF0YS5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpcnN0KG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfSk6IFByb21pc2U8VCB8IG51bGw+IHtcclxuICAgICAgICB0aGlzLmxpbWl0KDEpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmZpbmQob3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHNbMF0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXQob2JqZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9KTogUHJvbWlzZTxUPiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtGbW9kZVF1ZXJ5Lmluc3RhbmNlLnNlcnZlclVSTH0vY2xhc3Nlcy8ke3RoaXMuY2xhc3NOYW1lfS8ke29iamVjdElkfWApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmluY2x1ZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaW5jbHVkZScsIHRoaXMuX2luY2x1ZGUuam9pbignLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogRm1vZGVRdWVyeS5pbnN0YW5jZS5hcHBJZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zPy51c2VNYXN0ZXJLZXkgJiYgRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gRm1vZGVRdWVyeS5pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25Ub2tlbikge1xyXG4gICAgICAgICAgICBoZWFkZXJzWydYLVBhcnNlLVNlc3Npb24tVG9rZW4nXSA9IHRoaXMuX3Nlc3Npb25Ub2tlbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHsgaGVhZGVycyB9KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXJsLHJlc3VsdClcclxuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2JqID0gbmV3IEZtb2RlT2JqZWN0KHRoaXMuY2xhc3NOYW1lKSBhcyBUO1xyXG4gICAgICAgIG9iai5zZXQocmVzdWx0KTtcclxuICAgICAgICBvYmouaWQgPSByZXN1bHQub2JqZWN0SWQ7XHJcbiAgICAgICAgb2JqLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHJlc3VsdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIG9iai51cGRhdGVkQXQgPSBuZXcgRGF0ZShyZXN1bHQudXBkYXRlZEF0IHx8IHJlc3VsdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY291bnQob3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICB0aGlzLndpdGhDb3VudCgpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7Rm1vZGVRdWVyeS5pbnN0YW5jZS5zZXJ2ZXJVUkx9L2NsYXNzZXMvJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnY291bnQnLCAnMScpO1xyXG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdsaW1pdCcsICcwJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMud2hlcmUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3doZXJlJywgSlNPTi5zdHJpbmdpZnkodGhpcy53aGVyZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBGbW9kZVF1ZXJ5Lmluc3RhbmNlLmFwcElkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnM/LnVzZU1hc3RlcktleSAmJiBGbW9kZVF1ZXJ5Lmluc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXkpIHtcclxuICAgICAgICAgICAgaGVhZGVyc1snWC1QYXJzZS1NYXN0ZXItS2V5J10gPSBGbW9kZVF1ZXJ5Lmluc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybC50b1N0cmluZygpLCB7IGhlYWRlcnMgfSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudCB8fCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1BUks6IC0g6L6F5Yqp5pa55rOVXHJcblxyXG4gICAgcHJpdmF0ZSBfYnVpbGRRdWVyeVBhcmFtcygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy53aGVyZSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJhbXMud2hlcmUgPSB0aGlzLndoZXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5faW5jbHVkZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5pbmNsdWRlID0gdGhpcy5faW5jbHVkZS5qb2luKCcsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJhbXMua2V5cyA9IHRoaXMuX3NlbGVjdC5qb2luKCcsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLl9saW1pdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9IHRoaXMuX2xpbWl0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fc2tpcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5za2lwID0gdGhpcy5fc2tpcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuX29yZGVyKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5vcmRlciA9IHRoaXMuX29yZGVyLmpvaW4oJywnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50KSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5jb3VudCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLl9leHBsYWluKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5leHBsYWluID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuX2hpbnQpIHtcclxuICAgICAgICAgICAgcGFyYW1zLmhpbnQgPSB0aGlzLl9oaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fbWF4VGltZU1TKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5tYXhUaW1lTVMgPSB0aGlzLl9tYXhUaW1lTVM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1BUks6IC0g6K6i6ZiFL+WunuaXtuafpeivoiAo566A5YyW54mIKVxyXG5cclxuICAgIHN1YnNjcmliZSgpOiBFdmVudFRhcmdldCB7XHJcbiAgICAgICAgLy8g566A5YyW55qE5a6e5pe25p+l6K+i5a6e546wXHJcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBuZXcgRXZlbnRUYXJnZXQoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDlrp7pmYXlrp7njrDlupTor6Xkvb/nlKggV2ViU29ja2V0IOaIluWFtuS7luWunuaXtumAmuS/oeaWueW8j1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yVXBkYXRlcyA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmZpbmQoKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd1cGRhdGUnLCB7IGRldGFpbDogcmVzdWx0cyB9KSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZXJyb3InLCB7IGRldGFpbDogZXJyb3IgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoY2hlY2tGb3JVcGRhdGVzLCA1MDAwKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmt7vliqDlj5bmtojorqLpmIXmlrnms5VcclxuICAgICAgICAoZXZlbnRUYXJnZXQgYXMgYW55KS51bnN1YnNjcmliZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBldmVudFRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICAvLyDpnZnmgIHmlrnms5VcclxuICAgIG9yID0gZnVuY3Rpb248VCBleHRlbmRzIEZtb2RlT2JqZWN0PiguLi5xdWVyaWVzOiBGbW9kZVF1ZXJ5PFQ+W10pOiBGbW9kZVF1ZXJ5PFQ+IHtcclxuICAgICAgaWYgKHF1ZXJpZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBxdWVyeSByZXF1aXJlZCcpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgY2xhc3NOYW1lID0gcXVlcmllc1swXS5jbGFzc05hbWU7XHJcbiAgICAgIGlmIChxdWVyaWVzLnNvbWUocSA9PiBxLmNsYXNzTmFtZSAhPT0gY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbGwgcXVlcmllcyBtdXN0IGJlIGZvciB0aGUgc2FtZSBjbGFzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBGbW9kZVF1ZXJ5PFQ+KGNsYXNzTmFtZSk7XHJcbiAgICAgIGNvbWJpbmVkLndoZXJlID0geyAkb3I6IHF1ZXJpZXMubWFwKHEgPT4gcS53aGVyZSkgfTtcclxuICAgICAgcmV0dXJuIGNvbWJpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICBhbmQgPSBmdW5jdGlvbjxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+KC4uLnF1ZXJpZXM6IEZtb2RlUXVlcnk8VD5bXSk6IEZtb2RlUXVlcnk8VD4ge1xyXG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIHF1ZXJ5IHJlcXVpcmVkJyk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBxdWVyaWVzWzBdLmNsYXNzTmFtZTtcclxuICAgICAgaWYgKHF1ZXJpZXMuc29tZShxID0+IHEuY2xhc3NOYW1lICE9PSBjbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBxdWVyaWVzIG11c3QgYmUgZm9yIHRoZSBzYW1lIGNsYXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGNvbWJpbmVkID0gbmV3IEZtb2RlUXVlcnk8VD4oY2xhc3NOYW1lKTtcclxuICAgICAgY29tYmluZWQud2hlcmUgPSB7ICRhbmQ6IHF1ZXJpZXMubWFwKHEgPT4gcS53aGVyZSkgfTtcclxuICAgICAgcmV0dXJuIGNvbWJpbmVkO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
8
+ import{FmodeObject}from"./fmode.object";export class FmodeQuery{static{this._instance=null}static bindInstance(e){this._instance=e}static get instance(){if(!this._instance)throw new Error("FmodeParse not initialized");return this._instance}static convertIncludedObjects(e){if(!e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map((e=>this.convertIncludedObjects(e)));if(e.objectId&&(e.createdAt||e.updatedAt)){const t=e.className||"Object",r=new FmodeObject(t);console.log(r),r.id=e.objectId,e.createdAt&&(r.createdAt="string"==typeof e.createdAt?new Date(e.createdAt):e.createdAt),e.updatedAt&&(r.updatedAt="string"==typeof e.updatedAt?new Date(e.updatedAt):e.updatedAt),e.ACL&&(r.ACL=e.ACL);const s={};for(const[t,r]of Object.entries(e))["__type","className","objectId","createdAt","updatedAt","ACL"].includes(t)||(s[t]=this.convertIncludedObjects(r));return r.set(s),r}if("Object"===e.__type&&e.className&&e.objectId){const t=new FmodeObject(e.className);t.id=e.objectId,e.createdAt&&(t.createdAt=new Date(e.createdAt)),e.updatedAt&&(t.updatedAt=new Date(e.updatedAt)),e.ACL&&(t.ACL=e.ACL);const r={};for(const[t,s]of Object.entries(e))["__type","className","objectId","createdAt","updatedAt","ACL"].includes(t)||(r[t]=this.convertIncludedObjects(s));return t.set(r),t}if("Pointer"===e.__type&&e.className&&e.objectId)return e;const t={};for(const[r,s]of Object.entries(e))t[r]=this.convertIncludedObjects(s);return t}constructor(e){this.where={},this._include=[],this._select=[],this._count=!1,this.className="string"==typeof e?e:e.prototype.constructor.name}equalTo(e,t){return this.where[e]=t,this}notEqualTo(e,t){return this.where[e]={$ne:t},this}lessThan(e,t){return this.where[e]={$lt:t},this}lessThanOrEqualTo(e,t){return this.where[e]={$lte:t},this}greaterThan(e,t){return this.where[e]={$gt:t},this}greaterThanOrEqualTo(e,t){return this.where[e]={$gte:t},this}containedIn(e,t){return this.where[e]={$in:t},this}notContainedIn(e,t){return this.where[e]={$nin:t},this}exists(e){return this.where[e]={$exists:!0},this}doesNotExist(e){return this.where[e]={$exists:!1},this}containsAll(e,t){return this.where[e]={$all:t},this}contains(e,t){return this.where[e]={$regex:t,$options:"i"},this}startsWith(e,t){return this.where[e]={$regex:`^${t}`,$options:"i"},this}endsWith(e,t){return this.where[e]={$regex:`${t}$`,$options:"i"},this}matches(e,t,r){return this.where[e]={$regex:t.source,$options:r},this}matchesQuery(e,t){return this.where[e]={$inQuery:{className:t.className,where:t.where}},this}doesNotMatchQuery(e,t){return this.where[e]={$notInQuery:{className:t.className,where:t.where}},this}matchesKeyInQuery(e,t,r){return this.where[e]={$select:{key:t,query:{className:r.className,where:r.where}}},this}doesNotMatchKeyInQuery(e,t,r){return this.where[e]={$dontSelect:{key:t,query:{className:r.className,where:r.where}}},this}near(e,t){return this.where[e]={$nearSphere:t},this}withinRadians(e,t,r){return this.where[e]={$nearSphere:t,$maxDistance:r},this}withinMiles(e,t,r){return this.withinRadians(e,t,r/3959)}withinKilometers(e,t,r){return this.withinRadians(e,t,r/6371)}withinGeoBox(e,t,r){return this.where[e]={$within:{$box:[t,r]}},this}polygonContains(e,t){return this.where[e]={$geoWithin:{$polygon:t}},this}containedBy(e,t){return this.where[e]={$containedBy:t},this}fullText(e,t,r){return this.where[e]={$text:{$search:t,$caseSensitive:r?.caseSensitive,$diacriticSensitive:r?.diacriticSensitive}},this}containsAllStartingWith(e,t){return this.where[e]={$all:t.map((e=>({$regex:`^${e}`})))},this}sizeEqualTo(e,t){return this.where[e]={$size:t},this}relatedTo(e,t){if(!e.id)throw new Error("Parent object must have an ID");return this.where.$relatedTo={object:e.toPointer(),key:t},this}relatedToObject(e,t){if(!e.id)throw new Error("Parent object must have an ID");return this.where.$relatedTo={object:e.toPointer(),key:t},this}relatedToQuery(e,t,r){return this.where.$relatedTo={key:t,query:{className:e,where:r.where}},this}matchesPointer(e,t){if(!t.id)throw new Error("Object must have an ID");return this.where[e]=t.toPointer(),this}matchesAnyPointer(e,t){const r=t.map((e=>{if(!e.id)throw new Error("All objects must have IDs");return e.toPointer()}));return this.where[e]={$in:r},this}static async findRelation(e,t,r){if(!e.id)throw new Error("Parent object must have an ID");return new FmodeQuery(e.className).relatedTo(e,t).find(r)}static async countRelation(e,t,r){if(!e.id)throw new Error("Parent object must have an ID");return new FmodeQuery(e.className).relatedTo(e,t).count(r)}static async addToRelation(e,t,r,s){if(!e.id)throw new Error("Parent object must have an ID");if(r.some((e=>!e.id)))throw new Error("All objects to add must have IDs");const i=r.map((e=>e.toPointer())),n=`${FmodeQuery.instance.serverURL}/classes/${e.className}/${e.id}`,a={"Content-Type":"application/json","X-Parse-Application-Id":FmodeQuery.instance.appId};if(s?.useMasterKey&&FmodeQuery.instance.config.masterKey)a["X-Parse-Master-Key"]=FmodeQuery.instance.config.masterKey;else{const e=FmodeQuery.instance.sessionToken;e&&(a["X-Parse-Session-Token"]=e)}const o=await fetch(n,{method:"PUT",headers:a,body:JSON.stringify({[t]:{__op:"AddRelation",objects:i}})});if(!o.ok){const e=await o.json();throw new Error(e.error||"Failed to add to relation")}}static async removeFromRelation(e,t,r,s){if(!e.id)throw new Error("Parent object must have an ID");if(r.some((e=>!e.id)))throw new Error("All objects to remove must have IDs");const i=r.map((e=>e.toPointer())),n=`${FmodeQuery.instance.serverURL}/classes/${e.className}/${e.id}`,a={"Content-Type":"application/json","X-Parse-Application-Id":FmodeQuery.instance.appId};if(s?.useMasterKey&&FmodeQuery.instance.config.masterKey)a["X-Parse-Master-Key"]=FmodeQuery.instance.config.masterKey;else{const e=FmodeQuery.instance.sessionToken;e&&(a["X-Parse-Session-Token"]=e)}const o=await fetch(n,{method:"PUT",headers:a,body:JSON.stringify({[t]:{__op:"RemoveRelation",objects:i}})});if(!o.ok){const e=await o.json();throw new Error(e.error||"Failed to remove from relation")}}include(...e){let t={};return this._include.concat(e).forEach((e=>{t[e]=!0})),this._include=Object.keys(t),this}select(...e){return this._select=e,this}limit(e){return this._limit=e,this}skip(e){return this._skip=e,this}ascending(...e){return this._order=e.map((e=>e.startsWith("-")?e.substring(1):e)),this}descending(...e){return this._order=e.map((e=>e.startsWith("-")?e.substring(1):`-${e}`)),this}addAscending(...e){return this._order||(this._order=[]),this._order.push(...e),this}addDescending(...e){return this._order||(this._order=[]),this._order.push(...e.map((e=>`-${e}`))),this}readPreference(e){return this._readPreference=e,this}includeReadPreference(e){return this._includeReadPreference=e,this}subqueryReadPreference(e){return this._subqueryReadPreference=e,this}hint(e){return this.hint=e,this}maxTimeMS(e){return this._maxTimeMS=e,this}explain(e=!0){return this._explain=e,this}withCount(e=!0){return this._count=e,this}async find(e){const t=new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}`),r=this._buildQueryParams();Object.entries(r).forEach((([e,r])=>{void 0!==r&&t.searchParams.set(e,"string"==typeof r?r:JSON.stringify(r))}));const s={"X-Parse-Application-Id":FmodeQuery.instance.appId};if(e?.useMasterKey&&FmodeQuery.instance.config.masterKey)s["X-Parse-Master-Key"]=FmodeQuery.instance.config.masterKey;else{const e=this._sessionToken||FmodeQuery.instance.sessionToken;e&&(s["X-Parse-Session-Token"]=e)}const i=await fetch(t.toString(),{headers:s}),n=await i.json();if(console.error(i),n.error)throw new Error(n.error);return n.results.map((e=>{const t=new FmodeObject(this.className);t.id=e.objectId,e.createdAt&&(t.createdAt=new Date(e.createdAt)),e.updatedAt&&(t.updatedAt=new Date(e.updatedAt||e.createdAt)),e.ACL&&(t.ACL=e.ACL);const r={};for(const[t,s]of Object.entries(e))["__type","className","objectId","createdAt","updatedAt","ACL"].includes(t)||(this._include.includes(t)&&s&&"object"==typeof s&&s.objectId,r[t]=FmodeQuery.convertIncludedObjects(s));return t.set(r),t}))}async first(e){this.limit(1);return(await this.find(e))[0]||null}async get(e,t){const r=new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}/${e}`);this.include.length>0&&r.searchParams.set("include",this._include.join(","));const s={"X-Parse-Application-Id":FmodeQuery.instance.appId};if(t?.useMasterKey&&FmodeQuery.instance.config.masterKey)s["X-Parse-Master-Key"]=FmodeQuery.instance.config.masterKey;else{const e=this._sessionToken||FmodeQuery.instance.sessionToken;e&&(s["X-Parse-Session-Token"]=e)}const i=await fetch(r.toString(),{headers:s}),n=await i.json();if(console.log(r,n),n.error)throw new Error(n.error);const a=new FmodeObject(this.className),o=FmodeQuery.convertIncludedObjects(n);a.id=o.objectId,o.createdAt&&(a.createdAt=new Date(o.createdAt)),o.updatedAt&&(a.updatedAt=new Date(o.updatedAt||o.createdAt)),o.ACL&&(a.ACL=o.ACL);const c={};for(const[e,t]of Object.entries(o))["__type","className","objectId","createdAt","updatedAt","ACL"].includes(e)||(c[e]=t);return a.set(c),a}async count(e){this.withCount();const t=new URL(`${FmodeQuery.instance.serverURL}/classes/${this.className}`);t.searchParams.set("count","1"),t.searchParams.set("limit","0"),Object.keys(this.where).length>0&&t.searchParams.set("where",JSON.stringify(this.where));const r={"X-Parse-Application-Id":FmodeQuery.instance.appId};if(e?.useMasterKey&&FmodeQuery.instance.config.masterKey)r["X-Parse-Master-Key"]=FmodeQuery.instance.config.masterKey;else{const e=this._sessionToken||FmodeQuery.instance.sessionToken;e&&(r["X-Parse-Session-Token"]=e)}const s=await fetch(t.toString(),{headers:r}),i=await s.json();if(i.error)throw new Error(i.error);return i.count||0}toJSON(){const e={className:this.className};return Object.keys(this.where).length>0&&(e.where=this.where),this._include.length>0&&(e.include=this._include.join(",")),this._select.length>0&&(e.keys=this._select.join(",")),void 0!==this._limit&&(e.limit=this._limit),void 0!==this._skip&&(e.skip=this._skip),this._order&&this._order.length>0&&(e.order=this._order.join(",")),this._count&&(e.count=1),this._explain&&(e.explain=!0),this._hint&&(e.hint=this._hint),this._maxTimeMS&&(e.maxTimeMS=this._maxTimeMS),this._readPreference&&(e.readPreference=this._readPreference),this._includeReadPreference&&(e.includeReadPreference=this._includeReadPreference),this._subqueryReadPreference&&(e.subqueryReadPreference=this._subqueryReadPreference),e}static fromJSON(e,t){const r=new FmodeQuery(e=e||t?.className);if(t.where&&(r.where=t.where),t.include){const e="string"==typeof t.include?t.include.split(","):t.include;r._include=e}if(t.keys){const e="string"==typeof t.keys?t.keys.split(","):t.keys;r._select=e}if(void 0!==t.limit&&(r._limit=t.limit),void 0!==t.skip&&(r._skip=t.skip),t.order){const e="string"==typeof t.order?t.order.split(","):t.order;r._order=e}return t.count&&(r._count=!!t.count),t.explain&&(r._explain=!!t.explain),t.hint&&(r._hint=t.hint),t.maxTimeMS&&(r._maxTimeMS=t.maxTimeMS),t.readPreference&&(r._readPreference=t.readPreference),t.includeReadPreference&&(r._includeReadPreference=t.includeReadPreference),t.subqueryReadPreference&&(r._subqueryReadPreference=t.subqueryReadPreference),r}_buildQueryParams(){const e={};return Object.keys(this.where).length>0&&(e.where=this.where),this._include.length>0&&(e.include=this._include.join(",")),this._select.length>0&&(e.keys=this._select.join(",")),void 0!==this._limit&&(e.limit=this._limit),void 0!==this._skip&&(e.skip=this._skip),this._order&&(e.order=this._order.join(",")),this._count&&(e.count=1),this._explain&&(e.explain=!0),this._hint&&(e.hint=this._hint),this._maxTimeMS&&(e.maxTimeMS=this._maxTimeMS),e}subscribe(){const e=new EventTarget,t=setInterval((async()=>{try{const t=await this.find();e.dispatchEvent(new CustomEvent("update",{detail:t}))}catch(t){e.dispatchEvent(new CustomEvent("error",{detail:t}))}}),5e3);return e.unsubscribe=()=>{clearInterval(t)},e}static or(...e){if(0===e.length)throw new Error("At least one query required");const t=e[0].className;if(e.some((e=>e.className!==t)))throw new Error("All queries must be for the same class");const r=new FmodeQuery(t);return r.where={$or:e.map((e=>e.where))},r}static and(...e){if(0===e.length)throw new Error("At least one query required");const t=e[0].className;if(e.some((e=>e.className!==t)))throw new Error("All queries must be for the same class");const r=new FmodeQuery(t);return r.where={$and:e.map((e=>e.where))},r}or(...e){return FmodeQuery.or(this,...e)}and(...e){return FmodeQuery.and(this,...e)}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLnF1ZXJ5Lm1qcw==`
10
+