@sendbird/uikit-utils 2.4.0 → 2.4.2
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 +3 -30
- 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 +36 -155
- 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 +5 -36
- 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 +208 -0
- package/lib/commonjs/shared/file.js.map +1 -0
- package/lib/commonjs/shared/index.js +12 -49
- 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 +3 -55
- package/lib/commonjs/shared/regex.js.map +1 -1
- package/lib/commonjs/ui-format/common.js +6 -18
- package/lib/commonjs/ui-format/common.js.map +1 -1
- package/lib/commonjs/ui-format/groupChannel.js +0 -15
- 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 +3 -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 +3 -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 +4 -18
- 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 +187 -0
- package/lib/module/shared/file.js.map +1 -0
- package/lib/module/shared/index.js +12 -39
- 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 -35
- package/lib/module/shared/regex.js.map +1 -1
- package/lib/module/ui-format/common.js +6 -9
- package/lib/module/ui-format/common.js.map +1 -1
- package/lib/module/ui-format/groupChannel.js +0 -7
- package/lib/module/ui-format/groupChannel.js.map +1 -1
- package/lib/module/ui-format/openChannel.js.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -3
- package/lib/typescript/src/shared/file.d.ts +68 -0
- package/lib/typescript/src/shared/index.d.ts +10 -16
- package/lib/typescript/src/shared/regex.d.ts +0 -6
- package/package.json +11 -7
- package/src/index.ts +3 -19
- package/src/sendbird/message.ts +1 -1
- package/src/shared/file.ts +193 -0
- package/src/shared/index.ts +10 -37
- package/src/shared/regex.ts +0 -34
- package/lib/commonjs/shared/pubsub.js +0 -54
- package/lib/commonjs/shared/pubsub.js.map +0 -1
- package/lib/module/shared/pubsub.js +0 -45
- package/lib/module/shared/pubsub.js.map +0 -1
- package/lib/typescript/src/shared/pubsub.d.ts +0 -8
- package/src/shared/pubsub.ts +0 -42
|
@@ -13,9 +13,7 @@ exports.getOpenChannelChatAvailableState = void 0;
|
|
|
13
13
|
exports.getOpenChannels = getOpenChannels;
|
|
14
14
|
exports.isDefaultCoverImage = isDefaultCoverImage;
|
|
15
15
|
exports.isDifferentChannel = isDifferentChannel;
|
|
16
|
-
|
|
17
16
|
var _bufferedRequest = require("../shared/bufferedRequest");
|
|
18
|
-
|
|
19
17
|
/**
|
|
20
18
|
* Diff utils for channel
|
|
21
19
|
* @param {SendbirdBaseChannel} [a]
|
|
@@ -26,7 +24,6 @@ function isDifferentChannel(a, b) {
|
|
|
26
24
|
if (!a || !b) return true;
|
|
27
25
|
return a.url !== b.url;
|
|
28
26
|
}
|
|
29
|
-
|
|
30
27
|
const getGroupChannelChatAvailableState = channel => {
|
|
31
28
|
const isOperator = channel.myRole === 'operator';
|
|
32
29
|
const frozen = channel.isFrozen && !isOperator;
|
|
@@ -38,9 +35,7 @@ const getGroupChannelChatAvailableState = channel => {
|
|
|
38
35
|
muted
|
|
39
36
|
};
|
|
40
37
|
};
|
|
41
|
-
|
|
42
38
|
exports.getGroupChannelChatAvailableState = getGroupChannelChatAvailableState;
|
|
43
|
-
|
|
44
39
|
const getOpenChannelChatAvailableState = async (channel, userId) => {
|
|
45
40
|
const isOperator = channel.isOperator(userId);
|
|
46
41
|
const frozen = channel.isFrozen && !isOperator;
|
|
@@ -52,41 +47,30 @@ const getOpenChannelChatAvailableState = async (channel, userId) => {
|
|
|
52
47
|
muted
|
|
53
48
|
};
|
|
54
49
|
};
|
|
55
|
-
|
|
56
50
|
exports.getOpenChannelChatAvailableState = getOpenChannelChatAvailableState;
|
|
57
|
-
|
|
58
51
|
const confirmAndMarkAsRead = async channels => {
|
|
59
52
|
channels.filter(it => it.isGroupChannel() && it.unreadMessageCount > 0).forEach(it => _bufferedRequest.BufferedRequest.markAsRead.push(() => it.markAsRead(), it.url));
|
|
60
53
|
};
|
|
61
|
-
|
|
62
54
|
exports.confirmAndMarkAsRead = confirmAndMarkAsRead;
|
|
63
|
-
|
|
64
55
|
const confirmAndMarkAsDelivered = async channels => {
|
|
65
56
|
channels.filter(it => it.isGroupChannel() && it.unreadMessageCount > 0).forEach(it => _bufferedRequest.BufferedRequest.markAsDelivered.push(() => it.markAsDelivered(), it.url));
|
|
66
57
|
};
|
|
67
|
-
|
|
68
58
|
exports.confirmAndMarkAsDelivered = confirmAndMarkAsDelivered;
|
|
69
|
-
|
|
70
59
|
function isDefaultCoverImage(coverUrl) {
|
|
71
60
|
return coverUrl === '' || coverUrl.startsWith('https://static.sendbird.com/sample/cover');
|
|
72
61
|
}
|
|
73
|
-
|
|
74
62
|
function getMembersExcludeMe(channel, currentUserId) {
|
|
75
63
|
return channel.members.filter(m => m.userId !== currentUserId);
|
|
76
64
|
}
|
|
77
|
-
|
|
78
65
|
function getGroupChannels(channels) {
|
|
79
66
|
return channels.filter(c => c.isGroupChannel());
|
|
80
67
|
}
|
|
81
|
-
|
|
82
68
|
function getOpenChannels(channels) {
|
|
83
69
|
return channels.filter(c => c.isOpenChannel());
|
|
84
70
|
}
|
|
85
|
-
|
|
86
71
|
function getChannelUniqId(channel) {
|
|
87
72
|
return channel.url;
|
|
88
73
|
}
|
|
89
|
-
|
|
90
74
|
function getDefaultGroupChannelCreateParams(params) {
|
|
91
75
|
const createParams = {
|
|
92
76
|
name: '',
|
|
@@ -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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"}
|
|
@@ -18,33 +18,28 @@ exports.messageComparator = messageComparator;
|
|
|
18
18
|
exports.messageKeyExtractor = messageKeyExtractor;
|
|
19
19
|
exports.parseSendbirdNotification = parseSendbirdNotification;
|
|
20
20
|
exports.shouldRenderReaction = shouldRenderReaction;
|
|
21
|
-
|
|
22
|
-
var _regex = require("../shared/regex");
|
|
23
|
-
|
|
21
|
+
var _file = require("../shared/file");
|
|
24
22
|
var _common = require("../ui-format/common");
|
|
25
|
-
|
|
26
23
|
function isNewMessage(msg, currentUserId) {
|
|
27
24
|
const myMessage = isMyMessage(msg, currentUserId);
|
|
28
25
|
if (myMessage) return false;
|
|
29
26
|
if (msg.isAdminMessage()) return false;
|
|
30
27
|
return msg.updatedAt === 0;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
29
|
function isSendableMessage(msg) {
|
|
34
30
|
return msg !== undefined && msg !== null && 'sendingStatus' in msg;
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
function isMyMessage(msg) {
|
|
38
33
|
var _msg$sender;
|
|
39
|
-
|
|
40
34
|
let currentUserId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '##__USER_ID_IS_NOT_PROVIDED__##';
|
|
41
35
|
if (!isSendableMessage(msg)) return false;
|
|
42
36
|
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
37
|
}
|
|
44
|
-
|
|
45
38
|
function messageKeyExtractor(message) {
|
|
46
39
|
return getMessageUniqId(message);
|
|
47
|
-
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// |-------------------|-------------------|-----------------|-------------------|
|
|
48
43
|
// | sending status | reqId | messageId | createdAt |
|
|
49
44
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
50
45
|
// | pending | timestamp(A) | 0 | timestamp(B) |
|
|
@@ -52,8 +47,6 @@ function messageKeyExtractor(message) {
|
|
|
52
47
|
// | failed | timestamp(A) | 0 | ? |
|
|
53
48
|
// | succeeded | timestamp(A) / '' | id from DB | timestamp(C) |
|
|
54
49
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
55
|
-
|
|
56
|
-
|
|
57
50
|
function messageComparator(a, b) {
|
|
58
51
|
let aStatusOffset = 0;
|
|
59
52
|
let bStatusOffset = 0;
|
|
@@ -61,15 +54,12 @@ function messageComparator(a, b) {
|
|
|
61
54
|
if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = 999999;
|
|
62
55
|
return b.createdAt + bStatusOffset - (a.createdAt + aStatusOffset);
|
|
63
56
|
}
|
|
64
|
-
|
|
65
57
|
function hasSameSender(a, b) {
|
|
66
58
|
var _a$sender, _b$sender;
|
|
67
|
-
|
|
68
59
|
if (!a || !b) return false;
|
|
69
60
|
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
61
|
return false;
|
|
71
62
|
}
|
|
72
|
-
|
|
73
63
|
function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
74
64
|
const getPrev = () => {
|
|
75
65
|
if (!groupEnabled) return false;
|
|
@@ -79,7 +69,6 @@ function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
79
69
|
if ((0, _common.getMessageTimeFormat)(new Date(curr.createdAt)) !== (0, _common.getMessageTimeFormat)(new Date(prev.createdAt))) return false;
|
|
80
70
|
return true;
|
|
81
71
|
};
|
|
82
|
-
|
|
83
72
|
const getNext = () => {
|
|
84
73
|
if (!groupEnabled) return false;
|
|
85
74
|
if (!next) return false;
|
|
@@ -88,95 +77,75 @@ function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
88
77
|
if ((0, _common.getMessageTimeFormat)(new Date(curr.createdAt)) !== (0, _common.getMessageTimeFormat)(new Date(next.createdAt))) return false;
|
|
89
78
|
return true;
|
|
90
79
|
};
|
|
91
|
-
|
|
92
80
|
return {
|
|
93
81
|
groupWithPrev: getPrev(),
|
|
94
82
|
groupWithNext: getNext()
|
|
95
83
|
};
|
|
96
84
|
}
|
|
97
|
-
|
|
98
85
|
function getMessageUniqId(msg) {
|
|
99
86
|
if (msg.isUserMessage() || msg.isFileMessage()) {
|
|
100
87
|
if (msg.sendingStatus === 'succeeded') return String(msg.messageId);
|
|
101
88
|
return msg.reqId;
|
|
102
89
|
}
|
|
103
|
-
|
|
104
90
|
return String(msg.messageId);
|
|
105
91
|
}
|
|
106
|
-
|
|
107
92
|
function getAvailableUriFromFileMessage(message) {
|
|
108
93
|
if (!message.url && message.messageParams.file && 'uri' in message.messageParams.file) {
|
|
109
94
|
return message.messageParams.file.uri;
|
|
110
95
|
}
|
|
111
|
-
|
|
112
96
|
return message.url;
|
|
113
97
|
}
|
|
114
|
-
|
|
115
98
|
function isSendbirdNotification(dataPayload) {
|
|
116
99
|
if (!dataPayload) return false;
|
|
117
100
|
return Boolean(dataPayload['sendbird']);
|
|
118
101
|
}
|
|
119
|
-
|
|
120
102
|
function parseSendbirdNotification(dataPayload) {
|
|
121
103
|
return typeof dataPayload.sendbird === 'string' ? JSON.parse(dataPayload.sendbird) : dataPayload.sendbird;
|
|
122
104
|
}
|
|
123
|
-
|
|
124
105
|
function shouldRenderReaction(channel, reactionEnabled) {
|
|
125
106
|
if (channel.isOpenChannel()) {
|
|
126
107
|
return false;
|
|
127
108
|
}
|
|
128
|
-
|
|
129
109
|
if (channel.isGroupChannel()) {
|
|
130
110
|
if (channel.isBroadcast) return false;
|
|
131
111
|
if (channel.isSuper) return false;
|
|
132
112
|
}
|
|
133
|
-
|
|
134
113
|
return reactionEnabled;
|
|
135
114
|
}
|
|
136
|
-
|
|
137
115
|
function getReactionCount(reaction) {
|
|
138
116
|
return reaction.userIds.length;
|
|
139
117
|
}
|
|
140
|
-
|
|
141
118
|
function getFileTypeFromMessage(message) {
|
|
142
|
-
return (0,
|
|
119
|
+
return (0, _file.getFileType)(message.type || (0, _file.getFileExtension)(message.name));
|
|
143
120
|
}
|
|
144
|
-
|
|
145
121
|
function getMessageType(message) {
|
|
146
122
|
if (message.isAdminMessage()) {
|
|
147
123
|
return 'admin';
|
|
148
124
|
}
|
|
149
|
-
|
|
150
125
|
if (message.isUserMessage()) {
|
|
151
126
|
if (message.ogMetaData) {
|
|
152
127
|
return 'user.opengraph';
|
|
153
128
|
}
|
|
154
|
-
|
|
155
129
|
return 'user';
|
|
156
130
|
}
|
|
157
|
-
|
|
158
131
|
if (message.isFileMessage()) {
|
|
159
132
|
const fileType = getFileTypeFromMessage(message);
|
|
160
|
-
|
|
161
133
|
switch (fileType) {
|
|
162
134
|
case 'image':
|
|
163
135
|
case 'video':
|
|
164
136
|
{
|
|
165
137
|
return `file.${fileType}`;
|
|
166
138
|
}
|
|
167
|
-
|
|
168
139
|
case 'audio':
|
|
169
140
|
{
|
|
170
141
|
return `file.${fileType}`;
|
|
171
142
|
}
|
|
172
|
-
|
|
173
143
|
default:
|
|
174
144
|
{
|
|
175
145
|
return 'file';
|
|
176
146
|
}
|
|
177
147
|
}
|
|
178
148
|
}
|
|
179
|
-
|
|
180
149
|
return 'unknown';
|
|
181
150
|
}
|
|
182
151
|
//# 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/regex';\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":["_file","require","_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"],"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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"}
|
|
@@ -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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"}
|