function processLine(line: string) {
const item: Item = JSON.parse(line);
let image_url;
let imageId = item.main_image_id == "" ? null : item.main_image_id;
let imagePath = imageHashMap.get(imageId);
let price = [10, 25, 50, 100, 500, 1000][Math.floor(Math.random() * 6)];
if (imagePath != null) {
image_url = `https://amazon-berkeley-objects.s3.amazonaws.com/images/small/${imagePath}`;
}
let searchableString = "";
// Safely adds a field to the searchable string if it exists
const addField = (
field: string | undefined,
prefix: string = "",
postfix: string = "\n"
) => {
if (field) {
searchableString += `${prefix}${field}${postfix}`;
}
};
addField(price?.toString(), "Price: $");
// Process each field with a safe check and appropriate formatting
addField(item.brand?.[0]?.value, "Brand: ");
addField(item.item_name?.[0]?.value, "Product Name: ");
item.bullet_point?.forEach((bp) => addField(bp.value, "", ";"));
addField(item.color?.[0]?.value, "Color: ");
addField(item.model_name?.[0]?.value, "Model Name: ");
addField(item.model_number?.[0]?.value, "Model Number: ");
// For numerical fields, ensure existence before converting to string
if (item.model_year?.[0]?.value !== undefined) {
addField(item.model_year[0].value.toString(), "Model Year: ");
}
addField(item.product_type?.[0]?.value, "Product Type: ");
addField(item.style?.[0]?.value, "Style: ");
item.item_keywords?.forEach((kw) => addField(kw.value, "", ";"));
addField(item.country, "Country: ");
addField(item.marketplace, "Marketplace: ");
addField(item.domain_name, "Domain: ");
const metadata: Partial<Item> = { ...item };
metadata.image_url = image_url;
metadata.price = price;
const chunkData: Chunk = {
chunk_html: searchableString.trim(),
link: `https://${item.domain_name}/dp/${item.item_id}`,
tracking_id: item.item_id,
tag_set: item.item_keywords?.map((kw) => kw.value),
metadata,
image_urls: [ image_url ?? "" ],
upsert_by_tracking_id: true,
};
return chunkData;
}