-import { getRandomValues, randomBytes, randomInt, randomUUID } from 'node:crypto'
+import { getRandomValues, randomBytes, randomUUID } from 'node:crypto'
import { env, nextTick } from 'node:process'
import {
minutesToSeconds,
secondsToMilliseconds
} from 'date-fns'
+import { is } from 'rambda'
import {
type JsonType,
type TimestampedData,
WebSocketCloseEventStatusString
} from '../types/index.js'
-import { Constants } from './Constants.js'
export const logPrefix = (prefixString = ''): string => {
return `${new Date().toLocaleString()}${prefixString}`
if (isDate(value)) {
return value
}
- if (isString(value) || typeof value === 'number') {
+ if (typeof value === 'string' || typeof value === 'number') {
const valueToDate = new Date(value)
if (isNaN(valueToDate.getTime())) {
throw new Error(`Cannot convert to date: '${value}'`)
return Math.trunc(value)
}
let changedValue: number = value as number
- if (isString(value)) {
+ if (typeof value === 'string') {
changedValue = parseInt(value)
}
if (isNaN(changedValue)) {
return 0
}
let changedValue: number = value as number
- if (isString(value)) {
+ if (typeof value === 'string') {
changedValue = parseFloat(value)
}
if (isNaN(changedValue)) {
// Check the type
if (typeof value === 'boolean') {
return value
- } else if (isString(value) && (value.toLowerCase() === 'true' || value === '1')) {
+ } else if (typeof value === 'string' && (value.toLowerCase() === 'true' || value === '1')) {
result = true
} else if (typeof value === 'number' && value === 1) {
result = true
return (randomBytes(4).readUInt32LE() / 0xffffffff) * (max - min) + min
}
-export const getRandomInteger = (max = Constants.MAX_RANDOM_INTEGER, min = 0): number => {
- max = Math.floor(max)
- if (min !== 0) {
- min = Math.ceil(min)
- return Math.floor(randomInt(min, max + 1))
- }
- return Math.floor(randomInt(max + 1))
-}
-
/**
* Rounds the given number to the given scale.
* The rounding is done using the "round half away from zero" method.
* @internal
*/
export const isAsyncFunction = (fn: unknown): fn is (...args: unknown[]) => Promise<unknown> => {
- return typeof fn === 'function' && fn.constructor.name === 'AsyncFunction'
+ return is(Function, fn) && fn.constructor.name === 'AsyncFunction'
}
export const isObject = (value: unknown): value is object => {
- return value != null && typeof value === 'object' && !Array.isArray(value)
+ return value != null && !Array.isArray(value) && is(Object, value)
}
export const hasOwnProp = (value: unknown, property: PropertyKey): boolean => {
return env.VCAP_APPLICATION != null
}
-const isString = (value: unknown): value is string => {
- return typeof value === 'string'
-}
-
export const isNotEmptyString = (value: unknown): value is string => {
- return isString(value) && value.trim().length > 0
+ return typeof value === 'string' && value.trim().length > 0
}
export const isNotEmptyArray = (value: unknown): value is unknown[] => {
return JSON.stringify(
object,
(_, value: Record<string, unknown>) => {
- if (value instanceof Map) {
+ if (is(Map, value)) {
switch (mapFormat) {
case MapStringifyFormat.object:
return { ...Object.fromEntries<Map<string, Record<string, unknown>>>(value.entries()) }
default:
return [...value]
}
- } else if (value instanceof Set) {
+ } else if (is(Set, value)) {
return [...value] as JsonType[]
}
return value