'positions' is sometimes undefined
peterbe opened this issue · 1 comments
I just tried installing 0.4.1 and using it. See mdn/yari#4484
Thankfully I manually tested it in my browser too because I managed to stumble into an error that I really struggle to reproduce now. I wasn't able to capture what the input was when it happened.
But basically, the result's .positions
was undefined
. I would have expected it to be a new Set()
at least.
Looking at this code:
fzf-for-js/src/lib/matchers.ts
Line 49 in 3de0f96
Set
but only if it's already null
.
The reason I noticed was that I have this code:
function BreadcrumbURI({
uri,
positions,
}: {
uri: string;
positions: Set<number>;
}) {
if (positions.size) {
const chars = uri.split("");
return (
<small>
{chars.map((char, i) => {
if (positions.has(i)) {
return <mark key={i}>{char}</mark>;
} else {
return <span key={i}>{char}</span>;
}
})}
</small>
);
}
....
and so it would fail hard on if (positions.size) {
because it's like doing if (undefined.size) {
.
My TypeScript is unable to notice because it thinks that FzfResultItem
always contains a .positions
that is a Set<number>
.
User error!
I misinterpreted my own code. So sorry for the distraction.