diff --git a/src/lib/utils/typeUtils.test.ts b/src/lib/utils/typeUtils.test.ts index c957ed15..ab3deae3 100644 --- a/src/lib/utils/typeUtils.test.ts +++ b/src/lib/utils/typeUtils.test.ts @@ -87,6 +87,8 @@ describe('typeUtils', () => { it('valueType', () => { strictEqual(valueType(2, JSON), 'number') + strictEqual(valueType(-2, JSON), 'number') + strictEqual(valueType(2.4e3, JSON), 'number') strictEqual(valueType('some text', JSON), 'string') strictEqual(valueType(true, JSON), 'boolean') strictEqual(valueType(false, JSON), 'boolean') @@ -96,12 +98,15 @@ describe('typeUtils', () => { strictEqual(valueType(123n, JSON), 'number') strictEqual(valueType(new Date(), JSON), 'unknown') strictEqual(valueType(new LosslessNumber('123'), LosslessJSONParser as JSON), 'number') + strictEqual(valueType(new LosslessNumber('2.4e3'), LosslessJSONParser as JSON), 'number') + strictEqual(valueType(new LosslessNumber('-4.0'), LosslessJSONParser as JSON), 'number') }) it('isStringContainingPrimitiveValue', () => { strictEqual(isStringContainingPrimitiveValue(22, JSON), false) strictEqual(isStringContainingPrimitiveValue('text', JSON), false) strictEqual(isStringContainingPrimitiveValue('2.4', JSON), true) + strictEqual(isStringContainingPrimitiveValue('-2.4', JSON), true) strictEqual(isStringContainingPrimitiveValue('2e3', JSON), true) strictEqual(isStringContainingPrimitiveValue('true', JSON), true) strictEqual(isStringContainingPrimitiveValue('false', JSON), true) diff --git a/src/lib/utils/typeUtils.ts b/src/lib/utils/typeUtils.ts index e14ff787..90cd66ac 100644 --- a/src/lib/utils/typeUtils.ts +++ b/src/lib/utils/typeUtils.ts @@ -1,6 +1,6 @@ // TODO: unit test typeUtils.js -import { isDigit, isNumber } from './numberUtils.js' +import { isNumber } from './numberUtils.js' import type { JSONParser } from '../types.js' /** @@ -118,9 +118,9 @@ export function valueType(value: unknown, parser: JSONParser): string { return 'object' } - // unknown type. Try out what stringfying results in + // unknown type (like a LosslessNumber). Try out what stringfying results in const valueStr = parser.stringify(value) - if (valueStr && isDigit(valueStr[0])) { + if (valueStr && isNumber(valueStr)) { return 'number' } if (valueStr === 'true' || valueStr === 'false') {