Fuse: value.trim() in not function at types.js:40

Created on 21 Jul 2020  路  3Comments  路  Source: krisk/Fuse

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 Reproduction

const Fuse = require('fuse.js')

const data = [{first: false}]
const options = {keys: [{name: 'first'}]}
const fuse = new Fuse(data, options)

fuse.search('a')

Additional context

else if below is always true
https://github.com/krisk/Fuse/blob/90f153793432997654a2a006e0f01753cd23c9ff/src/helpers/get.js#L28

since 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 with obj = 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

bug

All 3 comments

Hi @krisk , I just upgraded to 6.4.1 and seem to encounter this error.

Screenshot from 2020-09-03 12-31-49

Screenshot from 2020-09-03 12-32-11

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 ()

Was this page helpful?
0 / 5 - 0 ratings