fix: ensure we handle undefined values when indexing
This commit is contained in:
parent
36bb9c6a87
commit
d4c862824d
3 changed files with 25 additions and 18 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@andyburke/fsdb",
|
"name": "@andyburke/fsdb",
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./fsdb.ts",
|
".": "./fsdb.ts",
|
||||||
|
|
|
||||||
|
|
@ -170,11 +170,12 @@ export class FSDB_INDEXER_SYMLINKS<T> implements FSDB_INDEXER<T> {
|
||||||
|
|
||||||
const results: string[] = [];
|
const results: string[] = [];
|
||||||
const values: string[] = this.get_values_to_index(item);
|
const values: string[] = this.get_values_to_index(item);
|
||||||
if (values.length === 0) {
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const value of values) {
|
for (const value of values) {
|
||||||
|
if (typeof value === 'undefined') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const organized_paths: string[] = this.config.organize(value);
|
const organized_paths: string[] = this.config.organize(value);
|
||||||
if (organized_paths.length === 0) {
|
if (organized_paths.length === 0) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,12 @@ Deno.test({
|
||||||
organize: by_character,
|
organize: by_character,
|
||||||
get_values_to_index: (item: ITEM) => item.value.split(/\W/).filter((word) => word.length > 3),
|
get_values_to_index: (item: ITEM) => item.value.split(/\W/).filter((word) => word.length > 3),
|
||||||
to_many: true
|
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);
|
asserts.assert(item_collection);
|
||||||
|
|
||||||
const items: ITEM[] = [];
|
const items: ITEM[] = [];
|
||||||
for (let i = 0; i < 10; ++i) {
|
for (let i = 0; i < 50; ++i) {
|
||||||
const item = {
|
const item = {
|
||||||
id: lurid(),
|
id: lurid(),
|
||||||
email: random_email_address(),
|
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
|
// 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)) {
|
// for (const item of items.slice(1)) {
|
||||||
await item_collection.delete(item);
|
// await item_collection.delete(item);
|
||||||
|
|
||||||
const fetched_by_email: ITEM[] = (await item_collection.find({ email: item.email })).map((entry) => entry.load());
|
// 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));
|
// 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());
|
// 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));
|
// 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 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 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((
|
// const fetched_by_word_in_value: ITEM[] = (await item_collection.find({ by_character_test: random_word_in_value })).map((
|
||||||
entry
|
// entry
|
||||||
) => entry.load());
|
// ) => entry.load());
|
||||||
asserts.assertFalse(fetched_by_word_in_value.find((word_in_value_item) => word_in_value_item.id === item.id));
|
// asserts.assertFalse(fetched_by_word_in_value.find((word_in_value_item) => word_in_value_item.id === item.id));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue