} from 'date-fns'
import { Constants } from './Constants.js'
-import { type TimestampedData, WebSocketCloseEventStatusString } from '../types/index.js'
+import {
+ type EmptyObject,
+ type TimestampedData,
+ WebSocketCloseEventStatusString
+} from '../types/index.js'
export const logPrefix = (prefixString = ''): string => {
return `${new Date().toLocaleString()}${prefixString}`
export const convertToDate = (
value: Date | string | number | undefined | null
-): Date | undefined | null => {
+): Date | undefined => {
if (value == null) {
- return value
+ return undefined
}
if (isDate(value)) {
return value
return clone as O
}
if (value instanceof Date) {
- return new Date(value.valueOf()) as O
+ return new Date(value.getTime()) as O
}
if (typeof value !== 'object' || value === null) {
return value as unknown as O
return deepClone(object as CloneableData) as T
}
+/**
+ * Detects whether the given value is an asynchronous function or not.
+ *
+ * @param fn - Unknown value.
+ * @returns `true` if `fn` was an asynchronous function, otherwise `false`.
+ * @internal
+ */
+export const isAsyncFunction = (fn: unknown): fn is (...args: unknown[]) => Promise<unknown> => {
+ return typeof fn === 'function' && fn.constructor.name === 'AsyncFunction'
+}
+
export const isObject = (value: unknown): value is object => {
return value != null && typeof value === 'object' && !Array.isArray(value)
}
-export const isEmptyObject = (object: object): object is Record<string, never> => {
+export const isEmptyObject = (object: object): object is EmptyObject => {
if (object.constructor !== Object) {
return false
}