stream-chat-angular 5.0.0-v5.8 → 5.0.0

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 (118) hide show
  1. package/assets/i18n/en.d.ts +1 -0
  2. package/assets/version.d.ts +1 -1
  3. package/esm2020/assets/i18n/en.mjs +3 -2
  4. package/esm2020/assets/version.mjs +2 -2
  5. package/esm2020/lib/attachment-list/attachment-list.component.mjs +3 -3
  6. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +3 -3
  7. package/esm2020/lib/attachment.service.mjs +103 -7
  8. package/esm2020/lib/avatar/avatar.component.mjs +3 -9
  9. package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +3 -11
  10. package/esm2020/lib/channel/channel.component.mjs +5 -6
  11. package/esm2020/lib/channel-header/channel-header.component.mjs +3 -3
  12. package/esm2020/lib/channel-list/channel-list.component.mjs +5 -6
  13. package/esm2020/lib/channel-preview/channel-preview.component.mjs +3 -3
  14. package/esm2020/lib/channel-query.mjs +77 -0
  15. package/esm2020/lib/channel.service.mjs +197 -135
  16. package/esm2020/lib/chat-client.service.mjs +33 -11
  17. package/esm2020/lib/custom-templates.service.mjs +6 -10
  18. package/esm2020/lib/icon/icon.component.mjs +3 -7
  19. package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +4 -7
  20. package/esm2020/lib/loading-indicator/loading-indicator.component.mjs +6 -22
  21. package/esm2020/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +5 -23
  22. package/esm2020/lib/message/message.component.mjs +129 -16
  23. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +39 -14
  24. package/esm2020/lib/message-actions.service.mjs +66 -2
  25. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +16 -6
  26. package/esm2020/lib/message-input/message-input.component.mjs +76 -74
  27. package/esm2020/lib/message-input/textarea/textarea.component.mjs +13 -1
  28. package/esm2020/lib/message-list/message-list.component.mjs +83 -15
  29. package/esm2020/lib/message-reactions/message-reactions.component.mjs +7 -78
  30. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
  31. package/esm2020/lib/message-reactions.service.mjs +3 -4
  32. package/esm2020/lib/modal/modal.component.mjs +1 -1
  33. package/esm2020/lib/stream-chat.module.mjs +8 -8
  34. package/esm2020/lib/thread/thread.component.mjs +3 -3
  35. package/esm2020/lib/types.mjs +1 -1
  36. package/esm2020/lib/voice-recording/voice-recording.component.mjs +3 -3
  37. package/esm2020/public-api.mjs +3 -2
  38. package/fesm2015/stream-chat-angular.mjs +2747 -2338
  39. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  40. package/fesm2020/stream-chat-angular.mjs +2687 -2284
  41. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  42. package/lib/attachment.service.d.ts +11 -4
  43. package/lib/avatar/avatar.component.d.ts +1 -5
  44. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -5
  45. package/lib/channel-query.d.ts +26 -0
  46. package/lib/channel.service.d.ts +86 -57
  47. package/lib/chat-client.service.d.ts +7 -3
  48. package/lib/custom-templates.service.d.ts +8 -12
  49. package/lib/icon/icon.component.d.ts +2 -6
  50. package/lib/icon-placeholder/icon-placeholder.component.d.ts +1 -5
  51. package/lib/loading-indicator/loading-indicator.component.d.ts +1 -10
  52. package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -11
  53. package/lib/message/message.component.d.ts +31 -9
  54. package/lib/message-actions-box/message-actions-box.component.d.ts +11 -6
  55. package/lib/message-actions.service.d.ts +3 -2
  56. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -0
  57. package/lib/message-input/message-input.component.d.ts +19 -7
  58. package/lib/message-input/textarea/textarea.component.d.ts +1 -0
  59. package/lib/message-list/message-list.component.d.ts +11 -6
  60. package/lib/message-reactions/message-reactions.component.d.ts +6 -30
  61. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +35 -0
  62. package/lib/stream-chat.module.d.ts +5 -5
  63. package/lib/types.d.ts +28 -29
  64. package/package.json +5 -5
  65. package/public-api.d.ts +2 -1
  66. package/src/assets/assets/EmojiOneColor.woff2 +0 -0
  67. package/src/assets/assets/NotoColorEmoji-flags.woff2 +0 -0
  68. package/src/assets/assets/Poweredby_100px-White_VertText.png +0 -0
  69. package/src/assets/assets/icons/stream-chat-icons.eot +0 -0
  70. package/src/assets/assets/icons/stream-chat-icons.svg +46 -0
  71. package/src/assets/assets/icons/stream-chat-icons.ttf +0 -0
  72. package/src/assets/assets/icons/stream-chat-icons.woff +0 -0
  73. package/src/assets/assets/icons/stream-chat-icons.woff2 +0 -0
  74. package/src/assets/assets/str-chat__reaction-list-sprite@1x.png +0 -0
  75. package/src/assets/assets/str-chat__reaction-list-sprite@2x.png +0 -0
  76. package/src/assets/assets/str-chat__reaction-list-sprite@3x.png +0 -0
  77. package/src/assets/i18n/en.ts +2 -1
  78. package/src/assets/styles/css/index.css +2 -2
  79. package/src/assets/styles/css/index.layout.css +2 -2
  80. package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +74 -12
  81. package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +52 -0
  82. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +24 -9
  83. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +29 -0
  84. package/src/assets/styles/scss/AudioRecorder/AudioRecorder-layout.scss +89 -0
  85. package/src/assets/styles/scss/AudioRecorder/AudioRecorder-theme.scss +51 -0
  86. package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +1 -1
  87. package/src/assets/styles/scss/Avatar/Avatar-layout.scss +46 -0
  88. package/src/assets/styles/scss/Channel/Channel-layout.scss +1 -0
  89. package/src/assets/styles/scss/Channel/Channel-theme.scss +1 -0
  90. package/src/assets/styles/scss/ChannelList/ChannelList-layout.scss +2 -2
  91. package/src/assets/styles/scss/ChannelList/ChannelList-theme.scss +4 -2
  92. package/src/assets/styles/scss/ChannelPreview/ChannelPreview-layout.scss +2 -0
  93. package/src/assets/styles/scss/ChannelPreview/ChannelPreview-theme.scss +1 -0
  94. package/src/assets/styles/scss/EditMessageForm/EditMessageForm-theme.scss +9 -9
  95. package/src/assets/styles/scss/Icon/Icon-layout.scss +87 -0
  96. package/src/assets/styles/scss/Icon/Icon-theme.scss +13 -0
  97. package/src/assets/styles/scss/ImageCarousel/ImageCarousel-layout.scss +1 -0
  98. package/src/assets/styles/scss/ImageCarousel/ImageCarousel-theme.scss +1 -0
  99. package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-layout.scss +10 -1
  100. package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-theme.scss +6 -4
  101. package/src/assets/styles/scss/Message/Message-layout.scss +45 -6
  102. package/src/assets/styles/scss/Message/Message-theme.scss +6 -0
  103. package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +33 -1
  104. package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +65 -2
  105. package/src/assets/styles/scss/MessageList/MessageList-theme.scss +2 -0
  106. package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-layout.scss +18 -0
  107. package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-theme.scss +5 -0
  108. package/src/assets/styles/scss/Modal/Modal-layout.scss +1 -0
  109. package/src/assets/styles/scss/Modal/Modal-theme.scss +6 -0
  110. package/src/assets/styles/scss/_base.scss +4 -2
  111. package/src/assets/styles/scss/_emoji-replacement.scss +4 -2
  112. package/src/assets/styles/scss/_icons.scss +24 -2
  113. package/src/assets/styles/scss/_variables.scss +2 -0
  114. package/src/assets/styles/scss/index.layout.scss +2 -0
  115. package/src/assets/styles/scss/index.scss +2 -0
  116. package/src/assets/version.ts +1 -1
  117. package/esm2020/lib/edit-message-form/edit-message-form.component.mjs +0 -83
  118. package/lib/edit-message-form/edit-message-form.component.d.ts +0 -31
