import type { isDataArray as isDataArrayFunction } from '../guards/data-array'; import type { isDataObject as isDataObjectFunction } from '../guards/data-object'; import { TDerivedItemValue } from '../types'; import type { createConvertDataArray as createConvertDataArrayFunction } from './convert-data-array'; import type { createConvertDataObject as createConvertDataObjectFunction } from './convert-data-object'; export const createConvertDataValue = ( createConvertDataArray: typeof createConvertDataArrayFunction, createConvertDataObject: typeof createConvertDataObjectFunction, isDataArray: typeof isDataArrayFunction, isDataObject: typeof isDataObjectFunction ) => { const convertDataValue = (value: T): TDerivedItemValue => { if (value === null) { return >{ NULL: true }; } if (typeof value === 'boolean') { return >{ BOOL: value }; } if (typeof value === 'number') { return >{ N: value.toString() }; } if (typeof value === 'string') { return >{ S: value }; } if (isDataArray(value)) { return >{ L: convertDataArray(value) }; } if (isDataObject(value)) { return >{ M: convertDataObject(value) }; } throw new Error('Unsupported data type'); }; const convertDataArray = createConvertDataArray(convertDataValue); const convertDataObject = createConvertDataObject(convertDataValue); return convertDataValue; };