fix: ensure we handle undefined values when indexing

This commit is contained in:
Andy Burke 2025-09-21 17:16:50 -07:00
parent 36bb9c6a87
commit d4c862824d
3 changed files with 25 additions and 18 deletions

View file

@ -1,6 +1,6 @@
{
"name": "@andyburke/fsdb",
"version": "1.0.2",
"version": "1.0.3",
"license": "MIT",
"exports": {
".": "./fsdb.ts",

View file

@ -170,11 +170,12 @@ export class FSDB_INDEXER_SYMLINKS<T> implements FSDB_INDEXER<T> {
const results: string[] = [];
const values: string[] = this.get_values_to_index(item);
if (values.length === 0) {
return results;
}
for (const value of values) {
if (typeof value === 'undefined') {
continue;
}
const organized_paths: string[] = this.config.organize(value);
if (organized_paths.length === 0) {
continue;

View file

@ -44,6 +44,12 @@ Deno.test({
organize: by_character,
get_values_to_index: (item: ITEM) => item.value.split(/\W/).filter((word) => word.length > 3),
to_many: true
}),
by_possibly_undefined: new FSDB_INDEXER_SYMLINKS<ITEM>({
name: 'by_possibly_undefined',
organize: by_character,
get_values_to_index: (item: ITEM) => item.email.indexOf('.com') > 0 ? [item.email] : [],
to_many: true
})
}
});
@ -51,7 +57,7 @@ Deno.test({
asserts.assert(item_collection);
const items: ITEM[] = [];
for (let i = 0; i < 10; ++i) {
for (let i = 0; i < 50; ++i) {
const item = {
id: lurid(),
email: random_email_address(),
@ -88,21 +94,21 @@ Deno.test({
}
// leave one item behind so the whole db for this test doesn't get cleaned up so I can hand-review it
for (const item of items.slice(1)) {
await item_collection.delete(item);
// for (const item of items.slice(1)) {
// await item_collection.delete(item);
const fetched_by_email: ITEM[] = (await item_collection.find({ email: item.email })).map((entry) => entry.load());
asserts.assertFalse(fetched_by_email.find((email_item) => email_item.id === item.id));
// const fetched_by_email: ITEM[] = (await item_collection.find({ email: item.email })).map((entry) => entry.load());
// asserts.assertFalse(fetched_by_email.find((email_item) => email_item.id === item.id));
const fetched_by_phone: ITEM[] = (await item_collection.find({ phone: item.phone })).map((entry) => entry.load());
asserts.assertFalse(fetched_by_phone.find((phone_item) => phone_item.id === item.id));
// const fetched_by_phone: ITEM[] = (await item_collection.find({ phone: item.phone })).map((entry) => entry.load());
// asserts.assertFalse(fetched_by_phone.find((phone_item) => phone_item.id === item.id));
const words_in_value: string[] = item.value.split(/\W/).filter((word) => word.length > 3);
const random_word_in_value: string = words_in_value[Math.floor(Math.random() * words_in_value.length)];
const fetched_by_word_in_value: ITEM[] = (await item_collection.find({ by_character_test: random_word_in_value })).map((
entry
) => entry.load());
asserts.assertFalse(fetched_by_word_in_value.find((word_in_value_item) => word_in_value_item.id === item.id));
}
// const words_in_value: string[] = item.value.split(/\W/).filter((word) => word.length > 3);
// const random_word_in_value: string = words_in_value[Math.floor(Math.random() * words_in_value.length)];
// const fetched_by_word_in_value: ITEM[] = (await item_collection.find({ by_character_test: random_word_in_value })).map((
// entry
// ) => entry.load());
// asserts.assertFalse(fetched_by_word_in_value.find((word_in_value_item) => word_in_value_item.id === item.id));
// }
}
});