@@ -0,0 +1,77 @@
1
+ /**
2
+ * This class allows you to make paginated channel query requests.
3
+ */
4
+ export class ChannelQuery {
5
+ constructor(chatService, channelService, filters, sort = { last_message_at: -1 }, options = {
6
+ limit: 25,
7
+ state: true,
8
+ presence: true,
9
+ watch: true,
10
+ }) {
11
+ this.chatService = chatService;
12
+ this.channelService = channelService;
13
+ this.filters = filters;
14
+ this.sort = sort;
15
+ this.options = options;
16
+ }
17
+ async query(queryType) {
18
+ if (queryType === 'first-page' || queryType === 'recover-state') {
19
+ this.nextPageConfiguration = undefined;
20
+ }
21
+ const prevChannels = queryType === 'recover-state' ? [] : this.channelService.channels;
22
+ let filters;
23
+ let options;
24
+ if (this.nextPageConfiguration) {
25
+ if (this.nextPageConfiguration.type === 'filter') {
26
+ filters = {
27
+ ...this.filters,
28
+ ...this.nextPageConfiguration.paginationFilter,
29
+ };
30
+ options = this.options;
31
+ }
32
+ else {
33
+ options = {
34
+ ...this.options,
35
+ offset: this.nextPageConfiguration.offset,
36
+ };
37
+ filters = this.filters;
38
+ }
39
+ }
40
+ else {
41
+ filters = this.filters;
42
+ options = this.options;
43
+ }
44
+ const channels = await this.chatService.chatClient.queryChannels(filters, this.sort || {}, options);
45
+ this.setNextPageConfiguration(channels);
46
+ const currentActiveChannel = this.channelService.activeChannel;
47
+ if (queryType === 'recover-state' &&
48
+ currentActiveChannel &&
49
+ !channels.find((c) => c.cid === currentActiveChannel?.cid)) {
50
+ try {
51
+ await currentActiveChannel.watch();
52
+ channels.unshift(currentActiveChannel);
53
+ }
54
+ catch (error) {
55
+ this.chatService.chatClient.logger('warn', 'Unable to refetch active channel after state recover', error);
56
+ }
57
+ }
58
+ return {
59
+ channels: [...prevChannels, ...channels],
60
+ hasMorePage: channels.length >= this.options.limit,
61
+ };
62
+ }
63
+ setNextPageConfiguration(channelQueryResult) {
64
+ if (this.customPaginator) {
65
+ this.nextPageConfiguration = this.customPaginator(channelQueryResult);
66
+ }
67
+ else {
68
+ this.nextPageConfiguration = {
69
+ type: 'offset',
70
+ offset: (this.nextPageConfiguration?.type === 'offset'
71
+ ? this.nextPageConfiguration.offset
72
+ : 0) + channelQueryResult.length,
73
+ };
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFhdkIsWUFDVSxXQUFpQyxFQUNqQyxjQUFpQyxFQUNqQyxPQUEwQixFQUMxQixPQUF1QixFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUM5QyxVQUEwQjtRQUNoQyxLQUFLLEVBQUUsRUFBRTtRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLElBQUk7UUFDZCxLQUFLLEVBQUUsSUFBSTtLQUNaO1FBVE8sZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUEwQztRQUM5QyxZQUFPLEdBQVAsT0FBTyxDQUtkO0lBQ0EsQ0FBQztJQUVKLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBMkI7UUFDckMsSUFBSSxTQUFTLEtBQUssWUFBWSxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUU7WUFDL0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztTQUN4QztRQUNELE1BQU0sWUFBWSxHQUNoQixTQUFTLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3BFLElBQUksT0FBMEIsQ0FBQztRQUMvQixJQUFJLE9BQXVCLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDaEQsT0FBTyxHQUFHO29CQUNSLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2YsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCO2lCQUMvQyxDQUFDO2dCQUNGLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLE9BQU8sR0FBRztvQkFDUixHQUFHLElBQUksQ0FBQyxPQUFPO29CQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTTtpQkFDMUMsQ0FBQztnQkFDRixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUN4QjtTQUNGO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN4QjtRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUM5RCxPQUFPLEVBQ1AsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQ2YsT0FBTyxDQUNSLENBQUM7UUFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUMvRCxJQUNFLFNBQVMsS0FBSyxlQUFlO1lBQzdCLG9CQUFvQjtZQUNwQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssb0JBQW9CLEVBQUUsR0FBRyxDQUFDLEVBQzFEO1lBQ0EsSUFBSTtnQkFDRixNQUFNLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDeEM7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ2hDLE1BQU0sRUFDTixzREFBc0QsRUFDdEQsS0FBZ0MsQ0FDakMsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDeEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFNO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsa0JBQWdDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUc7Z0JBQzNCLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFDSixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEtBQUssUUFBUTtvQkFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO29CQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTTthQUNyQyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFubmVsLFxuICBDaGFubmVsRmlsdGVycyxcbiAgQ2hhbm5lbE9wdGlvbnMsXG4gIENoYW5uZWxTb3J0LFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoYW5uZWxRdWVyeVJlc3VsdCxcbiAgQ2hhbm5lbFF1ZXJ5VHlwZSxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgTmV4dFBhZ2VDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB5b3UgdG8gbWFrZSBwYWdpbmF0ZWQgY2hhbm5lbCBxdWVyeSByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENoYW5uZWxRdWVyeTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGFuIG9mZnNldCBiYXNlZCBwYWdpbmF0aW9uLCB5b3UgY2FuIGNoYW5nZS9leHRlbmQgdGhpcyBieSBwcm92aWRpbmcgeW91ciBvd24gY3VzdG9tIHBhZ2luYXRvciBtZXRob2QuXG4gICAqXG4gICAqIFRoZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBsYXRlc3QgY2hhbm5lbCBxdWVyeS5cbiAgICpcbiAgICogWW91IGNhbiByZXR1cm4gZWl0aGVyIGFuIG9mZnNldCwgb3IgYSBmaWx0ZXIgdXNpbmcgdGhlIFtgJGx0ZWAvYCRndGVgIG9wZXJhdG9yXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9xdWVyeV9zeW50YXhfb3BlcmF0b3JzLykuIElmIHlvdSByZXR1cm4gYSBmaWx0ZXIsIGl0IHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGZpbHRlciBwcm92aWRlZCBmb3IgdGhlIGBpbml0YCBtZXRob2QuXG4gICAqL1xuICBjdXN0b21QYWdpbmF0b3I/OiAoY2hhbm5lbFF1ZXJ5UmVzdWx0OiBDaGFubmVsPFQ+W10pID0+IE5leHRQYWdlQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBuZXh0UGFnZUNvbmZpZ3VyYXRpb24/OiBOZXh0UGFnZUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBmaWx0ZXJzOiBDaGFubmVsRmlsdGVyczxUPixcbiAgICBwcml2YXRlIHNvcnQ6IENoYW5uZWxTb3J0PFQ+ID0geyBsYXN0X21lc3NhZ2VfYXQ6IC0xIH0sXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAyNSxcbiAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgcHJlc2VuY2U6IHRydWUsXG4gICAgICB3YXRjaDogdHJ1ZSxcbiAgICB9XG4gICkge31cblxuICBhc3luYyBxdWVyeShxdWVyeVR5cGU6IENoYW5uZWxRdWVyeVR5cGUpOiBQcm9taXNlPENoYW5uZWxRdWVyeVJlc3VsdDxUPj4ge1xuICAgIGlmIChxdWVyeVR5cGUgPT09ICdmaXJzdC1wYWdlJyB8fCBxdWVyeVR5cGUgPT09ICdyZWNvdmVyLXN0YXRlJykge1xuICAgICAgdGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHByZXZDaGFubmVscyA9XG4gICAgICBxdWVyeVR5cGUgPT09ICdyZWNvdmVyLXN0YXRlJyA/IFtdIDogdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVscztcbiAgICBsZXQgZmlsdGVyczogQ2hhbm5lbEZpbHRlcnM8VD47XG4gICAgbGV0IG9wdGlvbnM6IENoYW5uZWxPcHRpb25zO1xuICAgIGlmICh0aGlzLm5leHRQYWdlQ29uZmlndXJhdGlvbikge1xuICAgICAgaWYgKHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uLnR5cGUgPT09ICdmaWx0ZXInKSB7XG4gICAgICAgIGZpbHRlcnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC4uLnRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uLnBhZ2luYXRpb25GaWx0ZXIsXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uLm9mZnNldCxcbiAgICAgICAgfTtcbiAgICAgICAgZmlsdGVycyA9IHRoaXMuZmlsdGVycztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVycyA9IHRoaXMuZmlsdGVycztcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgfVxuICAgIGNvbnN0IGNoYW5uZWxzID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jaGF0Q2xpZW50LnF1ZXJ5Q2hhbm5lbHMoXG4gICAgICBmaWx0ZXJzLFxuICAgICAgdGhpcy5zb3J0IHx8IHt9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5zZXROZXh0UGFnZUNvbmZpZ3VyYXRpb24oY2hhbm5lbHMpO1xuXG4gICAgY29uc3QgY3VycmVudEFjdGl2ZUNoYW5uZWwgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWw7XG4gICAgaWYgKFxuICAgICAgcXVlcnlUeXBlID09PSAncmVjb3Zlci1zdGF0ZScgJiZcbiAgICAgIGN1cnJlbnRBY3RpdmVDaGFubmVsICYmXG4gICAgICAhY2hhbm5lbHMuZmluZCgoYykgPT4gYy5jaWQgPT09IGN1cnJlbnRBY3RpdmVDaGFubmVsPy5jaWQpXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdXJyZW50QWN0aXZlQ2hhbm5lbC53YXRjaCgpO1xuICAgICAgICBjaGFubmVscy51bnNoaWZ0KGN1cnJlbnRBY3RpdmVDaGFubmVsKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuY2hhdENsaWVudC5sb2dnZXIoXG4gICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgICdVbmFibGUgdG8gcmVmZXRjaCBhY3RpdmUgY2hhbm5lbCBhZnRlciBzdGF0ZSByZWNvdmVyJyxcbiAgICAgICAgICBlcnJvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFubmVsczogWy4uLnByZXZDaGFubmVscywgLi4uY2hhbm5lbHNdLFxuICAgICAgaGFzTW9yZVBhZ2U6IGNoYW5uZWxzLmxlbmd0aCA+PSB0aGlzLm9wdGlvbnMubGltaXQhLFxuICAgIH07XG4gIH1cblxuICBzZXROZXh0UGFnZUNvbmZpZ3VyYXRpb24oY2hhbm5lbFF1ZXJ5UmVzdWx0OiBDaGFubmVsPFQ+W10pIHtcbiAgICBpZiAodGhpcy5jdXN0b21QYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uID0gdGhpcy5jdXN0b21QYWdpbmF0b3IoY2hhbm5lbFF1ZXJ5UmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0UGFnZUNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdvZmZzZXQnLFxuICAgICAgICBvZmZzZXQ6XG4gICAgICAgICAgKHRoaXMubmV4dFBhZ2VDb25maWd1cmF0aW9uPy50eXBlID09PSAnb2Zmc2V0J1xuICAgICAgICAgICAgPyB0aGlzLm5leHRQYWdlQ29uZmlndXJhdGlvbi5vZmZzZXRcbiAgICAgICAgICAgIDogMCkgKyBjaGFubmVsUXVlcnlSZXN1bHQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==