UNPKG

magento-api-rest-next

Version:

A NodeJS wrapper to work with Magento REST APIs.

97 lines (94 loc) 4.05 kB
const objectTransform = (obj, parent = false) => { let myOperators = ["$or", "$from", "$to", "$after", "$before", "$null"]; let ignoreKeys = ["$sort", "$page", "$perPage"]; let filters = {} let partialFilters = []; if (((obj["$from"]) && (!obj["$to"])) || ((obj["$to"]) && (!obj["$from"]))) { throw new Error("\"$from\" operator requires \"$to\"."); } else { let allFilters = []; for (let key in obj) { let validFilters = true; if (key == "$sort") { let sortFilters = [] for (let key2 in obj[key]) { let filter = { "field": key2, "direction": obj[key][key2] }; sortFilters.push(filter) } filters.sort_orders = sortFilters; } else if (key == "$perPage") { filters.page_size = obj[key]; } else if (key == "$page") { filters.current_page = obj[key]; } else { if (myOperators.includes(key) && !ignoreKeys.includes(key)) { let filter = {}; if (key == "$or") { if (!parent) { if (obj[key].length) { let arr = []; obj[key].map((o) => { validFilters = false; let temp_filter = objectTransform(o, true); arr.push(temp_filter[0]); }); allFilters.push({ "filters": arr }) } else { filter = objectTransform(obj[key], true); } } else { throw new Error('Cannot execute nested OR searches.') } } else if (key == "$from") { filter = { "field": "created_at", "value": obj[key].toString(), "condition_type": "from" } } else if (key == "$to") { filter = { "field": "created_at", "value": obj[key].toString(), "condition_type": "to" } } else if (key == "$after") { filter = { "field": "created_at", "value": obj[key].toString(), "condition_type": "gt" } } else if (key == "$before") { filter = { "field": "created_at", "value": obj[key].toString(), "condition_type": "lt" } } else { throw new Error("Invalid Operation Key."); } if (validFilters) { partialFilters.push(filter); allFilters.push({ "filters": [].concat(filter) }) } } else { let filter = { "field": key, "value": obj[key].toString(), "condition_type": "eq" } partialFilters.push(filter); allFilters.push({ "filters": [].concat(filter) }) } } } if (parent) { return partialFilters; } filters.filter_groups = allFilters; return filters; } } module.exports = objectTransform;