@sendbird/uikit-utils 3.7.5 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/lib/commonjs/hooks/index.js +2 -5
  2. package/lib/commonjs/hooks/index.js.map +1 -1
  3. package/lib/commonjs/hooks/react-native.js +23 -7
  4. package/lib/commonjs/hooks/react-native.js.map +1 -1
  5. package/lib/commonjs/index.js +16 -6
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/sendbird/attrs.js +2 -4
  8. package/lib/commonjs/sendbird/attrs.js.map +1 -1
  9. package/lib/commonjs/sendbird/channel.js.map +1 -1
  10. package/lib/commonjs/sendbird/message.js +6 -11
  11. package/lib/commonjs/sendbird/message.js.map +1 -1
  12. package/lib/commonjs/sendbird/user.js.map +1 -1
  13. package/lib/commonjs/shared/arrayToMap.js.map +1 -1
  14. package/lib/commonjs/shared/bufferedRequest.js +8 -8
  15. package/lib/commonjs/shared/bufferedRequest.js.map +1 -1
  16. package/lib/commonjs/shared/file.js +5 -10
  17. package/lib/commonjs/shared/file.js.map +1 -1
  18. package/lib/commonjs/shared/index.js.map +1 -1
  19. package/lib/commonjs/shared/logger.js +7 -24
  20. package/lib/commonjs/shared/logger.js.map +1 -1
  21. package/lib/commonjs/shared/regex.js +17 -24
  22. package/lib/commonjs/shared/regex.js.map +1 -1
  23. package/lib/commonjs/shared/rtl.js +52 -0
  24. package/lib/commonjs/shared/rtl.js.map +1 -0
  25. package/lib/commonjs/types.js.map +1 -1
  26. package/lib/commonjs/ui-format/common.js +4 -9
  27. package/lib/commonjs/ui-format/common.js.map +1 -1
  28. package/lib/commonjs/ui-format/groupChannel.js +7 -17
  29. package/lib/commonjs/ui-format/groupChannel.js.map +1 -1
  30. package/lib/commonjs/ui-format/openChannel.js +1 -2
  31. package/lib/commonjs/ui-format/openChannel.js.map +1 -1
  32. package/lib/module/hooks/index.js +2 -5
  33. package/lib/module/hooks/index.js.map +1 -1
  34. package/lib/module/hooks/react-native.js +24 -8
  35. package/lib/module/hooks/react-native.js.map +1 -1
  36. package/lib/module/index.js +1 -0
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/module/sendbird/attrs.js.map +1 -1
  39. package/lib/module/sendbird/channel.js.map +1 -1
  40. package/lib/module/sendbird/message.js +6 -11
  41. package/lib/module/sendbird/message.js.map +1 -1
  42. package/lib/module/sendbird/user.js.map +1 -1
  43. package/lib/module/shared/arrayToMap.js.map +1 -1
  44. package/lib/module/shared/bufferedRequest.js +8 -8
  45. package/lib/module/shared/bufferedRequest.js.map +1 -1
  46. package/lib/module/shared/file.js +2 -4
  47. package/lib/module/shared/file.js.map +1 -1
  48. package/lib/module/shared/index.js.map +1 -1
  49. package/lib/module/shared/logger.js +6 -22
  50. package/lib/module/shared/logger.js.map +1 -1
  51. package/lib/module/shared/regex.js +12 -14
  52. package/lib/module/shared/regex.js.map +1 -1
  53. package/lib/module/shared/rtl.js +44 -0
  54. package/lib/module/shared/rtl.js.map +1 -0
  55. package/lib/module/types.js.map +1 -1
  56. package/lib/module/ui-format/common.js +4 -9
  57. package/lib/module/ui-format/common.js.map +1 -1
  58. package/lib/module/ui-format/groupChannel.js +7 -17
  59. package/lib/module/ui-format/groupChannel.js.map +1 -1
  60. package/lib/module/ui-format/openChannel.js +1 -2
  61. package/lib/module/ui-format/openChannel.js.map +1 -1
  62. package/lib/typescript/src/hooks/react-native.d.ts +3 -3
  63. package/lib/typescript/src/index.d.ts +1 -0
  64. package/lib/typescript/src/shared/rtl.d.ts +2 -0
  65. package/lib/typescript/src/types.d.ts +2 -1
  66. package/package.json +3 -3
  67. package/src/hooks/react-native.ts +28 -9
  68. package/src/index.ts +1 -0
  69. package/src/sendbird/message.ts +1 -1
  70. package/src/shared/rtl.ts +45 -0
  71. package/src/types.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"names":["getOpenChannelTitle","channel","DEFAULT_CHANNEL_NAME","arguments","length","undefined","trimmedChannelName","name","trim","exports","getOpenChannelParticipants","participantCount"],"sources":["openChannel.ts"],"sourcesContent":["import type { SendbirdOpenChannel } from '../types';\n\nexport const getOpenChannelTitle = (channel: SendbirdOpenChannel, DEFAULT_CHANNEL_NAME = 'Open Channel') => {\n const trimmedChannelName = channel.name.trim();\n if (trimmedChannelName === '') return DEFAULT_CHANNEL_NAME;\n return trimmedChannelName;\n};\n\nexport const getOpenChannelParticipants = (channel: SendbirdOpenChannel) => {\n return `${channel.participantCount} participants`;\n};\n"],"mappings":";;;;;;AAEO,MAAMA,mBAAmB,GAAG,SAAAA,CAACC,OAA4B,EAA4C;EAAA,IAA1CC,oBAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,cAAc;EACrG,MAAMG,kBAAkB,GAAGL,OAAO,CAACM,IAAI,CAACC,IAAI,EAAE;EAC9C,IAAIF,kBAAkB,KAAK,EAAE,EAAE,OAAOJ,oBAAoB;EAC1D,OAAOI,kBAAkB;AAC3B,CAAC;AAACG,OAAA,CAAAT,mBAAA,GAAAA,mBAAA;AAEK,MAAMU,0BAA0B,GAAIT,OAA4B,IAAK;EAC1E,OAAQ,GAAEA,OAAO,CAACU,gBAAiB,eAAc;AACnD,CAAC;AAACF,OAAA,CAAAC,0BAAA,GAAAA,0BAAA"}
