@sendbird/uikit-utils 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/hooks/index.js +3 -30
  3. package/lib/commonjs/hooks/index.js.map +1 -1
  4. package/lib/commonjs/hooks/react-native.js +2 -11
  5. package/lib/commonjs/hooks/react-native.js.map +1 -1
  6. package/lib/commonjs/index.js +0 -42
  7. package/lib/commonjs/index.js.map +1 -1
  8. package/lib/commonjs/sendbird/attrs.js +8 -11
  9. package/lib/commonjs/sendbird/attrs.js.map +1 -1
  10. package/lib/commonjs/sendbird/channel.js +0 -16
  11. package/lib/commonjs/sendbird/channel.js.map +1 -1
  12. package/lib/commonjs/sendbird/message.js +3 -34
  13. package/lib/commonjs/sendbird/message.js.map +1 -1
  14. package/lib/commonjs/sendbird/user.js +0 -2
  15. package/lib/commonjs/sendbird/user.js.map +1 -1
  16. package/lib/commonjs/shared/arrayToMap.js +0 -6
  17. package/lib/commonjs/shared/arrayToMap.js.map +1 -1
  18. package/lib/commonjs/shared/bufferedRequest.js +5 -26
  19. package/lib/commonjs/shared/bufferedRequest.js.map +1 -1
  20. package/lib/commonjs/shared/file.js +11 -28
  21. package/lib/commonjs/shared/file.js.map +1 -1
  22. package/lib/commonjs/shared/index.js +3 -7
  23. package/lib/commonjs/shared/index.js.map +1 -1
  24. package/lib/commonjs/shared/logger.js +3 -22
  25. package/lib/commonjs/shared/logger.js.map +1 -1
  26. package/lib/commonjs/shared/regex.js +2 -9
  27. package/lib/commonjs/shared/regex.js.map +1 -1
  28. package/lib/commonjs/ui-format/common.js +6 -18
  29. package/lib/commonjs/ui-format/common.js.map +1 -1
  30. package/lib/commonjs/ui-format/groupChannel.js +0 -15
  31. package/lib/commonjs/ui-format/groupChannel.js.map +1 -1
  32. package/lib/commonjs/ui-format/openChannel.js +0 -4
  33. package/lib/commonjs/ui-format/openChannel.js.map +1 -1
  34. package/lib/module/hooks/index.js +3 -7
  35. package/lib/module/hooks/index.js.map +1 -1
  36. package/lib/module/hooks/react-native.js +2 -2
  37. package/lib/module/hooks/react-native.js.map +1 -1
  38. package/lib/module/index.js.map +1 -1
  39. package/lib/module/sendbird/attrs.js +6 -9
  40. package/lib/module/sendbird/attrs.js.map +1 -1
  41. package/lib/module/sendbird/channel.js +0 -1
  42. package/lib/module/sendbird/channel.js.map +1 -1
  43. package/lib/module/sendbird/message.js +3 -17
  44. package/lib/module/sendbird/message.js.map +1 -1
  45. package/lib/module/sendbird/user.js.map +1 -1
  46. package/lib/module/shared/arrayToMap.js +0 -4
  47. package/lib/module/shared/arrayToMap.js.map +1 -1
  48. package/lib/module/shared/bufferedRequest.js +5 -24
  49. package/lib/module/shared/bufferedRequest.js.map +1 -1
  50. package/lib/module/shared/file.js +11 -16
  51. package/lib/module/shared/file.js.map +1 -1
  52. package/lib/module/shared/index.js +3 -3
  53. package/lib/module/shared/index.js.map +1 -1
  54. package/lib/module/shared/logger.js +3 -21
  55. package/lib/module/shared/logger.js.map +1 -1
  56. package/lib/module/shared/regex.js +3 -2
  57. package/lib/module/shared/regex.js.map +1 -1
  58. package/lib/module/ui-format/common.js +6 -9
  59. package/lib/module/ui-format/common.js.map +1 -1
  60. package/lib/module/ui-format/groupChannel.js +0 -7
  61. package/lib/module/ui-format/groupChannel.js.map +1 -1
  62. package/lib/module/ui-format/openChannel.js.map +1 -1
  63. package/package.json +11 -7
