Skip to content

Commit

Permalink
fix: #153 code using a missing dependency lossless-json
Browse files Browse the repository at this point in the history
  • Loading branch information
josdejong committed Sep 29, 2022
1 parent 6d8c3f6 commit 4a34214
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/lib/plugins/query/javascriptQueryLanguage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { createPropertySelector } from '../../utils/pathUtils.js'
import { parseString } from '../../utils/stringUtils.js'
import type { QueryLanguage, QueryLanguageOptions } from '../../types'
import type { JSONValue } from 'immutable-json-patch'
import { isInteger, isSafeNumber } from 'lossless-json'
import { isInteger } from '../../utils/typeUtils.js'

const description = `
<p>
Expand All @@ -27,10 +27,11 @@ function createQuery(json: JSONValue, queryOptions: QueryLanguageOptions): strin
// so a filter value like '5' (text) will match numbers like 5 too.
const actualValueGetter = `item => item${createPropertySelector(filter.path)}`

const filterValue = parseString(filter.value)
const filterValueStr =
typeof parseString(filter.value) === 'string'
typeof filterValue === 'string'
? `'${filter.value}'`
: isInteger(filter.value) && !isSafeNumber(filter.value)
: isInteger(filter.value) && !Number.isSafeInteger(filterValue)
? `${filter.value}n` // bigint
: filter.value

Expand Down
7 changes: 4 additions & 3 deletions src/lib/plugins/query/lodashQueryLanguage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { createPropertySelector, stringifyPath } from '../../utils/pathUtils.js'
import { parseString } from '../../utils/stringUtils.js'
import type { QueryLanguage, QueryLanguageOptions } from '../../types'
import type { JSONPath, JSONValue } from 'immutable-json-patch'
import { isInteger, isSafeNumber } from 'lossless-json'
import { isInteger } from '../../utils/typeUtils.js'

const description = `
<p>
Expand Down Expand Up @@ -33,10 +33,11 @@ function createQuery(json: JSONValue, queryOptions: QueryLanguageOptions): strin
// so a filter value like '5' (text) will match numbers like 5 too.
const actualValueGetter = `item => item${createPropertySelector(filter.path)}`

const filterValue = parseString(filter.value)
const filterValueStr =
typeof parseString(filter.value) === 'string'
typeof filterValue === 'string'
? `'${filter.value}'`
: isInteger(filter.value) && !isSafeNumber(filter.value)
: isInteger(filter.value) && !Number.isSafeInteger(filterValue)
? `${filter.value}n` // bigint
: filter.value

Expand Down
9 changes: 9 additions & 0 deletions src/lib/utils/typeUtils.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { strictEqual } from 'assert'
import {
isInteger,
isObject,
isObjectOrArray,
isStringContainingPrimitiveValue,
Expand Down Expand Up @@ -89,4 +90,12 @@ describe('typeUtils', () => {
strictEqual(isStringContainingPrimitiveValue('false', JSON), true)
strictEqual(isStringContainingPrimitiveValue('null', JSON), true)
})

it('isInteger', () => {
strictEqual(isInteger('4250'), true)
strictEqual(isInteger('-4250'), true)
strictEqual(isInteger('2.345'), false)
strictEqual(isInteger('2a'), false)
strictEqual(isInteger('abc'), false)
})
})
9 changes: 9 additions & 0 deletions src/lib/utils/typeUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,12 @@ export function stringConvert(str: string, parser: JSONParser): unknown {
export function isStringContainingPrimitiveValue(str: unknown, parser: JSONParser): boolean {
return typeof str === 'string' && typeof stringConvert(str, parser) !== 'string'
}

/**
* Test whether a string contains an integer number
*/
export function isInteger(value: string): boolean {
return INTEGER_REGEX.test(value)
}

const INTEGER_REGEX = /^-?[0-9]+$/

0 comments on commit 4a34214

Please sign in to comment.