@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":["BufferedRequest","isDifferentChannel","a","b","url","getGroupChannelChatAvailableState","channel","isOperator","myRole","frozen","isFrozen","muted","myMutedState","disabled","getOpenChannelChatAvailableState","userId","getMyMutedInfo","isMuted","confirmAndMarkAsRead","channels","filter","it","isGroupChannel","unreadMessageCount","forEach","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":"AAAA,SAASA,
|
|
1
|
+
{"version":3,"names":["BufferedRequest","isDifferentChannel","a","b","url","getGroupChannelChatAvailableState","channel","isOperator","myRole","frozen","isFrozen","muted","myMutedState","disabled","getOpenChannelChatAvailableState","userId","getMyMutedInfo","isMuted","confirmAndMarkAsRead","channels","filter","it","isGroupChannel","unreadMessageCount","forEach","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":"AAAA,SAASA,eAAe,QAAQ,2BAA2B;AAS3D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAgCC,CAAK,EAAEC,CAAK,EAAW;EACvF,IAAI,CAACD,CAAC,IAAI,CAACC,CAAC,EAAE,OAAO,IAAI;EACzB,OAAOD,CAAC,CAACE,GAAG,KAAKD,CAAC,CAACC,GAAG;AACxB;AAEA,OAAO,MAAMC,iCAAiC,GAAIC,OAA6B,IAAK;EAClF,MAAMC,UAAU,GAAGD,OAAO,CAACE,MAAM,KAAK,UAAU;EAChD,MAAMC,MAAM,GAAGH,OAAO,CAACI,QAAQ,IAAI,CAACH,UAAU;EAC9C,MAAMI,KAAK,GAAGL,OAAO,CAACM,YAAY,KAAK,OAAO;EAC9C,MAAMC,QAAQ,GAAGJ,MAAM,IAAIE,KAAK;EAChC,OAAO;IAAEE,QAAQ;IAAEJ,MAAM;IAAEE;EAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAMG,gCAAgC,GAAG,MAAAA,CAAOR,OAA4B,EAAES,MAAc,KAAK;EACtG,MAAMR,UAAU,GAAGD,OAAO,CAACC,UAAU,CAACQ,MAAM,CAAC;EAC7C,MAAMN,MAAM,GAAGH,OAAO,CAACI,QAAQ,IAAI,CAACH,UAAU;EAC9C,MAAMI,KAAK,GAAG,CAAC,MAAML,OAAO,CAACU,cAAc,EAAE,EAAEC,OAAO;EACtD,MAAMJ,QAAQ,GAAGJ,MAAM,IAAIE,KAAK;EAChC,OAAO;IAAEE,QAAQ;IAAEJ,MAAM;IAAEE;EAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAMO,oBAAoB,GAAG,MAAOC,QAA+B,IAAK;EAC7EA,QAAQ,CACLC,MAAM,CAAEC,EAAE,IAAiCA,EAAE,CAACC,cAAc,EAAE,IAAID,EAAE,CAACE,kBAAkB,GAAG,CAAC,CAAC,CAC5FC,OAAO,CAAEH,EAAE,IAAKrB,eAAe,CAACyB,UAAU,CAACC,IAAI,CAAC,MAAML,EAAE,CAACI,UAAU,EAAE,EAAEJ,EAAE,CAACjB,GAAG,CAAC,CAAC;AACpF,CAAC;AAED,OAAO,MAAMuB,yBAAyB,GAAG,MAAOR,QAA+B,IAAK;EAClFA,QAAQ,CACLC,MAAM,CAAEC,EAAE,IAAiCA,EAAE,CAACC,cAAc,EAAE,IAAID,EAAE,CAACE,kBAAkB,GAAG,CAAC,CAAC,CAC5FC,OAAO,CAAEH,EAAE,IAAKrB,eAAe,CAAC4B,eAAe,CAACF,IAAI,CAAC,MAAML,EAAE,CAACO,eAAe,EAAE,EAAEP,EAAE,CAACjB,GAAG,CAAC,CAAC;AAC9F,CAAC;AAED,OAAO,SAASyB,mBAAmBA,CAACC,QAAgB,EAAE;EACpD,OAAOA,QAAQ,KAAK,EAAE,IAAIA,QAAQ,CAACC,UAAU,CAAC,0CAA0C,CAAC;AAC3F;AAEA,OAAO,SAASC,mBAAmBA,CAAC1B,OAA6B,EAAE2B,aAAsB,EAAE;EACzF,OAAO3B,OAAO,CAAC4B,OAAO,CAACd,MAAM,CAAEe,CAAC,IAAKA,CAAC,CAACpB,MAAM,KAAKkB,aAAa,CAAC;AAClE;AAEA,OAAO,SAASG,gBAAgBA,CAACjB,QAA2B,EAA0B;EACpF,OAAOA,QAAQ,CAACC,MAAM,CAAEiB,CAAC,IAAgCA,CAAC,CAACf,cAAc,EAAE,CAAC;AAC9E;AAEA,OAAO,SAASgB,eAAeA,CAACnB,QAA2B,EAAyB;EAClF,OAAOA,QAAQ,CAACC,MAAM,CAAEiB,CAAC,IAA+BA,CAAC,CAACE,aAAa,EAAE,CAAC;AAC5E;AAEA,OAAO,SAASC,gBAAgBA,CAAClC,OAAwB,EAAE;EACzD,OAAOA,OAAO,CAACF,GAAG;AACpB;AAEA,OAAO,SAASqC,kCAAkCA,CAACC,MAGlD,EAAoC;EACnC,MAAMC,YAA8C,GAAG;IACrDC,IAAI,EAAE,EAAE;IACRd,QAAQ,EAAE,EAAE;IACZe,UAAU,EAAE,KAAK;IACjBC,cAAc,EAAEJ,MAAM,CAACI;EACzB,CAAC;EAED,IAAIJ,MAAM,CAACT,aAAa,EAAEU,YAAY,CAACI,eAAe,GAAG,CAACL,MAAM,CAACT,aAAa,CAAC;EAE/E,OAAOU,YAAY;AACrB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MessageSearchOrder } from '@sendbird/chat/message';
|
|
1
2
|
import { getFileExtension, getFileType } from '../shared/file';
|
|
2
3
|
import { getMessageTimeFormat } from '../ui-format/common';
|
|
3
4
|
export function isNewMessage(msg, currentUserId) {
|
|
@@ -11,14 +12,15 @@ export function isSendableMessage(msg) {
|
|
|
11
12
|
}
|
|
12
13
|
export function isMyMessage(msg) {
|
|
13
14
|
var _msg$sender;
|
|
14
|
-
|
|
15
15
|
let currentUserId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '##__USER_ID_IS_NOT_PROVIDED__##';
|
|
16
16
|
if (!isSendableMessage(msg)) return false;
|
|
17
17
|
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';
|
|
18
18
|
}
|
|
19
19
|
export function messageKeyExtractor(message) {
|
|
20
20
|
return getMessageUniqId(message);
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// |-------------------|-------------------|-----------------|-------------------|
|
|
22
24
|
// | sending status | reqId | messageId | createdAt |
|
|
23
25
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
24
26
|
// | pending | timestamp(A) | 0 | timestamp(B) |
|
|
@@ -26,7 +28,6 @@ export function messageKeyExtractor(message) {
|
|
|
26
28
|
// | failed | timestamp(A) | 0 | ? |
|
|
27
29
|
// | succeeded | timestamp(A) / '' | id from DB | timestamp(C) |
|
|
28
30
|
// |-------------------|-------------------|-----------------|-------------------|
|
|
29
|
-
|
|
30
31
|
export function messageComparator(a, b) {
|
|
31
32
|
let aStatusOffset = 0;
|
|
32
33
|
let bStatusOffset = 0;
|
|
@@ -36,7 +37,6 @@ export function messageComparator(a, b) {
|
|
|
36
37
|
}
|
|
37
38
|
export function hasSameSender(a, b) {
|
|
38
39
|
var _a$sender, _b$sender;
|
|
39
|
-
|
|
40
40
|
if (!a || !b) return false;
|
|
41
41
|
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);
|
|
42
42
|
return false;
|
|
@@ -50,7 +50,6 @@ export function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
50
50
|
if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(prev.createdAt))) return false;
|
|
51
51
|
return true;
|
|
52
52
|
};
|
|
53
|
-
|
|
54
53
|
const getNext = () => {
|
|
55
54
|
if (!groupEnabled) return false;
|
|
56
55
|
if (!next) return false;
|
|
@@ -59,7 +58,6 @@ export function calcMessageGrouping(groupEnabled, curr, prev, next) {
|
|
|
59
58
|
if (getMessageTimeFormat(new Date(curr.createdAt)) !== getMessageTimeFormat(new Date(next.createdAt))) return false;
|
|
60
59
|
return true;
|
|
61
60
|
};
|
|
62
|
-
|
|
63
61
|
return {
|
|
64
62
|
groupWithPrev: getPrev(),
|
|
65
63
|
groupWithNext: getNext()
|
|
@@ -70,14 +68,12 @@ export function getMessageUniqId(msg) {
|
|
|
70
68
|
if (msg.sendingStatus === 'succeeded') return String(msg.messageId);
|
|
71
69
|
return msg.reqId;
|
|
72
70
|
}
|
|
73
|
-
|
|
74
71
|
return String(msg.messageId);
|
|
75
72
|
}
|
|
76
73
|
export function getAvailableUriFromFileMessage(message) {
|
|
77
74
|
if (!message.url && message.messageParams.file && 'uri' in message.messageParams.file) {
|
|
78
75
|
return message.messageParams.file.uri;
|
|
79
76
|
}
|
|
80
|
-
|
|
81
77
|
return message.url;
|
|
82
78
|
}
|
|
83
79
|
export function isSendbirdNotification(dataPayload) {
|
|
@@ -91,12 +87,10 @@ export function shouldRenderReaction(channel, reactionEnabled) {
|
|
|
91
87
|
if (channel.isOpenChannel()) {
|
|
92
88
|
return false;
|
|
93
89
|
}
|
|
94
|
-
|
|
95
90
|
if (channel.isGroupChannel()) {
|
|
96
91
|
if (channel.isBroadcast) return false;
|
|
97
92
|
if (channel.isSuper) return false;
|
|
98
93
|
}
|
|
99
|
-
|
|
100
94
|
return reactionEnabled;
|
|
101
95
|
}
|
|
102
96
|
export function getReactionCount(reaction) {
|
|
@@ -109,37 +103,38 @@ export function getMessageType(message) {
|
|
|
109
103
|
if (message.isAdminMessage()) {
|
|
110
104
|
return 'admin';
|
|
111
105
|
}
|
|
112
|
-
|
|
113
106
|
if (message.isUserMessage()) {
|
|
114
107
|
if (message.ogMetaData) {
|
|
115
108
|
return 'user.opengraph';
|
|
116
109
|
}
|
|
117
|
-
|
|
118
110
|
return 'user';
|
|
119
111
|
}
|
|
120
|
-
|
|
121
112
|
if (message.isFileMessage()) {
|
|
122
113
|
const fileType = getFileTypeFromMessage(message);
|
|
123
|
-
|
|
124
114
|
switch (fileType) {
|
|
125
115
|
case 'image':
|
|
126
116
|
case 'video':
|
|
127
117
|
{
|
|
128
118
|
return `file.${fileType}`;
|
|
129
119
|
}
|
|
130
|
-
|
|
131
120
|
case 'audio':
|
|
132
121
|
{
|
|
133
122
|
return `file.${fileType}`;
|
|
134
123
|
}
|
|
135
|
-
|
|
136
124
|
default:
|
|
137
125
|
{
|
|
138
126
|
return 'file';
|
|
139
127
|
}
|
|
140
128
|
}
|
|
141
129
|
}
|
|
142
|
-
|
|
143
130
|
return 'unknown';
|
|
144
131
|
}
|
|
132
|
+
export function getDefaultMessageSearchQueryParams(channel, keyword) {
|
|
133
|
+
return {
|
|
134
|
+
keyword,
|
|
135
|
+
channelUrl: channel.url,
|
|
136
|
+
messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),
|
|
137
|
+
order: MessageSearchOrder.TIMESTAMP
|
|
138
|
+
};
|
|
139
|
+
}
|
|
145
140
|
//# sourceMappingURL=message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getFileExtension","getFileType","getMessageTimeFormat","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","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","type","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":["MessageSearchOrder","getFileExtension","getFileType","getMessageTimeFormat","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","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","type","name","getMessageType","ogMetaData","fileType","getDefaultMessageSearchQueryParams","keyword","channelUrl","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","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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"}
|
|
@@ -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":"AAMA,OAAO,SAASA,
|
|
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":"AAMA,OAAO,SAASA,UAAUA,CAACC,IAAU,EAAEC,IAAa,EAAEC,EAAY,EAAE;EAClE,IAAIF,IAAI,KAAK,UAAU,EAAE,OAAOC,IAAI;EACpC,OAAOC,EAAE;AACX;AAEA,OAAO,SAASC,aAAaA,CAAuBC,IAAO,EAAE;EAC3D,OAAOA,IAAI,CAACC,MAAM;AACpB"}
|
|
@@ -23,21 +23,17 @@ export default function arrayToMap(arr, selector, fallbackSelector, combine) {
|
|
|
23
23
|
return arr.reduce((accum, curr) => {
|
|
24
24
|
if (combine && fallbackSelector) {
|
|
25
25
|
const _key = curr[selector] + curr[fallbackSelector];
|
|
26
|
-
|
|
27
26
|
accum[_key] = curr;
|
|
28
27
|
} else {
|
|
29
28
|
const _key = curr[selector] || curr[fallbackSelector];
|
|
30
|
-
|
|
31
29
|
accum[_key] = curr;
|
|
32
30
|
}
|
|
33
|
-
|
|
34
31
|
return accum;
|
|
35
32
|
}, {});
|
|
36
33
|
}
|
|
37
34
|
export function arrayToMapWithGetter(arr, getSelector) {
|
|
38
35
|
return arr.reduce((accum, curr) => {
|
|
39
36
|
const _key = getSelector(curr);
|
|
40
|
-
|
|
41
37
|
accum[_key] = curr;
|
|
42
38
|
return accum;
|
|
43
39
|
}, {});
|
|
@@ -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":"AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASA,
|
|
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;AACA,eAAe,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;AAEA,OAAO,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"}
|
|
@@ -1,42 +1,35 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
1
|
+
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; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
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); }
|
|
3
4
|
let REQ_PER_TIMEOUT = 5;
|
|
4
5
|
let TIMEOUT_MILLS = 1000;
|
|
5
6
|
const SAFE_TIMEOUT_BUFFER = 100;
|
|
6
|
-
|
|
7
7
|
function generateRandomId() {
|
|
8
8
|
return Math.random().toString(16).slice(2);
|
|
9
9
|
}
|
|
10
|
-
|
|
11
10
|
export class BufferedRequest {
|
|
12
11
|
static updateMarkAsReadOptions(reqPerTimeout, timeoutMills) {
|
|
13
12
|
BufferedRequest.markAsRead = BufferedRequest.create(reqPerTimeout, timeoutMills);
|
|
14
13
|
}
|
|
15
|
-
|
|
16
14
|
static updateMarkAsDeliveredOptions(reqPerTimeout, timeoutMills) {
|
|
17
15
|
BufferedRequest.markAsDelivered = BufferedRequest.create(reqPerTimeout, timeoutMills);
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
static get reqPerTimeout() {
|
|
21
18
|
return REQ_PER_TIMEOUT;
|
|
22
19
|
}
|
|
23
|
-
|
|
24
20
|
static set reqPerTimeout(value) {
|
|
25
21
|
REQ_PER_TIMEOUT = value;
|
|
26
22
|
BufferedRequest.markAsRead = BufferedRequest.create();
|
|
27
23
|
BufferedRequest.markAsDelivered = BufferedRequest.create();
|
|
28
24
|
}
|
|
29
|
-
|
|
30
25
|
static get timeoutMills() {
|
|
31
26
|
return TIMEOUT_MILLS;
|
|
32
27
|
}
|
|
33
|
-
|
|
34
28
|
static set timeoutMills(value) {
|
|
35
29
|
TIMEOUT_MILLS = value;
|
|
36
30
|
BufferedRequest.markAsRead = BufferedRequest.create();
|
|
37
31
|
BufferedRequest.markAsDelivered = BufferedRequest.create();
|
|
38
32
|
}
|
|
39
|
-
|
|
40
33
|
static create() {
|
|
41
34
|
let reqPerTimeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : REQ_PER_TIMEOUT;
|
|
42
35
|
let timeoutMills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TIMEOUT_MILLS;
|
|
@@ -49,16 +42,13 @@ export class BufferedRequest {
|
|
|
49
42
|
waitQueue.set(lane ?? generateRandomId(), func);
|
|
50
43
|
this.invoke();
|
|
51
44
|
},
|
|
52
|
-
|
|
53
45
|
shift() {
|
|
54
46
|
if (nextQueue.size < reqPerTimeout) {
|
|
55
47
|
const nextRemains = Math.min(reqPerTimeout - nextQueue.size, waitQueue.size);
|
|
56
48
|
const lanes = [...waitQueue.keys()];
|
|
57
|
-
|
|
58
49
|
for (let n = 0; n < nextRemains; n++) {
|
|
59
50
|
const lane = lanes[n];
|
|
60
51
|
const func = waitQueue.get(lane);
|
|
61
|
-
|
|
62
52
|
if (func) {
|
|
63
53
|
waitQueue.delete(lane);
|
|
64
54
|
nextQueue.set(lane, func);
|
|
@@ -66,19 +56,16 @@ export class BufferedRequest {
|
|
|
66
56
|
}
|
|
67
57
|
}
|
|
68
58
|
},
|
|
69
|
-
|
|
70
59
|
handleIdle() {
|
|
71
60
|
if (0 < nextQueue.size) {
|
|
72
61
|
state = 'processing';
|
|
73
62
|
this.invoke();
|
|
74
63
|
}
|
|
75
64
|
},
|
|
76
|
-
|
|
77
65
|
handleProcessing() {
|
|
78
66
|
if (timeout) return;
|
|
79
67
|
timeout = setTimeout(() => {
|
|
80
68
|
timeout = undefined;
|
|
81
|
-
|
|
82
69
|
if (0 < nextQueue.size || 0 < waitQueue.size) {
|
|
83
70
|
this.invoke();
|
|
84
71
|
} else {
|
|
@@ -89,32 +76,26 @@ export class BufferedRequest {
|
|
|
89
76
|
const nextRequestBaseTimeout = timeoutMills / nextQueue.size;
|
|
90
77
|
nextQueue.forEach(func => {
|
|
91
78
|
setTimeout(() => {
|
|
92
|
-
func();
|
|
79
|
+
func();
|
|
80
|
+
// TODO: Add retry
|
|
93
81
|
//.catch(() => waitQueue.set(lane, func));
|
|
94
82
|
}, nextRequestBaseTimeout * index);
|
|
95
83
|
index++;
|
|
96
84
|
});
|
|
97
85
|
nextQueue.clear();
|
|
98
86
|
},
|
|
99
|
-
|
|
100
87
|
async invoke() {
|
|
101
88
|
this.shift();
|
|
102
|
-
|
|
103
89
|
if (state === 'idle') {
|
|
104
90
|
this.handleIdle();
|
|
105
91
|
}
|
|
106
|
-
|
|
107
92
|
if (state === 'processing') {
|
|
108
93
|
this.handleProcessing();
|
|
109
94
|
}
|
|
110
95
|
}
|
|
111
|
-
|
|
112
96
|
};
|
|
113
97
|
}
|
|
114
|
-
|
|
115
98
|
}
|
|
116
|
-
|
|
117
99
|
_defineProperty(BufferedRequest, "markAsRead", BufferedRequest.create());
|
|
118
|
-
|
|
119
100
|
_defineProperty(BufferedRequest, "markAsDelivered", BufferedRequest.create());
|
|
120
101
|
//# 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","_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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"}
|
|
@@ -45,12 +45,12 @@ export const getFileType = extOrType => {
|
|
|
45
45
|
if (type === 'image') return 'image';
|
|
46
46
|
return 'file';
|
|
47
47
|
}
|
|
48
|
-
|
|
49
48
|
if (extOrType.match(imageExtRegex)) return 'image';
|
|
50
49
|
if (extOrType.match(audioExtRegex)) return 'audio';
|
|
51
50
|
if (extOrType.match(videoExtRegex)) return 'video';
|
|
52
51
|
return 'file';
|
|
53
52
|
};
|
|
53
|
+
|
|
54
54
|
/**
|
|
55
55
|
* Calculates the downscaled size of an image while preserving its aspect ratio.
|
|
56
56
|
*
|
|
@@ -66,8 +66,7 @@ export const getFileType = extOrType => {
|
|
|
66
66
|
export function getDownscaleSize(origin, resizing) {
|
|
67
67
|
let ratio;
|
|
68
68
|
const maxWidth = resizing.width || origin.width,
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
maxHeight = resizing.height || origin.height;
|
|
71
70
|
if (origin.width <= maxWidth && origin.height <= maxHeight) {
|
|
72
71
|
ratio = 1;
|
|
73
72
|
} else if (origin.width > maxWidth && origin.height <= maxHeight) {
|
|
@@ -77,12 +76,12 @@ export function getDownscaleSize(origin, resizing) {
|
|
|
77
76
|
} else {
|
|
78
77
|
ratio = Math.min(maxWidth / origin.width, maxHeight / origin.height);
|
|
79
78
|
}
|
|
80
|
-
|
|
81
79
|
return {
|
|
82
80
|
width: origin.width * ratio,
|
|
83
81
|
height: origin.height * ratio
|
|
84
82
|
};
|
|
85
83
|
}
|
|
84
|
+
|
|
86
85
|
/**
|
|
87
86
|
* Normalize a file name by ensuring it has the given extension, if it doesn't already.
|
|
88
87
|
*
|
|
@@ -90,21 +89,18 @@ export function getDownscaleSize(origin, resizing) {
|
|
|
90
89
|
* @param {string} extension - The desired extension, without a leading period.
|
|
91
90
|
* @returns {string} - The normalized file name, with the extension.
|
|
92
91
|
*/
|
|
93
|
-
|
|
94
92
|
export function normalizeFileName(fileName, extension) {
|
|
95
|
-
if (!extension) return fileName;
|
|
93
|
+
if (!extension) return fileName;
|
|
96
94
|
|
|
95
|
+
// .extension
|
|
97
96
|
let _extension = extension.toLowerCase();
|
|
98
|
-
|
|
99
97
|
if (_extension.indexOf('.') !== 0) {
|
|
100
98
|
_extension = '.' + _extension;
|
|
101
|
-
}
|
|
102
|
-
|
|
99
|
+
}
|
|
103
100
|
|
|
101
|
+
// filename.extension | filename
|
|
104
102
|
const _filename = fileName.toLowerCase();
|
|
105
|
-
|
|
106
103
|
const hasExtension = _filename.lastIndexOf(_extension) === _filename.length - _extension.length;
|
|
107
|
-
|
|
108
104
|
if (!hasExtension) {
|
|
109
105
|
// filename.extension
|
|
110
106
|
return fileName + _extension;
|
|
@@ -113,6 +109,7 @@ export function normalizeFileName(fileName, extension) {
|
|
|
113
109
|
return fileName;
|
|
114
110
|
}
|
|
115
111
|
}
|
|
112
|
+
|
|
116
113
|
/**
|
|
117
114
|
* Parses a MIME type string into its components.
|
|
118
115
|
*
|
|
@@ -124,25 +121,23 @@ export function parseMimeType(mimeType) {
|
|
|
124
121
|
const [fullType, ...parts] = mimeType.split(';');
|
|
125
122
|
const [type, subtype] = fullType.split('/');
|
|
126
123
|
const parameters = {};
|
|
127
|
-
|
|
128
124
|
for (const part of parts) {
|
|
129
125
|
const [name, value] = part.trim().split('=');
|
|
130
126
|
parameters[name] = value;
|
|
131
127
|
}
|
|
132
|
-
|
|
133
128
|
return {
|
|
134
129
|
type,
|
|
135
130
|
subtype,
|
|
136
131
|
parameters
|
|
137
132
|
};
|
|
138
133
|
}
|
|
134
|
+
|
|
139
135
|
/**
|
|
140
136
|
* Returns the file extension based on the MIME type.
|
|
141
137
|
*
|
|
142
138
|
* @param {string | null | undefined} mimeType - The MIME type to look up.
|
|
143
139
|
* @returns {string} - The file extension for the given MIME type, or an empty string if no matching file extension was found.
|
|
144
140
|
*/
|
|
145
|
-
|
|
146
141
|
export function getFileExtensionFromMime(mimeType) {
|
|
147
142
|
if (!mimeType) return '';
|
|
148
143
|
const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, _ref) => {
|
|
@@ -152,24 +147,24 @@ export function getFileExtensionFromMime(mimeType) {
|
|
|
152
147
|
}, {});
|
|
153
148
|
return MIME_EXTENSION_MAP[mimeType.toLowerCase()] || '';
|
|
154
149
|
}
|
|
150
|
+
|
|
155
151
|
/**
|
|
156
152
|
* Returns the MIME type based on the file extension.
|
|
157
153
|
*
|
|
158
154
|
* @param {string | null | undefined} ext - The file extension to look up.
|
|
159
155
|
* @returns {string} - The MIME type for the given file extension, or an empty string if no matching MIME type was found.
|
|
160
156
|
*/
|
|
161
|
-
|
|
162
157
|
export function getMimeFromFileExtension(ext) {
|
|
163
158
|
if (!ext) return '';
|
|
164
159
|
return EXTENSION_MIME_MAP[ext.toLowerCase()] || '';
|
|
165
160
|
}
|
|
161
|
+
|
|
166
162
|
/**
|
|
167
163
|
* Returns the file extension of a file path.
|
|
168
164
|
*
|
|
169
165
|
* @param {string} filePath - The file path to extract the extension from.
|
|
170
166
|
* @returns {string} - The file extension, or an empty string if the file path does not have an extension.
|
|
171
167
|
*/
|
|
172
|
-
|
|
173
168
|
export function getFileExtension(filePath) {
|
|
174
169
|
const pathWithoutParams = filePath.split('?')[0];
|
|
175
170
|
const idx = pathWithoutParams.lastIndexOf('.');
|