@projectcor/maia-components 2.11.32-2 → 2.11.32-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/index.js +2 -2
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +10 -41
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -8
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -2
- package/lib/components/molecules/ChatAIHome/styles.js +14 -7
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +178 -165
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +254 -347
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +81 -16
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +17 -2
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/layout.js +35 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +9 -10
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +6 -37
- package/lib/components/molecules/Sidebar/Sidebar.js +323 -269
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +22 -17
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
- package/lib/dev/Providers.js +2 -2
- package/lib/hooks/useChatManager/useChatManager.js +121 -65
- package/lib/hooks/useChats/useChats.js +4 -12
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +145 -73
- package/lib/hooks/useProjectSearch.js +11 -4
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +189 -0
- package/lib/hooks/useStreamingMessage/index.js +3 -0
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
- package/lib/lang/br/index.js +6 -11
- package/lib/lang/en/index.js +6 -11
- package/lib/lang/es/index.js +6 -11
- package/lib/lang/fr/index.js +6 -11
- package/lib/mocks/mockChats.js +395 -0
- package/lib/mocks/mockedUser.js +169 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
- package/lib/services/maia/Chats/index.js +1 -7
- package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
- package/lib/services/maia/RecentProjects/getRecentProjects.js +2 -2
- package/lib/services/maia/client.js +9 -44
- package/lib/services/query/projectSearchByValueQuery.js +2 -2
- package/lib/store/chatsStore.types.js +2 -10
- package/lib/store/useChatsStore.js +37 -75
- package/lib/types/Chat.js +1 -3
- package/lib/types/Project.js +1 -1
- package/package.json +1 -1
- package/lib/components/atoms/icons/ChatConversation.js +0 -40
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -150
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
- package/lib/dev/fixtures/devUser.js +0 -173
- package/lib/dev/fixtures/mockedUser.js +0 -169
- package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
- package/lib/services/maia/Chats/getSessionByAgent.js +0 -66
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
|
@@ -15,13 +15,16 @@ var TYPE_PROJECT = {
|
|
|
15
15
|
};
|
|
16
16
|
var mapperProjectsSearch = function mapperProjectsSearch(values) {
|
|
17
17
|
return values === null || values === void 0 ? void 0 : values.map(function (value) {
|
|
18
|
+
var _value$clientId, _value$feeId;
|
|
18
19
|
return {
|
|
19
20
|
id: value.id,
|
|
20
21
|
title: value.title,
|
|
21
22
|
clientName: value.clientName,
|
|
22
23
|
productName: value.productName,
|
|
23
24
|
brandName: value.brandName,
|
|
24
|
-
incomeType: ''
|
|
25
|
+
incomeType: '',
|
|
26
|
+
clientId: (_value$clientId = value.clientId) !== null && _value$clientId !== void 0 ? _value$clientId : null,
|
|
27
|
+
feeId: (_value$feeId = value.feeId) !== null && _value$feeId !== void 0 ? _value$feeId : null
|
|
25
28
|
};
|
|
26
29
|
});
|
|
27
30
|
};
|
|
@@ -45,13 +48,17 @@ export var DataParsedToProjects = function DataParsedToProjects() {
|
|
|
45
48
|
length: searchValue.length
|
|
46
49
|
};
|
|
47
50
|
}
|
|
48
|
-
return _objectSpread(_objectSpread({
|
|
51
|
+
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
49
52
|
id: arg.id,
|
|
50
53
|
name: arg.title,
|
|
51
54
|
title: projectName
|
|
52
55
|
}, titleHighlight && {
|
|
53
56
|
titleHighlight: titleHighlight
|
|
54
|
-
}),
|
|
57
|
+
}), arg.clientId != null ? {
|
|
58
|
+
clientId: arg.clientId
|
|
59
|
+
} : {}), arg.feeId != null ? {
|
|
60
|
+
feeId: arg.feeId
|
|
61
|
+
} : {}), {}, {
|
|
55
62
|
client: {
|
|
56
63
|
name: (_arg$clientName = arg.clientName) !== null && _arg$clientName !== void 0 ? _arg$clientName : null
|
|
57
64
|
},
|
|
@@ -195,4 +202,4 @@ export var useProjectSearch = function useProjectSearch() {
|
|
|
195
202
|
updateSearchValue: updateSearchValue
|
|
196
203
|
};
|
|
197
204
|
};
|
|
198
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwibWFpYSIsIlNFQVJDSF9QUk9KRUNUUyIsInVzZURlYm91bmNlIiwiVFlQRV9QUk9KRUNUIiwicHJvamVjdCIsImFyY2hpdmVkIiwibWFwcGVyUHJvamVjdHNTZWFyY2giLCJ2YWx1ZXMiLCJtYXAiLCJ2YWx1ZSIsImlkIiwidGl0bGUiLCJjbGllbnROYW1lIiwicHJvZHVjdE5hbWUiLCJicmFuZE5hbWUiLCJpbmNvbWVUeXBlIiwiRGF0YVBhcnNlZFRvUHJvamVjdHMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJwcm9qZWN0cyIsInNldFByb2plY3RzIiwic2V0dGVyRGF0YSIsImFyZ3MiLCJzZWFyY2hWYWx1ZSIsImxlbmd0aCIsImFyZyIsIl9hcmckY2xpZW50TmFtZSIsInByb2plY3ROYW1lIiwidGl0bGVIaWdobGlnaHQiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImluY2x1ZGVzIiwidGV4dEluZGV4IiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwic3RhcnQiLCJfb2JqZWN0U3ByZWFkIiwibmFtZSIsImNsaWVudCIsInVzZVByb2plY3RTZWFyY2giLCJfRGF0YVBhcnNlZFRvUHJvamVjdHMiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZXRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwiaXNRdWVyeUluUHJvZ3Jlc3MiLCJzZXRJc1F1ZXJ5SW5Qcm9ncmVzcyIsImRlYm91bmNlZFNlYXJjaFZhbHVlIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwicmVjZW50UHJvamVjdHNEYXRhIiwic2V0UmVjZW50UHJvamVjdHNEYXRhIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImxvYWRpbmdSZWNlbnRQcm9qZWN0cyIsInNldExvYWRpbmdSZWNlbnRQcm9qZWN0cyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJyZWNlbnRFcnJvciIsInNldFJlY2VudEVycm9yIiwiZmV0Y2hSZWNlbnRQcm9qZWN0c1dpdGhMb2FkaW5nIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJkYXRhIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIlJlY2VudFByb2plY3RzIiwiZ2V0UmVjZW50UHJvamVjdHMiLCJzZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiZmluaXNoIiwic3RvcCIsIl91c2VMYXp5UXVlcnkiLCJ2YXJpYWJsZXMiLCJsaW1pdCIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hQcm9qZWN0cyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJsb2FkaW5nU2VhcmNoUHJvamVjdHMiLCJzZWFyY2hFcnJvciIsImhhbmRsZUZldGNoU2VhcmNoUHJvamVjdHMiLCJxIiwiZmlsdGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZWFyY2giLCJ0cmltIiwibWFwcGVkUHJvamVjdHMiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsIm5ld1NlYXJjaFZhbHVlIiwiZmV0Y2hSZWNlbnRQcm9qZWN0cyIsInJlY2VudFByb2plY3RzTG9hZGluZyIsInJlY2VudFByb2plY3RzRXJyb3IiLCJyZWNlbnRQcm9qZWN0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VQcm9qZWN0U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBtYWlhIGZyb20gJy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBTRUFSQ0hfUFJPSkVDVFMgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9wcm9qZWN0U2VhcmNoQnlWYWx1ZVF1ZXJ5J1xuaW1wb3J0IHsgdXNlRGVib3VuY2UgfSBmcm9tICcuL3VzZURlYm91bmNlJ1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0R3JhcGhRTCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHByb2R1Y3ROYW1lPzogc3RyaW5nXG4gIGJyYW5kTmFtZT86IHN0cmluZ1xuICBpbmNvbWVUeXBlPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFByb2plY3RTZXR0ZXIgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgLyoqIFJhbmdvIGRlbCB0w6lybWlubyBidXNjYWRvIGRlbnRybyBkZSBgdGl0bGVgIChzb2xvIHJlc3VsdGFkb3MgZGUgYsO6c3F1ZWRhKSAqL1xuICB0aXRsZUhpZ2hsaWdodD86IHsgc3RhcnQ6IG51bWJlcjsgbGVuZ3RoOiBudW1iZXIgfVxuICBjbGllbnQ/OiB7XG4gICAgbmFtZTogc3RyaW5nIHwgbnVsbFxuICB9XG4gIHByb2R1Y3ROYW1lPzogc3RyaW5nXG4gIGJyYW5kTmFtZT86IHN0cmluZ1xuICBpbmNvbWVUeXBlPzogc3RyaW5nXG59XG5cbnR5cGUgUHJvamVjdFNlYXJjaFJlc3VsdCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1xuICBjbGllbnROYW1lOiBzdHJpbmdcbiAgYnJhbmROYW1lOiBzdHJpbmdcbiAgcHJvZHVjdE5hbWU6IHN0cmluZ1xuICBwcm9qZWN0TmFtZTogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIGRlYWRsaW5lOiBzdHJpbmdcbiAgZGF0ZXRpbWU6IHN0cmluZ1xuICBhcmNoaXZlZDogYm9vbGVhblxuICBfX3R5cGVuYW1lOiBzdHJpbmdcbn1cblxudHlwZSBRdWVyeVNlYXJjaFByb2plY3REYXRhID0geyBzZWFyY2g6IFByb2plY3RTZWFyY2hSZXN1bHRbXSB8IG51bGwgfVxuXG5jb25zdCBUWVBFX1BST0pFQ1QgPSB7IHByb2plY3Q6ICd0cnVlJywgYXJjaGl2ZWQ6ICdhbGwnIH1cblxuY29uc3QgbWFwcGVyUHJvamVjdHNTZWFyY2ggPSAodmFsdWVzOiBQcm9qZWN0U2VhcmNoUmVzdWx0W10pOiBQcm9qZWN0R3JhcGhRTFtdID0+IHtcbiAgcmV0dXJuIHZhbHVlcz8ubWFwKHZhbHVlID0+ICh7XG4gICAgaWQ6IHZhbHVlLmlkLFxuICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICBjbGllbnROYW1lOiB2YWx1ZS5jbGllbnROYW1lLFxuICAgIHByb2R1Y3ROYW1lOiB2YWx1ZS5wcm9kdWN0TmFtZSxcbiAgICBicmFuZE5hbWU6IHZhbHVlLmJyYW5kTmFtZSxcbiAgICBpbmNvbWVUeXBlOiAnJyxcbiAgfSkpXG59XG5cbmV4cG9ydCBjb25zdCBEYXRhUGFyc2VkVG9Qcm9qZWN0cyA9ICgpID0+IHtcbiAgY29uc3QgW3Byb2plY3RzLCBzZXRQcm9qZWN0c10gPSB1c2VTdGF0ZTxQcm9qZWN0U2V0dGVyW10+KFtdKVxuICBjb25zdCBzZXR0ZXJEYXRhID0gKGFyZ3M6IFByb2plY3RHcmFwaFFMW10sIHNlYXJjaFZhbHVlPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgc2V0UHJvamVjdHMoW10pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFByb2plY3RzKFxuICAgICAgICBhcmdzLm1hcChhcmcgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb2plY3ROYW1lID0gYXJnLnRpdGxlIHx8ICcnXG4gICAgICAgICAgbGV0IHRpdGxlSGlnaGxpZ2h0OiB7IHN0YXJ0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH0gfCB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoc2VhcmNoVmFsdWUgJiYgcHJvamVjdE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEluZGV4ID0gcHJvamVjdE5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICB0aXRsZUhpZ2hsaWdodCA9IHsgc3RhcnQ6IHRleHRJbmRleCwgbGVuZ3RoOiBzZWFyY2hWYWx1ZS5sZW5ndGggfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGFyZy5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFyZy50aXRsZSxcbiAgICAgICAgICAgIHRpdGxlOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgIC4uLih0aXRsZUhpZ2hsaWdodCAmJiB7IHRpdGxlSGlnaGxpZ2h0IH0pLFxuICAgICAgICAgICAgY2xpZW50OiB7XG4gICAgICAgICAgICAgIG5hbWU6IGFyZy5jbGllbnROYW1lID8/IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvZHVjdE5hbWU6IGFyZy5wcm9kdWN0TmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGJyYW5kTmFtZTogYXJnLmJyYW5kTmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGluY29tZVR5cGU6IGFyZy5pbmNvbWVUeXBlIHx8ICcnLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgcHJvamVjdHMsIHNldHRlckRhdGEgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvamVjdFNlYXJjaCA9ICgpID0+IHtcbiAgY29uc3QgeyBwcm9qZWN0cywgc2V0dGVyRGF0YSB9ID0gRGF0YVBhcnNlZFRvUHJvamVjdHMoKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbaXNRdWVyeUluUHJvZ3Jlc3MsIHNldElzUXVlcnlJblByb2dyZXNzXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIDUwMClcblxuICBjb25zdCBbcmVjZW50UHJvamVjdHNEYXRhLCBzZXRSZWNlbnRQcm9qZWN0c0RhdGFdID0gdXNlU3RhdGU8UHJvamVjdEdyYXBoUUxbXSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtsb2FkaW5nUmVjZW50UHJvamVjdHMsIHNldExvYWRpbmdSZWNlbnRQcm9qZWN0c10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3JlY2VudEVycm9yLCBzZXRSZWNlbnRFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBmZXRjaFJlY2VudFByb2plY3RzV2l0aExvYWRpbmcgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldEVycm9yKGZhbHNlKVxuICAgIHNldFJlY2VudEVycm9yKGZhbHNlKVxuICAgIHNldElzUXVlcnlJblByb2dyZXNzKHRydWUpXG4gICAgc2V0TG9hZGluZ1JlY2VudFByb2plY3RzKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBtYWlhLlJlY2VudFByb2plY3RzLmdldFJlY2VudFByb2plY3RzKClcbiAgICAgIHNldFJlY2VudFByb2plY3RzRGF0YShBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtdKVxuICAgIH0gY2F0Y2gge1xuICAgICAgc2V0UmVjZW50RXJyb3IodHJ1ZSlcbiAgICAgIHNldFJlY2VudFByb2plY3RzRGF0YShudWxsKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nUmVjZW50UHJvamVjdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBbZmV0Y2hTZWFyY2hQcm9qZWN0cywgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBsb2FkaW5nU2VhcmNoUHJvamVjdHMsIGVycm9yOiBzZWFyY2hFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFF1ZXJ5U2VhcmNoUHJvamVjdERhdGE+KFNFQVJDSF9QUk9KRUNUUywge1xuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGxpbWl0OiAyMCxcbiAgICAgIH0sXG4gICAgfSlcblxuICBjb25zdCBoYW5kbGVGZXRjaFNlYXJjaFByb2plY3RzID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBmZXRjaFNlYXJjaFByb2plY3RzKHsgdmFyaWFibGVzOiB7IHE6IHZhbHVlLCBmaWx0ZXJzOiBKU09OLnN0cmluZ2lmeShUWVBFX1BST0pFQ1QpIH0gfSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdSZWNlbnRQcm9qZWN0cyB8fCBsb2FkaW5nU2VhcmNoUHJvamVjdHMpIHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgIH1cbiAgICBpZiAocmVjZW50RXJyb3IgfHwgc2VhcmNoRXJyb3IpIHtcbiAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNRdWVyeUluUHJvZ3Jlc3MoZmFsc2UpXG4gICAgfVxuICB9LCBbc2VhcmNoRXJyb3IsIGxvYWRpbmdTZWFyY2hQcm9qZWN0cywgbG9hZGluZ1JlY2VudFByb2plY3RzLCByZWNlbnRFcnJvcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdSZWNlbnRQcm9qZWN0cyAmJiAhbG9hZGluZ1NlYXJjaFByb2plY3RzICYmIGlzUXVlcnlJblByb2dyZXNzKSB7XG4gICAgICBzZXRJc1F1ZXJ5SW5Qcm9ncmVzcyhmYWxzZSlcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoRGF0YT8uc2VhcmNoICYmIGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSAmJiAhbG9hZGluZ1NlYXJjaFByb2plY3RzKSB7XG4gICAgICBjb25zdCBtYXBwZWRQcm9qZWN0cyA9IG1hcHBlclByb2plY3RzU2VhcmNoKHNlYXJjaERhdGEuc2VhcmNoKVxuICAgICAgc2V0dGVyRGF0YShtYXBwZWRQcm9qZWN0cywgZGVib3VuY2VkU2VhcmNoVmFsdWUpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgfVxuICAgIGlmIChyZWNlbnRQcm9qZWN0c0RhdGEgIT09IG51bGwgJiYgIWRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSAmJiAhbG9hZGluZ1JlY2VudFByb2plY3RzICYmICFpc1F1ZXJ5SW5Qcm9ncmVzcykge1xuICAgICAgc2V0dGVyRGF0YShyZWNlbnRQcm9qZWN0c0RhdGEpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgfVxuICB9LCBbXG4gICAgc2VhcmNoRGF0YSxcbiAgICByZWNlbnRQcm9qZWN0c0RhdGEsXG4gICAgZGVib3VuY2VkU2VhcmNoVmFsdWUsXG4gICAgbG9hZGluZ1JlY2VudFByb2plY3RzLFxuICAgIGxvYWRpbmdTZWFyY2hQcm9qZWN0cyxcbiAgICBpc1F1ZXJ5SW5Qcm9ncmVzcyxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgIGhhbmRsZUZldGNoU2VhcmNoUHJvamVjdHMoZGVib3VuY2VkU2VhcmNoVmFsdWUpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHJlY2VudFByb2plY3RzRGF0YV0pXG5cbiAgY29uc3QgdXBkYXRlU2VhcmNoVmFsdWUgPSAobmV3U2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKG5ld1NlYXJjaFZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmZXRjaFJlY2VudFByb2plY3RzOiBmZXRjaFJlY2VudFByb2plY3RzV2l0aExvYWRpbmcsXG4gICAgcmVjZW50UHJvamVjdHNMb2FkaW5nOiBsb2FkaW5nLFxuICAgIHJlY2VudFByb2plY3RzRXJyb3I6IGVycm9yLFxuICAgIHJlY2VudFByb2plY3RzOiBwcm9qZWN0cyxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZSxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUFTQSxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQVNDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxXQUFXLFFBQVEsT0FBTztBQUN4RCxPQUFPQyxJQUFJLE1BQU0sa0JBQWtCO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSw2Q0FBNkM7QUFDN0UsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUEwQzNDLElBQU1DLFlBQVksR0FBRztFQUFFQyxPQUFPLEVBQUUsTUFBTTtFQUFFQyxRQUFRLEVBQUU7QUFBTSxDQUFDO0FBRXpELElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLE1BQTZCLEVBQXVCO0VBQ2hGLE9BQU9BLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFQyxHQUFHLENBQUMsVUFBQUMsS0FBSztJQUFBLE9BQUs7TUFDM0JDLEVBQUUsRUFBRUQsS0FBSyxDQUFDQyxFQUFFO01BQ1pDLEtBQUssRUFBRUYsS0FBSyxDQUFDRSxLQUFLO01BQ2xCQyxVQUFVLEVBQUVILEtBQUssQ0FBQ0csVUFBVTtNQUM1QkMsV0FBVyxFQUFFSixLQUFLLENBQUNJLFdBQVc7TUFDOUJDLFNBQVMsRUFBRUwsS0FBSyxDQUFDSyxTQUFTO01BQzFCQyxVQUFVLEVBQUU7SUFDZCxDQUFDO0VBQUEsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE9B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
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwibWFpYSIsIlNFQVJDSF9QUk9KRUNUUyIsInVzZURlYm91bmNlIiwiVFlQRV9QUk9KRUNUIiwicHJvamVjdCIsImFyY2hpdmVkIiwibWFwcGVyUHJvamVjdHNTZWFyY2giLCJ2YWx1ZXMiLCJtYXAiLCJ2YWx1ZSIsIl92YWx1ZSRjbGllbnRJZCIsIl92YWx1ZSRmZWVJZCIsImlkIiwidGl0bGUiLCJjbGllbnROYW1lIiwicHJvZHVjdE5hbWUiLCJicmFuZE5hbWUiLCJpbmNvbWVUeXBlIiwiY2xpZW50SWQiLCJmZWVJZCIsIkRhdGFQYXJzZWRUb1Byb2plY3RzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicHJvamVjdHMiLCJzZXRQcm9qZWN0cyIsInNldHRlckRhdGEiLCJhcmdzIiwic2VhcmNoVmFsdWUiLCJsZW5ndGgiLCJhcmciLCJfYXJnJGNsaWVudE5hbWUiLCJwcm9qZWN0TmFtZSIsInRpdGxlSGlnaGxpZ2h0IiwidG9Mb2NhbGVMb3dlckNhc2UiLCJpbmNsdWRlcyIsInRleHRJbmRleCIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsInN0YXJ0IiwiX29iamVjdFNwcmVhZCIsIm5hbWUiLCJjbGllbnQiLCJ1c2VQcm9qZWN0U2VhcmNoIiwiX0RhdGFQYXJzZWRUb1Byb2plY3RzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2V0U2VhcmNoVmFsdWUiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzUXVlcnlJblByb2dyZXNzIiwic2V0SXNRdWVyeUluUHJvZ3Jlc3MiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInJlY2VudFByb2plY3RzRGF0YSIsInNldFJlY2VudFByb2plY3RzRGF0YSIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJsb2FkaW5nUmVjZW50UHJvamVjdHMiLCJzZXRMb2FkaW5nUmVjZW50UHJvamVjdHMiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwicmVjZW50RXJyb3IiLCJzZXRSZWNlbnRFcnJvciIsImZldGNoUmVjZW50UHJvamVjdHNXaXRoTG9hZGluZyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZGF0YSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFByb2plY3RzIiwic2VudCIsIkFycmF5IiwiaXNBcnJheSIsImZpbmlzaCIsInN0b3AiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJfdXNlTGF6eVF1ZXJ5MiIsImZldGNoU2VhcmNoUHJvamVjdHMiLCJfdXNlTGF6eVF1ZXJ5MiQiLCJzZWFyY2hEYXRhIiwibG9hZGluZ1NlYXJjaFByb2plY3RzIiwic2VhcmNoRXJyb3IiLCJoYW5kbGVGZXRjaFNlYXJjaFByb2plY3RzIiwicSIsImZpbHRlcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VhcmNoIiwidHJpbSIsIm1hcHBlZFByb2plY3RzIiwidXBkYXRlU2VhcmNoVmFsdWUiLCJuZXdTZWFyY2hWYWx1ZSIsImZldGNoUmVjZW50UHJvamVjdHMiLCJyZWNlbnRQcm9qZWN0c0xvYWRpbmciLCJyZWNlbnRQcm9qZWN0c0Vycm9yIiwicmVjZW50UHJvamVjdHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlUHJvamVjdFNlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VMYXp5UXVlcnkgfSBmcm9tICdAYXBvbGxvL2NsaWVudCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgU0VBUkNIX1BST0pFQ1RTIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvcHJvamVjdFNlYXJjaEJ5VmFsdWVRdWVyeSdcbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi91c2VEZWJvdW5jZSdcblxuZXhwb3J0IHR5cGUgUHJvamVjdEdyYXBoUUwgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgdGl0bGU6IHN0cmluZ1xuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9kdWN0TmFtZT86IHN0cmluZ1xuICBicmFuZE5hbWU/OiBzdHJpbmdcbiAgaW5jb21lVHlwZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgZmVlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFByb2plY3RTZXR0ZXIgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgLyoqIFJhbmdvIGRlbCB0w6lybWlubyBidXNjYWRvIGRlbnRybyBkZSBgdGl0bGVgIChzb2xvIHJlc3VsdGFkb3MgZGUgYsO6c3F1ZWRhKSAqL1xuICB0aXRsZUhpZ2hsaWdodD86IHsgc3RhcnQ6IG51bWJlcjsgbGVuZ3RoOiBudW1iZXIgfVxuICBjbGllbnRJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgZmVlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGNsaWVudD86IHtcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsXG4gIH1cbiAgcHJvZHVjdE5hbWU/OiBzdHJpbmdcbiAgYnJhbmROYW1lPzogc3RyaW5nXG4gIGluY29tZVR5cGU/OiBzdHJpbmdcbn1cblxudHlwZSBQcm9qZWN0U2VhcmNoUmVzdWx0ID0ge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIHRpdGxlOiBzdHJpbmdcbiAgdHlwZTogc3RyaW5nXG4gIGNsaWVudElkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBmZWVJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgY2xpZW50TmFtZTogc3RyaW5nXG4gIGJyYW5kTmFtZTogc3RyaW5nXG4gIHByb2R1Y3ROYW1lOiBzdHJpbmdcbiAgcHJvamVjdE5hbWU6IHN0cmluZ1xuICBzdGF0dXM6IHN0cmluZ1xuICBkZWFkbGluZTogc3RyaW5nXG4gIGRhdGV0aW1lOiBzdHJpbmdcbiAgYXJjaGl2ZWQ6IGJvb2xlYW5cbiAgX190eXBlbmFtZTogc3RyaW5nXG59XG5cbnR5cGUgUXVlcnlTZWFyY2hQcm9qZWN0RGF0YSA9IHsgc2VhcmNoOiBQcm9qZWN0U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cblxuY29uc3QgVFlQRV9QUk9KRUNUID0geyBwcm9qZWN0OiAndHJ1ZScsIGFyY2hpdmVkOiAnYWxsJyB9XG5cbmNvbnN0IG1hcHBlclByb2plY3RzU2VhcmNoID0gKHZhbHVlczogUHJvamVjdFNlYXJjaFJlc3VsdFtdKTogUHJvamVjdEdyYXBoUUxbXSA9PiB7XG4gIHJldHVybiB2YWx1ZXM/Lm1hcCh2YWx1ZSA9PiAoe1xuICAgIGlkOiB2YWx1ZS5pZCxcbiAgICB0aXRsZTogdmFsdWUudGl0bGUsXG4gICAgY2xpZW50TmFtZTogdmFsdWUuY2xpZW50TmFtZSxcbiAgICBwcm9kdWN0TmFtZTogdmFsdWUucHJvZHVjdE5hbWUsXG4gICAgYnJhbmROYW1lOiB2YWx1ZS5icmFuZE5hbWUsXG4gICAgaW5jb21lVHlwZTogJycsXG4gICAgY2xpZW50SWQ6IHZhbHVlLmNsaWVudElkID8/IG51bGwsXG4gICAgZmVlSWQ6IHZhbHVlLmZlZUlkID8/IG51bGwsXG4gIH0pKVxufVxuXG5leHBvcnQgY29uc3QgRGF0YVBhcnNlZFRvUHJvamVjdHMgPSAoKSA9PiB7XG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gdXNlU3RhdGU8UHJvamVjdFNldHRlcltdPihbXSlcbiAgY29uc3Qgc2V0dGVyRGF0YSA9IChhcmdzOiBQcm9qZWN0R3JhcGhRTFtdLCBzZWFyY2hWYWx1ZT86IHN0cmluZykgPT4ge1xuICAgIGlmICghYXJncy5sZW5ndGgpIHtcbiAgICAgIHNldFByb2plY3RzKFtdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRQcm9qZWN0cyhcbiAgICAgICAgYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IGFyZy50aXRsZSB8fCAnJ1xuICAgICAgICAgIGxldCB0aXRsZUhpZ2hsaWdodDogeyBzdGFydDogbnVtYmVyOyBsZW5ndGg6IG51bWJlciB9IHwgdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIHByb2plY3ROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleCA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgdGl0bGVIaWdobGlnaHQgPSB7IHN0YXJ0OiB0ZXh0SW5kZXgsIGxlbmd0aDogc2VhcmNoVmFsdWUubGVuZ3RoIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBhcmcuaWQsXG4gICAgICAgICAgICBuYW1lOiBhcmcudGl0bGUsXG4gICAgICAgICAgICB0aXRsZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICAuLi4odGl0bGVIaWdobGlnaHQgJiYgeyB0aXRsZUhpZ2hsaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihhcmcuY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGFyZy5jbGllbnRJZCB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGFyZy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogYXJnLmZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgICBjbGllbnQ6IHtcbiAgICAgICAgICAgICAgbmFtZTogYXJnLmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9kdWN0TmFtZTogYXJnLnByb2R1Y3ROYW1lIHx8ICcnLFxuICAgICAgICAgICAgYnJhbmROYW1lOiBhcmcuYnJhbmROYW1lIHx8ICcnLFxuICAgICAgICAgICAgaW5jb21lVHlwZTogYXJnLmluY29tZVR5cGUgfHwgJycsXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBwcm9qZWN0cywgc2V0dGVyRGF0YSB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9qZWN0U2VhcmNoID0gKCkgPT4ge1xuICBjb25zdCB7IHByb2plY3RzLCBzZXR0ZXJEYXRhIH0gPSBEYXRhUGFyc2VkVG9Qcm9qZWN0cygpXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc1F1ZXJ5SW5Qcm9ncmVzcywgc2V0SXNRdWVyeUluUHJvZ3Jlc3NdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoVmFsdWUgPSB1c2VEZWJvdW5jZShzZWFyY2hWYWx1ZSwgNTAwKVxuXG4gIGNvbnN0IFtyZWNlbnRQcm9qZWN0c0RhdGEsIHNldFJlY2VudFByb2plY3RzRGF0YV0gPSB1c2VTdGF0ZTxQcm9qZWN0R3JhcGhRTFtdIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2xvYWRpbmdSZWNlbnRQcm9qZWN0cywgc2V0TG9hZGluZ1JlY2VudFByb2plY3RzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcmVjZW50RXJyb3IsIHNldFJlY2VudEVycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGZldGNoUmVjZW50UHJvamVjdHNXaXRoTG9hZGluZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgc2V0UmVjZW50RXJyb3IoZmFsc2UpXG4gICAgc2V0SXNRdWVyeUluUHJvZ3Jlc3ModHJ1ZSlcbiAgICBzZXRMb2FkaW5nUmVjZW50UHJvamVjdHModHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG1haWEuUmVjZW50UHJvamVjdHMuZ2V0UmVjZW50UHJvamVjdHMoKVxuICAgICAgc2V0UmVjZW50UHJvamVjdHNEYXRhKEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW10pXG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRSZWNlbnRFcnJvcih0cnVlKVxuICAgICAgc2V0UmVjZW50UHJvamVjdHNEYXRhKG51bGwpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmdSZWNlbnRQcm9qZWN0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IFtmZXRjaFNlYXJjaFByb2plY3RzLCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IGxvYWRpbmdTZWFyY2hQcm9qZWN0cywgZXJyb3I6IHNlYXJjaEVycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8UXVlcnlTZWFyY2hQcm9qZWN0RGF0YT4oU0VBUkNIX1BST0pFQ1RTLCB7XG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgbGltaXQ6IDIwLFxuICAgICAgfSxcbiAgICB9KVxuXG4gIGNvbnN0IGhhbmRsZUZldGNoU2VhcmNoUHJvamVjdHMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGZldGNoU2VhcmNoUHJvamVjdHMoeyB2YXJpYWJsZXM6IHsgcTogdmFsdWUsIGZpbHRlcnM6IEpTT04uc3RyaW5naWZ5KFRZUEVfUFJPSkVDVCkgfSB9KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ1JlY2VudFByb2plY3RzIHx8IGxvYWRpbmdTZWFyY2hQcm9qZWN0cykge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgfVxuICAgIGlmIChyZWNlbnRFcnJvciB8fCBzZWFyY2hFcnJvcikge1xuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1F1ZXJ5SW5Qcm9ncmVzcyhmYWxzZSlcbiAgICB9XG4gIH0sIFtzZWFyY2hFcnJvciwgbG9hZGluZ1NlYXJjaFByb2plY3RzLCBsb2FkaW5nUmVjZW50UHJvamVjdHMsIHJlY2VudEVycm9yXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ1JlY2VudFByb2plY3RzICYmICFsb2FkaW5nU2VhcmNoUHJvamVjdHMgJiYgaXNRdWVyeUluUHJvZ3Jlc3MpIHtcbiAgICAgIHNldElzUXVlcnlJblByb2dyZXNzKGZhbHNlKVxuICAgIH1cblxuICAgIGlmIChzZWFyY2hEYXRhPy5zZWFyY2ggJiYgZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpICYmICFsb2FkaW5nU2VhcmNoUHJvamVjdHMpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFByb2plY3RzID0gbWFwcGVyUHJvamVjdHNTZWFyY2goc2VhcmNoRGF0YS5zZWFyY2gpXG4gICAgICBzZXR0ZXJEYXRhKG1hcHBlZFByb2plY3RzLCBkZWJvdW5jZWRTZWFyY2hWYWx1ZSlcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB9XG4gICAgaWYgKHJlY2VudFByb2plY3RzRGF0YSAhPT0gbnVsbCAmJiAhZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpICYmICFsb2FkaW5nUmVjZW50UHJvamVjdHMgJiYgIWlzUXVlcnlJblByb2dyZXNzKSB7XG4gICAgICBzZXR0ZXJEYXRhKHJlY2VudFByb2plY3RzRGF0YSlcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB9XG4gIH0sIFtcbiAgICBzZWFyY2hEYXRhLFxuICAgIHJlY2VudFByb2plY3RzRGF0YSxcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICBsb2FkaW5nUmVjZW50UHJvamVjdHMsXG4gICAgbG9hZGluZ1NlYXJjaFByb2plY3RzLFxuICAgIGlzUXVlcnlJblByb2dyZXNzLFxuICBdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSkge1xuICAgICAgaGFuZGxlRmV0Y2hTZWFyY2hQcm9qZWN0cyhkZWJvdW5jZWRTZWFyY2hWYWx1ZSlcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgcmVjZW50UHJvamVjdHNEYXRhXSlcblxuICBjb25zdCB1cGRhdGVTZWFyY2hWYWx1ZSA9IChuZXdTZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VhcmNoVmFsdWUobmV3U2VhcmNoVmFsdWUpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZldGNoUmVjZW50UHJvamVjdHM6IGZldGNoUmVjZW50UHJvamVjdHNXaXRoTG9hZGluZyxcbiAgICByZWNlbnRQcm9qZWN0c0xvYWRpbmc6IGxvYWRpbmcsXG4gICAgcmVjZW50UHJvamVjdHNFcnJvcjogZXJyb3IsXG4gICAgcmVjZW50UHJvamVjdHM6IHByb2plY3RzLFxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQVNBLFlBQVksUUFBUSxnQkFBZ0I7QUFDN0MsU0FBU0MsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsUUFBUSxPQUFPO0FBQ3hELE9BQU9DLElBQUksTUFBTSxrQkFBa0I7QUFDbkMsU0FBU0Ms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
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { useSmoothStreamText } from './useSmoothStreamText';
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTbW9vdGhTdHJlYW1UZXh0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4vdXNlU21vb3RoU3RyZWFtVGV4dCdcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsbUJBQW1CLFFBQVEsdUJBQXVCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Hook que desacopla la cadencia de llegada del texto (stream SSE) de la
|
|
5
|
+
* cadencia de renderizado. Usa `requestAnimationFrame` para liberar chars
|
|
6
|
+
* a ritmo constante hacia el DOM, eliminando los "frenos" que se producen
|
|
7
|
+
* cuando el backend emite ráfagas de tokens.
|
|
8
|
+
*
|
|
9
|
+
* Cuando `enabled` pasa a false (fin de stream), el texto se completa al
|
|
10
|
+
* instante. Durante el streaming, el buffer se vacía dinámicamente apuntando
|
|
11
|
+
* al lag configurado.
|
|
12
|
+
*/
|
|
13
|
+
export var useSmoothStreamText = function useSmoothStreamText(targetText, _ref) {
|
|
14
|
+
var enabled = _ref.enabled,
|
|
15
|
+
_ref$minCharsPerFrame = _ref.minCharsPerFrame,
|
|
16
|
+
minCharsPerFrame = _ref$minCharsPerFrame === void 0 ? 1 : _ref$minCharsPerFrame,
|
|
17
|
+
_ref$maxCharsPerFrame = _ref.maxCharsPerFrame,
|
|
18
|
+
maxCharsPerFrame = _ref$maxCharsPerFrame === void 0 ? 24 : _ref$maxCharsPerFrame,
|
|
19
|
+
_ref$targetLagMs = _ref.targetLagMs,
|
|
20
|
+
targetLagMs = _ref$targetLagMs === void 0 ? 450 : _ref$targetLagMs,
|
|
21
|
+
_ref$snapToWordBounda = _ref.snapToWordBoundary,
|
|
22
|
+
snapToWordBoundary = _ref$snapToWordBounda === void 0 ? false : _ref$snapToWordBounda,
|
|
23
|
+
_ref$adaptToBackendRa = _ref.adaptToBackendRate,
|
|
24
|
+
adaptToBackendRate = _ref$adaptToBackendRa === void 0 ? true : _ref$adaptToBackendRa,
|
|
25
|
+
_ref$backendRateFacto = _ref.backendRateFactor,
|
|
26
|
+
backendRateFactor = _ref$backendRateFacto === void 0 ? 0.95 : _ref$backendRateFacto,
|
|
27
|
+
_ref$targetBufferMs = _ref.targetBufferMs,
|
|
28
|
+
targetBufferMs = _ref$targetBufferMs === void 0 ? 600 : _ref$targetBufferMs,
|
|
29
|
+
_ref$bufferCorrection = _ref.bufferCorrectionMs,
|
|
30
|
+
bufferCorrectionMs = _ref$bufferCorrection === void 0 ? 500 : _ref$bufferCorrection,
|
|
31
|
+
_ref$minBufferChars = _ref.minBufferChars,
|
|
32
|
+
minBufferChars = _ref$minBufferChars === void 0 ? 70 : _ref$minBufferChars,
|
|
33
|
+
_ref$warmupMs = _ref.warmupMs,
|
|
34
|
+
warmupMs = _ref$warmupMs === void 0 ? 400 : _ref$warmupMs;
|
|
35
|
+
var _useState = useState(function () {
|
|
36
|
+
return enabled ? '' : targetText;
|
|
37
|
+
}),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
displayed = _useState2[0],
|
|
40
|
+
setDisplayed = _useState2[1];
|
|
41
|
+
var targetRef = useRef(targetText);
|
|
42
|
+
var displayedLenRef = useRef(displayed.length);
|
|
43
|
+
var rafRef = useRef(null);
|
|
44
|
+
var lastTickRef = useRef(0);
|
|
45
|
+
|
|
46
|
+
// Medición de la cadencia del backend: se actualiza cuando cambia targetText.
|
|
47
|
+
var lastTargetLenRef = useRef(0);
|
|
48
|
+
var lastTargetUpdateRef = useRef(0);
|
|
49
|
+
// Estimación EMA de chars/ms producidos por el backend.
|
|
50
|
+
var backendCharsPerMsRef = useRef(0);
|
|
51
|
+
// Timestamp del primer chunk recibido (para warmup).
|
|
52
|
+
var firstChunkAtRef = useRef(0);
|
|
53
|
+
// Si el warmup ya terminó (una vez true, no vuelve a activarse en este stream).
|
|
54
|
+
var warmupDoneRef = useRef(false);
|
|
55
|
+
useEffect(function () {
|
|
56
|
+
var now = typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
57
|
+
var prevTargetLen = lastTargetLenRef.current;
|
|
58
|
+
var deltaChars = targetText.length - prevTargetLen;
|
|
59
|
+
var prevTargetAt = lastTargetUpdateRef.current;
|
|
60
|
+
if (enabled && deltaChars > 0) {
|
|
61
|
+
if (firstChunkAtRef.current === 0) firstChunkAtRef.current = now;
|
|
62
|
+
}
|
|
63
|
+
if (enabled && deltaChars > 0 && prevTargetAt > 0) {
|
|
64
|
+
var dt = Math.max(1, now - prevTargetAt);
|
|
65
|
+
var rate = deltaChars / dt;
|
|
66
|
+
var prevRate = backendCharsPerMsRef.current;
|
|
67
|
+
// EMA suave (alpha = 0.2) para absorber jitter y seguir la tendencia.
|
|
68
|
+
backendCharsPerMsRef.current = prevRate === 0 ? rate : prevRate * 0.8 + rate * 0.2;
|
|
69
|
+
}
|
|
70
|
+
if (enabled && targetText.length !== prevTargetLen) {
|
|
71
|
+
lastTargetLenRef.current = targetText.length;
|
|
72
|
+
lastTargetUpdateRef.current = now;
|
|
73
|
+
}
|
|
74
|
+
targetRef.current = targetText;
|
|
75
|
+
if (!enabled) {
|
|
76
|
+
if (rafRef.current != null) {
|
|
77
|
+
cancelAnimationFrame(rafRef.current);
|
|
78
|
+
rafRef.current = null;
|
|
79
|
+
}
|
|
80
|
+
lastTickRef.current = 0;
|
|
81
|
+
if (displayedLenRef.current !== targetText.length) {
|
|
82
|
+
displayedLenRef.current = targetText.length;
|
|
83
|
+
setDisplayed(targetText);
|
|
84
|
+
}
|
|
85
|
+
// Reset de cadencia cuando se apaga para no contaminar el próximo stream.
|
|
86
|
+
lastTargetLenRef.current = 0;
|
|
87
|
+
lastTargetUpdateRef.current = 0;
|
|
88
|
+
backendCharsPerMsRef.current = 0;
|
|
89
|
+
firstChunkAtRef.current = 0;
|
|
90
|
+
warmupDoneRef.current = false;
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
if (displayedLenRef.current > targetText.length) {
|
|
94
|
+
displayedLenRef.current = 0;
|
|
95
|
+
setDisplayed('');
|
|
96
|
+
}
|
|
97
|
+
if (rafRef.current != null) return undefined;
|
|
98
|
+
var _tick = function tick(tickNow) {
|
|
99
|
+
var prev = lastTickRef.current;
|
|
100
|
+
var dt = prev ? Math.min(tickNow - prev, 64) : 16;
|
|
101
|
+
lastTickRef.current = tickNow;
|
|
102
|
+
var target = targetRef.current;
|
|
103
|
+
var currentLen = displayedLenRef.current;
|
|
104
|
+
var remaining = target.length - currentLen;
|
|
105
|
+
if (remaining <= 0) {
|
|
106
|
+
rafRef.current = requestAnimationFrame(_tick);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Warmup: al comienzo del stream esperamos `warmupMs` desde el primer
|
|
111
|
+
// chunk antes de empezar a pintar. Esto construye un colchón inicial y
|
|
112
|
+
// evita arrancar rápido para congelarnos acto seguido si el backend
|
|
113
|
+
// tarda mucho en emitir el segundo chunk.
|
|
114
|
+
if (!warmupDoneRef.current) {
|
|
115
|
+
var firstAt = firstChunkAtRef.current;
|
|
116
|
+
var waitedMs = firstAt > 0 ? tickNow - firstAt : 0;
|
|
117
|
+
var warmupComplete = warmupMs <= 0 || waitedMs >= warmupMs || target.length >= minBufferChars * 2;
|
|
118
|
+
if (!warmupComplete) {
|
|
119
|
+
rafRef.current = requestAnimationFrame(_tick);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
warmupDoneRef.current = true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Velocidad base: vaciar el buffer en ~targetLagMs.
|
|
126
|
+
var charsPerMs = remaining / targetLagMs;
|
|
127
|
+
var effectiveCharsPerMs = charsPerMs;
|
|
128
|
+
var backendRate = backendCharsPerMsRef.current;
|
|
129
|
+
if (adaptToBackendRate && backendRate > 0) {
|
|
130
|
+
if (typeof targetBufferMs === 'number') {
|
|
131
|
+
// Control proporcional: mantener el buffer en torno al colchón
|
|
132
|
+
// objetivo. Si bufferMs < target → frenamos por debajo del backend
|
|
133
|
+
// para acumular; si bufferMs > target → aceleramos para descargar.
|
|
134
|
+
// En equilibrio, pintamos al ritmo promedio del backend.
|
|
135
|
+
//
|
|
136
|
+
// El colchón objetivo se calcula sobre la tasa **efectiva** que
|
|
137
|
+
// podemos pintar (capeada por `maxCharsPerFrame` a 60fps), no sobre
|
|
138
|
+
// la del backend pura. Esto evita el caso patológico de ráfagas:
|
|
139
|
+
// si el backend tira a 6500 ch/s, el target NO se vuelve 3900 chars
|
|
140
|
+
// (que el render jamás podría sostener), sino algo razonable que
|
|
141
|
+
// la animación pueda mantener.
|
|
142
|
+
//
|
|
143
|
+
// Piso absoluto: el colchón nunca baja de `minBufferChars` aunque
|
|
144
|
+
// el backend esté mandando lento al inicio del stream.
|
|
145
|
+
var renderRateCap = maxCharsPerFrame * 60 / 1000;
|
|
146
|
+
var effectiveBufferRate = Math.min(backendRate, renderRateCap);
|
|
147
|
+
var targetBufferChars = Math.max(minBufferChars, targetBufferMs * effectiveBufferRate);
|
|
148
|
+
var bufferDelta = remaining - targetBufferChars;
|
|
149
|
+
// Corrección tiene unidades de chars/ms. bufferCorrectionMs controla
|
|
150
|
+
// qué tan rápido el buffer real converge al objetivo.
|
|
151
|
+
var correction = bufferDelta / Math.max(1, bufferCorrectionMs);
|
|
152
|
+
effectiveCharsPerMs = Math.max(0, backendRate + correction);
|
|
153
|
+
// Acotar por la velocidad de "vaciar en targetLagMs" para que si
|
|
154
|
+
// de pronto hay un pico gigante de buffer no salgamos disparados.
|
|
155
|
+
effectiveCharsPerMs = Math.min(effectiveCharsPerMs, charsPerMs);
|
|
156
|
+
} else {
|
|
157
|
+
// Modo simple: cap a la tasa del backend * factor.
|
|
158
|
+
var cap = backendRate * backendRateFactor;
|
|
159
|
+
effectiveCharsPerMs = Math.min(effectiveCharsPerMs, cap);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
var rawStep = Math.ceil(effectiveCharsPerMs * dt);
|
|
163
|
+
var step = Math.max(minCharsPerFrame, Math.min(maxCharsPerFrame, rawStep));
|
|
164
|
+
var nextLen = Math.min(target.length, currentLen + step);
|
|
165
|
+
if (snapToWordBoundary && nextLen < target.length) {
|
|
166
|
+
var slice = target.slice(currentLen, nextLen);
|
|
167
|
+
var lastBoundary = Math.max(slice.lastIndexOf(' '), slice.lastIndexOf('\n'), slice.lastIndexOf('\t'));
|
|
168
|
+
if (lastBoundary >= 0) {
|
|
169
|
+
nextLen = currentLen + lastBoundary + 1;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (nextLen !== currentLen) {
|
|
173
|
+
displayedLenRef.current = nextLen;
|
|
174
|
+
setDisplayed(target.slice(0, nextLen));
|
|
175
|
+
}
|
|
176
|
+
rafRef.current = requestAnimationFrame(_tick);
|
|
177
|
+
};
|
|
178
|
+
rafRef.current = requestAnimationFrame(_tick);
|
|
179
|
+
return function () {
|
|
180
|
+
if (rafRef.current != null) {
|
|
181
|
+
cancelAnimationFrame(rafRef.current);
|
|
182
|
+
rafRef.current = null;
|
|
183
|
+
}
|
|
184
|
+
lastTickRef.current = 0;
|
|
185
|
+
};
|
|
186
|
+
}, [targetText, enabled, minCharsPerFrame, maxCharsPerFrame, targetLagMs, snapToWordBoundary, adaptToBackendRate, backendRateFactor, targetBufferMs, bufferCorrectionMs, minBufferChars, warmupMs]);
|
|
187
|
+
return displayed;
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ0YXJnZXRUZXh0IiwiX3JlZiIsImVuYWJsZWQiLCJfcmVmJG1pbkNoYXJzUGVyRnJhbWUiLCJtaW5DaGFyc1BlckZyYW1lIiwiX3JlZiRtYXhDaGFyc1BlckZyYW1lIiwibWF4Q2hhcnNQZXJGcmFtZSIsIl9yZWYkdGFyZ2V0TGFnTXMiLCJ0YXJnZXRMYWdNcyIsIl9yZWYkc25hcFRvV29yZEJvdW5kYSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsIl9yZWYkYWRhcHRUb0JhY2tlbmRSYSIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsIl9yZWYkYmFja2VuZFJhdGVGYWN0byIsImJhY2tlbmRSYXRlRmFjdG9yIiwiX3JlZiR0YXJnZXRCdWZmZXJNcyIsInRhcmdldEJ1ZmZlck1zIiwiX3JlZiRidWZmZXJDb3JyZWN0aW9uIiwiYnVmZmVyQ29ycmVjdGlvbk1zIiwiX3JlZiRtaW5CdWZmZXJDaGFycyIsIm1pbkJ1ZmZlckNoYXJzIiwiX3JlZiR3YXJtdXBNcyIsIndhcm11cE1zIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGlzcGxheWVkIiwic2V0RGlzcGxheWVkIiwidGFyZ2V0UmVmIiwiZGlzcGxheWVkTGVuUmVmIiwibGVuZ3RoIiwicmFmUmVmIiwibGFzdFRpY2tSZWYiLCJsYXN0VGFyZ2V0TGVuUmVmIiwibGFzdFRhcmdldFVwZGF0ZVJlZiIsImJhY2tlbmRDaGFyc1Blck1zUmVmIiwiZmlyc3RDaHVua0F0UmVmIiwid2FybXVwRG9uZVJlZiIsIm5vdyIsInBlcmZvcm1hbmNlIiwiRGF0ZSIsInByZXZUYXJnZXRMZW4iLCJjdXJyZW50IiwiZGVsdGFDaGFycyIsInByZXZUYXJnZXRBdCIsImR0IiwiTWF0aCIsIm1heCIsInJhdGUiLCJwcmV2UmF0ZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwidW5kZWZpbmVkIiwidGljayIsInRpY2tOb3ciLCJwcmV2IiwibWluIiwidGFyZ2V0IiwiY3VycmVudExlbiIsInJlbWFpbmluZyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImZpcnN0QXQiLCJ3YWl0ZWRNcyIsIndhcm11cENvbXBsZXRlIiwiY2hhcnNQZXJNcyIsImVmZmVjdGl2ZUNoYXJzUGVyTXMiLCJiYWNrZW5kUmF0ZSIsInJlbmRlclJhdGVDYXAiLCJlZmZlY3RpdmVCdWZmZXJSYXRlIiwidGFyZ2V0QnVmZmVyQ2hhcnMiLCJidWZmZXJEZWx0YSIsImNvcnJlY3Rpb24iLCJjYXAiLCJyYXdTdGVwIiwiY2VpbCIsInN0ZXAiLCJuZXh0TGVuIiwic2xpY2UiLCJsYXN0Qm91bmRhcnkiLCJsYXN0SW5kZXhPZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0L3VzZVNtb290aFN0cmVhbVRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgVXNlU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMgPSB7XG4gIC8qKiBTaSBlc3TDoSBkZXNoYWJpbGl0YWRvLCBkZXZ1ZWx2ZSBlbCB0YXJnZXQgdGFsIGN1YWwgKHNpbiBhbmltYWNpw7NuKS4gKi9cbiAgZW5hYmxlZDogYm9vbGVhblxuICAvKiogQ2FudGlkYWQgbcOtbmltYSBkZSBjaGFycyBhIGxpYmVyYXIgcG9yIGZyYW1lIGN1YW5kbyBoYXkgYnVmZmVyLiAqL1xuICBtaW5DaGFyc1BlckZyYW1lPzogbnVtYmVyXG4gIC8qKiBDb3RhIHN1cGVyaW9yIGRlIGNoYXJzIHBvciBmcmFtZSBwYXJhIGV2aXRhciBzYWx0b3MgZ3JhbmRlcy4gKi9cbiAgbWF4Q2hhcnNQZXJGcmFtZT86IG51bWJlclxuICAvKipcbiAgICogTGFnIG9iamV0aXZvIChtcykgZW50cmUgZWwgdGV4dG8gcmVjaWJpZG8geSBlbCBtb3N0cmFkby4gRWwgaG9vayBjYWxjdWxhXG4gICAqIGRpbsOhbWljYW1lbnRlIGVsIHN0ZXAgcG9yIGZyYW1lIHBhcmEgdmFjaWFyIGVsIGJ1ZmZlciBlbiB+dGFyZ2V0TGFnTXMuXG4gICAqIFZhbG9yZXMgbcOhcyBiYWpvcyA9IHNlIHBvbmUgYWwgZMOtYSBtw6FzIHLDoXBpZG8gKG1lbm9zIFwic3VhdmVcIikuXG4gICAqL1xuICB0YXJnZXRMYWdNcz86IG51bWJlclxuICAvKipcbiAgICogU2kgZXN0w6EgYWN0aXZvLCBhbCBhdmFuemFyIHNlIGRldGllbmUgZW4gZWwgw7psdGltbyBzZXBhcmFkb3IgZGUgcGFsYWJyYVxuICAgKiAoZXNwYWNpbywgc2FsdG8gZGUgbMOtbmVhLCBzaWdub3MgZGUgcHVudHVhY2nDs24pIHBhcmEgZXZpdGFyIHJlbmRlcml6YXJcbiAgICogbWFya2Rvd24gXCJjb3J0YWRvIGEgbGEgbWl0YWRcIiB5IGRhciB1bmEgc2Vuc2FjacOzbiBtw6FzIG5hdHVyYWwuXG4gICAqL1xuICBzbmFwVG9Xb3JkQm91bmRhcnk/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTaSBlc3TDoSBhY3Rpdm8sIG1pZGUgbGEgdGFzYSBwcm9tZWRpbyBhIGxhIHF1ZSBjcmVjZSBlbCB0YXJnZXQgKGNhZGVuY2lhXG4gICAqIGRlbCBiYWNrZW5kIGVuIGNoYXJzL21zKSB5IGxpbWl0YSBsYSB2ZWxvY2lkYWQgZGUgcGludGFkbyBhIGVzYSB0YXNhXG4gICAqIChtdWx0aXBsaWNhZGEgcG9yIGBiYWNrZW5kUmF0ZUZhY3RvcmApLiBFc3RvIGV2aXRhIGVsIGNhc28gdMOtcGljbyBkZVxuICAgKiBcInBpbnRvIHLDoXBpZG8gaGFzdGEgdmFjaWFyIGVsIGJ1ZmZlciB5IGRlc3B1w6lzIHNlIGNvbmdlbGEgZXNwZXJhbmRvXG4gICAqIGFsIHByw7N4aW1vIGNodW5rIGRlbCBiYWNrZW5kXCIuXG4gICAqL1xuICBhZGFwdFRvQmFja2VuZFJhdGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiBGYWN0b3IgYXBsaWNhZG8gYSBsYSB0YXNhIGRlbCBiYWNrZW5kIGN1YW5kbyBgYWRhcHRUb0JhY2tlbmRSYXRlYCBlc3TDoVxuICAgKiBhY3Rpdm8uIFZhbG9yZXMgPCAxIGRlamFuIHVuIGNvbGNow7NuIGNyZWNpZW50ZSAobcOhcyB0b2xlcmFudGUgYSBwYXVzYXMpO1xuICAgKiB2YWxvcmVzID4gMSBpbnRlbnRhbiBhbGNhbnphci4gRGVmYXVsdDogMC45NS5cbiAgICovXG4gIGJhY2tlbmRSYXRlRmFjdG9yPzogbnVtYmVyXG4gIC8qKlxuICAgKiBDb2xjaMOzbiBvYmpldGl2byBkZSBidWZmZXIgZXhwcmVzYWRvIGVuIG1zIChjdcOhbnRvIHRpZW1wbyBkZSB0ZXh0byBxdWVyZW1vc1xuICAgKiB0ZW5lciBzaWVtcHJlIGFkZWxhbnRhZG8gYWwgcGludGFkbykuIFNpIGVzdMOhIGRlZmluaWRvIGp1bnRvIGNvblxuICAgKiBgYWRhcHRUb0JhY2tlbmRSYXRlYCwgc2UgdXNhIHVuIGNvbnRyb2wgcHJvcG9yY2lvbmFsOiBjdWFuZG8gZWwgYnVmZmVyXG4gICAqIGJhamEgZGVsIG9iamV0aXZvLCBsYSB2ZWxvY2lkYWQgY2FlIHBvciBkZWJham8gZGUgbGEgZGVsIGJhY2tlbmQgcGFyYVxuICAgKiByZWxsZW5hcmxvOyBjdWFuZG8gbG8gc3VwZXJhLCBzZSBhY2VsZXJhIHBhcmEgZGVzY2FyZ2FybG8uIEFzw60gbGFcbiAgICogYW5pbWFjacOzbiBhYnNvcmJlIHBhdXNhcyBkZWwgYmFja2VuZCBzaW4gcXVlZGFyc2UgaWRsZS5cbiAgICpcbiAgICogVmFsb3IgcmVjb21lbmRhZG86IDMwMOKAkzYwMG1zIHNlZ8O6biBsYSBlc3RhYmlsaWRhZCBkZWwgYmFja2VuZC5cbiAgICovXG4gIHRhcmdldEJ1ZmZlck1zPzogbnVtYmVyXG4gIC8qKlxuICAgKiBDb25zdGFudGUgZGUgdGllbXBvIChtcykgZGVsIGNvbnRyb2xhZG9yIGRlbCBidWZmZXIuIEN1YW50byBtw6FzIGJham8sXG4gICAqIG3DoXMgYWdyZXNpdmFtZW50ZSBjb3JyaWdlIGRlc3bDrW9zLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICBidWZmZXJDb3JyZWN0aW9uTXM/OiBudW1iZXJcbiAgLyoqXG4gICAqIFBpc28gYWJzb2x1dG8gZGVsIGNvbGNow7NuIGVuIGNoYXJzOiBlbCBgdGFyZ2V0QnVmZmVyQ2hhcnNgIGNhbGN1bGFkbyBhXG4gICAqIHBhcnRpciBkZSBgdGFyZ2V0QnVmZmVyTXMgw5cgYmFja2VuZFJhdGVgIG51bmNhIGJhamEgZGUgZXN0ZSB2YWxvci4gw5p0aWxcbiAgICogYWwgY29taWVuem8gZGVsIHN0cmVhbSBjdWFuZG8gbGEgdGFzYSBlc3RpbWFkYSBkZWwgYmFja2VuZCBlcyBiYWphLlxuICAgKiBEZWZhdWx0OiA3MC5cbiAgICovXG4gIG1pbkJ1ZmZlckNoYXJzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBXYXJtdXA6IG1zIHF1ZSBlbCBob29rIGVzcGVyYSBcImFjdW11bGFuZG9cIiBhbnRlcyBkZSBlbXBlemFyIGEgcGludGFyLFxuICAgKiBpbmNsdXNvIHNpIHlhIGhheSBjaGFycyBlbiBlbCBidWZmZXIuIEV2aXRhIGVsIHTDrXBpY28gXCJhcnJhbnF1ZSByw6FwaWRvLFxuICAgKiBjb25nZWxhbWllbnRvXCIgY3VhbmRvIGVsIHByaW1lciBjaHVuayBsbGVnYSBhbnRlcyBxdWUgZWwgc2VndW5kbyBzZVxuICAgKiB0YXJkYSBtdWNoby4gU2kgc2UgZGVmaW5lIGNvbW8gMCwgbm8gaGF5IHdhcm11cC4gRGVmYXVsdDogNDAwLlxuICAgKi9cbiAgd2FybXVwTXM/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBIb29rIHF1ZSBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGUgbGxlZ2FkYSBkZWwgdGV4dG8gKHN0cmVhbSBTU0UpIGRlIGxhXG4gKiBjYWRlbmNpYSBkZSByZW5kZXJpemFkby4gVXNhIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIHBhcmEgbGliZXJhciBjaGFyc1xuICogYSByaXRtbyBjb25zdGFudGUgaGFjaWEgZWwgRE9NLCBlbGltaW5hbmRvIGxvcyBcImZyZW5vc1wiIHF1ZSBzZSBwcm9kdWNlblxuICogY3VhbmRvIGVsIGJhY2tlbmQgZW1pdGUgcsOhZmFnYXMgZGUgdG9rZW5zLlxuICpcbiAqIEN1YW5kbyBgZW5hYmxlZGAgcGFzYSBhIGZhbHNlIChmaW4gZGUgc3RyZWFtKSwgZWwgdGV4dG8gc2UgY29tcGxldGEgYWxcbiAqIGluc3RhbnRlLiBEdXJhbnRlIGVsIHN0cmVhbWluZywgZWwgYnVmZmVyIHNlIHZhY8OtYSBkaW7DoW1pY2FtZW50ZSBhcHVudGFuZG9cbiAqIGFsIGxhZyBjb25maWd1cmFkby5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVNtb290aFN0cmVhbVRleHQgPSAoXG4gIHRhcmdldFRleHQ6IHN0cmluZyxcbiAge1xuICAgIGVuYWJsZWQsXG4gICAgbWluQ2hhcnNQZXJGcmFtZSA9IDEsXG4gICAgbWF4Q2hhcnNQZXJGcmFtZSA9IDI0LFxuICAgIHRhcmdldExhZ01zID0gNDUwLFxuICAgIHNuYXBUb1dvcmRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIGFkYXB0VG9CYWNrZW5kUmF0ZSA9IHRydWUsXG4gICAgYmFja2VuZFJhdGVGYWN0b3IgPSAwLjk1LFxuICAgIHRhcmdldEJ1ZmZlck1zID0gNjAwLFxuICAgIGJ1ZmZlckNvcnJlY3Rpb25NcyA9IDUwMCxcbiAgICBtaW5CdWZmZXJDaGFycyA9IDcwLFxuICAgIHdhcm11cE1zID0gNDAwLFxuICB9OiBVc2VTbW9vdGhTdHJlYW1UZXh0T3B0aW9uc1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgW2Rpc3BsYXllZCwgc2V0RGlzcGxheWVkXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4gKGVuYWJsZWQgPyAnJyA6IHRhcmdldFRleHQpKVxuXG4gIGNvbnN0IHRhcmdldFJlZiA9IHVzZVJlZih0YXJnZXRUZXh0KVxuICBjb25zdCBkaXNwbGF5ZWRMZW5SZWYgPSB1c2VSZWYoZGlzcGxheWVkLmxlbmd0aClcbiAgY29uc3QgcmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RUaWNrUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBNZWRpY2nDs24gZGUgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQ6IHNlIGFjdHVhbGl6YSBjdWFuZG8gY2FtYmlhIHRhcmdldFRleHQuXG4gIGNvbnN0IGxhc3RUYXJnZXRMZW5SZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuICBjb25zdCBsYXN0VGFyZ2V0VXBkYXRlUmVmID0gdXNlUmVmPG51bWJlcj4oMClcbiAgLy8gRXN0aW1hY2nDs24gRU1BIGRlIGNoYXJzL21zIHByb2R1Y2lkb3MgcG9yIGVsIGJhY2tlbmQuXG4gIGNvbnN0IGJhY2tlbmRDaGFyc1Blck1zUmVmID0gdXNlUmVmPG51bWJlcj4oMClcbiAgLy8gVGltZXN0YW1wIGRlbCBwcmltZXIgY2h1bmsgcmVjaWJpZG8gKHBhcmEgd2FybXVwKS5cbiAgY29uc3QgZmlyc3RDaHVua0F0UmVmID0gdXNlUmVmPG51bWJlcj4oMClcbiAgLy8gU2kgZWwgd2FybXVwIHlhIHRlcm1pbsOzICh1bmEgdmV6IHRydWUsIG5vIHZ1ZWx2ZSBhIGFjdGl2YXJzZSBlbiBlc3RlIHN0cmVhbSkuXG4gIGNvbnN0IHdhcm11cERvbmVSZWYgPSB1c2VSZWY8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBub3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnID8gcGVyZm9ybWFuY2Uubm93KCkgOiBEYXRlLm5vdygpXG4gICAgY29uc3QgcHJldlRhcmdldExlbiA9IGxhc3RUYXJnZXRMZW5SZWYuY3VycmVudFxuICAgIGNvbnN0IGRlbHRhQ2hhcnMgPSB0YXJnZXRUZXh0Lmxlbmd0aCAtIHByZXZUYXJnZXRMZW5cbiAgICBjb25zdCBwcmV2VGFyZ2V0QXQgPSBsYXN0VGFyZ2V0VXBkYXRlUmVmLmN1cnJlbnRcblxuICAgIGlmIChlbmFibGVkICYmIGRlbHRhQ2hhcnMgPiAwKSB7XG4gICAgICBpZiAoZmlyc3RDaHVua0F0UmVmLmN1cnJlbnQgPT09IDApIGZpcnN0Q2h1bmtBdFJlZi5jdXJyZW50ID0gbm93XG4gICAgfVxuXG4gICAgaWYgKGVuYWJsZWQgJiYgZGVsdGFDaGFycyA+IDAgJiYgcHJldlRhcmdldEF0ID4gMCkge1xuICAgICAgY29uc3QgZHQgPSBNYXRoLm1heCgxLCBub3cgLSBwcmV2VGFyZ2V0QXQpXG4gICAgICBjb25zdCByYXRlID0gZGVsdGFDaGFycyAvIGR0XG4gICAgICBjb25zdCBwcmV2UmF0ZSA9IGJhY2tlbmRDaGFyc1Blck1zUmVmLmN1cnJlbnRcbiAgICAgIC8vIEVNQSBzdWF2ZSAoYWxwaGEgPSAwLjIpIHBhcmEgYWJzb3JiZXIgaml0dGVyIHkgc2VndWlyIGxhIHRlbmRlbmNpYS5cbiAgICAgIGJhY2tlbmRDaGFyc1Blck1zUmVmLmN1cnJlbnQgPSBwcmV2UmF0ZSA9PT0gMCA/IHJhdGUgOiBwcmV2UmF0ZSAqIDAuOCArIHJhdGUgKiAwLjJcbiAgICB9XG4gICAgaWYgKGVuYWJsZWQgJiYgdGFyZ2V0VGV4dC5sZW5ndGggIT09IHByZXZUYXJnZXRMZW4pIHtcbiAgICAgIGxhc3RUYXJnZXRMZW5SZWYuY3VycmVudCA9IHRhcmdldFRleHQubGVuZ3RoXG4gICAgICBsYXN0VGFyZ2V0VXBkYXRlUmVmLmN1cnJlbnQgPSBub3dcbiAgICB9XG5cbiAgICB0YXJnZXRSZWYuY3VycmVudCA9IHRhcmdldFRleHRcblxuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaWYgKHJhZlJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpXG4gICAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgbGFzdFRpY2tSZWYuY3VycmVudCA9IDBcbiAgICAgIGlmIChkaXNwbGF5ZWRMZW5SZWYuY3VycmVudCAhPT0gdGFyZ2V0VGV4dC5sZW5ndGgpIHtcbiAgICAgICAgZGlzcGxheWVkTGVuUmVmLmN1cnJlbnQgPSB0YXJnZXRUZXh0Lmxlbmd0aFxuICAgICAgICBzZXREaXNwbGF5ZWQodGFyZ2V0VGV4dClcbiAgICAgIH1cbiAgICAgIC8vIFJlc2V0IGRlIGNhZGVuY2lhIGN1YW5kbyBzZSBhcGFnYSBwYXJhIG5vIGNvbnRhbWluYXIgZWwgcHLDs3hpbW8gc3RyZWFtLlxuICAgICAgbGFzdFRhcmdldExlblJlZi5jdXJyZW50ID0gMFxuICAgICAgbGFzdFRhcmdldFVwZGF0ZVJlZi5jdXJyZW50ID0gMFxuICAgICAgYmFja2VuZENoYXJzUGVyTXNSZWYuY3VycmVudCA9IDBcbiAgICAgIGZpcnN0Q2h1bmtBdFJlZi5jdXJyZW50ID0gMFxuICAgICAgd2FybXVwRG9uZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoZGlzcGxheWVkTGVuUmVmLmN1cnJlbnQgPiB0YXJnZXRUZXh0Lmxlbmd0aCkge1xuICAgICAgZGlzcGxheWVkTGVuUmVmLmN1cnJlbnQgPSAwXG4gICAgICBzZXREaXNwbGF5ZWQoJycpXG4gICAgfVxuXG4gICAgaWYgKHJhZlJlZi5jdXJyZW50ICE9IG51bGwpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHRpY2sgPSAodGlja05vdzogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gbGFzdFRpY2tSZWYuY3VycmVudFxuICAgICAgY29uc3QgZHQgPSBwcmV2ID8gTWF0aC5taW4odGlja05vdyAtIHByZXYsIDY0KSA6IDE2XG4gICAgICBsYXN0VGlja1JlZi5jdXJyZW50ID0gdGlja05vd1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRSZWYuY3VycmVudFxuICAgICAgY29uc3QgY3VycmVudExlbiA9IGRpc3BsYXllZExlblJlZi5jdXJyZW50XG4gICAgICBjb25zdCByZW1haW5pbmcgPSB0YXJnZXQubGVuZ3RoIC0gY3VycmVudExlblxuXG4gICAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcbiAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFdhcm11cDogYWwgY29taWVuem8gZGVsIHN0cmVhbSBlc3BlcmFtb3MgYHdhcm11cE1zYCBkZXNkZSBlbCBwcmltZXJcbiAgICAgIC8vIGNodW5rIGFudGVzIGRlIGVtcGV6YXIgYSBwaW50YXIuIEVzdG8gY29uc3RydXllIHVuIGNvbGNow7NuIGluaWNpYWwgeVxuICAgICAgLy8gZXZpdGEgYXJyYW5jYXIgcsOhcGlkbyBwYXJhIGNvbmdlbGFybm9zIGFjdG8gc2VndWlkbyBzaSBlbCBiYWNrZW5kXG4gICAgICAvLyB0YXJkYSBtdWNobyBlbiBlbWl0aXIgZWwgc2VndW5kbyBjaHVuay5cbiAgICAgIGlmICghd2FybXVwRG9uZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QXQgPSBmaXJzdENodW5rQXRSZWYuY3VycmVudFxuICAgICAgICBjb25zdCB3YWl0ZWRNcyA9IGZpcnN0QXQgPiAwID8gdGlja05vdyAtIGZpcnN0QXQgOiAwXG4gICAgICAgIGNvbnN0IHdhcm11cENvbXBsZXRlID0gd2FybXVwTXMgPD0gMCB8fCB3YWl0ZWRNcyA+PSB3YXJtdXBNcyB8fCB0YXJnZXQubGVuZ3RoID49IG1pbkJ1ZmZlckNoYXJzICogMlxuICAgICAgICBpZiAoIXdhcm11cENvbXBsZXRlKSB7XG4gICAgICAgICAgcmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB3YXJtdXBEb25lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlbG9jaWRhZCBiYXNlOiB2YWNpYXIgZWwgYnVmZmVyIGVuIH50YXJnZXRMYWdNcy5cbiAgICAgIGNvbnN0IGNoYXJzUGVyTXMgPSByZW1haW5pbmcgLyB0YXJnZXRMYWdNc1xuICAgICAgbGV0IGVmZmVjdGl2ZUNoYXJzUGVyTXMgPSBjaGFyc1Blck1zXG5cbiAgICAgIGNvbnN0IGJhY2tlbmRSYXRlID0gYmFja2VuZENoYXJzUGVyTXNSZWYuY3VycmVudFxuXG4gICAgICBpZiAoYWRhcHRUb0JhY2tlbmRSYXRlICYmIGJhY2tlbmRSYXRlID4gMCkge1xuICAgICAgICBpZiAodHlwZW9mIHRhcmdldEJ1ZmZlck1zID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIC8vIENvbnRyb2wgcHJvcG9yY2lvbmFsOiBtYW50ZW5lciBlbCBidWZmZXIgZW4gdG9ybm8gYWwgY29sY2jDs25cbiAgICAgICAgICAvLyBvYmpldGl2by4gU2kgYnVmZmVyTXMgPCB0YXJnZXQg4oaSIGZyZW5hbW9zIHBvciBkZWJham8gZGVsIGJhY2tlbmRcbiAgICAgICAgICAvLyBwYXJhIGFjdW11bGFyOyBzaSBidWZmZXJNcyA+IHRhcmdldCDihpIgYWNlbGVyYW1vcyBwYXJhIGRlc2Nhcmdhci5cbiAgICAgICAgICAvLyBFbiBlcXVpbGlicmlvLCBwaW50YW1vcyBhbCByaXRtbyBwcm9tZWRpbyBkZWwgYmFja2VuZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEVsIGNvbGNow7NuIG9iamV0aXZvIHNlIGNhbGN1bGEgc29icmUgbGEgdGFzYSAqKmVmZWN0aXZhKiogcXVlXG4gICAgICAgICAgLy8gcG9kZW1vcyBwaW50YXIgKGNhcGVhZGEgcG9yIGBtYXhDaGFyc1BlckZyYW1lYCBhIDYwZnBzKSwgbm8gc29icmVcbiAgICAgICAgICAvLyBsYSBkZWwgYmFja2VuZCBwdXJhLiBFc3RvIGV2aXRhIGVsIGNhc28gcGF0b2zDs2dpY28gZGUgcsOhZmFnYXM6XG4gICAgICAgICAgLy8gc2kgZWwgYmFja2VuZCB0aXJhIGEgNjUwMCBjaC9zLCBlbCB0YXJnZXQgTk8gc2UgdnVlbHZlIDM5MDAgY2hhcnNcbiAgICAgICAgICAvLyAocXVlIGVsIHJlbmRlciBqYW3DoXMgcG9kcsOtYSBzb3N0ZW5lciksIHNpbm8gYWxnbyByYXpvbmFibGUgcXVlXG4gICAgICAgICAgLy8gbGEgYW5pbWFjacOzbiBwdWVkYSBtYW50ZW5lci5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFBpc28gYWJzb2x1dG86IGVsIGNvbGNow7NuIG51bmNhIGJhamEgZGUgYG1pbkJ1ZmZlckNoYXJzYCBhdW5xdWVcbiAgICAgICAgICAvLyBlbCBiYWNrZW5kIGVzdMOpIG1hbmRhbmRvIGxlbnRvIGFsIGluaWNpbyBkZWwgc3RyZWFtLlxuICAgICAgICAgIGNvbnN0IHJlbmRlclJhdGVDYXAgPSAobWF4Q2hhcnNQZXJGcmFtZSAqIDYwKSAvIDEwMDBcbiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVCdWZmZXJSYXRlID0gTWF0aC5taW4oYmFja2VuZFJhdGUsIHJlbmRlclJhdGVDYXApXG4gICAgICAgICAgY29uc3QgdGFyZ2V0QnVmZmVyQ2hhcnMgPSBNYXRoLm1heChtaW5CdWZmZXJDaGFycywgdGFyZ2V0QnVmZmVyTXMgKiBlZmZlY3RpdmVCdWZmZXJSYXRlKVxuICAgICAgICAgIGNvbnN0IGJ1ZmZlckRlbHRhID0gcmVtYWluaW5nIC0gdGFyZ2V0QnVmZmVyQ2hhcnNcbiAgICAgICAgICAvLyBDb3JyZWNjacOzbiB0aWVuZSB1bmlkYWRlcyBkZSBjaGFycy9tcy4gYnVmZmVyQ29ycmVjdGlvbk1zIGNvbnRyb2xhXG4gICAgICAgICAgLy8gcXXDqSB0YW4gcsOhcGlkbyBlbCBidWZmZXIgcmVhbCBjb252ZXJnZSBhbCBvYmpldGl2by5cbiAgICAgICAgICBjb25zdCBjb3JyZWN0aW9uID0gYnVmZmVyRGVsdGEgLyBNYXRoLm1heCgxLCBidWZmZXJDb3JyZWN0aW9uTXMpXG4gICAgICAgICAgZWZmZWN0aXZlQ2hhcnNQZXJNcyA9IE1hdGgubWF4KDAsIGJhY2tlbmRSYXRlICsgY29ycmVjdGlvbilcbiAgICAgICAgICAvLyBBY290YXIgcG9yIGxhIHZlbG9jaWRhZCBkZSBcInZhY2lhciBlbiB0YXJnZXRMYWdNc1wiIHBhcmEgcXVlIHNpXG4gICAgICAgICAgLy8gZGUgcHJvbnRvIGhheSB1biBwaWNvIGdpZ2FudGUgZGUgYnVmZmVyIG5vIHNhbGdhbW9zIGRpc3BhcmFkb3MuXG4gICAgICAgICAgZWZmZWN0aXZlQ2hhcnNQZXJNcyA9IE1hdGgubWluKGVmZmVjdGl2ZUNoYXJzUGVyTXMsIGNoYXJzUGVyTXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW9kbyBzaW1wbGU6IGNhcCBhIGxhIHRhc2EgZGVsIGJhY2tlbmQgKiBmYWN0b3IuXG4gICAgICAgICAgY29uc3QgY2FwID0gYmFja2VuZFJhdGUgKiBiYWNrZW5kUmF0ZUZhY3RvclxuICAgICAgICAgIGVmZmVjdGl2ZUNoYXJzUGVyTXMgPSBNYXRoLm1pbihlZmZlY3RpdmVDaGFyc1Blck1zLCBjYXApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmF3U3RlcCA9IE1hdGguY2VpbChlZmZlY3RpdmVDaGFyc1Blck1zICogZHQpXG4gICAgICBjb25zdCBzdGVwID0gTWF0aC5tYXgobWluQ2hhcnNQZXJGcmFtZSwgTWF0aC5taW4obWF4Q2hhcnNQZXJGcmFtZSwgcmF3U3RlcCkpXG5cbiAgICAgIGxldCBuZXh0TGVuID0gTWF0aC5taW4odGFyZ2V0Lmxlbmd0aCwgY3VycmVudExlbiArIHN0ZXApXG5cbiAgICAgIGlmIChzbmFwVG9Xb3JkQm91bmRhcnkgJiYgbmV4dExlbiA8IHRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc2xpY2UgPSB0YXJnZXQuc2xpY2UoY3VycmVudExlbiwgbmV4dExlbilcbiAgICAgICAgY29uc3QgbGFzdEJvdW5kYXJ5ID0gTWF0aC5tYXgoc2xpY2UubGFzdEluZGV4T2YoJyAnKSwgc2xpY2UubGFzdEluZGV4T2YoJ1xcbicpLCBzbGljZS5sYXN0SW5kZXhPZignXFx0JykpXG4gICAgICAgIGlmIChsYXN0Qm91bmRhcnkgPj0gMCkge1xuICAgICAgICAgIG5leHRMZW4gPSBjdXJyZW50TGVuICsgbGFzdEJvdW5kYXJ5ICsgMVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0TGVuICE9PSBjdXJyZW50TGVuKSB7XG4gICAgICAgIGRpc3BsYXllZExlblJlZi5jdXJyZW50ID0gbmV4dExlblxuICAgICAgICBzZXREaXNwbGF5ZWQodGFyZ2V0LnNsaWNlKDAsIG5leHRMZW4pKVxuICAgICAgfVxuXG4gICAgICByYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZlJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmUmVmLmN1cnJlbnQpXG4gICAgICAgIHJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgbGFzdFRpY2tSZWYuY3VycmVudCA9IDBcbiAgICB9XG4gIH0sIFtcbiAgICB0YXJnZXRUZXh0LFxuICAgIGVuYWJsZWQsXG4gICAgbWluQ2hhcnNQZXJGcmFtZSxcbiAgICBtYXhDaGFyc1BlckZyYW1lLFxuICAgIHRhcmdldExhZ01zLFxuICAgIHNuYXBUb1dvcmRCb3VuZGFyeSxcbiAgICBhZGFwdFRvQmFja2VuZFJhdGUsXG4gICAgYmFja2VuZFJhdGVGYWN0b3IsXG4gICAgdGFyZ2V0QnVmZmVyTXMsXG4gICAgYnVmZmVyQ29ycmVjdGlvbk1zLFxuICAgIG1pbkJ1ZmZlckNoYXJzLFxuICAgIHdhcm11cE1zLFxuICBdKVxuXG4gIHJldHVybiBkaXNwbGF5ZWRcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQW1FbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLG1CQUFtQixHQUFHLFNBQXRC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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { useStreamingMessage, useStreamingMessageId } from './useStreamingMessage';
|
|
2
|
+
export { streamingStore } from './streamingStore';
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwidXNlU3RyZWFtaW5nTWVzc2FnZUlkIiwic3RyZWFtaW5nU3RvcmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlLCB1c2VTdHJlYW1pbmdNZXNzYWdlSWQgfSBmcm9tICcuL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5leHBvcnQgeyBzdHJlYW1pbmdTdG9yZSB9IGZyb20gJy4vc3RyZWFtaW5nU3RvcmUnXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLG1CQUFtQixFQUFFQyxxQkFBcUIsUUFBUSx1QkFBdUI7QUFDbEYsU0FBU0MsY0FBYyxRQUFRLGtCQUFrQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store externo (module-level) para el mensaje actualmente en streaming.
|
|
3
|
+
*
|
|
4
|
+
* Desacopla el texto del stream del array de `messages` de React: durante
|
|
5
|
+
* el streaming, el texto se mantiene acá y solo los componentes suscritos
|
|
6
|
+
* (vía `useStreamingMessage` / `useSyncExternalStore`) re-renderizan cuando
|
|
7
|
+
* cambia. El array `messages` no se muta en cada token, evitando ráfagas
|
|
8
|
+
* de re-renders del padre y ejecuciones innecesarias de useEffects.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
var snapshot = {
|
|
12
|
+
id: null,
|
|
13
|
+
text: ''
|
|
14
|
+
};
|
|
15
|
+
var listeners = new Set();
|
|
16
|
+
var emitChange = function emitChange() {
|
|
17
|
+
listeners.forEach(function (listener) {
|
|
18
|
+
listener();
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
export var streamingStore = {
|
|
22
|
+
/** Inicia una nueva sesión de streaming para el mensaje con este id. */start: function start(id) {
|
|
23
|
+
snapshot = {
|
|
24
|
+
id: id,
|
|
25
|
+
text: ''
|
|
26
|
+
};
|
|
27
|
+
emitChange();
|
|
28
|
+
},
|
|
29
|
+
/** Setea el texto del mensaje en streaming. Solo aplica si el id coincide. */setText: function setText(id, text) {
|
|
30
|
+
if (snapshot.id !== id) {
|
|
31
|
+
snapshot = {
|
|
32
|
+
id: id,
|
|
33
|
+
text: text
|
|
34
|
+
};
|
|
35
|
+
} else if (snapshot.text !== text) {
|
|
36
|
+
snapshot = {
|
|
37
|
+
id: id,
|
|
38
|
+
text: text
|
|
39
|
+
};
|
|
40
|
+
} else {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
emitChange();
|
|
44
|
+
},
|
|
45
|
+
/** Limpia el estado de streaming (fin de stream, error o aprobación). */clear: function clear() {
|
|
46
|
+
if (snapshot.id == null && snapshot.text === '') return;
|
|
47
|
+
snapshot = {
|
|
48
|
+
id: null,
|
|
49
|
+
text: ''
|
|
50
|
+
};
|
|
51
|
+
emitChange();
|
|
52
|
+
},
|
|
53
|
+
/** API para useSyncExternalStore. */subscribe: function subscribe(listener) {
|
|
54
|
+
listeners.add(listener);
|
|
55
|
+
return function () {
|
|
56
|
+
listeners["delete"](listener);
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
/** Snapshot referencialmente estable mientras no haya cambios. */getSnapshot: function getSnapshot() {
|
|
60
|
+
return snapshot;
|
|
61
|
+
},
|
|
62
|
+
/** Server snapshot (SSR): siempre vacío. */getServerSnapshot: function getServerSnapshot() {
|
|
63
|
+
return {
|
|
64
|
+
id: null,
|
|
65
|
+
text: ''
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzbmFwc2hvdCIsImlkIiwidGV4dCIsImxpc3RlbmVycyIsIlNldCIsImVtaXRDaGFuZ2UiLCJmb3JFYWNoIiwibGlzdGVuZXIiLCJzdHJlYW1pbmdTdG9yZSIsInN0YXJ0Iiwic2V0VGV4dCIsImNsZWFyIiwic3Vic2NyaWJlIiwiYWRkIiwiZ2V0U25hcHNob3QiLCJnZXRTZXJ2ZXJTbmFwc2hvdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlL3N0cmVhbWluZ1N0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RvcmUgZXh0ZXJubyAobW9kdWxlLWxldmVsKSBwYXJhIGVsIG1lbnNhamUgYWN0dWFsbWVudGUgZW4gc3RyZWFtaW5nLlxuICpcbiAqIERlc2Fjb3BsYSBlbCB0ZXh0byBkZWwgc3RyZWFtIGRlbCBhcnJheSBkZSBgbWVzc2FnZXNgIGRlIFJlYWN0OiBkdXJhbnRlXG4gKiBlbCBzdHJlYW1pbmcsIGVsIHRleHRvIHNlIG1hbnRpZW5lIGFjw6EgeSBzb2xvIGxvcyBjb21wb25lbnRlcyBzdXNjcml0b3NcbiAqICh2w61hIGB1c2VTdHJlYW1pbmdNZXNzYWdlYCAvIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWApIHJlLXJlbmRlcml6YW4gY3VhbmRvXG4gKiBjYW1iaWEuIEVsIGFycmF5IGBtZXNzYWdlc2Agbm8gc2UgbXV0YSBlbiBjYWRhIHRva2VuLCBldml0YW5kbyByw6FmYWdhc1xuICogZGUgcmUtcmVuZGVycyBkZWwgcGFkcmUgeSBlamVjdWNpb25lcyBpbm5lY2VzYXJpYXMgZGUgdXNlRWZmZWN0cy5cbiAqL1xuXG50eXBlIFN0cmVhbWluZ1NuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nIHwgbnVsbFxuICB0ZXh0OiBzdHJpbmdcbn1cblxubGV0IHNuYXBzaG90OiBTdHJlYW1pbmdTbmFwc2hvdCA9IHsgaWQ6IG51bGwsIHRleHQ6ICcnIH1cbmNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxuXG5jb25zdCBlbWl0Q2hhbmdlID0gKCkgPT4ge1xuICBsaXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgbGlzdGVuZXIoKVxuICB9KVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtaW5nU3RvcmUgPSB7XG4gIC8qKiBJbmljaWEgdW5hIG51ZXZhIHNlc2nDs24gZGUgc3RyZWFtaW5nIHBhcmEgZWwgbWVuc2FqZSBjb24gZXN0ZSBpZC4gKi9cbiAgc3RhcnQoaWQ6IHN0cmluZykge1xuICAgIHNuYXBzaG90ID0geyBpZCwgdGV4dDogJycgfVxuICAgIGVtaXRDaGFuZ2UoKVxuICB9LFxuICAvKiogU2V0ZWEgZWwgdGV4dG8gZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nLiBTb2xvIGFwbGljYSBzaSBlbCBpZCBjb2luY2lkZS4gKi9cbiAgc2V0VGV4dChpZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAoc25hcHNob3QuaWQgIT09IGlkKSB7XG4gICAgICBzbmFwc2hvdCA9IHsgaWQsIHRleHQgfVxuICAgIH0gZWxzZSBpZiAoc25hcHNob3QudGV4dCAhPT0gdGV4dCkge1xuICAgICAgc25hcHNob3QgPSB7IGlkLCB0ZXh0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXRDaGFuZ2UoKVxuICB9LFxuICAvKiogTGltcGlhIGVsIGVzdGFkbyBkZSBzdHJlYW1pbmcgKGZpbiBkZSBzdHJlYW0sIGVycm9yIG8gYXByb2JhY2nDs24pLiAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAoc25hcHNob3QuaWQgPT0gbnVsbCAmJiBzbmFwc2hvdC50ZXh0ID09PSAnJykgcmV0dXJuXG4gICAgc25hcHNob3QgPSB7IGlkOiBudWxsLCB0ZXh0OiAnJyB9XG4gICAgZW1pdENoYW5nZSgpXG4gIH0sXG4gIC8qKiBBUEkgcGFyYSB1c2VTeW5jRXh0ZXJuYWxTdG9yZS4gKi9cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoKSA9PiB2b2lkKSB7XG4gICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcilcbiAgICB9XG4gIH0sXG4gIC8qKiBTbmFwc2hvdCByZWZlcmVuY2lhbG1lbnRlIGVzdGFibGUgbWllbnRyYXMgbm8gaGF5YSBjYW1iaW9zLiAqL1xuICBnZXRTbmFwc2hvdCgpOiBTdHJlYW1pbmdTbmFwc2hvdCB7XG4gICAgcmV0dXJuIHNuYXBzaG90XG4gIH0sXG4gIC8qKiBTZXJ2ZXIgc25hcHNob3QgKFNTUik6IHNpZW1wcmUgdmFjw61vLiAqL1xuICBnZXRTZXJ2ZXJTbmFwc2hvdCgpOiBTdHJlYW1pbmdTbmFwc2hvdCB7XG4gICAgcmV0dXJuIHsgaWQ6IG51bGwsIHRleHQ6ICcnIH1cbiAgfSxcbn1cblxuZXhwb3J0IHR5cGUgeyBTdHJlYW1pbmdTbmFwc2hvdCB9XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQSxJQUFJQSxRQUEyQixHQUFHO0VBQUVDLEVBQUUsRUFBRSxJQUFJO0VBQUVDLElBQUksRUFBRTtBQUFHLENBQUM7QUFDeEQsSUFBTUMsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBYSxDQUFDO0FBRXZDLElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBLEVBQVM7RUFDdkJGLFNBQVMsQ0FBQ0csT0FBTyxDQUFDLFVBQUFDLFFBQVEsRUFBSTtJQUM1QkEsUUFBUSxDQUFDLENBQUM7RUFDWixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxJQUFNQyxjQUFjLEdBQUc7RUFDNUIsd0VBQ0FDLEtBQUssV0FBTEEsS0FBS0EsQ0FBQ1IsRUFBVSxFQUFFO0lBQ2hCRCxRQUFRLEdBQUc7TUFBRUMsRUFBRSxFQUFGQSxFQUFFO01BQUVDLElBQUksRUFBRTtJQUFHLENBQUM7SUFDM0JHLFVBQVUsQ0FBQyxDQUFDO0VBQ2QsQ0FBQztFQUNELDhFQUNBSyxPQUFPLFdBQVBBLE9BQU9BLENBQUNULEVBQVUsRUFBRUMsSUFBWSxFQUFFO0lBQ2hDLElBQUlGLFFBQVEsQ0FBQ0MsRUFBRSxLQUFLQSxFQUFFLEVBQUU7TUFDdEJELFFBQVEsR0FBRztRQUFFQyxFQUFFLEVBQUZBLEVBQUU7UUFBRUMsSUFBSSxFQUFKQTtNQUFLLENBQUM7SUFDekIsQ0FBQyxNQUFNLElBQUlGLFFBQVEsQ0FBQ0UsSUFBSSxLQUFLQSxJQUFJLEVBQUU7TUFDakNGLFFBQVEsR0FBRztRQUFFQyxFQUFFLEVBQUZBLEVBQUU7UUFBRUMsSUFBSSxFQUFKQTtNQUFLLENBQUM7SUFDekIsQ0FBQyxNQUFNO01BQ0w7SUFDRjtJQUNBRyxVQUFVLENBQUMsQ0FBQztFQUNkLENBQUM7RUFDRCx5RUFDQU0sS0FBSyxXQUFMQSxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJWCxRQUFRLENBQUNDLEVBQUUsSUFBSSxJQUFJLElBQUlELFFBQVEsQ0FBQ0UsSUFBSSxLQUFLLEVBQUUsRUFBRTtJQUNqREYsUUFBUSxHQUFHO01BQUVDLEVBQUUsRUFBRSxJQUFJO01BQUVDLElBQUksRUFBRTtJQUFHLENBQUM7SUFDakNHLFVBQVUsQ0FBQyxDQUFDO0VBQ2QsQ0FBQztFQUNELHFDQUNBTyxTQUFTLFdBQVRBLFNBQVNBLENBQUNMLFFBQW9CLEVBQUU7SUFDOUJKLFNBQVMsQ0FBQ1UsR0FBRyxDQUFDTixRQUFRLENBQUM7SUFDdkIsT0FBTyxZQUFNO01BQ1hKLFNBQVMsVUFBTyxDQUFDSSxRQUFRLENBQUM7SUFDNUIsQ0FBQztFQUNILENBQUM7RUFDRCxrRUFDQU8sV0FBVyxXQUFYQSxXQUFXQSxDQUFBLEVBQXNCO0lBQy9CLE9BQU9kLFFBQVE7RUFDakIsQ0FBQztFQUNELDRDQUNBZSxpQkFBaUIsV0FBakJBLGlCQUFpQkEsQ0FBQSxFQUFzQjtJQUNyQyxPQUFPO01BQUVkLEVBQUUsRUFBRSxJQUFJO01BQUVDLElBQUksRUFBRTtJQUFHLENBQUM7RUFDL0I7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'react';
|
|
2
|
+
import { streamingStore } from './streamingStore';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Devuelve el texto actual del mensaje en streaming si el `id` coincide con
|
|
6
|
+
* el mensaje activo. Si no hay streaming activo o el id no coincide, devuelve
|
|
7
|
+
* una cadena vacía. Esto permite que solo el componente del mensaje en
|
|
8
|
+
* streaming se re-renderice, sin afectar al resto del árbol.
|
|
9
|
+
*/
|
|
10
|
+
export var useStreamingMessage = function useStreamingMessage(messageId) {
|
|
11
|
+
var snapshot = useSyncExternalStore(streamingStore.subscribe, streamingStore.getSnapshot, streamingStore.getServerSnapshot);
|
|
12
|
+
if (!messageId) return '';
|
|
13
|
+
if (snapshot.id !== messageId) return '';
|
|
14
|
+
return snapshot.text;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/** Devuelve el id del mensaje que está actualmente en streaming (o null). */
|
|
18
|
+
export var useStreamingMessageId = function useStreamingMessageId() {
|
|
19
|
+
var snapshot = useSyncExternalStore(streamingStore.subscribe, streamingStore.getSnapshot, streamingStore.getServerSnapshot);
|
|
20
|
+
return snapshot.id;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsInN0cmVhbWluZ1N0b3JlIiwidXNlU3RyZWFtaW5nTWVzc2FnZSIsIm1lc3NhZ2VJZCIsInNuYXBzaG90Iiwic3Vic2NyaWJlIiwiZ2V0U25hcHNob3QiLCJnZXRTZXJ2ZXJTbmFwc2hvdCIsImlkIiwidGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2VJZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlL3VzZVN0cmVhbWluZ01lc3NhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi9zdHJlYW1pbmdTdG9yZSdcblxuLyoqXG4gKiBEZXZ1ZWx2ZSBlbCB0ZXh0byBhY3R1YWwgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIHNpIGVsIGBpZGAgY29pbmNpZGUgY29uXG4gKiBlbCBtZW5zYWplIGFjdGl2by4gU2kgbm8gaGF5IHN0cmVhbWluZyBhY3Rpdm8gbyBlbCBpZCBubyBjb2luY2lkZSwgZGV2dWVsdmVcbiAqIHVuYSBjYWRlbmEgdmFjw61hLiBFc3RvIHBlcm1pdGUgcXVlIHNvbG8gZWwgY29tcG9uZW50ZSBkZWwgbWVuc2FqZSBlblxuICogc3RyZWFtaW5nIHNlIHJlLXJlbmRlcmljZSwgc2luIGFmZWN0YXIgYWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVN0cmVhbWluZ01lc3NhZ2UgPSAobWVzc2FnZUlkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc25hcHNob3QgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICBzdHJlYW1pbmdTdG9yZS5zdWJzY3JpYmUsXG4gICAgc3RyZWFtaW5nU3RvcmUuZ2V0U25hcHNob3QsXG4gICAgc3RyZWFtaW5nU3RvcmUuZ2V0U2VydmVyU25hcHNob3RcbiAgKVxuICBpZiAoIW1lc3NhZ2VJZCkgcmV0dXJuICcnXG4gIGlmIChzbmFwc2hvdC5pZCAhPT0gbWVzc2FnZUlkKSByZXR1cm4gJydcbiAgcmV0dXJuIHNuYXBzaG90LnRleHRcbn1cblxuLyoqIERldnVlbHZlIGVsIGlkIGRlbCBtZW5zYWplIHF1ZSBlc3TDoSBhY3R1YWxtZW50ZSBlbiBzdHJlYW1pbmcgKG8gbnVsbCkuICovXG5leHBvcnQgY29uc3QgdXNlU3RyZWFtaW5nTWVzc2FnZUlkID0gKCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBzbmFwc2hvdCA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgIHN0cmVhbWluZ1N0b3JlLnN1YnNjcmliZSxcbiAgICBzdHJlYW1pbmdTdG9yZS5nZXRTbmFwc2hvdCxcbiAgICBzdHJlYW1pbmdTdG9yZS5nZXRTZXJ2ZXJTbmFwc2hvdFxuICApXG4gIHJldHVybiBzbmFwc2hvdC5pZFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxvQkFBb0IsUUFBUSxPQUFPO0FBQzVDLFNBQVNDLGNBQWMsUUFBUSxrQkFBa0I7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSUMsU0FBb0MsRUFBYTtFQUNuRixJQUFNQyxRQUFRLEdBQUdKLG9CQUFvQixDQUNuQ0MsY0FBYyxDQUFDSSxTQUFTLEVBQ3hCSixjQUFjLENBQUNLLFdBQVcsRUFDMUJMLGNBQWMsQ0FBQ00saUJBQ2pCLENBQUM7RUFDRCxJQUFJLENBQUNKLFNBQVMsRUFBRSxPQUFPLEVBQUU7RUFDekIsSUFBSUMsUUFBUSxDQUFDSSxFQUFFLEtBQUtMLFNBQVMsRUFBRSxPQUFPLEVBQUU7RUFDeEMsT0FBT0MsUUFBUSxDQUFDSyxJQUFJO0FBQ3RCLENBQUM7O0FBRUQ7QUFDQSxPQUFPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUEsRUFBd0I7RUFDeEQsSUFBTU4sUUFBUSxHQUFHSixvQkFBb0IsQ0FDbkNDLGNBQWMsQ0FBQ0ksU0FBUyxFQUN4QkosY0FBYyxDQUFDSyxXQUFXLEVBQzFCTCxjQUFjLENBQUNNLGlCQUNqQixDQUFDO0VBQ0QsT0FBT0gsUUFBUSxDQUFDSSxFQUFFO0FBQ3BCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|