@sendbird/uikit-utils 2.4.1 → 2.5.0-rc.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.
- package/README.md +1 -1
- package/lib/commonjs/hooks/index.js +12 -31
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/react-native.js +2 -11
- package/lib/commonjs/hooks/react-native.js.map +1 -1
- package/lib/commonjs/index.js +16 -45
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/sendbird/attrs.js +8 -11
- package/lib/commonjs/sendbird/attrs.js.map +1 -1
- package/lib/commonjs/sendbird/channel.js +0 -16
- package/lib/commonjs/sendbird/channel.js.map +1 -1
- package/lib/commonjs/sendbird/message.js +13 -34
- package/lib/commonjs/sendbird/message.js.map +1 -1
- package/lib/commonjs/sendbird/user.js +0 -2
- package/lib/commonjs/sendbird/user.js.map +1 -1
- package/lib/commonjs/shared/arrayToMap.js +0 -6
- package/lib/commonjs/shared/arrayToMap.js.map +1 -1
- package/lib/commonjs/shared/bufferedRequest.js +5 -26
- package/lib/commonjs/shared/bufferedRequest.js.map +1 -1
- package/lib/commonjs/shared/file.js +11 -28
- package/lib/commonjs/shared/file.js.map +1 -1
- package/lib/commonjs/shared/index.js +3 -7
- package/lib/commonjs/shared/index.js.map +1 -1
- package/lib/commonjs/shared/logger.js +3 -22
- package/lib/commonjs/shared/logger.js.map +1 -1
- package/lib/commonjs/shared/regex.js +2 -9
- package/lib/commonjs/shared/regex.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/ui-format/common.js +62 -18
- package/lib/commonjs/ui-format/common.js.map +1 -1
- package/lib/commonjs/ui-format/groupChannel.js +2 -48
- package/lib/commonjs/ui-format/groupChannel.js.map +1 -1
- package/lib/commonjs/ui-format/openChannel.js +0 -4
- package/lib/commonjs/ui-format/openChannel.js.map +1 -1
- package/lib/module/hooks/index.js +10 -7
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/react-native.js +2 -2
- package/lib/module/hooks/react-native.js.map +1 -1
- package/lib/module/index.js +5 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/sendbird/attrs.js +6 -9
- package/lib/module/sendbird/attrs.js.map +1 -1
- package/lib/module/sendbird/channel.js +0 -1
- package/lib/module/sendbird/channel.js.map +1 -1
- package/lib/module/sendbird/message.js +12 -17
- package/lib/module/sendbird/message.js.map +1 -1
- package/lib/module/sendbird/user.js.map +1 -1
- package/lib/module/shared/arrayToMap.js +0 -4
- package/lib/module/shared/arrayToMap.js.map +1 -1
- package/lib/module/shared/bufferedRequest.js +5 -24
- package/lib/module/shared/bufferedRequest.js.map +1 -1
- package/lib/module/shared/file.js +11 -16
- package/lib/module/shared/file.js.map +1 -1
- package/lib/module/shared/index.js +3 -3
- package/lib/module/shared/index.js.map +1 -1
- package/lib/module/shared/logger.js +3 -21
- package/lib/module/shared/logger.js.map +1 -1
- package/lib/module/shared/regex.js +3 -2
- package/lib/module/shared/regex.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/ui-format/common.js +60 -10
- package/lib/module/ui-format/common.js.map +1 -1
- package/lib/module/ui-format/groupChannel.js +3 -41
- package/lib/module/ui-format/groupChannel.js.map +1 -1
- package/lib/module/ui-format/openChannel.js.map +1 -1
- package/lib/typescript/src/hooks/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts +5 -4
- package/lib/typescript/src/sendbird/message.d.ts +8 -1
- package/lib/typescript/src/types.d.ts +2 -1
- package/lib/typescript/src/ui-format/common.d.ts +13 -0
- package/lib/typescript/src/ui-format/groupChannel.d.ts +1 -1
- package/package.json +11 -8
- package/src/hooks/index.ts +10 -0
- package/src/index.ts +5 -52
- package/src/sendbird/message.ts +12 -0
- package/src/types.ts +2 -0
- package/src/ui-format/common.ts +53 -1
- package/src/ui-format/groupChannel.ts +4 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isDifferentChannel","a","b","url","getGroupChannelChatAvailableState","channel","isOperator","myRole","frozen","isFrozen","muted","myMutedState","disabled","getOpenChannelChatAvailableState","userId","getMyMutedInfo","isMuted","confirmAndMarkAsRead","channels","filter","it","isGroupChannel","unreadMessageCount","forEach","BufferedRequest","markAsRead","push","confirmAndMarkAsDelivered","markAsDelivered","isDefaultCoverImage","coverUrl","startsWith","getMembersExcludeMe","currentUserId","members","m","getGroupChannels","c","getOpenChannels","isOpenChannel","getChannelUniqId","getDefaultGroupChannelCreateParams","params","createParams","name","isDistinct","invitedUserIds","operatorUserIds"],"sources":["channel.ts"],"sourcesContent":["import { BufferedRequest } from '../shared/bufferedRequest';\nimport type {\n SendbirdBaseChannel,\n SendbirdChannel,\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdOpenChannel,\n} from '../types';\n\n/**\n * Diff utils for channel\n * @param {SendbirdBaseChannel} [a]\n * @param {SendbirdBaseChannel} [b]\n * @returns {boolean}\n * */\nexport function isDifferentChannel<T extends SendbirdBaseChannel>(a?: T, b?: T): boolean {\n if (!a || !b) return true;\n return a.url !== b.url;\n}\n\nexport const getGroupChannelChatAvailableState = (channel: SendbirdGroupChannel) => {\n const isOperator = channel.myRole === 'operator';\n const frozen = channel.isFrozen && !isOperator;\n const muted = channel.myMutedState === 'muted';\n const disabled = frozen || muted;\n return { disabled, frozen, muted };\n};\n\nexport const getOpenChannelChatAvailableState = async (channel: SendbirdOpenChannel, userId: string) => {\n const isOperator = channel.isOperator(userId);\n const frozen = channel.isFrozen && !isOperator;\n const muted = (await channel.getMyMutedInfo()).isMuted;\n const disabled = frozen || muted;\n return { disabled, frozen, muted };\n};\n\nexport const confirmAndMarkAsRead = async (channels: SendbirdBaseChannel[]) => {\n channels\n .filter((it): it is SendbirdGroupChannel => it.isGroupChannel() && it.unreadMessageCount > 0)\n .forEach((it) => BufferedRequest.markAsRead.push(() => it.markAsRead(), it.url));\n};\n\nexport const confirmAndMarkAsDelivered = async (channels: SendbirdBaseChannel[]) => {\n channels\n .filter((it): it is SendbirdGroupChannel => it.isGroupChannel() && it.unreadMessageCount > 0)\n .forEach((it) => BufferedRequest.markAsDelivered.push(() => it.markAsDelivered(), it.url));\n};\n\nexport function isDefaultCoverImage(coverUrl: string) {\n return coverUrl === '' || coverUrl.startsWith('https://static.sendbird.com/sample/cover');\n}\n\nexport function getMembersExcludeMe(channel: SendbirdGroupChannel, currentUserId?: string) {\n return channel.members.filter((m) => m.userId !== currentUserId);\n}\n\nexport function getGroupChannels(channels: SendbirdChannel[]): SendbirdGroupChannel[] {\n return channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n}\n\nexport function getOpenChannels(channels: SendbirdChannel[]): SendbirdOpenChannel[] {\n return channels.filter((c): c is SendbirdOpenChannel => c.isOpenChannel());\n}\n\nexport function getChannelUniqId(channel: SendbirdChannel) {\n return channel.url;\n}\n\nexport function getDefaultGroupChannelCreateParams(params: {\n invitedUserIds: string[];\n currentUserId?: string;\n}): SendbirdGroupChannelCreateParams {\n const createParams: SendbirdGroupChannelCreateParams = {\n name: '',\n coverUrl: '',\n isDistinct: false,\n invitedUserIds: params.invitedUserIds,\n };\n\n if (params.currentUserId) createParams.operatorUserIds = [params.currentUserId];\n\n return createParams;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_bufferedRequest","require","isDifferentChannel","a","b","url","getGroupChannelChatAvailableState","channel","isOperator","myRole","frozen","isFrozen","muted","myMutedState","disabled","exports","getOpenChannelChatAvailableState","userId","getMyMutedInfo","isMuted","confirmAndMarkAsRead","channels","filter","it","isGroupChannel","unreadMessageCount","forEach","BufferedRequest","markAsRead","push","confirmAndMarkAsDelivered","markAsDelivered","isDefaultCoverImage","coverUrl","startsWith","getMembersExcludeMe","currentUserId","members","m","getGroupChannels","c","getOpenChannels","isOpenChannel","getChannelUniqId","getDefaultGroupChannelCreateParams","params","createParams","name","isDistinct","invitedUserIds","operatorUserIds"],"sources":["channel.ts"],"sourcesContent":["import { BufferedRequest } from '../shared/bufferedRequest';\nimport type {\n SendbirdBaseChannel,\n SendbirdChannel,\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdOpenChannel,\n} from '../types';\n\n/**\n * Diff utils for channel\n * @param {SendbirdBaseChannel} [a]\n * @param {SendbirdBaseChannel} [b]\n * @returns {boolean}\n * */\nexport function isDifferentChannel<T extends SendbirdBaseChannel>(a?: T, b?: T): boolean {\n if (!a || !b) return true;\n return a.url !== b.url;\n}\n\nexport const getGroupChannelChatAvailableState = (channel: SendbirdGroupChannel) => {\n const isOperator = channel.myRole === 'operator';\n const frozen = channel.isFrozen && !isOperator;\n const muted = channel.myMutedState === 'muted';\n const disabled = frozen || muted;\n return { disabled, frozen, muted };\n};\n\nexport const getOpenChannelChatAvailableState = async (channel: SendbirdOpenChannel, userId: string) => {\n const isOperator = channel.isOperator(userId);\n const frozen = channel.isFrozen && !isOperator;\n const muted = (await channel.getMyMutedInfo()).isMuted;\n const disabled = frozen || muted;\n return { disabled, frozen, muted };\n};\n\nexport const confirmAndMarkAsRead = async (channels: SendbirdBaseChannel[]) => {\n channels\n .filter((it): it is SendbirdGroupChannel => it.isGroupChannel() && it.unreadMessageCount > 0)\n .forEach((it) => BufferedRequest.markAsRead.push(() => it.markAsRead(), it.url));\n};\n\nexport const confirmAndMarkAsDelivered = async (channels: SendbirdBaseChannel[]) => {\n channels\n .filter((it): it is SendbirdGroupChannel => it.isGroupChannel() && it.unreadMessageCount > 0)\n .forEach((it) => BufferedRequest.markAsDelivered.push(() => it.markAsDelivered(), it.url));\n};\n\nexport function isDefaultCoverImage(coverUrl: string) {\n return coverUrl === '' || coverUrl.startsWith('https://static.sendbird.com/sample/cover');\n}\n\nexport function getMembersExcludeMe(channel: SendbirdGroupChannel, currentUserId?: string) {\n return channel.members.filter((m) => m.userId !== currentUserId);\n}\n\nexport function getGroupChannels(channels: SendbirdChannel[]): SendbirdGroupChannel[] {\n return channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n}\n\nexport function getOpenChannels(channels: SendbirdChannel[]): SendbirdOpenChannel[] {\n return channels.filter((c): c is SendbirdOpenChannel => c.isOpenChannel());\n}\n\nexport function getChannelUniqId(channel: SendbirdChannel) {\n return channel.url;\n}\n\nexport function getDefaultGroupChannelCreateParams(params: {\n invitedUserIds: string[];\n currentUserId?: string;\n}): SendbirdGroupChannelCreateParams {\n const createParams: SendbirdGroupChannelCreateParams = {\n name: '',\n coverUrl: '',\n isDistinct: false,\n invitedUserIds: params.invitedUserIds,\n };\n\n if (params.currentUserId) createParams.operatorUserIds = [params.currentUserId];\n\n return createParams;\n}\n"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.calcMessageGrouping = calcMessageGrouping;
|
|
7
7
|
exports.getAvailableUriFromFileMessage = getAvailableUriFromFileMessage;
|
|
8
|
+
exports.getDefaultMessageSearchQueryParams = getDefaultMessageSearchQueryParams;
|
|
8
9
|
exports.getFileTypeFromMessage = getFileTypeFromMessage;
|
|
9
10
|
exports.getMessageType = getMessageType;
|
|
10
11
|
exports.getMessageUniqId = getMessageUniqId;
|
|
@@ -18,33 +19,29 @@ exports.messageComparator = messageComparator;
|
|
|
18
19
|
exports.messageKeyExtractor = messageKeyExtractor;
|
|
19
20
|
exports.parseSendbirdNotification = parseSendbirdNotification;
|
|
20
21
|
exports.shouldRenderReaction = shouldRenderReaction;
|
|
21
|
-
|
|
22
|
+
var _message = require("@sendbird/chat/message");
|
|
22
23
|
var _file = require("../shared/file");
|
|
23
|
-
|
|
24
24
|
var _common = require("../ui-format/common");
|
|
25
|
-
|
|
26
25
|
function isNewMessage(msg, currentUserId) {
|
|
27
26
|
const myMessage = isMyMessage(msg, currentUserId);
|
|
28
27
|
if (myMessage) return false;
|
|
29
28
|
if (msg.isAdminMessage()) return false;
|
|
30
29
|
return msg.updatedAt === 0;
|
|
31
30
|
}
|
|
32
|
-
|
|
33
31
|
function isSendableMessage(msg) {
|
|
34
32
|
return msg !== undefined && msg !== null && 'sendingStatus' in msg;
|
|
35
33
|
}
|
|
36
|
-
|
|
37
34
|
function isMyMessage(msg) {
|
|
38
35
|
var _msg$sender;
|
|
39
|
-
|
|
40
36
|
let currentUserId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '##__USER_ID_IS_NOT_PROVIDED__##';
|
|
41
37
|
if (!isSendableMessage(msg)) return false;
|
|
42
38
|
return 'sender' in msg && ((_msg$sender = msg.sender) === null || _msg$sender === void 0 ? void 0 : _msg$sender.userId) === currentUserId || msg.sendingStatus === 'pending' || msg.sendingStatus === 'failed' || msg.sendingStatus === 'canceled';
|
|
43
39
|
}
|
|
44
|
-
|
|
45
40
|
function messageKeyExtractor(message) {
|
|
46
41
|
return getMessageUniqId(message);
|
|
47
|
-
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// |-------------------|-------------------|-----------------|-------------------|
|
|
48
45
|
// | sending status | reqId | messageId | createdAt |
|
|
49
46
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
50
47
|
// | pending | timestamp(A) | 0 | timestamp(B) |
|
|
@@ -52,8 +49,6 @@ function messageKeyExtractor(message) {
|
|
|
52
49
|
// | failed | timestamp(A) | 0 | ? |
|
|
53
50
|
// | succeeded | timestamp(A) / '' | id from DB | timestamp(C) |
|
|
54
51
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
55
|
-
|
|
56
|
-
|
|
57
52
|
function messageComparator(a, b) {
|
|
58
53
|
let aStatusOffset = 0;
|
|
59
54
|
let bStatusOffset = 0;
|
|
@@ -61,15 +56,12 @@ function messageComparator(a, b) {
|
|
|
61
56
|
if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = 999999;
|
|
62
57
|
return b.createdAt + bStatusOffset - (a.createdAt + aStatusOffset);
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
function hasSameSender(a, b) {
|
|
66
60
|
var _a$sender, _b$sender;
|
|
67
|
-
|
|
68
61
|
if (!a || !b) return false;
|
|
69
62
|
if ('sender' in a && 'sender' in b) return ((_a$sender = a.sender) === null || _a$sender === void 0 ? void 0 : _a$sender.userId) === ((_b$sender = b.sender) === null || _b$sender === void 0 ? void 0 : _b$sender.userId);
|
|
70
63
|
return false;
|
|
71
64
|
}
|
|
72
|
-
|
|
73
65
|
function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
74
66
|
const getPrev = () => {
|
|
75
67
|
if (!groupEnabled) return false;
|
|
@@ -79,7 +71,6 @@ function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
79
71
|
if ((0, _common.getMessageTimeFormat)(new Date(curr.createdAt)) !== (0, _common.getMessageTimeFormat)(new Date(prev.createdAt))) return false;
|
|
80
72
|
return true;
|
|
81
73
|
};
|
|
82
|
-
|
|
83
74
|
const getNext = () => {
|
|
84
75
|
if (!groupEnabled) return false;
|
|
85
76
|
if (!next) return false;
|
|
@@ -88,95 +79,83 @@ function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
88
79
|
if ((0, _common.getMessageTimeFormat)(new Date(curr.createdAt)) !== (0, _common.getMessageTimeFormat)(new Date(next.createdAt))) return false;
|
|
89
80
|
return true;
|
|
90
81
|
};
|
|
91
|
-
|
|
92
82
|
return {
|
|
93
83
|
groupWithPrev: getPrev(),
|
|
94
84
|
groupWithNext: getNext()
|
|
95
85
|
};
|
|
96
86
|
}
|
|
97
|
-
|
|
98
87
|
function getMessageUniqId(msg) {
|
|
99
88
|
if (msg.isUserMessage() || msg.isFileMessage()) {
|
|
100
89
|
if (msg.sendingStatus === 'succeeded') return String(msg.messageId);
|
|
101
90
|
return msg.reqId;
|
|
102
91
|
}
|
|
103
|
-
|
|
104
92
|
return String(msg.messageId);
|
|
105
93
|
}
|
|
106
|
-
|
|
107
94
|
function getAvailableUriFromFileMessage(message) {
|
|
108
95
|
if (!message.url && message.messageParams.file && 'uri' in message.messageParams.file) {
|
|
109
96
|
return message.messageParams.file.uri;
|
|
110
97
|
}
|
|
111
|
-
|
|
112
98
|
return message.url;
|
|
113
99
|
}
|
|
114
|
-
|
|
115
100
|
function isSendbirdNotification(dataPayload) {
|
|
116
101
|
if (!dataPayload) return false;
|
|
117
102
|
return Boolean(dataPayload['sendbird']);
|
|
118
103
|
}
|
|
119
|
-
|
|
120
104
|
function parseSendbirdNotification(dataPayload) {
|
|
121
105
|
return typeof dataPayload.sendbird === 'string' ? JSON.parse(dataPayload.sendbird) : dataPayload.sendbird;
|
|
122
106
|
}
|
|
123
|
-
|
|
124
107
|
function shouldRenderReaction(channel, reactionEnabled) {
|
|
125
108
|
if (channel.isOpenChannel()) {
|
|
126
109
|
return false;
|
|
127
110
|
}
|
|
128
|
-
|
|
129
111
|
if (channel.isGroupChannel()) {
|
|
130
112
|
if (channel.isBroadcast) return false;
|
|
131
113
|
if (channel.isSuper) return false;
|
|
132
114
|
}
|
|
133
|
-
|
|
134
115
|
return reactionEnabled;
|
|
135
116
|
}
|
|
136
|
-
|
|
137
117
|
function getReactionCount(reaction) {
|
|
138
118
|
return reaction.userIds.length;
|
|
139
119
|
}
|
|
140
|
-
|
|
141
120
|
function getFileTypeFromMessage(message) {
|
|
142
121
|
return (0, _file.getFileType)(message.type || (0, _file.getFileExtension)(message.name));
|
|
143
122
|
}
|
|
144
|
-
|
|
145
123
|
function getMessageType(message) {
|
|
146
124
|
if (message.isAdminMessage()) {
|
|
147
125
|
return 'admin';
|
|
148
126
|
}
|
|
149
|
-
|
|
150
127
|
if (message.isUserMessage()) {
|
|
151
128
|
if (message.ogMetaData) {
|
|
152
129
|
return 'user.opengraph';
|
|
153
130
|
}
|
|
154
|
-
|
|
155
131
|
return 'user';
|
|
156
132
|
}
|
|
157
|
-
|
|
158
133
|
if (message.isFileMessage()) {
|
|
159
134
|
const fileType = getFileTypeFromMessage(message);
|
|
160
|
-
|
|
161
135
|
switch (fileType) {
|
|
162
136
|
case 'image':
|
|
163
137
|
case 'video':
|
|
164
138
|
{
|
|
165
139
|
return `file.${fileType}`;
|
|
166
140
|
}
|
|
167
|
-
|
|
168
141
|
case 'audio':
|
|
169
142
|
{
|
|
170
143
|
return `file.${fileType}`;
|
|
171
144
|
}
|
|
172
|
-
|
|
173
145
|
default:
|
|
174
146
|
{
|
|
175
147
|
return 'file';
|
|
176
148
|
}
|
|
177
149
|
}
|
|
178
150
|
}
|
|
179
|
-
|
|
180
151
|
return 'unknown';
|
|
181
152
|
}
|
|
153
|
+
function getDefaultMessageSearchQueryParams(channel, keyword) {
|
|
154
|
+
return {
|
|
155
|
+
keyword,
|
|
156
|
+
channelUrl: channel.url,
|
|
157
|
+
messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),
|
|
158
|
+
order: _message.MessageSearchOrder.TIMESTAMP
|
|
159
|
+
};
|
|
160
|
+
}
|
|
182
161
|
//# sourceMappingURL=message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isNewMessage","msg","currentUserId","myMessage","isMyMessage","isAdminMessage","updatedAt","isSendableMessage","undefined","sender","userId","sendingStatus","messageKeyExtractor","message","getMessageUniqId","messageComparator","a","b","aStatusOffset","bStatusOffset","createdAt","hasSameSender","calcMessageGrouping","groupEnabled","curr","prev","next","getPrev","getMessageTimeFormat","Date","getNext","groupWithPrev","groupWithNext","isUserMessage","isFileMessage","String","messageId","reqId","getAvailableUriFromFileMessage","url","messageParams","file","uri","isSendbirdNotification","dataPayload","Boolean","parseSendbirdNotification","sendbird","JSON","parse","shouldRenderReaction","channel","reactionEnabled","isOpenChannel","isGroupChannel","isBroadcast","isSuper","getReactionCount","reaction","userIds","length","getFileTypeFromMessage","getFileType","type","getFileExtension","name","getMessageType","ogMetaData","fileType"],"sources":["message.ts"],"sourcesContent":["import { getFileExtension, getFileType } from '../shared/file';\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdDataPayload,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdReaction,\n SendbirdSendableMessage,\n} from '../types';\nimport { getMessageTimeFormat } from '../ui-format/common';\n\nexport function isNewMessage(msg: SendbirdMessage, currentUserId?: string) {\n const myMessage = isMyMessage(msg, currentUserId);\n if (myMessage) return false;\n if (msg.isAdminMessage()) return false;\n return msg.updatedAt === 0;\n}\n\nexport function isSendableMessage(msg?: SendbirdMessage | null): msg is SendbirdSendableMessage {\n return msg !== undefined && msg !== null && 'sendingStatus' in msg;\n}\n\nexport function isMyMessage(msg?: SendbirdMessage | null, currentUserId = '##__USER_ID_IS_NOT_PROVIDED__##') {\n if (!isSendableMessage(msg)) return false;\n return (\n ('sender' in msg && msg.sender?.userId === currentUserId) ||\n msg.sendingStatus === 'pending' ||\n msg.sendingStatus === 'failed' ||\n msg.sendingStatus === 'canceled'\n );\n}\n\nexport function messageKeyExtractor(message: SendbirdMessage): string {\n return getMessageUniqId(message);\n}\n\n// |-------------------|-------------------|-----------------|-------------------|\n// | sending status | reqId | messageId | createdAt |\n// |-------------------|-------------------|-----------------|-------------------|\n// | pending | timestamp(A) | 0 | timestamp(B) |\n// | canceled | timestamp(A) | 0 | ? |\n// | failed | timestamp(A) | 0 | ? |\n// | succeeded | timestamp(A) / '' | id from DB | timestamp(C) |\n// |-------------------|-------------------|-----------------|-------------------|\nexport function messageComparator(a: SendbirdMessage, b: SendbirdMessage) {\n let aStatusOffset = 0;\n let bStatusOffset = 0;\n\n if (isSendableMessage(a) && a.sendingStatus !== 'succeeded') aStatusOffset = 999999;\n if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = 999999;\n\n return b.createdAt + bStatusOffset - (a.createdAt + aStatusOffset);\n}\n\nexport function hasSameSender(a?: SendbirdMessage, b?: SendbirdMessage) {\n if (!a || !b) return false;\n if ('sender' in a && 'sender' in b) return a.sender?.userId === b.sender?.userId;\n return false;\n}\n\nexport function calcMessageGrouping(\n groupEnabled: boolean,\n curr: SendbirdMessage,\n prev?: SendbirdMessage,\n next?: SendbirdMessage,\n) {\n const getPrev = () => {\n if (!groupEnabled) return false;\n if (!prev) return false;\n if (curr.isAdminMessage()) return false;\n if (!hasSameSender(curr, prev)) return false;\n if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(prev.createdAt))) return false;\n return true;\n };\n\n const getNext = () => {\n if (!groupEnabled) return false;\n if (!next) return false;\n if (curr.isAdminMessage()) return false;\n if (!hasSameSender(curr, next)) return false;\n if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(next.createdAt))) return false;\n return true;\n };\n\n return { groupWithPrev: getPrev(), groupWithNext: getNext() };\n}\n\nexport function getMessageUniqId(msg: SendbirdBaseMessage) {\n if (msg.isUserMessage() || msg.isFileMessage()) {\n if (msg.sendingStatus === 'succeeded') return String(msg.messageId);\n return msg.reqId;\n }\n\n return String(msg.messageId);\n}\n\nexport function getAvailableUriFromFileMessage(message: SendbirdFileMessage) {\n if (!message.url && message.messageParams.file && 'uri' in message.messageParams.file) {\n return message.messageParams.file.uri;\n }\n return message.url;\n}\n\ntype RawSendbirdDataPayload = { sendbird: string | object };\nexport function isSendbirdNotification(dataPayload?: {\n [key: string]: string | object;\n}): dataPayload is RawSendbirdDataPayload {\n if (!dataPayload) return false;\n return Boolean(dataPayload['sendbird']);\n}\n\nexport function parseSendbirdNotification(dataPayload: RawSendbirdDataPayload): SendbirdDataPayload {\n return typeof dataPayload.sendbird === 'string' ? JSON.parse(dataPayload.sendbird) : dataPayload.sendbird;\n}\n\nexport function shouldRenderReaction(channel: SendbirdBaseChannel, reactionEnabled: boolean) {\n if (channel.isOpenChannel()) {\n return false;\n }\n\n if (channel.isGroupChannel()) {\n if (channel.isBroadcast) return false;\n if (channel.isSuper) return false;\n }\n\n return reactionEnabled;\n}\n\nexport function getReactionCount(reaction: SendbirdReaction) {\n return reaction.userIds.length;\n}\n\ntype MessageType =\n | 'user'\n | 'admin'\n | 'file'\n | 'unknown'\n | `user.${'opengraph'}`\n | `file.${'image' | 'video' | 'audio'}`;\n\nexport function getFileTypeFromMessage(message: SendbirdFileMessage) {\n return getFileType(message.type || getFileExtension(message.name));\n}\n\nexport function getMessageType(message: SendbirdMessage): MessageType {\n if (message.isAdminMessage()) {\n return 'admin';\n }\n\n if (message.isUserMessage()) {\n if (message.ogMetaData) {\n return 'user.opengraph';\n }\n return 'user';\n }\n\n if (message.isFileMessage()) {\n const fileType = getFileTypeFromMessage(message);\n switch (fileType) {\n case 'image':\n case 'video': {\n return `file.${fileType}`;\n }\n case 'audio': {\n return `file.${fileType}`;\n }\n default: {\n return 'file';\n }\n }\n }\n\n return 'unknown';\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_message","require","_file","_common","isNewMessage","msg","currentUserId","myMessage","isMyMessage","isAdminMessage","updatedAt","isSendableMessage","undefined","_msg$sender","arguments","length","sender","userId","sendingStatus","messageKeyExtractor","message","getMessageUniqId","messageComparator","a","b","aStatusOffset","bStatusOffset","createdAt","hasSameSender","_a$sender","_b$sender","calcMessageGrouping","groupEnabled","curr","prev","next","getPrev","getMessageTimeFormat","Date","getNext","groupWithPrev","groupWithNext","isUserMessage","isFileMessage","String","messageId","reqId","getAvailableUriFromFileMessage","url","messageParams","file","uri","isSendbirdNotification","dataPayload","Boolean","parseSendbirdNotification","sendbird","JSON","parse","shouldRenderReaction","channel","reactionEnabled","isOpenChannel","isGroupChannel","isBroadcast","isSuper","getReactionCount","reaction","userIds","getFileTypeFromMessage","getFileType","type","getFileExtension","name","getMessageType","ogMetaData","fileType","getDefaultMessageSearchQueryParams","keyword","channelUrl","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","MessageSearchOrder","TIMESTAMP"],"sources":["message.ts"],"sourcesContent":["import { MessageSearchOrder } from '@sendbird/chat/message';\n\nimport { getFileExtension, getFileType } from '../shared/file';\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdDataPayload,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdReaction,\n SendbirdSendableMessage,\n} from '../types';\nimport { getMessageTimeFormat } from '../ui-format/common';\n\nexport function isNewMessage(msg: SendbirdMessage, currentUserId?: string) {\n const myMessage = isMyMessage(msg, currentUserId);\n if (myMessage) return false;\n if (msg.isAdminMessage()) return false;\n return msg.updatedAt === 0;\n}\n\nexport function isSendableMessage(msg?: SendbirdMessage | null): msg is SendbirdSendableMessage {\n return msg !== undefined && msg !== null && 'sendingStatus' in msg;\n}\n\nexport function isMyMessage(msg?: SendbirdMessage | null, currentUserId = '##__USER_ID_IS_NOT_PROVIDED__##') {\n if (!isSendableMessage(msg)) return false;\n return (\n ('sender' in msg && msg.sender?.userId === currentUserId) ||\n msg.sendingStatus === 'pending' ||\n msg.sendingStatus === 'failed' ||\n msg.sendingStatus === 'canceled'\n );\n}\n\nexport function messageKeyExtractor(message: SendbirdMessage): string {\n return getMessageUniqId(message);\n}\n\n// |-------------------|-------------------|-----------------|-------------------|\n// | sending status | reqId | messageId | createdAt |\n// |-------------------|-------------------|-----------------|-------------------|\n// | pending | timestamp(A) | 0 | timestamp(B) |\n// | canceled | timestamp(A) | 0 | ? |\n// | failed | timestamp(A) | 0 | ? |\n// | succeeded | timestamp(A) / '' | id from DB | timestamp(C) |\n// |-------------------|-------------------|-----------------|-------------------|\nexport function messageComparator(a: SendbirdMessage, b: SendbirdMessage) {\n let aStatusOffset = 0;\n let bStatusOffset = 0;\n\n if (isSendableMessage(a) && a.sendingStatus !== 'succeeded') aStatusOffset = 999999;\n if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = 999999;\n\n return b.createdAt + bStatusOffset - (a.createdAt + aStatusOffset);\n}\n\nexport function hasSameSender(a?: SendbirdMessage, b?: SendbirdMessage) {\n if (!a || !b) return false;\n if ('sender' in a && 'sender' in b) return a.sender?.userId === b.sender?.userId;\n return false;\n}\n\nexport function calcMessageGrouping(\n groupEnabled: boolean,\n curr: SendbirdMessage,\n prev?: SendbirdMessage,\n next?: SendbirdMessage,\n) {\n const getPrev = () => {\n if (!groupEnabled) return false;\n if (!prev) return false;\n if (curr.isAdminMessage()) return false;\n if (!hasSameSender(curr, prev)) return false;\n if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(prev.createdAt))) return false;\n return true;\n };\n\n const getNext = () => {\n if (!groupEnabled) return false;\n if (!next) return false;\n if (curr.isAdminMessage()) return false;\n if (!hasSameSender(curr, next)) return false;\n if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(next.createdAt))) return false;\n return true;\n };\n\n return { groupWithPrev: getPrev(), groupWithNext: getNext() };\n}\n\nexport function getMessageUniqId(msg: SendbirdBaseMessage) {\n if (msg.isUserMessage() || msg.isFileMessage()) {\n if (msg.sendingStatus === 'succeeded') return String(msg.messageId);\n return msg.reqId;\n }\n\n return String(msg.messageId);\n}\n\nexport function getAvailableUriFromFileMessage(message: SendbirdFileMessage) {\n if (!message.url && message.messageParams.file && 'uri' in message.messageParams.file) {\n return message.messageParams.file.uri;\n }\n return message.url;\n}\n\ntype RawSendbirdDataPayload = { sendbird: string | object };\nexport function isSendbirdNotification(dataPayload?: {\n [key: string]: string | object;\n}): dataPayload is RawSendbirdDataPayload {\n if (!dataPayload) return false;\n return Boolean(dataPayload['sendbird']);\n}\n\nexport function parseSendbirdNotification(dataPayload: RawSendbirdDataPayload): SendbirdDataPayload {\n return typeof dataPayload.sendbird === 'string' ? JSON.parse(dataPayload.sendbird) : dataPayload.sendbird;\n}\n\nexport function shouldRenderReaction(channel: SendbirdBaseChannel, reactionEnabled: boolean) {\n if (channel.isOpenChannel()) {\n return false;\n }\n\n if (channel.isGroupChannel()) {\n if (channel.isBroadcast) return false;\n if (channel.isSuper) return false;\n }\n\n return reactionEnabled;\n}\n\nexport function getReactionCount(reaction: SendbirdReaction) {\n return reaction.userIds.length;\n}\n\ntype MessageType =\n | 'user'\n | 'admin'\n | 'file'\n | 'unknown'\n | `user.${'opengraph'}`\n | `file.${'image' | 'video' | 'audio'}`;\n\nexport function getFileTypeFromMessage(message: SendbirdFileMessage) {\n return getFileType(message.type || getFileExtension(message.name));\n}\n\nexport function getMessageType(message: SendbirdMessage): MessageType {\n if (message.isAdminMessage()) {\n return 'admin';\n }\n\n if (message.isUserMessage()) {\n if (message.ogMetaData) {\n return 'user.opengraph';\n }\n return 'user';\n }\n\n if (message.isFileMessage()) {\n const fileType = getFileTypeFromMessage(message);\n switch (fileType) {\n case 'image':\n case 'video': {\n return `file.${fileType}`;\n }\n case 'audio': {\n return `file.${fileType}`;\n }\n default: {\n return 'file';\n }\n }\n }\n\n return 'unknown';\n}\n\nexport function getDefaultMessageSearchQueryParams(channel: SendbirdGroupChannel, keyword: string) {\n return {\n keyword,\n channelUrl: channel.url,\n messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),\n order: MessageSearchOrder.TIMESTAMP,\n };\n}\n"],"mappings":"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"}
|
|
@@ -5,12 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getUserUniqId = getUserUniqId;
|
|
7
7
|
exports.ifOperator = ifOperator;
|
|
8
|
-
|
|
9
8
|
function ifOperator(role, then, or) {
|
|
10
9
|
if (role === 'operator') return then;
|
|
11
10
|
return or;
|
|
12
11
|
}
|
|
13
|
-
|
|
14
12
|
function getUserUniqId(user) {
|
|
15
13
|
return user.userId;
|
|
16
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ifOperator","role","then","or","getUserUniqId","user","userId"],"sources":["user.ts"],"sourcesContent":["import type { Role } from '@sendbird/chat';\n\nimport type { UserStruct } from '../types';\n\nexport function ifOperator<T>(role: Role, then: T): T | undefined;\nexport function ifOperator<T, V>(role: Role, then: T, or: V): T | V;\nexport function ifOperator(role: Role, then: unknown, or?: unknown) {\n if (role === 'operator') return then;\n return or;\n}\n\nexport function getUserUniqId<T extends UserStruct>(user: T) {\n return user.userId;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["ifOperator","role","then","or","getUserUniqId","user","userId"],"sources":["user.ts"],"sourcesContent":["import type { Role } from '@sendbird/chat';\n\nimport type { UserStruct } from '../types';\n\nexport function ifOperator<T>(role: Role, then: T): T | undefined;\nexport function ifOperator<T, V>(role: Role, then: T, or: V): T | V;\nexport function ifOperator(role: Role, then: unknown, or?: unknown) {\n if (role === 'operator') return then;\n return or;\n}\n\nexport function getUserUniqId<T extends UserStruct>(user: T) {\n return user.userId;\n}\n"],"mappings":";;;;;;;AAMO,SAASA,UAAUA,CAACC,IAAU,EAAEC,IAAa,EAAEC,EAAY,EAAE;EAClE,IAAIF,IAAI,KAAK,UAAU,EAAE,OAAOC,IAAI;EACpC,OAAOC,EAAE;AACX;AAEO,SAASC,aAAaA,CAAuBC,IAAO,EAAE;EAC3D,OAAOA,IAAI,CAACC,MAAM;AACpB"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.arrayToMapWithGetter = arrayToMapWithGetter;
|
|
7
7
|
exports.default = arrayToMap;
|
|
8
|
-
|
|
9
8
|
/**
|
|
10
9
|
* Convert Array of the object to Object
|
|
11
10
|
* @param {object[]} arr
|
|
@@ -31,22 +30,17 @@ function arrayToMap(arr, selector, fallbackSelector, combine) {
|
|
|
31
30
|
return arr.reduce((accum, curr) => {
|
|
32
31
|
if (combine && fallbackSelector) {
|
|
33
32
|
const _key = curr[selector] + curr[fallbackSelector];
|
|
34
|
-
|
|
35
33
|
accum[_key] = curr;
|
|
36
34
|
} else {
|
|
37
35
|
const _key = curr[selector] || curr[fallbackSelector];
|
|
38
|
-
|
|
39
36
|
accum[_key] = curr;
|
|
40
37
|
}
|
|
41
|
-
|
|
42
38
|
return accum;
|
|
43
39
|
}, {});
|
|
44
40
|
}
|
|
45
|
-
|
|
46
41
|
function arrayToMapWithGetter(arr, getSelector) {
|
|
47
42
|
return arr.reduce((accum, curr) => {
|
|
48
43
|
const _key = getSelector(curr);
|
|
49
|
-
|
|
50
44
|
accum[_key] = curr;
|
|
51
45
|
return accum;
|
|
52
46
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["arrayToMap","arr","selector","fallbackSelector","combine","reduce","accum","curr","_key","arrayToMapWithGetter","getSelector"],"sources":["arrayToMap.ts"],"sourcesContent":["import type { FilterByValueType } from '../types';\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: keyof FilterByValueType<T, string | number>,\n): Record<string, T>;\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: string,\n fallbackSelector: K,\n): Record<string, T>;\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: string,\n selector2: string,\n combineKey: true,\n): Record<string, T>;\n\n/**\n * Convert Array of the object to Object\n * @param {object[]} arr\n * @param {keyof object} selector\n * @param {keyof object} [fallbackSelector]\n * @param {boolean} [combine]\n * @returns {Record<keyof object, object>}\n * @example\n * ```\n * const arr = [{name: 'john'}, {name: 'chris'}, {name: 'sravan'}, {name: 'hoon'}];\n * const obj = arrayToMap(arr, 'name');\n *\n * console.log(obj);\n * // {\n * // 'john': {name: 'john'},\n * // 'chris': {name: 'chris'},\n * // 'sravan': {name: 'sravan'},\n * // 'hoon': {name: 'hoon'}\n * // }\n * ```\n * */\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: K,\n fallbackSelector?: K,\n combine?: boolean,\n) {\n return arr.reduce((accum, curr) => {\n if (combine && fallbackSelector) {\n const _key = curr[selector] + (curr[fallbackSelector] as string);\n accum[_key] = curr;\n } else {\n const _key = (curr[selector] || curr[fallbackSelector as K]) as string;\n accum[_key] = curr;\n }\n\n return accum;\n }, {} as Record<string, T>);\n}\n\nexport function arrayToMapWithGetter<T>(arr: T[], getSelector: (item: T) => string) {\n return arr.reduce((accum, curr) => {\n const _key = getSelector(curr);\n accum[_key] = curr;\n return accum;\n }, {} as Record<string, T>);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["arrayToMap","arr","selector","fallbackSelector","combine","reduce","accum","curr","_key","arrayToMapWithGetter","getSelector"],"sources":["arrayToMap.ts"],"sourcesContent":["import type { FilterByValueType } from '../types';\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: keyof FilterByValueType<T, string | number>,\n): Record<string, T>;\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: string,\n fallbackSelector: K,\n): Record<string, T>;\n\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: string,\n selector2: string,\n combineKey: true,\n): Record<string, T>;\n\n/**\n * Convert Array of the object to Object\n * @param {object[]} arr\n * @param {keyof object} selector\n * @param {keyof object} [fallbackSelector]\n * @param {boolean} [combine]\n * @returns {Record<keyof object, object>}\n * @example\n * ```\n * const arr = [{name: 'john'}, {name: 'chris'}, {name: 'sravan'}, {name: 'hoon'}];\n * const obj = arrayToMap(arr, 'name');\n *\n * console.log(obj);\n * // {\n * // 'john': {name: 'john'},\n * // 'chris': {name: 'chris'},\n * // 'sravan': {name: 'sravan'},\n * // 'hoon': {name: 'hoon'}\n * // }\n * ```\n * */\nexport default function arrayToMap<T extends Record<K, unknown>, K extends keyof T = keyof T>(\n arr: T[],\n selector: K,\n fallbackSelector?: K,\n combine?: boolean,\n) {\n return arr.reduce((accum, curr) => {\n if (combine && fallbackSelector) {\n const _key = curr[selector] + (curr[fallbackSelector] as string);\n accum[_key] = curr;\n } else {\n const _key = (curr[selector] || curr[fallbackSelector as K]) as string;\n accum[_key] = curr;\n }\n\n return accum;\n }, {} as Record<string, T>);\n}\n\nexport function arrayToMapWithGetter<T>(arr: T[], getSelector: (item: T) => string) {\n return arr.reduce((accum, curr) => {\n const _key = getSelector(curr);\n accum[_key] = curr;\n return accum;\n }, {} as Record<string, T>);\n}\n"],"mappings":";;;;;;;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,UAAUA,CAChCC,GAAQ,EACRC,QAAW,EACXC,gBAAoB,EACpBC,OAAiB,EACjB;EACA,OAAOH,GAAG,CAACI,MAAM,CAAC,CAACC,KAAK,EAAEC,IAAI,KAAK;IACjC,IAAIH,OAAO,IAAID,gBAAgB,EAAE;MAC/B,MAAMK,IAAI,GAAGD,IAAI,CAACL,QAAQ,CAAC,GAAIK,IAAI,CAACJ,gBAAgB,CAAY;MAChEG,KAAK,CAACE,IAAI,CAAC,GAAGD,IAAI;IACpB,CAAC,MAAM;MACL,MAAMC,IAAI,GAAID,IAAI,CAACL,QAAQ,CAAC,IAAIK,IAAI,CAACJ,gBAAgB,CAAiB;MACtEG,KAAK,CAACE,IAAI,CAAC,GAAGD,IAAI;IACpB;IAEA,OAAOD,KAAK;EACd,CAAC,EAAE,CAAC,CAAC,CAAsB;AAC7B;AAEO,SAASG,oBAAoBA,CAAIR,GAAQ,EAAES,WAAgC,EAAE;EAClF,OAAOT,GAAG,CAACI,MAAM,CAAC,CAACC,KAAK,EAAEC,IAAI,KAAK;IACjC,MAAMC,IAAI,GAAGE,WAAW,CAACH,IAAI,CAAC;IAC9BD,KAAK,CAACE,IAAI,CAAC,GAAGD,IAAI;IAClB,OAAOD,KAAK;EACd,CAAC,EAAE,CAAC,CAAC,CAAsB;AAC7B"}
|
|
@@ -4,46 +4,38 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.BufferedRequest = void 0;
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
|
|
7
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
9
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
10
10
|
let REQ_PER_TIMEOUT = 5;
|
|
11
11
|
let TIMEOUT_MILLS = 1000;
|
|
12
12
|
const SAFE_TIMEOUT_BUFFER = 100;
|
|
13
|
-
|
|
14
13
|
function generateRandomId() {
|
|
15
14
|
return Math.random().toString(16).slice(2);
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
class BufferedRequest {
|
|
19
17
|
static updateMarkAsReadOptions(reqPerTimeout, timeoutMills) {
|
|
20
18
|
BufferedRequest.markAsRead = BufferedRequest.create(reqPerTimeout, timeoutMills);
|
|
21
19
|
}
|
|
22
|
-
|
|
23
20
|
static updateMarkAsDeliveredOptions(reqPerTimeout, timeoutMills) {
|
|
24
21
|
BufferedRequest.markAsDelivered = BufferedRequest.create(reqPerTimeout, timeoutMills);
|
|
25
22
|
}
|
|
26
|
-
|
|
27
23
|
static get reqPerTimeout() {
|
|
28
24
|
return REQ_PER_TIMEOUT;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
static set reqPerTimeout(value) {
|
|
32
27
|
REQ_PER_TIMEOUT = value;
|
|
33
28
|
BufferedRequest.markAsRead = BufferedRequest.create();
|
|
34
29
|
BufferedRequest.markAsDelivered = BufferedRequest.create();
|
|
35
30
|
}
|
|
36
|
-
|
|
37
31
|
static get timeoutMills() {
|
|
38
32
|
return TIMEOUT_MILLS;
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
static set timeoutMills(value) {
|
|
42
35
|
TIMEOUT_MILLS = value;
|
|
43
36
|
BufferedRequest.markAsRead = BufferedRequest.create();
|
|
44
37
|
BufferedRequest.markAsDelivered = BufferedRequest.create();
|
|
45
38
|
}
|
|
46
|
-
|
|
47
39
|
static create() {
|
|
48
40
|
let reqPerTimeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : REQ_PER_TIMEOUT;
|
|
49
41
|
let timeoutMills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TIMEOUT_MILLS;
|
|
@@ -56,16 +48,13 @@ class BufferedRequest {
|
|
|
56
48
|
waitQueue.set(lane ?? generateRandomId(), func);
|
|
57
49
|
this.invoke();
|
|
58
50
|
},
|
|
59
|
-
|
|
60
51
|
shift() {
|
|
61
52
|
if (nextQueue.size < reqPerTimeout) {
|
|
62
53
|
const nextRemains = Math.min(reqPerTimeout - nextQueue.size, waitQueue.size);
|
|
63
54
|
const lanes = [...waitQueue.keys()];
|
|
64
|
-
|
|
65
55
|
for (let n = 0; n < nextRemains; n++) {
|
|
66
56
|
const lane = lanes[n];
|
|
67
57
|
const func = waitQueue.get(lane);
|
|
68
|
-
|
|
69
58
|
if (func) {
|
|
70
59
|
waitQueue.delete(lane);
|
|
71
60
|
nextQueue.set(lane, func);
|
|
@@ -73,19 +62,16 @@ class BufferedRequest {
|
|
|
73
62
|
}
|
|
74
63
|
}
|
|
75
64
|
},
|
|
76
|
-
|
|
77
65
|
handleIdle() {
|
|
78
66
|
if (0 < nextQueue.size) {
|
|
79
67
|
state = 'processing';
|
|
80
68
|
this.invoke();
|
|
81
69
|
}
|
|
82
70
|
},
|
|
83
|
-
|
|
84
71
|
handleProcessing() {
|
|
85
72
|
if (timeout) return;
|
|
86
73
|
timeout = setTimeout(() => {
|
|
87
74
|
timeout = undefined;
|
|
88
|
-
|
|
89
75
|
if (0 < nextQueue.size || 0 < waitQueue.size) {
|
|
90
76
|
this.invoke();
|
|
91
77
|
} else {
|
|
@@ -96,34 +82,27 @@ class BufferedRequest {
|
|
|
96
82
|
const nextRequestBaseTimeout = timeoutMills / nextQueue.size;
|
|
97
83
|
nextQueue.forEach(func => {
|
|
98
84
|
setTimeout(() => {
|
|
99
|
-
func();
|
|
85
|
+
func();
|
|
86
|
+
// TODO: Add retry
|
|
100
87
|
//.catch(() => waitQueue.set(lane, func));
|
|
101
88
|
}, nextRequestBaseTimeout * index);
|
|
102
89
|
index++;
|
|
103
90
|
});
|
|
104
91
|
nextQueue.clear();
|
|
105
92
|
},
|
|
106
|
-
|
|
107
93
|
async invoke() {
|
|
108
94
|
this.shift();
|
|
109
|
-
|
|
110
95
|
if (state === 'idle') {
|
|
111
96
|
this.handleIdle();
|
|
112
97
|
}
|
|
113
|
-
|
|
114
98
|
if (state === 'processing') {
|
|
115
99
|
this.handleProcessing();
|
|
116
100
|
}
|
|
117
101
|
}
|
|
118
|
-
|
|
119
102
|
};
|
|
120
103
|
}
|
|
121
|
-
|
|
122
104
|
}
|
|
123
|
-
|
|
124
105
|
exports.BufferedRequest = BufferedRequest;
|
|
125
|
-
|
|
126
106
|
_defineProperty(BufferedRequest, "markAsRead", BufferedRequest.create());
|
|
127
|
-
|
|
128
107
|
_defineProperty(BufferedRequest, "markAsDelivered", BufferedRequest.create());
|
|
129
108
|
//# sourceMappingURL=bufferedRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["REQ_PER_TIMEOUT","TIMEOUT_MILLS","SAFE_TIMEOUT_BUFFER","generateRandomId","Math","random","toString","slice","BufferedRequest","updateMarkAsReadOptions","reqPerTimeout","timeoutMills","markAsRead","create","updateMarkAsDeliveredOptions","markAsDelivered","value","waitQueue","Map","nextQueue","state","timeout","push","func","lane","set","invoke","shift","size","nextRemains","min","lanes","keys","n","get","delete","handleIdle","handleProcessing","setTimeout","
|
|
1
|
+
{"version":3,"names":["REQ_PER_TIMEOUT","TIMEOUT_MILLS","SAFE_TIMEOUT_BUFFER","generateRandomId","Math","random","toString","slice","BufferedRequest","updateMarkAsReadOptions","reqPerTimeout","timeoutMills","markAsRead","create","updateMarkAsDeliveredOptions","markAsDelivered","value","arguments","length","undefined","waitQueue","Map","nextQueue","state","timeout","push","func","lane","set","invoke","shift","size","nextRemains","min","lanes","keys","n","get","delete","handleIdle","handleProcessing","setTimeout","index","nextRequestBaseTimeout","forEach","clear","exports","_defineProperty"],"sources":["bufferedRequest.ts"],"sourcesContent":["type Func = (...args: unknown[]) => Promise<unknown>;\ntype State = 'idle' | 'processing';\n\nlet REQ_PER_TIMEOUT = 5;\nlet TIMEOUT_MILLS = 1000;\nconst SAFE_TIMEOUT_BUFFER = 100;\n\nfunction generateRandomId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport class BufferedRequest {\n public static markAsRead = BufferedRequest.create();\n public static markAsDelivered = BufferedRequest.create();\n\n public static updateMarkAsReadOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsRead = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n public static updateMarkAsDeliveredOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsDelivered = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n\n public static get reqPerTimeout() {\n return REQ_PER_TIMEOUT;\n }\n public static set reqPerTimeout(value: number) {\n REQ_PER_TIMEOUT = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static get timeoutMills() {\n return TIMEOUT_MILLS;\n }\n public static set timeoutMills(value: number) {\n TIMEOUT_MILLS = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static create(reqPerTimeout = REQ_PER_TIMEOUT, timeoutMills = TIMEOUT_MILLS) {\n const waitQueue = new Map<string, Func>();\n const nextQueue = new Map<string, Func>();\n\n let state: State = 'idle';\n let timeout: NodeJS.Timeout | undefined;\n\n return {\n push(func: Func, lane?: string) {\n waitQueue.set(lane ?? generateRandomId(), func);\n this.invoke();\n },\n shift() {\n if (nextQueue.size < reqPerTimeout) {\n const nextRemains = Math.min(reqPerTimeout - nextQueue.size, waitQueue.size);\n const lanes = [...waitQueue.keys()];\n for (let n = 0; n < nextRemains; n++) {\n const lane = lanes[n];\n const func = waitQueue.get(lane);\n if (func) {\n waitQueue.delete(lane);\n nextQueue.set(lane, func);\n }\n }\n }\n },\n handleIdle() {\n if (0 < nextQueue.size) {\n state = 'processing';\n this.invoke();\n }\n },\n handleProcessing() {\n if (timeout) return;\n\n timeout = setTimeout(() => {\n timeout = undefined;\n if (0 < nextQueue.size || 0 < waitQueue.size) {\n this.invoke();\n } else {\n state = 'idle';\n }\n }, timeoutMills + SAFE_TIMEOUT_BUFFER);\n\n let index = 0;\n const nextRequestBaseTimeout = timeoutMills / nextQueue.size;\n nextQueue.forEach((func) => {\n setTimeout(() => {\n func();\n // TODO: Add retry\n //.catch(() => waitQueue.set(lane, func));\n }, nextRequestBaseTimeout * index);\n index++;\n });\n nextQueue.clear();\n },\n async invoke() {\n this.shift();\n\n if (state === 'idle') {\n this.handleIdle();\n }\n\n if (state === 'processing') {\n this.handleProcessing();\n }\n },\n };\n }\n}\n"],"mappings":"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"}
|