1
+ {"version":3,"names":["getOpenChannelTitle","channel","DEFAULT_CHANNEL_NAME","trimmedChannelName","name","trim","exports","getOpenChannelParticipants","participantCount"],"sources":["openChannel.ts"],"sourcesContent":["import type { SendbirdOpenChannel } from '../types';\n\nexport const getOpenChannelTitle = (channel: SendbirdOpenChannel, DEFAULT_CHANNEL_NAME = 'Open Channel') => {\n const trimmedChannelName = channel.name.trim();\n if (trimmedChannelName === '') return DEFAULT_CHANNEL_NAME;\n return trimmedChannelName;\n};\n\nexport const getOpenChannelParticipants = (channel: SendbirdOpenChannel) => {\n return `${channel.participantCount} participants`;\n};\n"],"mappings":";;;;;;AAEO,MAAMA,mBAAmB,GAAGA,CAACC,OAA4B,EAAEC,oBAAoB,GAAG,cAAc,KAAK;EAC1G,MAAMC,kBAAkB,GAAGF,OAAO,CAACG,IAAI,CAACC,IAAI,CAAC,CAAC;EAC9C,IAAIF,kBAAkB,KAAK,EAAE,EAAE,OAAOD,oBAAoB;EAC1D,OAAOC,kBAAkB;AAC3B,CAAC;AAACG,OAAA,CAAAN,mBAAA,GAAAA,mBAAA;AAEK,MAAMO,0BAA0B,GAAIN,OAA4B,IAAK;EAC1E,OAAO,GAAGA,OAAO,CAACO,gBAAgB,eAAe;AACnD,CAAC;AAACF,OAAA,CAAAC,0BAAA,GAAAA,0BAAA","ignoreList":[]}
@@ -60,12 +60,9 @@ export const useIsFirstMount = () => {
60
60
  export const useFreshCallback = callback => {
61
61
  const ref = useRef(callback);
62
62
  ref.current = callback;
63
- return useCallback(function () {
64
- return ref.current(...arguments);
65
- }, []);
63
+ return useCallback((...args) => ref.current(...args), []);
66
64
  };
67
- export const useDebounceEffect = function (action, delay) {
68
- let deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
65
+ export const useDebounceEffect = (action, delay, deps = []) => {
69
66
  const timeoutRef = useRef();
70
67
  useEffect(() => {
71
68
  timeoutRef.current = setTimeout(async () => {
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useLayoutEffect","useReducer","useRef","useState","idPool","useUniqId","key","useUniqHandlerId","name","id","useForceUpdate","updater","prev","useAsyncEffect","asyncEffect","deps","createAsyncEffectCallback","useAsyncLayoutEffect","useIIFE","callback","iife","destructor","Promise","awaitedDestructor","useIsMountedRef","isMounted","current","useIsFirstMount","isFirstMount","useFreshCallback","ref","arguments","useDebounceEffect","action","delay","length","undefined","timeoutRef","setTimeout","clearTimeout","usePartialState","initialState","state","useRefTracker","target"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DependencyList } from 'react';\nimport { useCallback, useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react';\n\ntype Destructor = () => void;\ntype AsyncEffectCallback = () => void | Destructor | Promise<void> | Promise<Destructor>;\n\nconst idPool: { [key: string]: number } = {};\nexport const useUniqId = (key: string) => {\n return useState(() => {\n if (!idPool[key]) idPool[key] = 1;\n return idPool[key]++;\n })[0];\n};\n\nexport const useUniqHandlerId = (name: string) => {\n const id = useUniqId(name);\n return `${name}_${id}`;\n};\n\nexport const useForceUpdate = () => {\n const [, updater] = useState(0);\n return useCallback(() => updater((prev) => prev + 1), []);\n};\n\nexport const useAsyncEffect = (asyncEffect: AsyncEffectCallback, deps?: DependencyList) => {\n useEffect(createAsyncEffectCallback(asyncEffect), deps);\n};\nexport const useAsyncLayoutEffect = (asyncEffect: AsyncEffectCallback, deps?: DependencyList) => {\n useLayoutEffect(createAsyncEffectCallback(asyncEffect), deps);\n};\nexport const useIIFE = <T>(callback: () => T) => {\n return iife(callback);\n};\nconst iife = <T extends (...args: any[]) => any>(callback: T): ReturnType<T> => callback();\nconst createAsyncEffectCallback = (asyncEffect: AsyncEffectCallback) => () => {\n const destructor = iife(asyncEffect);\n return () => {\n if (!destructor) return;\n\n if (destructor instanceof Promise) {\n iife(async () => {\n const awaitedDestructor = await destructor;\n if (awaitedDestructor) awaitedDestructor();\n });\n } else {\n iife(destructor);\n }\n };\n};\n\nexport const useIsMountedRef = () => {\n const isMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n};\n\nexport const useIsFirstMount = () => {\n const isFirstMount = useRef(true);\n\n if (isFirstMount.current) {\n isFirstMount.current = false;\n return true;\n }\n\n return isFirstMount.current;\n};\n\nexport const useFreshCallback = <T extends Function>(callback: T): T => {\n const ref = useRef<T>(callback);\n ref.current = callback;\n return useCallback(((...args: any[]) => ref.current(...args)) as unknown as T, []);\n};\n\nexport const useDebounceEffect = (action: () => void, delay: number, deps: DependencyList = []) => {\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n timeoutRef.current = setTimeout(async () => {\n try {\n await action();\n } finally {\n timeoutRef.current = undefined;\n }\n }, delay);\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n };\n }, [delay, ...deps]);\n};\n\nexport const usePartialState = <S>(initialState: S) => {\n return useReducer((prev: S, state: Partial<S>) => ({ ...prev, ...state }), initialState);\n};\n\nexport const useRefTracker = <T>(target: T) => {\n const ref = useRef(target);\n\n useLayoutEffect(() => {\n ref.current = target;\n });\n\n return ref;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCallback","useEffect","useLayoutEffect","useReducer","useRef","useState","idPool","useUniqId","key","useUniqHandlerId","name","id","useForceUpdate","updater","prev","useAsyncEffect","asyncEffect","deps","createAsyncEffectCallback","useAsyncLayoutEffect","useIIFE","callback","iife","destructor","Promise","awaitedDestructor","useIsMountedRef","isMounted","current","useIsFirstMount","isFirstMount","useFreshCallback","ref","args","useDebounceEffect","action","delay","timeoutRef","setTimeout","undefined","clearTimeout","usePartialState","initialState","state","useRefTracker","target"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DependencyList } from 'react';\nimport { useCallback, useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react';\n\ntype Destructor = () => void;\ntype AsyncEffectCallback = () => void | Destructor | Promise<void> | Promise<Destructor>;\n\nconst idPool: { [key: string]: number } = {};\nexport const useUniqId = (key: string) => {\n return useState(() => {\n if (!idPool[key]) idPool[key] = 1;\n return idPool[key]++;\n })[0];\n};\n\nexport const useUniqHandlerId = (name: string) => {\n const id = useUniqId(name);\n return `${name}_${id}`;\n};\n\nexport const useForceUpdate = () => {\n const [, updater] = useState(0);\n return useCallback(() => updater((prev) => prev + 1), []);\n};\n\nexport const useAsyncEffect = (asyncEffect: AsyncEffectCallback, deps?: DependencyList) => {\n useEffect(createAsyncEffectCallback(asyncEffect), deps);\n};\nexport const useAsyncLayoutEffect = (asyncEffect: AsyncEffectCallback, deps?: DependencyList) => {\n useLayoutEffect(createAsyncEffectCallback(asyncEffect), deps);\n};\nexport const useIIFE = <T>(callback: () => T) => {\n return iife(callback);\n};\nconst iife = <T extends (...args: any[]) => any>(callback: T): ReturnType<T> => callback();\nconst createAsyncEffectCallback = (asyncEffect: AsyncEffectCallback) => () => {\n const destructor = iife(asyncEffect);\n return () => {\n if (!destructor) return;\n\n if (destructor instanceof Promise) {\n iife(async () => {\n const awaitedDestructor = await destructor;\n if (awaitedDestructor) awaitedDestructor();\n });\n } else {\n iife(destructor);\n }\n };\n};\n\nexport const useIsMountedRef = () => {\n const isMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n};\n\nexport const useIsFirstMount = () => {\n const isFirstMount = useRef(true);\n\n if (isFirstMount.current) {\n isFirstMount.current = false;\n return true;\n }\n\n return isFirstMount.current;\n};\n\nexport const useFreshCallback = <T extends Function>(callback: T): T => {\n const ref = useRef<T>(callback);\n ref.current = callback;\n return useCallback(((...args: any[]) => ref.current(...args)) as unknown as T, []);\n};\n\nexport const useDebounceEffect = (action: () => void, delay: number, deps: DependencyList = []) => {\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n timeoutRef.current = setTimeout(async () => {\n try {\n await action();\n } finally {\n timeoutRef.current = undefined;\n }\n }, delay);\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n };\n }, [delay, ...deps]);\n};\n\nexport const usePartialState = <S>(initialState: S) => {\n return useReducer((prev: S, state: Partial<S>) => ({ ...prev, ...state }), initialState);\n};\n\nexport const useRefTracker = <T>(target: T) => {\n const ref = useRef(target);\n\n useLayoutEffect(() => {\n ref.current = target;\n });\n\n return ref;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,17 +1,33 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
- import { AppState } from 'react-native';
2
+ import { AppState, I18nManager } from 'react-native';
3
3
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
4
4
  const edgePaddingMap = {
5
- left: 'paddingLeft',
6
- right: 'paddingRight',
7
- top: 'paddingTop',
8
- bottom: 'paddingBottom'
5
+ ltr: {
6
+ left: 'paddingStart',
7
+ right: 'paddingEnd',
8
+ top: 'paddingTop',
9
+ bottom: 'paddingBottom'
10
+ },
11
+ rtl: {
12
+ left: 'paddingEnd',
13
+ right: 'paddingStart',
14
+ top: 'paddingTop',
15
+ bottom: 'paddingBottom'
16
+ }
9
17
  };
10
- export const useSafeAreaPadding = edges => {
18
+ export const useSafeAreaPadding = (edges, direction = I18nManager.isRTL ? 'rtl' : 'ltr') => {
11
19
  const safeAreaInsets = useSafeAreaInsets();
12
20
  return edges.reduce((map, edge) => {
13
- const paddingKey = edgePaddingMap[edge];
21
+ const paddingKey = edgePaddingMap[direction][edge];
14
22
  map[paddingKey] = safeAreaInsets[edge];
23
+ if (edge === 'left') {
24
+ // @ts-expect-error backward compatibility
25
+ map['paddingLeft'] = safeAreaInsets[edge];
26
+ }
27
+ if (edge === 'right') {
28
+ // @ts-expect-error backward compatibility
29
+ map['paddingRight'] = safeAreaInsets[edge];
30
+ }
15
31
  return map;
16
32
  }, {});
17
33
  };
@@ -43,7 +59,7 @@ export const useDeferredModalState = () => {
43
59
  },
44
60
  onDismiss: () => {
45
61
  var _resolveRef$current;
46
- (_resolveRef$current = resolveRef.current) === null || _resolveRef$current === void 0 ? void 0 : _resolveRef$current.call(resolveRef);
62
+ (_resolveRef$current = resolveRef.current) === null || _resolveRef$current === void 0 || _resolveRef$current.call(resolveRef);
47
63
  },
48
64
  visible,
49
65
  setVisible
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","useState","AppState","useSafeAreaInsets","edgePaddingMap","left","right","top","bottom","useSafeAreaPadding","edges","safeAreaInsets","reduce","map","edge","paddingKey","useAppState","type","listener","callbackRef","current","eventListener","state","subscriber","addEventListener","remove","useDeferredModalState","resolveRef","visible","setVisible","onClose","Promise","resolve","onDismiss","_resolveRef$current","call"],"sources":["react-native.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { AppState, AppStateEvent, AppStateStatus } from 'react-native';\nimport { EdgeInsets, useSafeAreaInsets } from 'react-native-safe-area-context';\n\ntype EdgePaddingMap = {\n left: 'paddingLeft';\n right: 'paddingRight';\n top: 'paddingTop';\n bottom: 'paddingBottom';\n};\nconst edgePaddingMap: EdgePaddingMap = {\n left: 'paddingLeft',\n right: 'paddingRight',\n top: 'paddingTop',\n bottom: 'paddingBottom',\n};\n\nexport const useSafeAreaPadding = <\n T extends keyof EdgeInsets,\n Result extends { [key in EdgePaddingMap[T]]: EdgeInsets[T] },\n>(\n edges: T[],\n): Result => {\n const safeAreaInsets = useSafeAreaInsets();\n return edges.reduce((map, edge) => {\n const paddingKey = edgePaddingMap[edge];\n map[paddingKey] = safeAreaInsets[edge];\n return map;\n }, {} as { [key in EdgePaddingMap[T]]: EdgeInsets[T] }) as Result;\n};\n\ntype AppStateListener = (status: AppStateStatus) => void;\n\nexport const useAppState = (type: AppStateEvent, listener: AppStateListener) => {\n const callbackRef = useRef<AppStateListener>(listener);\n callbackRef.current = listener;\n\n useEffect(() => {\n const eventListener = (state: AppStateStatus) => callbackRef.current(state);\n const subscriber = AppState.addEventListener(type, eventListener);\n\n return () => {\n if (subscriber?.remove) subscriber.remove();\n };\n }, []);\n};\n\n/**\n * To display a new modal in React-Native, you should ensure that a new modal is opened only after the existing modal has been dismissed to avoid conflicts.\n * To achieve this, you can use a deferred onClose that can be awaited until the onDismiss is called.\n * */\nexport const useDeferredModalState = () => {\n const resolveRef = useRef<(value: void) => void>();\n const [visible, setVisible] = useState(false);\n\n return {\n onClose: () => {\n return new Promise<void>((resolve) => {\n resolveRef.current = resolve;\n setVisible(false);\n });\n },\n onDismiss: () => {\n resolveRef.current?.();\n },\n visible,\n setVisible,\n };\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACnD,SAASC,QAAQ,QAAuC,cAAc;AACtE,SAAqBC,iBAAiB,QAAQ,gCAAgC;AAQ9E,MAAMC,cAA8B,GAAG;EACrCC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,cAAc;EACrBC,GAAG,EAAE,YAAY;EACjBC,MAAM,EAAE;AACV,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAI7BC,KAAU,IACC;EACX,MAAMC,cAAc,GAAGR,iBAAiB,EAAE;EAC1C,OAAOO,KAAK,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAK;IACjC,MAAMC,UAAU,GAAGX,cAAc,CAACU,IAAI,CAAC;IACvCD,GAAG,CAACE,UAAU,CAAC,GAAGJ,cAAc,CAACG,IAAI,CAAC;IACtC,OAAOD,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAkD;AACzD,CAAC;AAID,OAAO,MAAMG,WAAW,GAAGA,CAACC,IAAmB,EAAEC,QAA0B,KAAK;EAC9E,MAAMC,WAAW,GAAGnB,MAAM,CAAmBkB,QAAQ,CAAC;EACtDC,WAAW,CAACC,OAAO,GAAGF,QAAQ;EAE9BnB,SAAS,CAAC,MAAM;IACd,MAAMsB,aAAa,GAAIC,KAAqB,IAAKH,WAAW,CAACC,OAAO,CAACE,KAAK,CAAC;IAC3E,MAAMC,UAAU,GAAGrB,QAAQ,CAACsB,gBAAgB,CAACP,IAAI,EAAEI,aAAa,CAAC;IAEjE,OAAO,MAAM;MACX,IAAIE,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEE,MAAM,EAAEF,UAAU,CAACE,MAAM,EAAE;IAC7C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,UAAU,GAAG3B,MAAM,EAAyB;EAClD,MAAM,CAAC4B,OAAO,EAAEC,UAAU,CAAC,GAAG5B,QAAQ,CAAC,KAAK,CAAC;EAE7C,OAAO;IACL6B,OAAO,EAAEA,CAAA,KAAM;MACb,OAAO,IAAIC,OAAO,CAAQC,OAAO,IAAK;QACpCL,UAAU,CAACP,OAAO,GAAGY,OAAO;QAC5BH,UAAU,CAAC,KAAK,CAAC;MACnB,CAAC,CAAC;IACJ,CAAC;IACDI,SAAS,EAAEA,CAAA,KAAM;MAAA,IAAAC,mBAAA;MACf,CAAAA,mBAAA,GAAAP,UAAU,CAACP,OAAO,cAAAc,mBAAA,uBAAlBA,mBAAA,CAAAC,IAAA,CAAAR,UAAU,CAAY;IACxB,CAAC;IACDC,OAAO;IACPC;EACF,CAAC;AACH,CAAC"}
1
+ {"version":3,"names":["useEffect","useRef","useState","AppState","I18nManager","useSafeAreaInsets","edgePaddingMap","ltr","left","right","top","bottom","rtl","useSafeAreaPadding","edges","direction","isRTL","safeAreaInsets","reduce","map","edge","paddingKey","useAppState","type","listener","callbackRef","current","eventListener","state","subscriber","addEventListener","remove","useDeferredModalState","resolveRef","visible","setVisible","onClose","Promise","resolve","onDismiss","_resolveRef$current","call"],"sources":["react-native.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { AppState, AppStateEvent, AppStateStatus, I18nManager } from 'react-native';\nimport { EdgeInsets, useSafeAreaInsets } from 'react-native-safe-area-context';\n\ntype EdgePaddingMap = {\n left: 'paddingStart' | 'paddingEnd';\n right: 'paddingStart' | 'paddingEnd';\n top: 'paddingTop';\n bottom: 'paddingBottom';\n};\n\nconst edgePaddingMap: Record<'ltr' | 'rtl', EdgePaddingMap> = {\n ltr: {\n left: 'paddingStart',\n right: 'paddingEnd',\n top: 'paddingTop',\n bottom: 'paddingBottom',\n },\n rtl: {\n left: 'paddingEnd',\n right: 'paddingStart',\n top: 'paddingTop',\n bottom: 'paddingBottom',\n },\n};\n\nexport const useSafeAreaPadding = <\n T extends keyof EdgeInsets,\n Result extends { [key in EdgePaddingMap[T]]: EdgeInsets[T] },\n>(\n edges: T[],\n direction: 'ltr' | 'rtl' = I18nManager.isRTL ? 'rtl' : 'ltr',\n): Result => {\n const safeAreaInsets = useSafeAreaInsets();\n return edges.reduce((map, edge) => {\n const paddingKey = edgePaddingMap[direction][edge];\n map[paddingKey] = safeAreaInsets[edge];\n\n if (edge === 'left') {\n // @ts-expect-error backward compatibility\n map['paddingLeft'] = safeAreaInsets[edge];\n }\n if (edge === 'right') {\n // @ts-expect-error backward compatibility\n map['paddingRight'] = safeAreaInsets[edge];\n }\n return map;\n }, {} as { [key in EdgePaddingMap[T]]: EdgeInsets[T] }) as Result;\n};\n\ntype AppStateListener = (status: AppStateStatus) => void;\n\nexport const useAppState = (type: AppStateEvent, listener: AppStateListener) => {\n const callbackRef = useRef<AppStateListener>(listener);\n callbackRef.current = listener;\n\n useEffect(() => {\n const eventListener = (state: AppStateStatus) => callbackRef.current(state);\n const subscriber = AppState.addEventListener(type, eventListener);\n\n return () => {\n if (subscriber?.remove) subscriber.remove();\n };\n }, []);\n};\n\n/**\n * To display a new modal in React-Native, you should ensure that a new modal is opened only after the existing modal has been dismissed to avoid conflicts.\n * To achieve this, you can use a deferred onClose that can be awaited until the onDismiss is called.\n * */\nexport const useDeferredModalState = () => {\n const resolveRef = useRef<(value: void) => void>();\n const [visible, setVisible] = useState(false);\n\n return {\n onClose: () => {\n return new Promise<void>((resolve) => {\n resolveRef.current = resolve;\n setVisible(false);\n });\n },\n onDismiss: () => {\n resolveRef.current?.();\n },\n visible,\n setVisible,\n };\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACnD,SAASC,QAAQ,EAAiCC,WAAW,QAAQ,cAAc;AACnF,SAAqBC,iBAAiB,QAAQ,gCAAgC;AAS9E,MAAMC,cAAqD,GAAG;EAC5DC,GAAG,EAAE;IACHC,IAAI,EAAE,cAAc;IACpBC,KAAK,EAAE,YAAY;IACnBC,GAAG,EAAE,YAAY;IACjBC,MAAM,EAAE;EACV,CAAC;EACDC,GAAG,EAAE;IACHJ,IAAI,EAAE,YAAY;IAClBC,KAAK,EAAE,cAAc;IACrBC,GAAG,EAAE,YAAY;IACjBC,MAAM,EAAE;EACV;AACF,CAAC;AAED,OAAO,MAAME,kBAAkB,GAAGA,CAIhCC,KAAU,EACVC,SAAwB,GAAGX,WAAW,CAACY,KAAK,GAAG,KAAK,GAAG,KAAK,KACjD;EACX,MAAMC,cAAc,GAAGZ,iBAAiB,CAAC,CAAC;EAC1C,OAAOS,KAAK,CAACI,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAK;IACjC,MAAMC,UAAU,GAAGf,cAAc,CAACS,SAAS,CAAC,CAACK,IAAI,CAAC;IAClDD,GAAG,CAACE,UAAU,CAAC,GAAGJ,cAAc,CAACG,IAAI,CAAC;IAEtC,IAAIA,IAAI,KAAK,MAAM,EAAE;MACnB;MACAD,GAAG,CAAC,aAAa,CAAC,GAAGF,cAAc,CAACG,IAAI,CAAC;IAC3C;IACA,IAAIA,IAAI,KAAK,OAAO,EAAE;MACpB;MACAD,GAAG,CAAC,cAAc,CAAC,GAAGF,cAAc,CAACG,IAAI,CAAC;IAC5C;IACA,OAAOD,GAAG;EACZ,CAAC,EAAE,CAAC,CAAkD,CAAC;AACzD,CAAC;AAID,OAAO,MAAMG,WAAW,GAAGA,CAACC,IAAmB,EAAEC,QAA0B,KAAK;EAC9E,MAAMC,WAAW,GAAGxB,MAAM,CAAmBuB,QAAQ,CAAC;EACtDC,WAAW,CAACC,OAAO,GAAGF,QAAQ;EAE9BxB,SAAS,CAAC,MAAM;IACd,MAAM2B,aAAa,GAAIC,KAAqB,IAAKH,WAAW,CAACC,OAAO,CAACE,KAAK,CAAC;IAC3E,MAAMC,UAAU,GAAG1B,QAAQ,CAAC2B,gBAAgB,CAACP,IAAI,EAAEI,aAAa,CAAC;IAEjE,OAAO,MAAM;MACX,IAAIE,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEE,MAAM,EAAEF,UAAU,CAACE,MAAM,CAAC,CAAC;IAC7C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,UAAU,GAAGhC,MAAM,CAAwB,CAAC;EAClD,MAAM,CAACiC,OAAO,EAAEC,UAAU,CAAC,GAAGjC,QAAQ,CAAC,KAAK,CAAC;EAE7C,OAAO;IACLkC,OAAO,EAAEA,CAAA,KAAM;MACb,OAAO,IAAIC,OAAO,CAAQC,OAAO,IAAK;QACpCL,UAAU,CAACP,OAAO,GAAGY,OAAO;QAC5BH,UAAU,CAAC,KAAK,CAAC;MACnB,CAAC,CAAC;IACJ,CAAC;IACDI,SAAS,EAAEA,CAAA,KAAM;MAAA,IAAAC,mBAAA;MACf,CAAAA,mBAAA,GAAAP,UAAU,CAACP,OAAO,cAAAc,mBAAA,eAAlBA,mBAAA,CAAAC,IAAA,CAAAR,UAAqB,CAAC;IACxB,CAAC;IACDC,OAAO;IACPC;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -3,6 +3,7 @@ export { default as arrayToMap, arrayToMapWithGetter } from './shared/arrayToMap
3
3
  export * from './shared/regex';
4
4
  export * from './shared/bufferedRequest';
5
5
  export * from './shared/file';
6
+ export * from './shared/rtl';
6
7
  export * from './shared';
7
8
  export * from './hooks';
8
9
  export * from './hooks/react-native';
@@ -1 +1 @@
1
- {"version":3,"names":["Logger","default","arrayToMap","arrayToMapWithGetter","NOOP","ASYNC_NOOP","PASS","val","toMegabyte","byte","isFunction","param","ifThenOr","cond","then","or","SBErrorCode","UNAUTHORIZED_REQUEST","RESOURCE_NOT_FOUND","BANNED_USER_SEND_MESSAGE_NOT_ALLOWED","CHANNEL_NOT_FOUND","SBErrorMessage","ACL"],"sources":["index.ts"],"sourcesContent":["export { Logger } from './shared/logger';\nexport { default as arrayToMap, arrayToMapWithGetter } from './shared/arrayToMap';\nexport * from './shared/regex';\nexport * from './shared/bufferedRequest';\nexport * from './shared/file';\nexport * from './shared';\n\nexport * from './hooks';\nexport * from './hooks/react-native';\nexport * from './ui-format/groupChannel';\nexport * from './ui-format/openChannel';\nexport * from './ui-format/common';\nexport * from './sendbird/channel';\nexport * from './sendbird/message';\nexport * from './sendbird/attrs';\nexport * from './sendbird/user';\n\nexport const NOOP: () => void = () => void 0;\nexport const ASYNC_NOOP = async () => void 0;\nexport const PASS = <T>(val: T) => val;\nexport const toMegabyte = (byte: number) => byte / 1024 / 1024;\nexport const isFunction = (param?: unknown): param is Function => typeof param === 'function';\n\nexport function ifThenOr<T>(cond: boolean, then: T): T | undefined;\nexport function ifThenOr<T, V>(cond: boolean, then: T, or: V): T | V;\nexport function ifThenOr(cond: boolean, then: unknown, or?: unknown) {\n if (cond) return then;\n return or;\n}\n\nexport const SBErrorCode = {\n UNAUTHORIZED_REQUEST: 400108,\n RESOURCE_NOT_FOUND: 400201,\n BANNED_USER_SEND_MESSAGE_NOT_ALLOWED: 900100,\n CHANNEL_NOT_FOUND: 900500,\n};\nexport const SBErrorMessage = {\n ACL:\n 'Sendbird provides various access control options when using the Chat SDK.\\n' +\n 'By default, the Allow retrieving user list attribute is turned on to facilitate creating sample apps.\\n' +\n 'However, this may grant access to unwanted data or operations, leading to potential security concerns.\\n' +\n 'To manage your access control settings, you can turn on or off each setting on Sendbird Dashboard.',\n};\n\nexport * from './types';\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,OAAO,IAAIC,UAAU,EAAEC,oBAAoB,QAAQ,qBAAqB;AACjF,cAAc,gBAAgB;AAC9B,cAAc,0BAA0B;AACxC,cAAc,eAAe;AAC7B,cAAc,UAAU;AAExB,cAAc,SAAS;AACvB,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,yBAAyB;AACvC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,kBAAkB;AAChC,cAAc,iBAAiB;AAE/B,OAAO,MAAMC,IAAgB,GAAGA,CAAA,KAAM,KAAK,CAAC;AAC5C,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAA,KAAY,KAAK,CAAC;AAC5C,OAAO,MAAMC,IAAI,GAAOC,GAAM,IAAKA,GAAG;AACtC,OAAO,MAAMC,UAAU,GAAIC,IAAY,IAAKA,IAAI,GAAG,IAAI,GAAG,IAAI;AAC9D,OAAO,MAAMC,UAAU,GAAIC,KAAe,IAAwB,OAAOA,KAAK,KAAK,UAAU;AAI7F,OAAO,SAASC,QAAQA,CAACC,IAAa,EAAEC,IAAa,EAAEC,EAAY,EAAE;EACnE,IAAIF,IAAI,EAAE,OAAOC,IAAI;EACrB,OAAOC,EAAE;AACX;AAEA,OAAO,MAAMC,WAAW,GAAG;EACzBC,oBAAoB,EAAE,MAAM;EAC5BC,kBAAkB,EAAE,MAAM;EAC1BC,oCAAoC,EAAE,MAAM;EAC5CC,iBAAiB,EAAE;AACrB,CAAC;AACD,OAAO,MAAMC,cAAc,GAAG;EAC5BC,GAAG,EACD,6EAA6E,GAC7E,yGAAyG,GACzG,0GAA0G,GAC1G;AACJ,CAAC;AAED,cAAc,SAAS"}
1
+ {"version":3,"names":["Logger","default","arrayToMap","arrayToMapWithGetter","NOOP","ASYNC_NOOP","PASS","val","toMegabyte","byte","isFunction","param","ifThenOr","cond","then","or","SBErrorCode","UNAUTHORIZED_REQUEST","RESOURCE_NOT_FOUND","BANNED_USER_SEND_MESSAGE_NOT_ALLOWED","CHANNEL_NOT_FOUND","SBErrorMessage","ACL"],"sources":["index.ts"],"sourcesContent":["export { Logger } from './shared/logger';\nexport { default as arrayToMap, arrayToMapWithGetter } from './shared/arrayToMap';\nexport * from './shared/regex';\nexport * from './shared/bufferedRequest';\nexport * from './shared/file';\nexport * from './shared/rtl';\nexport * from './shared';\n\nexport * from './hooks';\nexport * from './hooks/react-native';\nexport * from './ui-format/groupChannel';\nexport * from './ui-format/openChannel';\nexport * from './ui-format/common';\nexport * from './sendbird/channel';\nexport * from './sendbird/message';\nexport * from './sendbird/attrs';\nexport * from './sendbird/user';\n\nexport const NOOP: () => void = () => void 0;\nexport const ASYNC_NOOP = async () => void 0;\nexport const PASS = <T>(val: T) => val;\nexport const toMegabyte = (byte: number) => byte / 1024 / 1024;\nexport const isFunction = (param?: unknown): param is Function => typeof param === 'function';\n\nexport function ifThenOr<T>(cond: boolean, then: T): T | undefined;\nexport function ifThenOr<T, V>(cond: boolean, then: T, or: V): T | V;\nexport function ifThenOr(cond: boolean, then: unknown, or?: unknown) {\n if (cond) return then;\n return or;\n}\n\nexport const SBErrorCode = {\n UNAUTHORIZED_REQUEST: 400108,\n RESOURCE_NOT_FOUND: 400201,\n BANNED_USER_SEND_MESSAGE_NOT_ALLOWED: 900100,\n CHANNEL_NOT_FOUND: 900500,\n};\nexport const SBErrorMessage = {\n ACL:\n 'Sendbird provides various access control options when using the Chat SDK.\\n' +\n 'By default, the Allow retrieving user list attribute is turned on to facilitate creating sample apps.\\n' +\n 'However, this may grant access to unwanted data or operations, leading to potential security concerns.\\n' +\n 'To manage your access control settings, you can turn on or off each setting on Sendbird Dashboard.',\n};\n\nexport * from './types';\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SAASC,OAAO,IAAIC,UAAU,EAAEC,oBAAoB,QAAQ,qBAAqB;AACjF,cAAc,gBAAgB;AAC9B,cAAc,0BAA0B;AACxC,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B,cAAc,UAAU;AAExB,cAAc,SAAS;AACvB,cAAc,sBAAsB;AACpC,cAAc,0BAA0B;AACxC,cAAc,yBAAyB;AACvC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,kBAAkB;AAChC,cAAc,iBAAiB;AAE/B,OAAO,MAAMC,IAAgB,GAAGA,CAAA,KAAM,KAAK,CAAC;AAC5C,OAAO,MAAMC,UAAU,GAAG,MAAAA,CAAA,KAAY,KAAK,CAAC;AAC5C,OAAO,MAAMC,IAAI,GAAOC,GAAM,IAAKA,GAAG;AACtC,OAAO,MAAMC,UAAU,GAAIC,IAAY,IAAKA,IAAI,GAAG,IAAI,GAAG,IAAI;AAC9D,OAAO,MAAMC,UAAU,GAAIC,KAAe,IAAwB,OAAOA,KAAK,KAAK,UAAU;AAI7F,OAAO,SAASC,QAAQA,CAACC,IAAa,EAAEC,IAAa,EAAEC,EAAY,EAAE;EACnE,IAAIF,IAAI,EAAE,OAAOC,IAAI;EACrB,OAAOC,EAAE;AACX;AAEA,OAAO,MAAMC,WAAW,GAAG;EACzBC,oBAAoB,EAAE,MAAM;EAC5BC,kBAAkB,EAAE,MAAM;EAC1BC,oCAAoC,EAAE,MAAM;EAC5CC,iBAAiB,EAAE;AACrB,CAAC;AACD,OAAO,MAAMC,cAAc,GAAG;EAC5BC,GAAG,EACD,6EAA6E,GAC7E,yGAAyG,GACzG,0GAA0G,GAC1G;AACJ,CAAC;AAED,cAAc,SAAS","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ApplicationAttributes","PremiumFeatures"],"sources":["attrs.ts"],"sourcesContent":["export enum ApplicationAttributes {\n reactions = 'reactions',\n message_search_v3 = 'message_search_v3',\n enable_og_tag = 'enable_og_tag',\n use_last_seen_at = 'use_last_seen_at',\n enable_message_threading = 'enable_message_threading',\n allow_message_update_from_sdk = 'allow_message_update_from_sdk',\n allow_group_channel_create_from_sdk = 'allow_group_channel_create_from_sdk',\n allow_migration_api = 'allow_migration_api',\n allow_only_operator_sdk_to_update_group_channel_image = 'allow_only_operator_sdk_to_update_group_channel_image',\n allow_user_update_from_sdk = 'allow_user_update_from_sdk',\n allow_broadcast_channel = 'allow_broadcast_channel',\n allow_sdk_file_message_urls = 'allow_sdk_file_message_urls',\n allow_group_channel_leave_from_sdk = 'allow_group_channel_leave_from_sdk',\n allow_user_list_from_sdk = 'allow_user_list_from_sdk',\n allow_group_channel_invite_from_sdk = 'allow_group_channel_invite_from_sdk',\n allow_only_operator_sdk_to_update_group_channel_name = 'allow_only_operator_sdk_to_update_group_channel_name',\n allow_group_channel_update_from_sdk = 'allow_group_channel_update_from_sdk',\n allow_super_group_channel = 'allow_super_group_channel',\n allow_non_operators_to_mention_channel = 'allow_non_operators_to_mention_channel',\n allow_file_messages_from_sdk = 'allow_file_messages_from_sdk',\n allow_open_channel_create_from_sdk = 'allow_open_channel_create_from_sdk',\n allow_anonymous_message_update = 'allow_anonymous_message_update',\n allow_group_channel_delete_from_sdk = 'allow_group_channel_delete_from_sdk',\n allow_operators_to_ban_operators = 'allow_operators_to_ban_operators',\n allow_operators_to_edit_operators = 'allow_operators_to_edit_operators',\n}\n\nexport enum PremiumFeatures {\n reactions = 'reactions',\n moderation_group = 'moderation_group',\n message_search_v3 = 'message_search_v3',\n data_export = 'data_export',\n migration = 'migration',\n delivery_receipt = 'delivery_receipt',\n auto_thumbnail = 'auto_thumbnail',\n image_moderation = 'image_moderation',\n super_group_channel = 'super_group_channel',\n announcement = 'announcement',\n moderation_open = 'moderation_open',\n desk = 'desk',\n bot_interface = 'bot_interface',\n auto_trans = 'auto_trans',\n}\n"],"mappings":"AAAA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA;AA4BjC,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA"}
1
+ {"version":3,"names":["ApplicationAttributes","PremiumFeatures"],"sources":["attrs.ts"],"sourcesContent":["export enum ApplicationAttributes {\n reactions = 'reactions',\n message_search_v3 = 'message_search_v3',\n enable_og_tag = 'enable_og_tag',\n use_last_seen_at = 'use_last_seen_at',\n enable_message_threading = 'enable_message_threading',\n allow_message_update_from_sdk = 'allow_message_update_from_sdk',\n allow_group_channel_create_from_sdk = 'allow_group_channel_create_from_sdk',\n allow_migration_api = 'allow_migration_api',\n allow_only_operator_sdk_to_update_group_channel_image = 'allow_only_operator_sdk_to_update_group_channel_image',\n allow_user_update_from_sdk = 'allow_user_update_from_sdk',\n allow_broadcast_channel = 'allow_broadcast_channel',\n allow_sdk_file_message_urls = 'allow_sdk_file_message_urls',\n allow_group_channel_leave_from_sdk = 'allow_group_channel_leave_from_sdk',\n allow_user_list_from_sdk = 'allow_user_list_from_sdk',\n allow_group_channel_invite_from_sdk = 'allow_group_channel_invite_from_sdk',\n allow_only_operator_sdk_to_update_group_channel_name = 'allow_only_operator_sdk_to_update_group_channel_name',\n allow_group_channel_update_from_sdk = 'allow_group_channel_update_from_sdk',\n allow_super_group_channel = 'allow_super_group_channel',\n allow_non_operators_to_mention_channel = 'allow_non_operators_to_mention_channel',\n allow_file_messages_from_sdk = 'allow_file_messages_from_sdk',\n allow_open_channel_create_from_sdk = 'allow_open_channel_create_from_sdk',\n allow_anonymous_message_update = 'allow_anonymous_message_update',\n allow_group_channel_delete_from_sdk = 'allow_group_channel_delete_from_sdk',\n allow_operators_to_ban_operators = 'allow_operators_to_ban_operators',\n allow_operators_to_edit_operators = 'allow_operators_to_edit_operators',\n}\n\nexport enum PremiumFeatures {\n reactions = 'reactions',\n moderation_group = 'moderation_group',\n message_search_v3 = 'message_search_v3',\n data_export = 'data_export',\n migration = 'migration',\n delivery_receipt = 'delivery_receipt',\n auto_thumbnail = 'auto_thumbnail',\n image_moderation = 'image_moderation',\n super_group_channel = 'super_group_channel',\n announcement = 'announcement',\n moderation_open = 'moderation_open',\n desk = 'desk',\n bot_interface = 'bot_interface',\n auto_trans = 'auto_trans',\n}\n"],"mappings":"AAAA,WAAYA,qBAAqB,0BAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAAA,OAArBA,qBAAqB;AAAA;AA4BjC,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
@@ -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 = (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 = (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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"}
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 = (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 = (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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","ignoreList":[]}
@@ -10,9 +10,8 @@ export function isNewMessage(msg, currentUserId) {
10
10
  export function isSendableMessage(msg) {
11
11
  return msg !== undefined && msg !== null && 'sendingStatus' in msg;
12
12
  }
13
- export function isMyMessage(msg) {
13
+ export function isMyMessage(msg, currentUserId = '##__USER_ID_IS_NOT_PROVIDED__##') {
14
14
  var _msg$sender;
15
- let currentUserId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '##__USER_ID_IS_NOT_PROVIDED__##';
16
15
  if (!isSendableMessage(msg)) return false;
17
16
  return ((_msg$sender = msg.sender) === null || _msg$sender === void 0 ? void 0 : _msg$sender.userId) === currentUserId;
18
17
  }
@@ -94,9 +93,8 @@ export function isSendbirdNotification(dataPayload) {
94
93
  export function parseSendbirdNotification(dataPayload) {
95
94
  return typeof dataPayload.sendbird === 'string' ? JSON.parse(dataPayload.sendbird) : dataPayload.sendbird;
96
95
  }
97
- export function shouldRenderParentMessage(message) {
96
+ export function shouldRenderParentMessage(message, hide = false) {
98
97
  var _message$parentMessag, _message$parentMessag2;
99
- let hide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
100
98
  if (hide) return false;
101
99
  return !!((message.isFileMessage() || message.isUserMessage()) && ((_message$parentMessag = message.parentMessage) !== null && _message$parentMessag !== void 0 && _message$parentMessag.isFileMessage() || (_message$parentMessag2 = message.parentMessage) !== null && _message$parentMessag2 !== void 0 && _message$parentMessag2.isUserMessage()));
102
100
  }
@@ -112,7 +110,7 @@ export function shouldRenderReaction(channel, reactionEnabled) {
112
110
  return reactionEnabled;
113
111
  }
114
112
  export function getReactionCount(reaction) {
115
- return reaction.userIds.length;
113
+ return reaction.count;
116
114
  }
117
115
  const fileIconMapper = {
118
116
  'audio': 'file-audio',
@@ -123,8 +121,7 @@ const fileIconMapper = {
123
121
  export function getFileTypeFromMessage(message) {
124
122
  return getFileType(message.type || getFileExtension(message.name));
125
123
  }
126
- export const convertFileTypeToMessageType = function () {
127
- let fileType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'file';
124
+ export const convertFileTypeToMessageType = (fileType = 'file') => {
128
125
  switch (fileType) {
129
126
  case 'audio':
130
127
  case 'image':
@@ -203,8 +200,7 @@ export function isVoiceMessage(message) {
203
200
  } = parseMimeType(message.type);
204
201
  return !!parameters[SBU_MIME_PARAM_KEY] && parameters[SBU_MIME_PARAM_KEY] === SBU_MIME_PARAM_VOICE_MESSAGE_VALUE;
205
202
  }
206
- export function getVoiceMessageFileObject(uri) {
207
- let extension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'm4a';
203
+ export function getVoiceMessageFileObject(uri, extension = 'm4a') {
208
204
  return {
209
205
  uri,
210
206
  type: getVoiceMessageMimeType(extension),
@@ -212,8 +208,7 @@ export function getVoiceMessageFileObject(uri) {
212
208
  size: 0
213
209
  };
214
210
  }
215
- export function getVoiceMessageMimeType() {
216
- let extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'm4a';
211
+ export function getVoiceMessageMimeType(extension = 'm4a') {
217
212
  return `audio/${extension};${SBU_MIME_PARAM_KEY}=${SBU_MIME_PARAM_VOICE_MESSAGE_VALUE}`;
218
213
  }
219
214
  //# sourceMappingURL=message.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MessageSearchOrder","getFileExtension","getFileType","parseMimeType","getMessageTimeFormat","isNewMessage","msg","currentUserId","myMessage","isMyMessage","isAdminMessage","updatedAt","isSendableMessage","undefined","_msg$sender","arguments","length","sender","userId","messageKeyExtractor","message","getMessageUniqId","messageComparator","a","b","aStatusOffset","bStatusOffset","sendingStatus","Number","MAX_SAFE_INTEGER","createdAt","hasSameSender","_a$sender","_b$sender","calcMessageGrouping","groupEnabled","curr","prev","next","isReplyThreadType","hasParentMessageUI","getPrev","parentMessageId","threadInfo","Date","getNext","groupWithPrev","groupWithNext","isUserMessage","isFileMessage","String","messageId","reqId","getThumbnailUriFromFileMessage","thumbnails","url","getAvailableUriFromFileMessage","_message$messageParam","messageParams","file","uri","isSendbirdNotification","dataPayload","Boolean","parseSendbirdNotification","sendbird","JSON","parse","shouldRenderParentMessage","_message$parentMessag","_message$parentMessag2","hide","parentMessage","shouldRenderReaction","channel","reactionEnabled","isOpenChannel","isGroupChannel","isBroadcast","isEphemeral","isChatNotification","getReactionCount","reaction","userIds","fileIconMapper","getFileTypeFromMessage","type","name","convertFileTypeToMessageType","fileType","getFileIconFromMessageType","messageType","getFileIconFromMessage","getMessageType","ogMetaData","isVoiceMessage","getDefaultMessageSearchQueryParams","keyword","channelUrl","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","TIMESTAMP","SBU_MIME_PARAM_KEY","SBU_MIME_PARAM_VOICE_MESSAGE_VALUE","parameters","getVoiceMessageFileObject","extension","getVoiceMessageMimeType","size"],"sources":["message.ts"],"sourcesContent":["import { MessageSearchOrder } from '@sendbird/chat/message';\n\nimport { getFileExtension, getFileType, parseMimeType } from '../shared/file';\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdDataPayload,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdReaction,\n SendbirdSendableMessage,\n SendbirdUserMessage,\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(\n msg?: SendbirdMessage | null,\n currentUserId = '##__USER_ID_IS_NOT_PROVIDED__##',\n): msg is SendbirdSendableMessage {\n if (!isSendableMessage(msg)) return false;\n return msg.sender?.userId === currentUserId;\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 = Number.MAX_SAFE_INTEGER;\n if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = Number.MAX_SAFE_INTEGER;\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 isReplyThreadType?: boolean,\n hasParentMessageUI?: boolean,\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 (hasParentMessageUI && curr.parentMessageId) return false;\n if (isReplyThreadType && curr.threadInfo) 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 (hasParentMessageUI && curr.parentMessageId) return false;\n if (isReplyThreadType && curr.threadInfo) 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 getThumbnailUriFromFileMessage(message: SendbirdFileMessage) {\n if (message.thumbnails && message.thumbnails.length > 0) {\n return message.thumbnails[0].url;\n }\n\n return getAvailableUriFromFileMessage(message);\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\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 shouldRenderParentMessage(\n message: SendbirdMessage,\n hide = false,\n): message is (SendbirdUserMessage | SendbirdFileMessage) & {\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n} {\n if (hide) return false;\n return !!(\n (message.isFileMessage() || message.isUserMessage()) &&\n (message.parentMessage?.isFileMessage() || message.parentMessage?.isUserMessage())\n );\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.isEphemeral) return false;\n if (channel.isChatNotification) return false;\n }\n\n return reactionEnabled;\n}\n\nexport function getReactionCount(reaction: SendbirdReaction) {\n return reaction.userIds.length;\n}\n\nexport type MessageType =\n | 'user'\n | 'admin'\n | 'file'\n | 'unknown'\n | `user.${'opengraph'}`\n | `file.${'image' | 'video' | 'audio' | 'voice'}`;\n\nexport type FileType = 'file' | 'image' | 'audio' | 'video';\n\nconst fileIconMapper = {\n 'audio': 'file-audio',\n 'image': 'photo',\n 'video': 'play',\n 'file': 'file-document',\n} as const;\n\ntype ValueOf<T> = T[keyof T];\nexport type FileIcon = ValueOf<typeof fileIconMapper>;\n\nexport function getFileTypeFromMessage(message: SendbirdFileMessage): FileType {\n return getFileType(message.type || getFileExtension(message.name));\n}\nexport const convertFileTypeToMessageType = (fileType: FileType = 'file'): MessageType => {\n switch (fileType) {\n case 'audio':\n case 'image':\n case 'video':\n return `file.${fileType}`;\n case 'file':\n return fileType;\n }\n};\nexport const getFileIconFromMessageType = (messageType: MessageType): FileIcon => {\n switch (messageType) {\n case 'file':\n return fileIconMapper['file'];\n case 'file.image':\n return fileIconMapper['image'];\n case 'file.video':\n return fileIconMapper['video'];\n case 'file.audio':\n return fileIconMapper['audio'];\n default:\n return fileIconMapper['file'];\n }\n};\nexport const getFileIconFromMessage = (message: SendbirdFileMessage): FileIcon => {\n const fileType = getFileTypeFromMessage(message);\n const messageType = convertFileTypeToMessageType(fileType);\n return getFileIconFromMessageType(messageType);\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 if (isVoiceMessage(message)) {\n return 'file.voice';\n }\n\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\nconst SBU_MIME_PARAM_KEY = 'sbu_type';\nconst SBU_MIME_PARAM_VOICE_MESSAGE_VALUE = 'voice';\n\nexport function isVoiceMessage(message: SendbirdMessage): message is SendbirdFileMessage {\n if (!message.isFileMessage()) return false;\n\n const { parameters } = parseMimeType(message.type);\n return !!parameters[SBU_MIME_PARAM_KEY] && parameters[SBU_MIME_PARAM_KEY] === SBU_MIME_PARAM_VOICE_MESSAGE_VALUE;\n}\n\nexport function getVoiceMessageFileObject(uri: string, extension = 'm4a') {\n return {\n uri,\n type: getVoiceMessageMimeType(extension),\n name: `Voice_message.${extension}`,\n size: 0,\n };\n}\n\nexport function getVoiceMessageMimeType(extension = 'm4a') {\n return `audio/${extension};${SBU_MIME_PARAM_KEY}=${SBU_MIME_PARAM_VOICE_MESSAGE_VALUE}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["MessageSearchOrder","getFileExtension","getFileType","parseMimeType","getMessageTimeFormat","isNewMessage","msg","currentUserId","myMessage","isMyMessage","isAdminMessage","updatedAt","isSendableMessage","undefined","_msg$sender","sender","userId","messageKeyExtractor","message","getMessageUniqId","messageComparator","a","b","aStatusOffset","bStatusOffset","sendingStatus","Number","MAX_SAFE_INTEGER","createdAt","hasSameSender","_a$sender","_b$sender","calcMessageGrouping","groupEnabled","curr","prev","next","isReplyThreadType","hasParentMessageUI","getPrev","parentMessageId","threadInfo","Date","getNext","groupWithPrev","groupWithNext","isUserMessage","isFileMessage","String","messageId","reqId","getThumbnailUriFromFileMessage","thumbnails","length","url","getAvailableUriFromFileMessage","_message$messageParam","messageParams","file","uri","isSendbirdNotification","dataPayload","Boolean","parseSendbirdNotification","sendbird","JSON","parse","shouldRenderParentMessage","hide","_message$parentMessag","_message$parentMessag2","parentMessage","shouldRenderReaction","channel","reactionEnabled","isOpenChannel","isGroupChannel","isBroadcast","isEphemeral","isChatNotification","getReactionCount","reaction","count","fileIconMapper","getFileTypeFromMessage","type","name","convertFileTypeToMessageType","fileType","getFileIconFromMessageType","messageType","getFileIconFromMessage","getMessageType","ogMetaData","isVoiceMessage","getDefaultMessageSearchQueryParams","keyword","channelUrl","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","TIMESTAMP","SBU_MIME_PARAM_KEY","SBU_MIME_PARAM_VOICE_MESSAGE_VALUE","parameters","getVoiceMessageFileObject","extension","getVoiceMessageMimeType","size"],"sources":["message.ts"],"sourcesContent":["import { MessageSearchOrder } from '@sendbird/chat/message';\n\nimport { getFileExtension, getFileType, parseMimeType } from '../shared/file';\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdDataPayload,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdReaction,\n SendbirdSendableMessage,\n SendbirdUserMessage,\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(\n msg?: SendbirdMessage | null,\n currentUserId = '##__USER_ID_IS_NOT_PROVIDED__##',\n): msg is SendbirdSendableMessage {\n if (!isSendableMessage(msg)) return false;\n return msg.sender?.userId === currentUserId;\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 = Number.MAX_SAFE_INTEGER;\n if (isSendableMessage(b) && b.sendingStatus !== 'succeeded') bStatusOffset = Number.MAX_SAFE_INTEGER;\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 isReplyThreadType?: boolean,\n hasParentMessageUI?: boolean,\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 (hasParentMessageUI && curr.parentMessageId) return false;\n if (isReplyThreadType && curr.threadInfo) 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 (hasParentMessageUI && curr.parentMessageId) return false;\n if (isReplyThreadType && curr.threadInfo) 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 getThumbnailUriFromFileMessage(message: SendbirdFileMessage) {\n if (message.thumbnails && message.thumbnails.length > 0) {\n return message.thumbnails[0].url;\n }\n\n return getAvailableUriFromFileMessage(message);\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\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 shouldRenderParentMessage(\n message: SendbirdMessage,\n hide = false,\n): message is (SendbirdUserMessage | SendbirdFileMessage) & {\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n} {\n if (hide) return false;\n return !!(\n (message.isFileMessage() || message.isUserMessage()) &&\n (message.parentMessage?.isFileMessage() || message.parentMessage?.isUserMessage())\n );\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.isEphemeral) return false;\n if (channel.isChatNotification) return false;\n }\n\n return reactionEnabled;\n}\n\nexport function getReactionCount(reaction: SendbirdReaction) {\n return reaction.count;\n}\n\nexport type MessageType =\n | 'user'\n | 'admin'\n | 'file'\n | 'unknown'\n | `user.${'opengraph'}`\n | `file.${'image' | 'video' | 'audio' | 'voice'}`;\n\nexport type FileType = 'file' | 'image' | 'audio' | 'video';\n\nconst fileIconMapper = {\n 'audio': 'file-audio',\n 'image': 'photo',\n 'video': 'play',\n 'file': 'file-document',\n} as const;\n\ntype ValueOf<T> = T[keyof T];\nexport type FileIcon = ValueOf<typeof fileIconMapper>;\n\nexport function getFileTypeFromMessage(message: SendbirdFileMessage): FileType {\n return getFileType(message.type || getFileExtension(message.name));\n}\nexport const convertFileTypeToMessageType = (fileType: FileType = 'file'): MessageType => {\n switch (fileType) {\n case 'audio':\n case 'image':\n case 'video':\n return `file.${fileType}`;\n case 'file':\n return fileType;\n }\n};\nexport const getFileIconFromMessageType = (messageType: MessageType): FileIcon => {\n switch (messageType) {\n case 'file':\n return fileIconMapper['file'];\n case 'file.image':\n return fileIconMapper['image'];\n case 'file.video':\n return fileIconMapper['video'];\n case 'file.audio':\n return fileIconMapper['audio'];\n default:\n return fileIconMapper['file'];\n }\n};\nexport const getFileIconFromMessage = (message: SendbirdFileMessage): FileIcon => {\n const fileType = getFileTypeFromMessage(message);\n const messageType = convertFileTypeToMessageType(fileType);\n return getFileIconFromMessageType(messageType);\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 if (isVoiceMessage(message)) {\n return 'file.voice';\n }\n\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\nconst SBU_MIME_PARAM_KEY = 'sbu_type';\nconst SBU_MIME_PARAM_VOICE_MESSAGE_VALUE = 'voice';\n\nexport function isVoiceMessage(message: SendbirdMessage): message is SendbirdFileMessage {\n if (!message.isFileMessage()) return false;\n\n const { parameters } = parseMimeType(message.type);\n return !!parameters[SBU_MIME_PARAM_KEY] && parameters[SBU_MIME_PARAM_KEY] === SBU_MIME_PARAM_VOICE_MESSAGE_VALUE;\n}\n\nexport function getVoiceMessageFileObject(uri: string, extension = 'm4a') {\n return {\n uri,\n type: getVoiceMessageMimeType(extension),\n name: `Voice_message.${extension}`,\n size: 0,\n };\n}\n\nexport function getVoiceMessageMimeType(extension = 'm4a') {\n return `audio/${extension};${SBU_MIME_PARAM_KEY}=${SBU_MIME_PARAM_VOICE_MESSAGE_VALUE}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -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 | null, then: T): T | undefined;\nexport function ifOperator<T, V>(role: Role | null, then: T, or: V): T | V;\nexport function ifOperator(role: Role | null, 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,IAAiB,EAAEC,IAAa,EAAEC,EAAY,EAAE;EACzE,IAAIF,IAAI,KAAK,UAAU,EAAE,OAAOC,IAAI;EACpC,OAAOC,EAAE;AACX;AAEA,OAAO,SAASC,aAAaA,CAAuBC,IAAO,EAAE;EAC3D,OAAOA,IAAI,CAACC,MAAM;AACpB"}
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 | null, then: T): T | undefined;\nexport function ifOperator<T, V>(role: Role | null, then: T, or: V): T | V;\nexport function ifOperator(role: Role | null, 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,IAAiB,EAAEC,IAAa,EAAEC,EAAY,EAAE;EACzE,IAAIF,IAAI,KAAK,UAAU,EAAE,OAAOC,IAAI;EACpC,OAAOC,EAAE;AACX;AAEA,OAAO,SAASC,aAAaA,CAAuBC,IAAO,EAAE;EAC3D,OAAOA,IAAI,CAACC,MAAM;AACpB","ignoreList":[]}
@@ -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,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
+ {"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,CAAsB,CAAC;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,CAAsB,CAAC;AAC7B","ignoreList":[]}
@@ -1,6 +1,7 @@
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); }
1
+ var _BufferedRequest;
2
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
5
  let REQ_PER_TIMEOUT = 5;
5
6
  let TIMEOUT_MILLS = 1000;
6
7
  const SAFE_TIMEOUT_BUFFER = 100;
@@ -30,9 +31,7 @@ export class BufferedRequest {
30
31
  BufferedRequest.markAsRead = BufferedRequest.create();
31
32
  BufferedRequest.markAsDelivered = BufferedRequest.create();
32
33
  }
33
- static create() {
34
- let reqPerTimeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : REQ_PER_TIMEOUT;
35
- let timeoutMills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TIMEOUT_MILLS;
34
+ static create(reqPerTimeout = REQ_PER_TIMEOUT, timeoutMills = TIMEOUT_MILLS) {
36
35
  const waitQueue = new Map();
37
36
  const nextQueue = new Map();
38
37
  let state = 'idle';
@@ -98,6 +97,7 @@ export class BufferedRequest {
98
97
  };
99
98
  }
100
99
  }
101
- _defineProperty(BufferedRequest, "markAsRead", BufferedRequest.create());
102
- _defineProperty(BufferedRequest, "markAsDelivered", BufferedRequest.create());
100
+ _BufferedRequest = BufferedRequest;
101
+ _defineProperty(BufferedRequest, "markAsRead", _BufferedRequest.create());
102
+ _defineProperty(BufferedRequest, "markAsDelivered", _BufferedRequest.create());
103
103
  //# 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","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","catch","_","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().catch((_) => {\n // do nothing\n });\n // TODO: Add retry\n //.catch(() => waitQueue.set(lane, func));\n }, nextRequestBaseTimeout * index);\n index++;\n });\n nextQueue.clear();\n },\n 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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"}
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","undefined","index","nextRequestBaseTimeout","forEach","catch","_","clear","_BufferedRequest","_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().catch((_) => {\n // do nothing\n });\n // TODO: Add retry\n //.catch(() => waitQueue.set(lane, func));\n }, nextRequestBaseTimeout * index);\n index++;\n });\n nextQueue.clear();\n },\n 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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","ignoreList":[]}
@@ -151,8 +151,7 @@ export function parseMimeType(mimeType) {
151
151
  */
152
152
  export function getFileExtensionFromMime(mimeType) {
153
153
  if (!mimeType) return '';
154
- const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, _ref) => {
155
- let [key, value] = _ref;
154
+ const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, [key, value]) => {
156
155
  acc[value] = key;
157
156
  return acc;
158
157
  }, {});
@@ -195,8 +194,7 @@ export function isImage(filePath, mimeType) {
195
194
  const type = getFileType(mimeType || getFileExtension(filePath));
196
195
  return type === 'image';
197
196
  }
198
- export function shouldCompressImage(mime) {
199
- let compressionEnabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
197
+ export function shouldCompressImage(mime, compressionEnabled = true) {
200
198
  const extension = isJPG(mime) ? 'jpg' : getFileExtensionFromMime(mime);
201
199
  return Boolean(extension.match(/jpg|jpeg|png/i) && compressionEnabled);
202
200
  }
@@ -1 +1 @@
1
- {"version":3,"names":["EXTENSION_MIME_MAP","imageExtRegex","audioExtRegex","videoExtRegex","getFileType","extensionOrType","lowerCased","toLowerCase","indexOf","type","split","match","startsWith","getDownscaleSize","origin","resizing","ratio","maxWidth","width","maxHeight","height","Math","min","normalizeFileName","fileName","extension","_extension","_filename","hasExtension","lastIndexOf","length","parseMimeType","mimeType","fullType","parts","subtype","parameters","part","name","value","trim","getFileExtensionFromMime","MIME_EXTENSION_MAP","Object","entries","reduce","acc","_ref","key","getMimeFromFileExtension","ext","sliceIdx","extWithoutDot","slice","getFileExtension","filePath","pathWithoutParams","idx","result","getFileExtensionFromUri","uri","fetch","then","response","headers","get","isImage","shouldCompressImage","mime","compressionEnabled","arguments","undefined","isJPG","Boolean"],"sources":["file.ts"],"sourcesContent":["const EXTENSION_MIME_MAP = {\n // Image\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n\n // Video\n '3gp': 'video/3gpp',\n 'mp4': 'video/mp4',\n 'mpeg': 'video/mpeg',\n 'ogv': 'video/ogg',\n 'video/quicktime': 'mov',\n 'webm': 'video/webm',\n 'avi': 'video/x-msvideo',\n\n // Audio\n 'aac': 'audio/aac',\n 'm4a': 'audio/m4a',\n 'mid': 'audio/midi',\n 'mp3': 'audio/mpeg',\n 'ogg': 'audio/ogg',\n 'wav': 'audio/wav',\n 'weba': 'audio/webm',\n\n // Files\n 'txt': 'text/plain',\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'zip': 'application/zip',\n 'json': 'application/json',\n 'gzip': 'application/x-gzip',\n} as Record<string, string>;\n\nexport const imageExtRegex = /jpeg|jpg|png|webp|gif/i;\nexport const audioExtRegex = /3gp|aac|aax|act|aiff|flac|gsm|m4a|m4b|m4p|tta|wma|mp3|webm|wav|ogg/i;\nexport const videoExtRegex = /mov|vod|mp4|avi|mpeg|ogv/i;\nexport const getFileType = (extensionOrType: string) => {\n const lowerCased = extensionOrType.toLowerCase();\n\n // mime type\n if (lowerCased.indexOf('/') > -1) {\n const type = lowerCased.split('/')[0];\n if (type === 'video') return 'video';\n if (type === 'audio') return 'audio';\n if (type === 'image') return 'image';\n return 'file';\n }\n\n // extensions\n if (lowerCased.match(imageExtRegex)) return 'image';\n if (lowerCased.match(audioExtRegex)) return 'audio';\n if (lowerCased.match(videoExtRegex)) return 'video';\n\n // others\n if (lowerCased.startsWith('image')) return 'image';\n if (lowerCased.startsWith('audio')) return 'audio';\n if (lowerCased.startsWith('video')) return 'video';\n\n return 'file';\n};\n\n/**\n * Calculates the downscaled size of an image while preserving its aspect ratio.\n *\n * @param {Object} origin - The original size object with `width` and `height` properties.\n * @param {Object} resizing - The resizing object with optional `width` and `height` properties.\n * @returns {Object} - A new size object with the downscaled `width` and `height` properties.\n * @example\n * ```ts\n * getDownscaleSize({ width: 1200, height: 800 }, { width: 600 }); // returns { width: 600, height: 400 }\n * ```\n */\ntype Size = { width: number; height: number };\nexport function getDownscaleSize(origin: Size, resizing: Partial<Size>) {\n let ratio: number;\n\n const maxWidth = resizing.width || origin.width,\n maxHeight = resizing.height || origin.height;\n\n if (origin.width <= maxWidth && origin.height <= maxHeight) {\n ratio = 1;\n } else if (origin.width > maxWidth && origin.height <= maxHeight) {\n ratio = maxWidth / origin.width;\n } else if (origin.width <= maxWidth && origin.height > maxHeight) {\n ratio = maxHeight / origin.height;\n } else {\n ratio = Math.min(maxWidth / origin.width, maxHeight / origin.height);\n }\n\n return { width: origin.width * ratio, height: origin.height * ratio };\n}\n\n/**\n * Normalize a file name by ensuring it has the given extension, if it doesn't already.\n *\n * @param {string} fileName - The file name to normalize.\n * @param {string} extension - The desired extension, without a leading period.\n * @returns {string} - The normalized file name, with the extension.\n */\nexport function normalizeFileName(fileName: string, extension: string) {\n if (!extension) return fileName;\n\n // .extension\n let _extension = extension.toLowerCase();\n if (_extension.indexOf('.') !== 0) {\n _extension = '.' + _extension;\n }\n\n // filename.extension | filename\n const _filename = fileName.toLowerCase();\n const hasExtension = _filename.lastIndexOf(_extension) === _filename.length - _extension.length;\n if (!hasExtension) {\n // filename.extension\n return fileName + _extension;\n } else {\n // filename.extension\n return fileName;\n }\n}\n\n/**\n * Parses a MIME type string into its components.\n *\n * @param mimeType - The MIME type string to parse.\n * @returns An object containing the type, subtype, and parameters of the MIME type.\n */\ntype MimeType = { type: string; subtype: string; parameters: Record<string, string> };\nexport function parseMimeType(mimeType: string): MimeType {\n const [fullType, ...parts] = mimeType.split(';');\n const [type, subtype] = fullType.split('/');\n const parameters: MimeType['parameters'] = {};\n\n for (const part of parts) {\n const [name, value] = part.trim().split('=');\n parameters[name] = value;\n }\n\n return { type, subtype, parameters };\n}\n\n/**\n * Returns the file extension based on the MIME type.\n *\n * @param {string | null | undefined} mimeType - The MIME type to look up.\n * @returns {string} - The file extension for the given MIME type, or an empty string if no matching file extension was found.\n */\nexport function getFileExtensionFromMime(mimeType?: string | null): string {\n if (!mimeType) return '';\n const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, [key, value]) => {\n acc[value] = key;\n return acc;\n }, {} as Record<string, string>);\n\n const extension = MIME_EXTENSION_MAP[mimeType.toLowerCase()];\n if (extension) return '.' + extension;\n return '';\n}\n\n/**\n * Returns the MIME type based on the file extension.\n *\n * @param {string | null | undefined} ext - The file extension to look up.\n * @returns {string} - The MIME type for the given file extension, or an empty string if no matching MIME type was found.\n */\nexport function getMimeFromFileExtension(ext?: string | null) {\n if (!ext) return '';\n\n const sliceIdx = ext.lastIndexOf('.');\n const extWithoutDot = sliceIdx === -1 ? ext : ext.slice(sliceIdx + 1);\n\n return EXTENSION_MIME_MAP[extWithoutDot.toLowerCase()] || '';\n}\n\n/**\n * Returns the file extension of a file path.\n *\n * @param {string} filePath - The file path to extract the extension from.\n * @returns {string} - The file extension, or an empty string if the file path does not have an extension.\n */\nexport function getFileExtension(filePath: string) {\n const pathWithoutParams = filePath.split('?')[0];\n\n const idx = pathWithoutParams.lastIndexOf('.');\n if (idx === -1) return '';\n\n const result = pathWithoutParams.slice(idx - pathWithoutParams.length).toLowerCase();\n if (result === '.') return '';\n else return result;\n}\n\nexport async function getFileExtensionFromUri(uri: string) {\n const type = await fetch(uri).then((response) => response.headers.get('content-type'));\n return getFileExtensionFromMime(type);\n}\n\nexport function isImage(filePath: string, mimeType?: string) {\n const type = getFileType(mimeType || getFileExtension(filePath));\n return type === 'image';\n}\n\nexport function shouldCompressImage(mime: string, compressionEnabled = true) {\n const extension = isJPG(mime) ? 'jpg' : getFileExtensionFromMime(mime);\n return Boolean(extension.match(/jpg|jpeg|png/i) && compressionEnabled);\n}\n\n/**\n * https://github.com/gathertown/sendbird-uikit-react-native/pull/29\n * This function is used solely for the purpose of classifying `image/jpg`.\n *\n * We only use it to determine whether image compression is applied because `image/jpg` is not a MIME type standard.\n * Therefore, it is not reflected in `EXTENSION_MIME_MAP`, which extracts MIME types uploaded to the server. (to comply standard)\n * */\nfunction isJPG(mime: string) {\n return mime === 'image/jpg';\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["EXTENSION_MIME_MAP","imageExtRegex","audioExtRegex","videoExtRegex","getFileType","extensionOrType","lowerCased","toLowerCase","indexOf","type","split","match","startsWith","getDownscaleSize","origin","resizing","ratio","maxWidth","width","maxHeight","height","Math","min","normalizeFileName","fileName","extension","_extension","_filename","hasExtension","lastIndexOf","length","parseMimeType","mimeType","fullType","parts","subtype","parameters","part","name","value","trim","getFileExtensionFromMime","MIME_EXTENSION_MAP","Object","entries","reduce","acc","key","getMimeFromFileExtension","ext","sliceIdx","extWithoutDot","slice","getFileExtension","filePath","pathWithoutParams","idx","result","getFileExtensionFromUri","uri","fetch","then","response","headers","get","isImage","shouldCompressImage","mime","compressionEnabled","isJPG","Boolean"],"sources":["file.ts"],"sourcesContent":["const EXTENSION_MIME_MAP = {\n // Image\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n\n // Video\n '3gp': 'video/3gpp',\n 'mp4': 'video/mp4',\n 'mpeg': 'video/mpeg',\n 'ogv': 'video/ogg',\n 'video/quicktime': 'mov',\n 'webm': 'video/webm',\n 'avi': 'video/x-msvideo',\n\n // Audio\n 'aac': 'audio/aac',\n 'm4a': 'audio/m4a',\n 'mid': 'audio/midi',\n 'mp3': 'audio/mpeg',\n 'ogg': 'audio/ogg',\n 'wav': 'audio/wav',\n 'weba': 'audio/webm',\n\n // Files\n 'txt': 'text/plain',\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'zip': 'application/zip',\n 'json': 'application/json',\n 'gzip': 'application/x-gzip',\n} as Record<string, string>;\n\nexport const imageExtRegex = /jpeg|jpg|png|webp|gif/i;\nexport const audioExtRegex = /3gp|aac|aax|act|aiff|flac|gsm|m4a|m4b|m4p|tta|wma|mp3|webm|wav|ogg/i;\nexport const videoExtRegex = /mov|vod|mp4|avi|mpeg|ogv/i;\nexport const getFileType = (extensionOrType: string) => {\n const lowerCased = extensionOrType.toLowerCase();\n\n // mime type\n if (lowerCased.indexOf('/') > -1) {\n const type = lowerCased.split('/')[0];\n if (type === 'video') return 'video';\n if (type === 'audio') return 'audio';\n if (type === 'image') return 'image';\n return 'file';\n }\n\n // extensions\n if (lowerCased.match(imageExtRegex)) return 'image';\n if (lowerCased.match(audioExtRegex)) return 'audio';\n if (lowerCased.match(videoExtRegex)) return 'video';\n\n // others\n if (lowerCased.startsWith('image')) return 'image';\n if (lowerCased.startsWith('audio')) return 'audio';\n if (lowerCased.startsWith('video')) return 'video';\n\n return 'file';\n};\n\n/**\n * Calculates the downscaled size of an image while preserving its aspect ratio.\n *\n * @param {Object} origin - The original size object with `width` and `height` properties.\n * @param {Object} resizing - The resizing object with optional `width` and `height` properties.\n * @returns {Object} - A new size object with the downscaled `width` and `height` properties.\n * @example\n * ```ts\n * getDownscaleSize({ width: 1200, height: 800 }, { width: 600 }); // returns { width: 600, height: 400 }\n * ```\n */\ntype Size = { width: number; height: number };\nexport function getDownscaleSize(origin: Size, resizing: Partial<Size>) {\n let ratio: number;\n\n const maxWidth = resizing.width || origin.width,\n maxHeight = resizing.height || origin.height;\n\n if (origin.width <= maxWidth && origin.height <= maxHeight) {\n ratio = 1;\n } else if (origin.width > maxWidth && origin.height <= maxHeight) {\n ratio = maxWidth / origin.width;\n } else if (origin.width <= maxWidth && origin.height > maxHeight) {\n ratio = maxHeight / origin.height;\n } else {\n ratio = Math.min(maxWidth / origin.width, maxHeight / origin.height);\n }\n\n return { width: origin.width * ratio, height: origin.height * ratio };\n}\n\n/**\n * Normalize a file name by ensuring it has the given extension, if it doesn't already.\n *\n * @param {string} fileName - The file name to normalize.\n * @param {string} extension - The desired extension, without a leading period.\n * @returns {string} - The normalized file name, with the extension.\n */\nexport function normalizeFileName(fileName: string, extension: string) {\n if (!extension) return fileName;\n\n // .extension\n let _extension = extension.toLowerCase();\n if (_extension.indexOf('.') !== 0) {\n _extension = '.' + _extension;\n }\n\n // filename.extension | filename\n const _filename = fileName.toLowerCase();\n const hasExtension = _filename.lastIndexOf(_extension) === _filename.length - _extension.length;\n if (!hasExtension) {\n // filename.extension\n return fileName + _extension;\n } else {\n // filename.extension\n return fileName;\n }\n}\n\n/**\n * Parses a MIME type string into its components.\n *\n * @param mimeType - The MIME type string to parse.\n * @returns An object containing the type, subtype, and parameters of the MIME type.\n */\ntype MimeType = { type: string; subtype: string; parameters: Record<string, string> };\nexport function parseMimeType(mimeType: string): MimeType {\n const [fullType, ...parts] = mimeType.split(';');\n const [type, subtype] = fullType.split('/');\n const parameters: MimeType['parameters'] = {};\n\n for (const part of parts) {\n const [name, value] = part.trim().split('=');\n parameters[name] = value;\n }\n\n return { type, subtype, parameters };\n}\n\n/**\n * Returns the file extension based on the MIME type.\n *\n * @param {string | null | undefined} mimeType - The MIME type to look up.\n * @returns {string} - The file extension for the given MIME type, or an empty string if no matching file extension was found.\n */\nexport function getFileExtensionFromMime(mimeType?: string | null): string {\n if (!mimeType) return '';\n const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, [key, value]) => {\n acc[value] = key;\n return acc;\n }, {} as Record<string, string>);\n\n const extension = MIME_EXTENSION_MAP[mimeType.toLowerCase()];\n if (extension) return '.' + extension;\n return '';\n}\n\n/**\n * Returns the MIME type based on the file extension.\n *\n * @param {string | null | undefined} ext - The file extension to look up.\n * @returns {string} - The MIME type for the given file extension, or an empty string if no matching MIME type was found.\n */\nexport function getMimeFromFileExtension(ext?: string | null) {\n if (!ext) return '';\n\n const sliceIdx = ext.lastIndexOf('.');\n const extWithoutDot = sliceIdx === -1 ? ext : ext.slice(sliceIdx + 1);\n\n return EXTENSION_MIME_MAP[extWithoutDot.toLowerCase()] || '';\n}\n\n/**\n * Returns the file extension of a file path.\n *\n * @param {string} filePath - The file path to extract the extension from.\n * @returns {string} - The file extension, or an empty string if the file path does not have an extension.\n */\nexport function getFileExtension(filePath: string) {\n const pathWithoutParams = filePath.split('?')[0];\n\n const idx = pathWithoutParams.lastIndexOf('.');\n if (idx === -1) return '';\n\n const result = pathWithoutParams.slice(idx - pathWithoutParams.length).toLowerCase();\n if (result === '.') return '';\n else return result;\n}\n\nexport async function getFileExtensionFromUri(uri: string) {\n const type = await fetch(uri).then((response) => response.headers.get('content-type'));\n return getFileExtensionFromMime(type);\n}\n\nexport function isImage(filePath: string, mimeType?: string) {\n const type = getFileType(mimeType || getFileExtension(filePath));\n return type === 'image';\n}\n\nexport function shouldCompressImage(mime: string, compressionEnabled = true) {\n const extension = isJPG(mime) ? 'jpg' : getFileExtensionFromMime(mime);\n return Boolean(extension.match(/jpg|jpeg|png/i) && compressionEnabled);\n}\n\n/**\n * https://github.com/gathertown/sendbird-uikit-react-native/pull/29\n * This function is used solely for the purpose of classifying `image/jpg`.\n *\n * We only use it to determine whether image compression is applied because `image/jpg` is not a MIME type standard.\n * Therefore, it is not reflected in `EXTENSION_MIME_MAP`, which extracts MIME types uploaded to the server. (to comply standard)\n * */\nfunction isJPG(mime: string) {\n return mime === 'image/jpg';\n}\n"],"mappings":"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","ignoreList":[]}