@factorypure/client-helpers 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -37,3 +37,7 @@ export declare const filterScrapeResults: ({ scrapeResults, variant, filters, fi
37
37
  filters: ScrapeFiltersType;
38
38
  filterOptions?: FilterOptionsType;
39
39
  }) => z.infer<any>[];
40
+ export declare const calculateIgnoreStatus: (result: ScrapeResultsType, variant: {
41
+ id: number;
42
+ sku?: string;
43
+ }, result_ignore_keys: string[] | null) => boolean;
package/dist/index.js CHANGED
@@ -61,7 +61,7 @@ export const filterScrapeResults = ({ scrapeResults, variant, filters, filterOpt
61
61
  filteredResults = filterFoundProductIdExclusions(filteredResults, filters.found_id_exclusions);
62
62
  }
63
63
  if (filterOptions.exclude_ignored_keys_enabled) {
64
- filteredResults = filterIgnoredResults(filteredResults, variant.id, filters.result_ignore_keys);
64
+ filteredResults = filterIgnoredResults(filteredResults);
65
65
  }
66
66
  if (filterOptions.price_filter_enabled) {
67
67
  filteredResults = filterPriceOutliers(filteredResults, variant.price, filters.showHighPriceOutliers, filters.showLowPriceOutliers);
@@ -183,8 +183,18 @@ const handleIndexSearch = (dataToSearch, filters, variant, filterOptions) => {
183
183
  };
184
184
  const filterLinkedElsewhereResults = (results, variantId) => {
185
185
  const filtered = results.filter((result) => {
186
- const productLinkedElsewhere = result.linked_variant_ids?.length > 0 &&
187
- !result.linked_variant_ids.includes(variantId);
186
+ const linkedVariantIds = result.linked_variant_ids || [];
187
+ let parsedLinkedVariantIds = linkedVariantIds;
188
+ if (!Array.isArray(linkedVariantIds)) {
189
+ try {
190
+ parsedLinkedVariantIds = JSON.parse(linkedVariantIds);
191
+ }
192
+ catch {
193
+ parsedLinkedVariantIds = [];
194
+ }
195
+ }
196
+ const productLinkedElsewhere = linkedVariantIds.length > 0 &&
197
+ !linkedVariantIds.includes(variantId);
188
198
  if (productLinkedElsewhere) {
189
199
  return false;
190
200
  }
@@ -203,15 +213,9 @@ const filterFoundProductIdExclusions = (results, found_id_exclusions) => {
203
213
  });
204
214
  return filtered;
205
215
  };
206
- const filterIgnoredResults = (results, variantId, result_ignore_keys) => {
216
+ const filterIgnoredResults = (results) => {
207
217
  const filtered = results.filter((item) => {
208
- if (result_ignore_keys && result_ignore_keys.length) {
209
- const resultKey = `${variantId}-${item.title}-${item.extracted_price}-${item.source}`;
210
- if (result_ignore_keys.includes(resultKey)) {
211
- return false;
212
- }
213
- }
214
- return true;
218
+ return item.ignore_result ? false : true;
215
219
  });
216
220
  return filtered;
217
221
  };
@@ -270,3 +274,39 @@ const filterDuplicateResults = (results) => {
270
274
  const filtered = Object.values(filteredUniqueResultsMap);
271
275
  return filtered;
272
276
  };
277
+ export const calculateIgnoreStatus = (result, variant, result_ignore_keys) => {
278
+ let ignore = false;
279
+ const resultKey = `${variant.id}-${result.title}-${result.extracted_price}-${result.source}`;
280
+ if (result_ignore_keys && result_ignore_keys.includes(resultKey)) {
281
+ ignore = true;
282
+ }
283
+ if (result.details_and_offers &&
284
+ result.details_and_offers.includes("Out of stock online")) {
285
+ ignore = true;
286
+ }
287
+ const refurbishedKeywords = [
288
+ "refurbished",
289
+ "renewed",
290
+ "reconditioned",
291
+ "refurb",
292
+ "remanufactured",
293
+ "scratch",
294
+ "dent",
295
+ "used",
296
+ `${variant.sku}-R`,
297
+ `${variant.sku}-R`.toLowerCase(),
298
+ `${variant.sku}-R`.toUpperCase(),
299
+ `${variant.sku?.toLowerCase()}-R`,
300
+ `${variant.sku?.toUpperCase()}-R`,
301
+ ];
302
+ const normalizedTitle = result.title
303
+ .toLowerCase()
304
+ .replace(/[^a-z0-9-]/g, " ");
305
+ const isRefurbished = refurbishedKeywords.some((keyword) => normalizedTitle.split(/\s+/).includes(keyword)) ||
306
+ (result.details_and_offers &&
307
+ result.details_and_offers.includes("Pre-owned"));
308
+ if (isRefurbished) {
309
+ ignore = true;
310
+ }
311
+ return ignore;
312
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@factorypure/client-helpers",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",