@@ -1 +1 @@
1
- {"version":3,"names":["REQ_PER_TIMEOUT","TIMEOUT_MILLS","SAFE_TIMEOUT_BUFFER","generateRandomId","Math","random","toString","slice","BufferedRequest","updateMarkAsReadOptions","reqPerTimeout","timeoutMills","markAsRead","create","updateMarkAsDeliveredOptions","markAsDelivered","value","waitQueue","Map","nextQueue","state","timeout","push","func","lane","set","invoke","shift","size","nextRemains","min","lanes","keys","n","get","delete","handleIdle","handleProcessing","setTimeout","undefined","index","nextRequestBaseTimeout","forEach","clear"],"sources":["bufferedRequest.ts"],"sourcesContent":["type Func = (...args: unknown[]) => Promise<unknown>;\ntype State = 'idle' | 'processing';\n\nlet REQ_PER_TIMEOUT = 5;\nlet TIMEOUT_MILLS = 1000;\nconst SAFE_TIMEOUT_BUFFER = 100;\n\nfunction generateRandomId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport class BufferedRequest {\n public static markAsRead = BufferedRequest.create();\n public static markAsDelivered = BufferedRequest.create();\n\n public static updateMarkAsReadOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsRead = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n public static updateMarkAsDeliveredOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsDelivered = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n\n public static get reqPerTimeout() {\n return REQ_PER_TIMEOUT;\n }\n public static set reqPerTimeout(value: number) {\n REQ_PER_TIMEOUT = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static get timeoutMills() {\n return TIMEOUT_MILLS;\n }\n public static set timeoutMills(value: number) {\n TIMEOUT_MILLS = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static create(reqPerTimeout = REQ_PER_TIMEOUT, timeoutMills = TIMEOUT_MILLS) {\n const waitQueue = new Map<string, Func>();\n const nextQueue = new Map<string, Func>();\n\n let state: State = 'idle';\n let timeout: NodeJS.Timeout | undefined;\n\n return {\n push(func: Func, lane?: string) {\n waitQueue.set(lane ?? generateRandomId(), func);\n this.invoke();\n },\n shift() {\n if (nextQueue.size < reqPerTimeout) {\n const nextRemains = Math.min(reqPerTimeout - nextQueue.size, waitQueue.size);\n const lanes = [...waitQueue.keys()];\n for (let n = 0; n < nextRemains; n++) {\n const lane = lanes[n];\n const func = waitQueue.get(lane);\n if (func) {\n waitQueue.delete(lane);\n nextQueue.set(lane, func);\n }\n }\n }\n },\n handleIdle() {\n if (0 < nextQueue.size) {\n state = 'processing';\n this.invoke();\n }\n },\n handleProcessing() {\n if (timeout) return;\n\n timeout = setTimeout(() => {\n timeout = undefined;\n if (0 < nextQueue.size || 0 < waitQueue.size) {\n this.invoke();\n } else {\n state = 'idle';\n }\n }, timeoutMills + SAFE_TIMEOUT_BUFFER);\n\n let index = 0;\n const nextRequestBaseTimeout = timeoutMills / nextQueue.size;\n nextQueue.forEach((func) => {\n setTimeout(() => {\n func();\n // TODO: Add retry\n //.catch(() => waitQueue.set(lane, func));\n }, nextRequestBaseTimeout * index);\n index++;\n });\n nextQueue.clear();\n },\n async invoke() {\n this.shift();\n\n if (state === 'idle') {\n this.handleIdle();\n }\n\n if (state === 'processing') {\n this.handleProcessing();\n }\n },\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["REQ_PER_TIMEOUT","TIMEOUT_MILLS","SAFE_TIMEOUT_BUFFER","generateRandomId","Math","random","toString","slice","BufferedRequest","updateMarkAsReadOptions","reqPerTimeout","timeoutMills","markAsRead","create","updateMarkAsDeliveredOptions","markAsDelivered","value","arguments","length","undefined","waitQueue","Map","nextQueue","state","timeout","push","func","lane","set","invoke","shift","size","nextRemains","min","lanes","keys","n","get","delete","handleIdle","handleProcessing","setTimeout","index","nextRequestBaseTimeout","forEach","clear","_defineProperty"],"sources":["bufferedRequest.ts"],"sourcesContent":["type Func = (...args: unknown[]) => Promise<unknown>;\ntype State = 'idle' | 'processing';\n\nlet REQ_PER_TIMEOUT = 5;\nlet TIMEOUT_MILLS = 1000;\nconst SAFE_TIMEOUT_BUFFER = 100;\n\nfunction generateRandomId() {\n return Math.random().toString(16).slice(2);\n}\n\nexport class BufferedRequest {\n public static markAsRead = BufferedRequest.create();\n public static markAsDelivered = BufferedRequest.create();\n\n public static updateMarkAsReadOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsRead = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n public static updateMarkAsDeliveredOptions(reqPerTimeout: number, timeoutMills: number) {\n BufferedRequest.markAsDelivered = BufferedRequest.create(reqPerTimeout, timeoutMills);\n }\n\n public static get reqPerTimeout() {\n return REQ_PER_TIMEOUT;\n }\n public static set reqPerTimeout(value: number) {\n REQ_PER_TIMEOUT = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static get timeoutMills() {\n return TIMEOUT_MILLS;\n }\n public static set timeoutMills(value: number) {\n TIMEOUT_MILLS = value;\n BufferedRequest.markAsRead = BufferedRequest.create();\n BufferedRequest.markAsDelivered = BufferedRequest.create();\n }\n\n public static create(reqPerTimeout = REQ_PER_TIMEOUT, timeoutMills = TIMEOUT_MILLS) {\n const waitQueue = new Map<string, Func>();\n const nextQueue = new Map<string, Func>();\n\n let state: State = 'idle';\n let timeout: NodeJS.Timeout | undefined;\n\n return {\n push(func: Func, lane?: string) {\n waitQueue.set(lane ?? generateRandomId(), func);\n this.invoke();\n },\n shift() {\n if (nextQueue.size < reqPerTimeout) {\n const nextRemains = Math.min(reqPerTimeout - nextQueue.size, waitQueue.size);\n const lanes = [...waitQueue.keys()];\n for (let n = 0; n < nextRemains; n++) {\n const lane = lanes[n];\n const func = waitQueue.get(lane);\n if (func) {\n waitQueue.delete(lane);\n nextQueue.set(lane, func);\n }\n }\n }\n },\n handleIdle() {\n if (0 < nextQueue.size) {\n state = 'processing';\n this.invoke();\n }\n },\n handleProcessing() {\n if (timeout) return;\n\n timeout = setTimeout(() => {\n timeout = undefined;\n if (0 < nextQueue.size || 0 < waitQueue.size) {\n this.invoke();\n } else {\n state = 'idle';\n }\n }, timeoutMills + SAFE_TIMEOUT_BUFFER);\n\n let index = 0;\n const nextRequestBaseTimeout = timeoutMills / nextQueue.size;\n nextQueue.forEach((func) => {\n setTimeout(() => {\n func();\n // TODO: Add retry\n //.catch(() => waitQueue.set(lane, func));\n }, nextRequestBaseTimeout * index);\n index++;\n });\n nextQueue.clear();\n },\n async invoke() {\n this.shift();\n\n if (state === 'idle') {\n this.handleIdle();\n }\n\n if (state === 'processing') {\n this.handleProcessing();\n }\n },\n };\n }\n}\n"],"mappings":"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"}
@@ -45,12 +45,12 @@ export const getFileType = extOrType => {
45
45
  if (type === 'image') return 'image';
46
46
  return 'file';
47
47
  }
48
-
49
48
  if (extOrType.match(imageExtRegex)) return 'image';
50
49
  if (extOrType.match(audioExtRegex)) return 'audio';
51
50
  if (extOrType.match(videoExtRegex)) return 'video';
52
51
  return 'file';
53
52
  };
53
+
54
54
  /**
55
55
  * Calculates the downscaled size of an image while preserving its aspect ratio.
56
56
  *
@@ -66,8 +66,7 @@ export const getFileType = extOrType => {
66
66
  export function getDownscaleSize(origin, resizing) {
67
67
  let ratio;
68
68
  const maxWidth = resizing.width || origin.width,
69
- maxHeight = resizing.height || origin.height;
70
-
69
+ maxHeight = resizing.height || origin.height;
71
70
  if (origin.width <= maxWidth && origin.height <= maxHeight) {
72
71
  ratio = 1;
73
72
  } else if (origin.width > maxWidth && origin.height <= maxHeight) {
@@ -77,12 +76,12 @@ export function getDownscaleSize(origin, resizing) {
77
76
  } else {
78
77
  ratio = Math.min(maxWidth / origin.width, maxHeight / origin.height);
79
78
  }
80
-
81
79
  return {
82
80
  width: origin.width * ratio,
83
81
  height: origin.height * ratio
84
82
  };
85
83
  }
84
+
86
85
  /**
87
86
  * Normalize a file name by ensuring it has the given extension, if it doesn't already.
88
87
  *
@@ -90,21 +89,18 @@ export function getDownscaleSize(origin, resizing) {
90
89
  * @param {string} extension - The desired extension, without a leading period.
91
90
  * @returns {string} - The normalized file name, with the extension.
92
91
  */
93
-
94
92
  export function normalizeFileName(fileName, extension) {
95
- if (!extension) return fileName; // .extension
93
+ if (!extension) return fileName;
96
94
 
95
+ // .extension
97
96
  let _extension = extension.toLowerCase();
98
-
99
97
  if (_extension.indexOf('.') !== 0) {
100
98
  _extension = '.' + _extension;
101
- } // filename.extension | filename
102
-
99
+ }
103
100
 
101
+ // filename.extension | filename
104
102
  const _filename = fileName.toLowerCase();
105
-
106
103
  const hasExtension = _filename.lastIndexOf(_extension) === _filename.length - _extension.length;
107
-
108
104
  if (!hasExtension) {
109
105
  // filename.extension
110
106
  return fileName + _extension;
@@ -113,6 +109,7 @@ export function normalizeFileName(fileName, extension) {
113
109
  return fileName;
114
110
  }
115
111
  }
112
+
116
113
  /**
117
114
  * Parses a MIME type string into its components.
118
115
  *
@@ -124,25 +121,23 @@ export function parseMimeType(mimeType) {
124
121
  const [fullType, ...parts] = mimeType.split(';');
125
122
  const [type, subtype] = fullType.split('/');
126
123
  const parameters = {};
127
-
128
124
  for (const part of parts) {
129
125
  const [name, value] = part.trim().split('=');
130
126
  parameters[name] = value;
131
127
  }
132
-
133
128
  return {
134
129
  type,
135
130
  subtype,
136
131
  parameters
137
132
  };
138
133
  }
134
+
139
135
  /**
140
136
  * Returns the file extension based on the MIME type.
141
137
  *
142
138
  * @param {string | null | undefined} mimeType - The MIME type to look up.
143
139
  * @returns {string} - The file extension for the given MIME type, or an empty string if no matching file extension was found.
144
140
  */
145
-
146
141
  export function getFileExtensionFromMime(mimeType) {
147
142
  if (!mimeType) return '';
148
143
  const MIME_EXTENSION_MAP = Object.entries(EXTENSION_MIME_MAP).reduce((acc, _ref) => {
@@ -152,24 +147,24 @@ export function getFileExtensionFromMime(mimeType) {
152
147
  }, {});
153
148
  return MIME_EXTENSION_MAP[mimeType.toLowerCase()] || '';
154
149
  }
150
+
155
151
  /**
156
152
  * Returns the MIME type based on the file extension.
157
153
  *
158
154
  * @param {string | null | undefined} ext - The file extension to look up.
159
155
  * @returns {string} - The MIME type for the given file extension, or an empty string if no matching MIME type was found.
160
156
  */
161
-
162
157
  export function getMimeFromFileExtension(ext) {
163
158
  if (!ext) return '';
164
159
  return EXTENSION_MIME_MAP[ext.toLowerCase()] || '';
165
160
  }
161
+
166
162
  /**
167
163
  * Returns the file extension of a file path.
168
164
  *
169
165
  * @param {string} filePath - The file path to extract the extension from.
170
166
  * @returns {string} - The file extension, or an empty string if the file path does not have an extension.
171
167
  */
172
-
173
168
  export function getFileExtension(filePath) {
174
169
  const pathWithoutParams = filePath.split('?')[0];
175
170
  const idx = pathWithoutParams.lastIndexOf('.');
@@ -1 +1 @@
1
- {"version":3,"names":["EXTENSION_MIME_MAP","imageExtRegex","audioExtRegex","videoExtRegex","getFileType","extOrType","indexOf","type","split","match","getDownscaleSize","origin","resizing","ratio","maxWidth","width","maxHeight","height","Math","min","normalizeFileName","fileName","extension","_extension","toLowerCase","_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","getFileExtension","filePath","pathWithoutParams","idx","result","slice","getFileExtensionFromUri","uri","fetch","then","response","headers","get","isImage","shouldCompressImage","mime","compressionEnabled","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 '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/i;\nexport const videoExtRegex = /mov|vod|mp4|avi/i;\nexport const getFileType = (extOrType: string) => {\n if (extOrType.indexOf('/') > -1) {\n const type = extOrType.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 if (extOrType.match(imageExtRegex)) return 'image';\n if (extOrType.match(audioExtRegex)) return 'audio';\n if (extOrType.match(videoExtRegex)) return 'video';\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 return MIME_EXTENSION_MAP[mimeType.toLowerCase()] || '';\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 return EXTENSION_MIME_MAP[ext.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 function getFileExtensionFromUri(uri: string) {\n return fetch(uri).then((response) => response.headers.get('content-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 = getFileExtensionFromMime(mime);\n return Boolean(extension.match(/jpg|jpeg|png/i) && compressionEnabled);\n}\n"],"mappings":"AAAA,MAAMA,kBAAkB,GAAG;EACzB;EACA,QAAQ,YAFiB;EAGzB,OAAO,YAHkB;EAIzB,OAAO,WAJkB;EAKzB,OAAO,WALkB;EAMzB,QAAQ,YANiB;EAOzB,OAAO,eAPkB;EASzB;EACA,OAAO,YAVkB;EAWzB,OAAO,WAXkB;EAYzB,QAAQ,YAZiB;EAazB,OAAO,WAbkB;EAczB,mBAAmB,KAdM;EAezB,QAAQ,YAfiB;EAgBzB,OAAO,iBAhBkB;EAkBzB;EACA,OAAO,WAnBkB;EAoBzB,OAAO,YApBkB;EAqBzB,OAAO,YArBkB;EAsBzB,OAAO,WAtBkB;EAuBzB,OAAO,WAvBkB;EAwBzB,QAAQ,YAxBiB;EA0BzB;EACA,OAAO,YA3BkB;EA4BzB,OAAO,iBA5BkB;EA6BzB,OAAO,oBA7BkB;EA8BzB,QAAQ,yEA9BiB;EA+BzB,OAAO,0BA/BkB;EAgCzB,QAAQ,mEAhCiB;EAiCzB,OAAO,+BAjCkB;EAkCzB,QAAQ,2EAlCiB;EAmCzB,OAAO,iBAnCkB;EAoCzB,QAAQ,kBApCiB;EAqCzB,QAAQ;AArCiB,CAA3B;AAwCA,OAAO,MAAMC,aAAa,GAAG,wBAAtB;AACP,OAAO,MAAMC,aAAa,GAAG,iEAAtB;AACP,OAAO,MAAMC,aAAa,GAAG,kBAAtB;AACP,OAAO,MAAMC,WAAW,GAAIC,SAAD,IAAuB;EAChD,IAAIA,SAAS,CAACC,OAAV,CAAkB,GAAlB,IAAyB,CAAC,CAA9B,EAAiC;IAC/B,MAAMC,IAAI,GAAGF,SAAS,CAACG,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAb;IACA,IAAID,IAAI,KAAK,OAAb,EAAsB,OAAO,OAAP;IACtB,IAAIA,IAAI,KAAK,OAAb,EAAsB,OAAO,OAAP;IACtB,IAAIA,IAAI,KAAK,OAAb,EAAsB,OAAO,OAAP;IACtB,OAAO,MAAP;EACD;;EAED,IAAIF,SAAS,CAACI,KAAV,CAAgBR,aAAhB,CAAJ,EAAoC,OAAO,OAAP;EACpC,IAAII,SAAS,CAACI,KAAV,CAAgBP,aAAhB,CAAJ,EAAoC,OAAO,OAAP;EACpC,IAAIG,SAAS,CAACI,KAAV,CAAgBN,aAAhB,CAAJ,EAAoC,OAAO,OAAP;EACpC,OAAO,MAAP;AACD,CAbM;AAeP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASO,gBAAT,CAA0BC,MAA1B,EAAwCC,QAAxC,EAAiE;EACtE,IAAIC,KAAJ;EAEA,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,KAAT,IAAkBJ,MAAM,CAACI,KAA1C;EAAA,MACEC,SAAS,GAAGJ,QAAQ,CAACK,MAAT,IAAmBN,MAAM,CAACM,MADxC;;EAGA,IAAIN,MAAM,CAACI,KAAP,IAAgBD,QAAhB,IAA4BH,MAAM,CAACM,MAAP,IAAiBD,SAAjD,EAA4D;IAC1DH,KAAK,GAAG,CAAR;EACD,CAFD,MAEO,IAAIF,MAAM,CAACI,KAAP,GAAeD,QAAf,IAA2BH,MAAM,CAACM,MAAP,IAAiBD,SAAhD,EAA2D;IAChEH,KAAK,GAAGC,QAAQ,GAAGH,MAAM,CAACI,KAA1B;EACD,CAFM,MAEA,IAAIJ,MAAM,CAACI,KAAP,IAAgBD,QAAhB,IAA4BH,MAAM,CAACM,MAAP,GAAgBD,SAAhD,EAA2D;IAChEH,KAAK,GAAGG,SAAS,GAAGL,MAAM,CAACM,MAA3B;EACD,CAFM,MAEA;IACLJ,KAAK,GAAGK,IAAI,CAACC,GAAL,CAASL,QAAQ,GAAGH,MAAM,CAACI,KAA3B,EAAkCC,SAAS,GAAGL,MAAM,CAACM,MAArD,CAAR;EACD;;EAED,OAAO;IAAEF,KAAK,EAAEJ,MAAM,CAACI,KAAP,GAAeF,KAAxB;IAA+BI,MAAM,EAAEN,MAAM,CAACM,MAAP,GAAgBJ;EAAvD,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASO,iBAAT,CAA2BC,QAA3B,EAA6CC,SAA7C,EAAgE;EACrE,IAAI,CAACA,SAAL,EAAgB,OAAOD,QAAP,CADqD,CAGrE;;EACA,IAAIE,UAAU,GAAGD,SAAS,CAACE,WAAV,EAAjB;;EACA,IAAID,UAAU,CAACjB,OAAX,CAAmB,GAAnB,MAA4B,CAAhC,EAAmC;IACjCiB,UAAU,GAAG,MAAMA,UAAnB;EACD,CAPoE,CASrE;;;EACA,MAAME,SAAS,GAAGJ,QAAQ,CAACG,WAAT,EAAlB;;EACA,MAAME,YAAY,GAAGD,SAAS,CAACE,WAAV,CAAsBJ,UAAtB,MAAsCE,SAAS,CAACG,MAAV,GAAmBL,UAAU,CAACK,MAAzF;;EACA,IAAI,CAACF,YAAL,EAAmB;IACjB;IACA,OAAOL,QAAQ,GAAGE,UAAlB;EACD,CAHD,MAGO;IACL;IACA,OAAOF,QAAP;EACD;AACF;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASQ,aAAT,CAAuBC,QAAvB,EAAmD;EACxD,MAAM,CAACC,QAAD,EAAW,GAAGC,KAAd,IAAuBF,QAAQ,CAACtB,KAAT,CAAe,GAAf,CAA7B;EACA,MAAM,CAACD,IAAD,EAAO0B,OAAP,IAAkBF,QAAQ,CAACvB,KAAT,CAAe,GAAf,CAAxB;EACA,MAAM0B,UAAkC,GAAG,EAA3C;;EAEA,KAAK,MAAMC,IAAX,IAAmBH,KAAnB,EAA0B;IACxB,MAAM,CAACI,IAAD,EAAOC,KAAP,IAAgBF,IAAI,CAACG,IAAL,GAAY9B,KAAZ,CAAkB,GAAlB,CAAtB;IACA0B,UAAU,CAACE,IAAD,CAAV,GAAmBC,KAAnB;EACD;;EAED,OAAO;IAAE9B,IAAF;IAAQ0B,OAAR;IAAiBC;EAAjB,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,wBAAT,CAAkCT,QAAlC,EAAoE;EACzE,IAAI,CAACA,QAAL,EAAe,OAAO,EAAP;EACf,MAAMU,kBAAkB,GAAGC,MAAM,CAACC,OAAP,CAAe1C,kBAAf,EAAmC2C,MAAnC,CAA0C,CAACC,GAAD,WAAuB;IAAA,IAAjB,CAACC,GAAD,EAAMR,KAAN,CAAiB;IAC1FO,GAAG,CAACP,KAAD,CAAH,GAAaQ,GAAb;IACA,OAAOD,GAAP;EACD,CAH0B,EAGxB,EAHwB,CAA3B;EAIA,OAAOJ,kBAAkB,CAACV,QAAQ,CAACN,WAAT,EAAD,CAAlB,IAA8C,EAArD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASsB,wBAAT,CAAkCC,GAAlC,EAAuD;EAC5D,IAAI,CAACA,GAAL,EAAU,OAAO,EAAP;EACV,OAAO/C,kBAAkB,CAAC+C,GAAG,CAACvB,WAAJ,EAAD,CAAlB,IAAyC,EAAhD;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASwB,gBAAT,CAA0BC,QAA1B,EAA4C;EACjD,MAAMC,iBAAiB,GAAGD,QAAQ,CAACzC,KAAT,CAAe,GAAf,EAAoB,CAApB,CAA1B;EAEA,MAAM2C,GAAG,GAAGD,iBAAiB,CAACvB,WAAlB,CAA8B,GAA9B,CAAZ;EACA,IAAIwB,GAAG,KAAK,CAAC,CAAb,EAAgB,OAAO,EAAP;EAEhB,MAAMC,MAAM,GAAGF,iBAAiB,CAACG,KAAlB,CAAwBF,GAAG,GAAGD,iBAAiB,CAACtB,MAAhD,EAAwDJ,WAAxD,EAAf;EACA,IAAI4B,MAAM,KAAK,GAAf,EAAoB,OAAO,EAAP,CAApB,KACK,OAAOA,MAAP;AACN;AAED,OAAO,SAASE,uBAAT,CAAiCC,GAAjC,EAA8C;EACnD,OAAOC,KAAK,CAACD,GAAD,CAAL,CAAWE,IAAX,CAAiBC,QAAD,IAAcA,QAAQ,CAACC,OAAT,CAAiBC,GAAjB,CAAqB,cAArB,CAA9B,CAAP;AACD;AAED,OAAO,SAASC,OAAT,CAAiBZ,QAAjB,EAAmCnB,QAAnC,EAAsD;EAC3D,MAAMvB,IAAI,GAAGH,WAAW,CAAC0B,QAAQ,IAAIkB,gBAAgB,CAACC,QAAD,CAA7B,CAAxB;EACA,OAAO1C,IAAI,KAAK,OAAhB;AACD;AAED,OAAO,SAASuD,mBAAT,CAA6BC,IAA7B,EAAsE;EAAA,IAA3BC,kBAA2B,uEAAN,IAAM;EAC3E,MAAM1C,SAAS,GAAGiB,wBAAwB,CAACwB,IAAD,CAA1C;EACA,OAAOE,OAAO,CAAC3C,SAAS,CAACb,KAAV,CAAgB,eAAhB,KAAoCuD,kBAArC,CAAd;AACD"}
1
+ {"version":3,"names":["EXTENSION_MIME_MAP","imageExtRegex","audioExtRegex","videoExtRegex","getFileType","extOrType","indexOf","type","split","match","getDownscaleSize","origin","resizing","ratio","maxWidth","width","maxHeight","height","Math","min","normalizeFileName","fileName","extension","_extension","toLowerCase","_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","getFileExtension","filePath","pathWithoutParams","idx","result","slice","getFileExtensionFromUri","uri","fetch","then","response","headers","get","isImage","shouldCompressImage","mime","compressionEnabled","arguments","undefined","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 '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/i;\nexport const videoExtRegex = /mov|vod|mp4|avi/i;\nexport const getFileType = (extOrType: string) => {\n if (extOrType.indexOf('/') > -1) {\n const type = extOrType.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 if (extOrType.match(imageExtRegex)) return 'image';\n if (extOrType.match(audioExtRegex)) return 'audio';\n if (extOrType.match(videoExtRegex)) return 'video';\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 return MIME_EXTENSION_MAP[mimeType.toLowerCase()] || '';\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 return EXTENSION_MIME_MAP[ext.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 function getFileExtensionFromUri(uri: string) {\n return fetch(uri).then((response) => response.headers.get('content-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 = getFileExtensionFromMime(mime);\n return Boolean(extension.match(/jpg|jpeg|png/i) && compressionEnabled);\n}\n"],"mappings":"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"}
@@ -4,21 +4,22 @@
4
4
  export function hash(str) {
5
5
  return String(Math.abs(str.split('').reduce((a, c) => (a << 5) - a + c.charCodeAt(0) | 0, 0)));
6
6
  }
7
+
7
8
  /**
8
9
  * Replace a specific range of text in the string with another text.
9
10
  * */
10
-
11
11
  export function replace(str, start, end, text) {
12
12
  return str.slice(0, start) + text + str.slice(end);
13
13
  }
14
+
14
15
  /**
15
16
  * Returns the value corresponding to the first true index of a given condition array.
16
17
  * */
17
-
18
18
  export function conditionChaining(conditions, values) {
19
19
  const idx = conditions.findIndex(state => Boolean(state));
20
20
  return idx > -1 ? values[idx] : values[values.length - 1];
21
21
  }
22
+
22
23
  /**
23
24
  * Returns a new object with only the specified keys from the input object.
24
25
  *
@@ -30,7 +31,6 @@ export function conditionChaining(conditions, values) {
30
31
  * pick({ a: 1, b: '2', c: true }, ['a', 'c']); // returns { a: 1, c: true }
31
32
  * ```
32
33
  */
33
-
34
34
  export function pick(obj, keys) {
35
35
  return keys.reduce((pickedObj, key) => {
36
36
  pickedObj[key] = obj[key];
@@ -1 +1 @@
1
- {"version":3,"names":["hash","str","String","Math","abs","split","reduce","a","c","charCodeAt","replace","start","end","text","slice","conditionChaining","conditions","values","idx","findIndex","state","Boolean","length","pick","obj","keys","pickedObj","key"],"sources":["index.ts"],"sourcesContent":["/**\n * Converts a given string to a hashed string.\n * */\nexport function hash(str: string) {\n return String(Math.abs(str.split('').reduce((a, c) => ((a << 5) - a + c.charCodeAt(0)) | 0, 0)));\n}\n\n/**\n * Replace a specific range of text in the string with another text.\n * */\nexport function replace(str: string, start: number, end: number, text: string) {\n return str.slice(0, start) + text + str.slice(end);\n}\n\n/**\n * Returns the value corresponding to the first true index of a given condition array.\n * */\nexport function conditionChaining<T, V>(conditions: T[], values: V[]) {\n const idx = conditions.findIndex((state) => Boolean(state));\n return idx > -1 ? values[idx] : values[values.length - 1];\n}\n\n/**\n * Returns a new object with only the specified keys from the input object.\n *\n * @param {Object} obj - The input object to pick keys from.\n * @param {Array<string>} keys - An array of keys to pick from the input object.\n * @returns {Object} - A new object containing only the specified keys from the input object.\n * @example\n * ```ts\n * pick({ a: 1, b: '2', c: true }, ['a', 'c']); // returns { a: 1, c: true }\n * ```\n */\nexport function pick<T extends { [key: string]: unknown }, Keys extends keyof T>(obj: T, keys: Keys[]) {\n return keys.reduce((pickedObj, key) => {\n pickedObj[key] = obj[key];\n return pickedObj;\n }, {} as { [key in Keys]: T[key] });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,SAASA,IAAT,CAAcC,GAAd,EAA2B;EAChC,OAAOC,MAAM,CAACC,IAAI,CAACC,GAAL,CAASH,GAAG,CAACI,KAAJ,CAAU,EAAV,EAAcC,MAAd,CAAqB,CAACC,CAAD,EAAIC,CAAJ,KAAW,CAACD,CAAC,IAAI,CAAN,IAAWA,CAAX,GAAeC,CAAC,CAACC,UAAF,CAAa,CAAb,CAAhB,GAAmC,CAAlE,EAAqE,CAArE,CAAT,CAAD,CAAb;AACD;AAED;AACA;AACA;;AACA,OAAO,SAASC,OAAT,CAAiBT,GAAjB,EAA8BU,KAA9B,EAA6CC,GAA7C,EAA0DC,IAA1D,EAAwE;EAC7E,OAAOZ,GAAG,CAACa,KAAJ,CAAU,CAAV,EAAaH,KAAb,IAAsBE,IAAtB,GAA6BZ,GAAG,CAACa,KAAJ,CAAUF,GAAV,CAApC;AACD;AAED;AACA;AACA;;AACA,OAAO,SAASG,iBAAT,CAAiCC,UAAjC,EAAkDC,MAAlD,EAA+D;EACpE,MAAMC,GAAG,GAAGF,UAAU,CAACG,SAAX,CAAsBC,KAAD,IAAWC,OAAO,CAACD,KAAD,CAAvC,CAAZ;EACA,OAAOF,GAAG,GAAG,CAAC,CAAP,GAAWD,MAAM,CAACC,GAAD,CAAjB,GAAyBD,MAAM,CAACA,MAAM,CAACK,MAAP,GAAgB,CAAjB,CAAtC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,IAAT,CAA0EC,GAA1E,EAAkFC,IAAlF,EAAgG;EACrG,OAAOA,IAAI,CAACnB,MAAL,CAAY,CAACoB,SAAD,EAAYC,GAAZ,KAAoB;IACrCD,SAAS,CAACC,GAAD,CAAT,GAAiBH,GAAG,CAACG,GAAD,CAApB;IACA,OAAOD,SAAP;EACD,CAHM,EAGJ,EAHI,CAAP;AAID"}
1
+ {"version":3,"names":["hash","str","String","Math","abs","split","reduce","a","c","charCodeAt","replace","start","end","text","slice","conditionChaining","conditions","values","idx","findIndex","state","Boolean","length","pick","obj","keys","pickedObj","key"],"sources":["index.ts"],"sourcesContent":["/**\n * Converts a given string to a hashed string.\n * */\nexport function hash(str: string) {\n return String(Math.abs(str.split('').reduce((a, c) => ((a << 5) - a + c.charCodeAt(0)) | 0, 0)));\n}\n\n/**\n * Replace a specific range of text in the string with another text.\n * */\nexport function replace(str: string, start: number, end: number, text: string) {\n return str.slice(0, start) + text + str.slice(end);\n}\n\n/**\n * Returns the value corresponding to the first true index of a given condition array.\n * */\nexport function conditionChaining<T, V>(conditions: T[], values: V[]) {\n const idx = conditions.findIndex((state) => Boolean(state));\n return idx > -1 ? values[idx] : values[values.length - 1];\n}\n\n/**\n * Returns a new object with only the specified keys from the input object.\n *\n * @param {Object} obj - The input object to pick keys from.\n * @param {Array<string>} keys - An array of keys to pick from the input object.\n * @returns {Object} - A new object containing only the specified keys from the input object.\n * @example\n * ```ts\n * pick({ a: 1, b: '2', c: true }, ['a', 'c']); // returns { a: 1, c: true }\n * ```\n */\nexport function pick<T extends { [key: string]: unknown }, Keys extends keyof T>(obj: T, keys: Keys[]) {\n return keys.reduce((pickedObj, key) => {\n pickedObj[key] = obj[key];\n return pickedObj;\n }, {} as { [key in Keys]: T[key] });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,SAASA,IAAIA,CAACC,GAAW,EAAE;EAChC,OAAOC,MAAM,CAACC,IAAI,CAACC,GAAG,CAACH,GAAG,CAACI,KAAK,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAM,CAACD,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGC,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC,GAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClG;;AAEA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAACT,GAAW,EAAEU,KAAa,EAAEC,GAAW,EAAEC,IAAY,EAAE;EAC7E,OAAOZ,GAAG,CAACa,KAAK,CAAC,CAAC,EAAEH,KAAK,CAAC,GAAGE,IAAI,GAAGZ,GAAG,CAACa,KAAK,CAACF,GAAG,CAAC;AACpD;;AAEA;AACA;AACA;AACA,OAAO,SAASG,iBAAiBA,CAAOC,UAAe,EAAEC,MAAW,EAAE;EACpE,MAAMC,GAAG,GAAGF,UAAU,CAACG,SAAS,CAAEC,KAAK,IAAKC,OAAO,CAACD,KAAK,CAAC,CAAC;EAC3D,OAAOF,GAAG,GAAG,CAAC,CAAC,GAAGD,MAAM,CAACC,GAAG,CAAC,GAAGD,MAAM,CAACA,MAAM,CAACK,MAAM,GAAG,CAAC,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAA6DC,GAAM,EAAEC,IAAY,EAAE;EACrG,OAAOA,IAAI,CAACnB,MAAM,CAAC,CAACoB,SAAS,EAAEC,GAAG,KAAK;IACrCD,SAAS,CAACC,GAAG,CAAC,GAAGH,GAAG,CAACG,GAAG,CAAC;IACzB,OAAOD,SAAS;EAClB,CAAC,EAAE,CAAC,CAAC,CAA8B;AACrC"}
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable no-console */
2
+
2
3
  const LogLevelEnum = {
3
4
  'none': 0,
4
5
  'log': 1,
@@ -7,7 +8,6 @@ const LogLevelEnum = {
7
8
  'info': 4,
8
9
  'debug': 5
9
10
  };
10
-
11
11
  const createLogger = function () {
12
12
  let level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'warn';
13
13
  let _logLevel = level;
@@ -16,74 +16,56 @@ const createLogger = function () {
16
16
  setTitle(title) {
17
17
  _title = title;
18
18
  },
19
-
20
19
  setLogLevel(lv) {
21
20
  _logLevel = lv;
22
21
  },
23
-
24
22
  getLogLevel() {
25
23
  return _logLevel;
26
24
  },
27
-
28
25
  log() {
29
26
  if (LogLevelEnum[_logLevel] < LogLevelEnum.log) return LogLevelEnum.none;
30
-
31
27
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
32
28
  args[_key] = arguments[_key];
33
29
  }
34
-
35
30
  console.log(_title, ...args);
36
31
  return LogLevelEnum[_logLevel];
37
32
  },
38
-
39
33
  error() {
40
34
  if (LogLevelEnum[_logLevel] < LogLevelEnum.error) return LogLevelEnum.none;
41
-
42
35
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
43
36
  args[_key2] = arguments[_key2];
44
37
  }
45
-
46
38
  console.error(_title, ...args);
47
39
  return LogLevelEnum[_logLevel];
48
40
  },
49
-
50
41
  warn() {
51
42
  if (LogLevelEnum[_logLevel] < LogLevelEnum.warn) return LogLevelEnum.none;
52
-
53
43
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
54
44
  args[_key3] = arguments[_key3];
55
45
  }
56
-
57
46
  console.warn(_title, ...args);
58
47
  return LogLevelEnum[_logLevel];
59
48
  },
60
-
61
49
  info() {
62
50
  if (LogLevelEnum[_logLevel] < LogLevelEnum.info) return LogLevelEnum.none;
63
-
64
51
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
65
52
  args[_key4] = arguments[_key4];
66
53
  }
67
-
68
54
  console.info(_title, ...args);
69
55
  return LogLevelEnum[_logLevel];
70
56
  },
71
-
72
57
  debug() {
73
58
  if (LogLevelEnum[_logLevel] < LogLevelEnum.debug) return LogLevelEnum.none;
74
-
75
59
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
76
60
  args[_key5] = arguments[_key5];
77
61
  }
78
-
79
62
  console.log(_title, ...args);
80
63
  return LogLevelEnum[_logLevel];
81
64
  }
82
-
83
65
  };
84
66
  };
85
-
86
- export const Logger = { ...createLogger(),
67
+ export const Logger = {
68
+ ...createLogger(),
87
69
  LogLevelEnum,
88
70
  create: createLogger
89
71
  };
@@ -1 +1 @@
1
- {"version":3,"names":["LogLevelEnum","createLogger","level","_logLevel","_title","setTitle","title","setLogLevel","lv","getLogLevel","log","none","args","console","error","warn","info","debug","Logger","create"],"sources":["logger.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nconst LogLevelEnum = {\n 'none': 0,\n 'log': 1,\n 'error': 2,\n 'warn': 3,\n 'info': 4,\n 'debug': 5,\n};\ntype LogLevel = keyof typeof LogLevelEnum;\n\nconst createLogger = (level: LogLevel = 'warn') => {\n let _logLevel = level;\n let _title = '[UIKit]';\n\n return {\n setTitle(title: string) {\n _title = title;\n },\n setLogLevel(lv: LogLevel) {\n _logLevel = lv;\n },\n getLogLevel() {\n return _logLevel;\n },\n log(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.log) return LogLevelEnum.none;\n console.log(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n error(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.error) return LogLevelEnum.none;\n console.error(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n warn(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.warn) return LogLevelEnum.none;\n console.warn(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n info(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.info) return LogLevelEnum.none;\n console.info(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n debug(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.debug) return LogLevelEnum.none;\n console.log(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n };\n};\n\nexport const Logger = {\n ...createLogger(),\n LogLevelEnum,\n create: createLogger,\n};\n"],"mappings":"AAAA;AAEA,MAAMA,YAAY,GAAG;EACnB,QAAQ,CADW;EAEnB,OAAO,CAFY;EAGnB,SAAS,CAHU;EAInB,QAAQ,CAJW;EAKnB,QAAQ,CALW;EAMnB,SAAS;AANU,CAArB;;AAUA,MAAMC,YAAY,GAAG,YAA8B;EAAA,IAA7BC,KAA6B,uEAAX,MAAW;EACjD,IAAIC,SAAS,GAAGD,KAAhB;EACA,IAAIE,MAAM,GAAG,SAAb;EAEA,OAAO;IACLC,QAAQ,CAACC,KAAD,EAAgB;MACtBF,MAAM,GAAGE,KAAT;IACD,CAHI;;IAILC,WAAW,CAACC,EAAD,EAAe;MACxBL,SAAS,GAAGK,EAAZ;IACD,CANI;;IAOLC,WAAW,GAAG;MACZ,OAAON,SAAP;IACD,CATI;;IAULO,GAAG,GAAqB;MACtB,IAAIV,YAAY,CAACG,SAAD,CAAZ,GAA0BH,YAAY,CAACU,GAA3C,EAAgD,OAAOV,YAAY,CAACW,IAApB;;MAD1B,kCAAjBC,IAAiB;QAAjBA,IAAiB;MAAA;;MAEtBC,OAAO,CAACH,GAAR,CAAYN,MAAZ,EAAoB,GAAGQ,IAAvB;MACA,OAAOZ,YAAY,CAACG,SAAD,CAAnB;IACD,CAdI;;IAeLW,KAAK,GAAqB;MACxB,IAAId,YAAY,CAACG,SAAD,CAAZ,GAA0BH,YAAY,CAACc,KAA3C,EAAkD,OAAOd,YAAY,CAACW,IAApB;;MAD1B,mCAAjBC,IAAiB;QAAjBA,IAAiB;MAAA;;MAExBC,OAAO,CAACC,KAAR,CAAcV,MAAd,EAAsB,GAAGQ,IAAzB;MACA,OAAOZ,YAAY,CAACG,SAAD,CAAnB;IACD,CAnBI;;IAoBLY,IAAI,GAAqB;MACvB,IAAIf,YAAY,CAACG,SAAD,CAAZ,GAA0BH,YAAY,CAACe,IAA3C,EAAiD,OAAOf,YAAY,CAACW,IAApB;;MAD1B,mCAAjBC,IAAiB;QAAjBA,IAAiB;MAAA;;MAEvBC,OAAO,CAACE,IAAR,CAAaX,MAAb,EAAqB,GAAGQ,IAAxB;MACA,OAAOZ,YAAY,CAACG,SAAD,CAAnB;IACD,CAxBI;;IAyBLa,IAAI,GAAqB;MACvB,IAAIhB,YAAY,CAACG,SAAD,CAAZ,GAA0BH,YAAY,CAACgB,IAA3C,EAAiD,OAAOhB,YAAY,CAACW,IAApB;;MAD1B,mCAAjBC,IAAiB;QAAjBA,IAAiB;MAAA;;MAEvBC,OAAO,CAACG,IAAR,CAAaZ,MAAb,EAAqB,GAAGQ,IAAxB;MACA,OAAOZ,YAAY,CAACG,SAAD,CAAnB;IACD,CA7BI;;IA8BLc,KAAK,GAAqB;MACxB,IAAIjB,YAAY,CAACG,SAAD,CAAZ,GAA0BH,YAAY,CAACiB,KAA3C,EAAkD,OAAOjB,YAAY,CAACW,IAApB;;MAD1B,mCAAjBC,IAAiB;QAAjBA,IAAiB;MAAA;;MAExBC,OAAO,CAACH,GAAR,CAAYN,MAAZ,EAAoB,GAAGQ,IAAvB;MACA,OAAOZ,YAAY,CAACG,SAAD,CAAnB;IACD;;EAlCI,CAAP;AAoCD,CAxCD;;AA0CA,OAAO,MAAMe,MAAM,GAAG,EACpB,GAAGjB,YAAY,EADK;EAEpBD,YAFoB;EAGpBmB,MAAM,EAAElB;AAHY,CAAf"}
1
+ {"version":3,"names":["LogLevelEnum","createLogger","level","arguments","length","undefined","_logLevel","_title","setTitle","title","setLogLevel","lv","getLogLevel","log","none","_len","args","Array","_key","console","error","_len2","_key2","warn","_len3","_key3","info","_len4","_key4","debug","_len5","_key5","Logger","create"],"sources":["logger.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nconst LogLevelEnum = {\n 'none': 0,\n 'log': 1,\n 'error': 2,\n 'warn': 3,\n 'info': 4,\n 'debug': 5,\n};\ntype LogLevel = keyof typeof LogLevelEnum;\n\nconst createLogger = (level: LogLevel = 'warn') => {\n let _logLevel = level;\n let _title = '[UIKit]';\n\n return {\n setTitle(title: string) {\n _title = title;\n },\n setLogLevel(lv: LogLevel) {\n _logLevel = lv;\n },\n getLogLevel() {\n return _logLevel;\n },\n log(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.log) return LogLevelEnum.none;\n console.log(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n error(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.error) return LogLevelEnum.none;\n console.error(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n warn(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.warn) return LogLevelEnum.none;\n console.warn(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n info(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.info) return LogLevelEnum.none;\n console.info(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n debug(...args: unknown[]) {\n if (LogLevelEnum[_logLevel] < LogLevelEnum.debug) return LogLevelEnum.none;\n console.log(_title, ...args);\n return LogLevelEnum[_logLevel];\n },\n };\n};\n\nexport const Logger = {\n ...createLogger(),\n LogLevelEnum,\n create: createLogger,\n};\n"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  // For iOS 12 backwards compatibility
2
2
  require('string.prototype.matchall').shim();
3
-
4
3
  export const urlRegexStrict = /(https?:\/\/|www\.)[-a-zA-Z0-9@:%._+~#=]{1,256}\.(xn--)?[a-z0-9-]{2,20}\b([-a-zA-Z0-9@:%_+[\],.~#?&/=]*[-a-zA-Z0-9@:%_+\]~#?&/=])*/g;
5
4
  export const urlRegexRough = /(https?:\/\/|www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/g;
6
5
  export const phoneRegex = /[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,7}/;
7
6
  export const emailRegex = /\S+@\S+\.\S+/;
8
7
  export const newLineRegex = /\r\n|\r|\n/g;
9
- export const createMentionTemplateRegex = trigger => new RegExp(`(${trigger}[{])(.*?)([}])`, 'g'); // const cases = [
8
+ export const createMentionTemplateRegex = trigger => new RegExp(`(${trigger}[{])(.*?)([}])`, 'g');
9
+
10
+ // const cases = [
10
11
  // {
11
12
  // type: 'urlStrict',
12
13
  // regex: urlRegexStrict,
@@ -1 +1 @@
1
- {"version":3,"names":["require","shim","urlRegexStrict","urlRegexRough","phoneRegex","emailRegex","newLineRegex","createMentionTemplateRegex","trigger","RegExp","replaceWithRegex","text","regex","replacer","keyPrefix","matches","matchAll","founds","map","value","start","index","end","length","groups","matchIndex","items","cursor","forEach","restText","pop","head","slice","mid","match","tail","push","replaceUrlAsComponents","originText","strict"],"sources":["regex.ts"],"sourcesContent":["// For iOS 12 backwards compatibility\nrequire('string.prototype.matchall').shim();\n\nexport const urlRegexStrict =\n /(https?:\\/\\/|www\\.)[-a-zA-Z0-9@:%._+~#=]{1,256}\\.(xn--)?[a-z0-9-]{2,20}\\b([-a-zA-Z0-9@:%_+[\\],.~#?&/=]*[-a-zA-Z0-9@:%_+\\]~#?&/=])*/g;\nexport const urlRegexRough =\n /(https?:\\/\\/|www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/g;\nexport const phoneRegex = /[+]?[(]?[0-9]{3}[)]?[-\\s.]?[0-9]{3}[-\\s.]?[0-9]{4,7}/;\nexport const emailRegex = /\\S+@\\S+\\.\\S+/;\nexport const newLineRegex = /\\r\\n|\\r|\\n/g;\n\nexport const createMentionTemplateRegex = (trigger: string) => new RegExp(`(${trigger}[{])(.*?)([}])`, 'g');\n\n// const cases = [\n// {\n// type: 'urlStrict',\n// regex: urlRegexStrict,\n// },\n// {\n// type: 'urlRough',\n// regex: urlRegexStrict,\n// },\n// {\n// type: 'email',\n// regex: emailRegex,\n// },\n// {\n// type: 'phone',\n// regex: urlRegexStrict,\n// },\n// ];\n\nexport const replaceWithRegex = <T>(\n text: string,\n regex: RegExp,\n replacer: (params: {\n match: string;\n groups: string[];\n matchIndex: number | undefined;\n index: number;\n keyPrefix: string;\n }) => T,\n keyPrefix: string,\n) => {\n const matches = [...text.matchAll(regex)];\n const founds = matches.map((value) => {\n const text = value[0];\n const start = value.index ?? 0;\n const end = start + text.length;\n return { text, start, end, groups: value, matchIndex: value.index };\n });\n\n const items: Array<T | string> = [text];\n let cursor = 0;\n founds.forEach(({ text, start, end, groups, matchIndex }, index) => {\n const restText = items.pop() as string;\n const head = restText.slice(0, start - cursor);\n const mid = replacer({ match: text, groups, matchIndex, index, keyPrefix });\n const tail = restText.slice(end - cursor);\n items.push(head, mid, tail);\n cursor = end;\n });\n return items;\n};\n\nexport const replaceUrlAsComponents = <T>(originText: string, replacer: (url: string) => T, strict?: boolean) => {\n const matches = [...originText.matchAll(strict ? urlRegexStrict : urlRegexRough)];\n const founds = matches.map((value) => {\n const text = value[0];\n const start = value.index ?? 0;\n const end = start + text.length;\n return { text, start, end };\n });\n\n const items: Array<string | T> = [originText];\n let cursor = 0;\n founds.forEach(({ text, start, end }) => {\n const restText = items.pop() as string;\n const head = restText.slice(0, start - cursor);\n const mid = replacer(text);\n const tail = restText.slice(end - cursor);\n items.push(head, mid, tail);\n cursor = end;\n });\n return items;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["require","shim","urlRegexStrict","urlRegexRough","phoneRegex","emailRegex","newLineRegex","createMentionTemplateRegex","trigger","RegExp","replaceWithRegex","text","regex","replacer","keyPrefix","matches","matchAll","founds","map","value","start","index","end","length","groups","matchIndex","items","cursor","forEach","_ref","restText","pop","head","slice","mid","match","tail","push","replaceUrlAsComponents","originText","strict","_ref2"],"sources":["regex.ts"],"sourcesContent":["// For iOS 12 backwards compatibility\nrequire('string.prototype.matchall').shim();\n\nexport const urlRegexStrict =\n /(https?:\\/\\/|www\\.)[-a-zA-Z0-9@:%._+~#=]{1,256}\\.(xn--)?[a-z0-9-]{2,20}\\b([-a-zA-Z0-9@:%_+[\\],.~#?&/=]*[-a-zA-Z0-9@:%_+\\]~#?&/=])*/g;\nexport const urlRegexRough =\n /(https?:\\/\\/|www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/g;\nexport const phoneRegex = /[+]?[(]?[0-9]{3}[)]?[-\\s.]?[0-9]{3}[-\\s.]?[0-9]{4,7}/;\nexport const emailRegex = /\\S+@\\S+\\.\\S+/;\nexport const newLineRegex = /\\r\\n|\\r|\\n/g;\n\nexport const createMentionTemplateRegex = (trigger: string) => new RegExp(`(${trigger}[{])(.*?)([}])`, 'g');\n\n// const cases = [\n// {\n// type: 'urlStrict',\n// regex: urlRegexStrict,\n// },\n// {\n// type: 'urlRough',\n// regex: urlRegexStrict,\n// },\n// {\n// type: 'email',\n// regex: emailRegex,\n// },\n// {\n// type: 'phone',\n// regex: urlRegexStrict,\n// },\n// ];\n\nexport const replaceWithRegex = <T>(\n text: string,\n regex: RegExp,\n replacer: (params: {\n match: string;\n groups: string[];\n matchIndex: number | undefined;\n index: number;\n keyPrefix: string;\n }) => T,\n keyPrefix: string,\n) => {\n const matches = [...text.matchAll(regex)];\n const founds = matches.map((value) => {\n const text = value[0];\n const start = value.index ?? 0;\n const end = start + text.length;\n return { text, start, end, groups: value, matchIndex: value.index };\n });\n\n const items: Array<T | string> = [text];\n let cursor = 0;\n founds.forEach(({ text, start, end, groups, matchIndex }, index) => {\n const restText = items.pop() as string;\n const head = restText.slice(0, start - cursor);\n const mid = replacer({ match: text, groups, matchIndex, index, keyPrefix });\n const tail = restText.slice(end - cursor);\n items.push(head, mid, tail);\n cursor = end;\n });\n return items;\n};\n\nexport const replaceUrlAsComponents = <T>(originText: string, replacer: (url: string) => T, strict?: boolean) => {\n const matches = [...originText.matchAll(strict ? urlRegexStrict : urlRegexRough)];\n const founds = matches.map((value) => {\n const text = value[0];\n const start = value.index ?? 0;\n const end = start + text.length;\n return { text, start, end };\n });\n\n const items: Array<string | T> = [originText];\n let cursor = 0;\n founds.forEach(({ text, start, end }) => {\n const restText = items.pop() as string;\n const head = restText.slice(0, start - cursor);\n const mid = replacer(text);\n const tail = restText.slice(end - cursor);\n items.push(head, mid, tail);\n cursor = end;\n });\n return items;\n};\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ const defaultOpts = {
4
4
  maxLen: 40,
5
5
  separator: '...'
6
6
  };
7
+
7
8
  /**
8
9
  * String truncate util
9
10
  * @param {string} str
@@ -13,10 +14,10 @@ const defaultOpts = {
13
14
  * @param {string} opts.separator default "..."
14
15
  * @returns {string}
15
16
  * */
16
-
17
17
  export const truncate = function (str) {
18
18
  let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOpts;
19
- const options = { ...defaultOpts,
19
+ const options = {
20
+ ...defaultOpts,
20
21
  ...opts
21
22
  };
22
23
  const {
@@ -25,23 +26,20 @@ export const truncate = function (str) {
25
26
  separator
26
27
  } = options;
27
28
  if (str.length <= maxLen) return str;
28
-
29
29
  if (mode === 'head') {
30
30
  return separator + str.slice(-maxLen);
31
31
  }
32
-
33
32
  if (mode === 'mid') {
34
33
  const lead = Math.ceil(maxLen / 2);
35
34
  const trail = Math.floor(maxLen / 2);
36
35
  return str.slice(0, lead) + separator + str.slice(-trail);
37
36
  }
38
-
39
37
  if (mode === 'tail') {
40
38
  return str.slice(0, maxLen) + separator;
41
39
  }
42
-
43
40
  throw new Error('Invalid truncate mode: ' + mode);
44
41
  };
42
+
45
43
  /**
46
44
  * Count truncate util
47
45
  * If count exceed the limit, it comes in the form of "MAX+"
@@ -51,13 +49,13 @@ export const truncate = function (str) {
51
49
  * @param {string} MAX_SUFFIX default +
52
50
  * @returns {string}
53
51
  * */
54
-
55
52
  export const truncatedCount = function (count) {
56
53
  let MAX = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 99;
57
54
  let MAX_SUFFIX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '+';
58
55
  if (count >= MAX) return `${MAX}${MAX_SUFFIX}`;
59
56
  return `${count}`;
60
57
  };
58
+
61
59
  /**
62
60
  * Messages date separator format
63
61
  *
@@ -65,7 +63,6 @@ export const truncatedCount = function (count) {
65
63
  * @param {Locale} [locale]
66
64
  * @returns {string}
67
65
  * */
68
-
69
66
  export const getDateSeparatorFormat = (date, locale) => {
70
67
  if (isThisYear(date)) return format(date, 'MMM dd, yyyy', {
71
68
  locale
@@ -74,6 +71,7 @@ export const getDateSeparatorFormat = (date, locale) => {
74
71
  locale
75
72
  });
76
73
  };
74
+
77
75
  /**
78
76
  * Message time format
79
77
  *
@@ -81,7 +79,6 @@ export const getDateSeparatorFormat = (date, locale) => {
81
79
  * @param {Locale} [locale]
82
80
  * @returns {string}
83
81
  * */
84
-
85
82
  export const getMessageTimeFormat = (date, locale) => {
86
83
  return format(date, 'p', {
87
84
  locale
@@ -1 +1 @@
1
- {"version":3,"names":["format","isThisYear","defaultOpts","mode","maxLen","separator","truncate","str","opts","options","length","slice","lead","Math","ceil","trail","floor","Error","truncatedCount","count","MAX","MAX_SUFFIX","getDateSeparatorFormat","date","locale","getMessageTimeFormat"],"sources":["common.ts"],"sourcesContent":["import type { Locale } from 'date-fns';\nimport { format, isThisYear } from 'date-fns';\n\ntype TruncateMode = 'head' | 'mid' | 'tail';\ntype TruncateOption = { mode: TruncateMode; maxLen: number; separator: string };\nconst defaultOpts: TruncateOption = { mode: 'mid', maxLen: 40, separator: '...' };\n\n/**\n * String truncate util\n * @param {string} str\n * @param {Object} opts Options for truncate\n * @param {'head' | 'mid' | 'tail'} opts.mode default \"mid\"\n * @param {number} opts.maxLen default 40\n * @param {string} opts.separator default \"...\"\n * @returns {string}\n * */\nexport const truncate = (str: string, opts: Partial<TruncateOption> = defaultOpts): string => {\n const options = { ...defaultOpts, ...opts };\n const { maxLen, mode, separator } = options;\n\n if (str.length <= maxLen) return str;\n\n if (mode === 'head') {\n return separator + str.slice(-maxLen);\n }\n\n if (mode === 'mid') {\n const lead = Math.ceil(maxLen / 2);\n const trail = Math.floor(maxLen / 2);\n return str.slice(0, lead) + separator + str.slice(-trail);\n }\n\n if (mode === 'tail') {\n return str.slice(0, maxLen) + separator;\n }\n\n throw new Error('Invalid truncate mode: ' + mode);\n};\n\n/**\n * Count truncate util\n * If count exceed the limit, it comes in the form of \"MAX+\"\n *\n * @param {number} count\n * @param {number} MAX default 99\n * @param {string} MAX_SUFFIX default +\n * @returns {string}\n * */\nexport const truncatedCount = (count: number, MAX = 99, MAX_SUFFIX = '+') => {\n if (count >= MAX) return `${MAX}${MAX_SUFFIX}`;\n return `${count}`;\n};\n\n/**\n * Messages date separator format\n *\n * @param {Date} date\n * @param {Locale} [locale]\n * @returns {string}\n * */\nexport const getDateSeparatorFormat = (date: Date, locale?: Locale): string => {\n if (isThisYear(date)) return format(date, 'MMM dd, yyyy', { locale });\n return format(date, 'E, MMM dd', { locale });\n};\n\n/**\n * Message time format\n *\n * @param {Date} date\n * @param {Locale} [locale]\n * @returns {string}\n * */\nexport const getMessageTimeFormat = (date: Date, locale?: Locale): string => {\n return format(date, 'p', { locale });\n};\n"],"mappings":"AACA,SAASA,MAAT,EAAiBC,UAAjB,QAAmC,UAAnC;AAIA,MAAMC,WAA2B,GAAG;EAAEC,IAAI,EAAE,KAAR;EAAeC,MAAM,EAAE,EAAvB;EAA2BC,SAAS,EAAE;AAAtC,CAApC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,QAAQ,GAAG,UAACC,GAAD,EAAsE;EAAA,IAAxDC,IAAwD,uEAAxBN,WAAwB;EAC5F,MAAMO,OAAO,GAAG,EAAE,GAAGP,WAAL;IAAkB,GAAGM;EAArB,CAAhB;EACA,MAAM;IAAEJ,MAAF;IAAUD,IAAV;IAAgBE;EAAhB,IAA8BI,OAApC;EAEA,IAAIF,GAAG,CAACG,MAAJ,IAAcN,MAAlB,EAA0B,OAAOG,GAAP;;EAE1B,IAAIJ,IAAI,KAAK,MAAb,EAAqB;IACnB,OAAOE,SAAS,GAAGE,GAAG,CAACI,KAAJ,CAAU,CAACP,MAAX,CAAnB;EACD;;EAED,IAAID,IAAI,KAAK,KAAb,EAAoB;IAClB,MAAMS,IAAI,GAAGC,IAAI,CAACC,IAAL,CAAUV,MAAM,GAAG,CAAnB,CAAb;IACA,MAAMW,KAAK,GAAGF,IAAI,CAACG,KAAL,CAAWZ,MAAM,GAAG,CAApB,CAAd;IACA,OAAOG,GAAG,CAACI,KAAJ,CAAU,CAAV,EAAaC,IAAb,IAAqBP,SAArB,GAAiCE,GAAG,CAACI,KAAJ,CAAU,CAACI,KAAX,CAAxC;EACD;;EAED,IAAIZ,IAAI,KAAK,MAAb,EAAqB;IACnB,OAAOI,GAAG,CAACI,KAAJ,CAAU,CAAV,EAAaP,MAAb,IAAuBC,SAA9B;EACD;;EAED,MAAM,IAAIY,KAAJ,CAAU,4BAA4Bd,IAAtC,CAAN;AACD,CArBM;AAuBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMe,cAAc,GAAG,UAACC,KAAD,EAA+C;EAAA,IAA/BC,GAA+B,uEAAzB,EAAyB;EAAA,IAArBC,UAAqB,uEAAR,GAAQ;EAC3E,IAAIF,KAAK,IAAIC,GAAb,EAAkB,OAAQ,GAAEA,GAAI,GAAEC,UAAW,EAA3B;EAClB,OAAQ,GAAEF,KAAM,EAAhB;AACD,CAHM;AAKP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMG,sBAAsB,GAAG,CAACC,IAAD,EAAaC,MAAb,KAAyC;EAC7E,IAAIvB,UAAU,CAACsB,IAAD,CAAd,EAAsB,OAAOvB,MAAM,CAACuB,IAAD,EAAO,cAAP,EAAuB;IAAEC;EAAF,CAAvB,CAAb;EACtB,OAAOxB,MAAM,CAACuB,IAAD,EAAO,WAAP,EAAoB;IAAEC;EAAF,CAApB,CAAb;AACD,CAHM;AAKP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,oBAAoB,GAAG,CAACF,IAAD,EAAaC,MAAb,KAAyC;EAC3E,OAAOxB,MAAM,CAACuB,IAAD,EAAO,GAAP,EAAY;IAAEC;EAAF,CAAZ,CAAb;AACD,CAFM"}
1
+ {"version":3,"names":["format","isThisYear","defaultOpts","mode","maxLen","separator","truncate","str","opts","arguments","length","undefined","options","slice","lead","Math","ceil","trail","floor","Error","truncatedCount","count","MAX","MAX_SUFFIX","getDateSeparatorFormat","date","locale","getMessageTimeFormat"],"sources":["common.ts"],"sourcesContent":["import type { Locale } from 'date-fns';\nimport { format, isThisYear } from 'date-fns';\n\ntype TruncateMode = 'head' | 'mid' | 'tail';\ntype TruncateOption = { mode: TruncateMode; maxLen: number; separator: string };\nconst defaultOpts: TruncateOption = { mode: 'mid', maxLen: 40, separator: '...' };\n\n/**\n * String truncate util\n * @param {string} str\n * @param {Object} opts Options for truncate\n * @param {'head' | 'mid' | 'tail'} opts.mode default \"mid\"\n * @param {number} opts.maxLen default 40\n * @param {string} opts.separator default \"...\"\n * @returns {string}\n * */\nexport const truncate = (str: string, opts: Partial<TruncateOption> = defaultOpts): string => {\n const options = { ...defaultOpts, ...opts };\n const { maxLen, mode, separator } = options;\n\n if (str.length <= maxLen) return str;\n\n if (mode === 'head') {\n return separator + str.slice(-maxLen);\n }\n\n if (mode === 'mid') {\n const lead = Math.ceil(maxLen / 2);\n const trail = Math.floor(maxLen / 2);\n return str.slice(0, lead) + separator + str.slice(-trail);\n }\n\n if (mode === 'tail') {\n return str.slice(0, maxLen) + separator;\n }\n\n throw new Error('Invalid truncate mode: ' + mode);\n};\n\n/**\n * Count truncate util\n * If count exceed the limit, it comes in the form of \"MAX+\"\n *\n * @param {number} count\n * @param {number} MAX default 99\n * @param {string} MAX_SUFFIX default +\n * @returns {string}\n * */\nexport const truncatedCount = (count: number, MAX = 99, MAX_SUFFIX = '+') => {\n if (count >= MAX) return `${MAX}${MAX_SUFFIX}`;\n return `${count}`;\n};\n\n/**\n * Messages date separator format\n *\n * @param {Date} date\n * @param {Locale} [locale]\n * @returns {string}\n * */\nexport const getDateSeparatorFormat = (date: Date, locale?: Locale): string => {\n if (isThisYear(date)) return format(date, 'MMM dd, yyyy', { locale });\n return format(date, 'E, MMM dd', { locale });\n};\n\n/**\n * Message time format\n *\n * @param {Date} date\n * @param {Locale} [locale]\n * @returns {string}\n * */\nexport const getMessageTimeFormat = (date: Date, locale?: Locale): string => {\n return format(date, 'p', { locale });\n};\n"],"mappings":"AACA,SAASA,MAAM,EAAEC,UAAU,QAAQ,UAAU;AAI7C,MAAMC,WAA2B,GAAG;EAAEC,IAAI,EAAE,KAAK;EAAEC,MAAM,EAAE,EAAE;EAAEC,SAAS,EAAE;AAAM,CAAC;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAG,SAAAA,CAACC,GAAW,EAA0D;EAAA,IAAxDC,IAA6B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGP,WAAW;EAC/E,MAAMU,OAAO,GAAG;IAAE,GAAGV,WAAW;IAAE,GAAGM;EAAK,CAAC;EAC3C,MAAM;IAAEJ,MAAM;IAAED,IAAI;IAAEE;EAAU,CAAC,GAAGO,OAAO;EAE3C,IAAIL,GAAG,CAACG,MAAM,IAAIN,MAAM,EAAE,OAAOG,GAAG;EAEpC,IAAIJ,IAAI,KAAK,MAAM,EAAE;IACnB,OAAOE,SAAS,GAAGE,GAAG,CAACM,KAAK,CAAC,CAACT,MAAM,CAAC;EACvC;EAEA,IAAID,IAAI,KAAK,KAAK,EAAE;IAClB,MAAMW,IAAI,GAAGC,IAAI,CAACC,IAAI,CAACZ,MAAM,GAAG,CAAC,CAAC;IAClC,MAAMa,KAAK,GAAGF,IAAI,CAACG,KAAK,CAACd,MAAM,GAAG,CAAC,CAAC;IACpC,OAAOG,GAAG,CAACM,KAAK,CAAC,CAAC,EAAEC,IAAI,CAAC,GAAGT,SAAS,GAAGE,GAAG,CAACM,KAAK,CAAC,CAACI,KAAK,CAAC;EAC3D;EAEA,IAAId,IAAI,KAAK,MAAM,EAAE;IACnB,OAAOI,GAAG,CAACM,KAAK,CAAC,CAAC,EAAET,MAAM,CAAC,GAAGC,SAAS;EACzC;EAEA,MAAM,IAAIc,KAAK,CAAC,yBAAyB,GAAGhB,IAAI,CAAC;AACnD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMiB,cAAc,GAAG,SAAAA,CAACC,KAAa,EAAiC;EAAA,IAA/BC,GAAG,GAAAb,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAAEc,UAAU,GAAAd,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EACtE,IAAIY,KAAK,IAAIC,GAAG,EAAE,OAAQ,GAAEA,GAAI,GAAEC,UAAW,EAAC;EAC9C,OAAQ,GAAEF,KAAM,EAAC;AACnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,sBAAsB,GAAGA,CAACC,IAAU,EAAEC,MAAe,KAAa;EAC7E,IAAIzB,UAAU,CAACwB,IAAI,CAAC,EAAE,OAAOzB,MAAM,CAACyB,IAAI,EAAE,cAAc,EAAE;IAAEC;EAAO,CAAC,CAAC;EACrE,OAAO1B,MAAM,CAACyB,IAAI,EAAE,WAAW,EAAE;IAAEC;EAAO,CAAC,CAAC;AAC9C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAACF,IAAU,EAAEC,MAAe,KAAa;EAC3E,OAAO1B,MAAM,CAACyB,IAAI,EAAE,GAAG,EAAE;IAAEC;EAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -20,7 +20,6 @@ export const getGroupChannelTitle = function (currentUserId, channel) {
20
20
  };
21
21
  export const getGroupChannelPreviewTime = (channel, locale) => {
22
22
  var _channel$lastMessage;
23
-
24
23
  const timestamp = ((_channel$lastMessage = channel.lastMessage) === null || _channel$lastMessage === void 0 ? void 0 : _channel$lastMessage.createdAt) || channel.joinedAt * 1000 || channel.createdAt;
25
24
  if (isToday(timestamp)) return format(timestamp, 'p', {
26
25
  locale
@@ -38,10 +37,8 @@ export const getGroupChannelLastMessage = function (channel) {
38
37
  let MAX_LEN = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 15;
39
38
  const message = channel.lastMessage;
40
39
  if (!message) return EMPTY_MESSAGE;
41
-
42
40
  if (message.isFileMessage()) {
43
41
  const extIdx = message.name.lastIndexOf('.');
44
-
45
42
  if (extIdx > -1) {
46
43
  const file = message.name.slice(0, extIdx);
47
44
  const ext = message.name.slice(extIdx);
@@ -49,20 +46,16 @@ export const getGroupChannelLastMessage = function (channel) {
49
46
  maxLen: MAX_LEN
50
47
  }) + ext;
51
48
  }
52
-
53
49
  return truncate(message.name, {
54
50
  maxLen: MAX_LEN
55
51
  });
56
52
  }
57
-
58
53
  if (message.isUserMessage()) {
59
54
  return message.message ?? EMPTY_MESSAGE;
60
55
  }
61
-
62
56
  if (message.isAdminMessage()) {
63
57
  return message.message ?? EMPTY_MESSAGE;
64
58
  }
65
-
66
59
  return EMPTY_MESSAGE;
67
60
  };
68
61
  //# sourceMappingURL=groupChannel.js.map