Closed imanjra closed 4 years ago
Hi @krisk , I just upgraded to 6.4.1 and seem to encounter this error.
My items look like;
[
{ value: 'placement lesson' },
{
value: {
grade: 1,
lessonNumber: "1",
name: "Lesson 1",
},
},
]
My options look like;
{
threshold: 0.3,
ignoreLocation: true,
keys: ['value', 'value.name', 'value.lessonNumber'],
}
value
is included in the keys list because sometimes in our data, value
is a string, other times it's an object.
Downgrading to < 6.3.0 does fix the issue for now. Is my usage a supported use-case or do I need to refactor my code?
I'm having this problem when the lib try read a instance of Date... someone knows how to fix?
We can probably get a treatment. When receiving an object, do a JSON.stringify ()
This (jest) test throws the error:
import Fuse from 'fuse.js';
import { Books } from './fixtures/Books';
describe('Fuse.js functions as expected', () => {
const fuse = new Fuse(Books, {
includeScore: true,
keys: ['author', 'tags']
});
it('finds the correct assets', () => {
const results = fuse.search('tion');
console.log({ results });
});
})
where Books
is
export const Books = [
{
title: "Old Man's War",
author: 'John Scalzi',
tags: ['fiction']
},
{
title: 'The Lock Artist',
author: 'Steve',
tags: ['thriller']
}
];
The full stack trace is:
[FAIL] src/utils/fuse.spec.ts
● Test suite failed to run
TypeError: value.trim is not a function
3 |
4 | describe('Fuse.js functions as expected', () => {
> 5 | const fuse = new Fuse(Books, {
| ^
6 | includeScore: true,
7 | keys: ['author', 'tags']
8 | });
at isBlank (node_modules/fuse.js/dist/fuse.common.js:249:17)
at node_modules/fuse.js/dist/fuse.common.js:648:21
at Array.forEach (<anonymous>)
at FuseIndex._addObject (node_modules/fuse.js/dist/fuse.common.js:604:17)
at node_modules/fuse.js/dist/fuse.common.js:542:18
at Array.forEach (<anonymous>)
at FuseIndex.create (node_modules/fuse.js/dist/fuse.common.js:541:19)
at createIndex (node_modules/fuse.js/dist/fuse.common.js:680:11)
at Fuse.setCollection (node_modules/fuse.js/dist/fuse.common.js:1909:32)
at new Fuse (node_modules/fuse.js/dist/fuse.common.js:1897:10)
at packages/project/src/utils/fuse.spec.ts:5:16
at Object.<anonymous> (packages/project/src/utils/fuse.spec.ts:4:1)
at runMicrotasks (<anonymous>)
at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)
at runJest (node_modules/@jest/core/build/runJest.js:387:19)
I am getting the same error using a custom react app with the ESM build.
However no issues using CodeSandbox with the exact same code.
We are also seeing this same issue, but with Date objects.
Currently we are reverting back to 6.2.1 to avoid the issue.
It looks like this commit fixed an issue with booleans but Dates weren't covered by the fix.
Describe the bug
A clear and concise description of what the bug is. Non-number/string value is allowed through helper/get.js causes runtime error `value.trim() is not a function` at https://github.com/krisk/Fuse/blob/a2d62fb6b1ad4cb71c485632df4670baf6f32a6a/src/helpers/types.js#L40 Error: ``` node_modules/fuse.js/dist/fuse.common.js:242 return !value.trim().length; ^ TypeError: value.trim is not a function ``` ### Version The Fuse.js version where this bug is happening. **6.3.0 and above** ### Is this a regression? Yes, the previous version in which this bug was not present was: ... **Yes, version below 6.3.0** Bug seem to have been introduced by https://github.com/krisk/Fuse/commit/938db2aebb1a5b2d610cd8bb3258ff701baa46fb ### 🔬Minimal ReproductionAdditional context
else if
below is always true https://github.com/krisk/Fuse/blob/90f153793432997654a2a006e0f01753cd23c9ff/src/helpers/get.js#L28since line below returns an array with at least one item https://github.com/krisk/Fuse/blob/90f153793432997654a2a006e0f01753cd23c9ff/src/tools/KeyStore.js#L74
Which leads into another
deepGet
withobj = false
which leads to if block below and pushing non-string/number value into list https://github.com/krisk/Fuse/blob/90f153793432997654a2a006e0f01753cd23c9ff/src/helpers/get.js#L9