From 41d1d023f26eb313843c7022430d64463f680861 Mon Sep 17 00:00:00 2001 From: Sourab Hossain Date: Thu, 3 Nov 2022 17:26:34 +0600 Subject: [PATCH 1/4] Update: code refactor --- sequelizeQueryParser.js | 92 ++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 56 deletions(-) diff --git a/sequelizeQueryParser.js b/sequelizeQueryParser.js index 797a3af..fda9c81 100644 --- a/sequelizeQueryParser.js +++ b/sequelizeQueryParser.js @@ -13,7 +13,7 @@ const Promise = require('bluebird'); * @param {*} db * @returns object {parse} */ -module.exports = function (db) { +module.exports = (db) => { const Op = db.Sequelize.Op; const operators = { @@ -46,21 +46,20 @@ module.exports = function (db) { } /** - * Split '.' or ',' seperated strings to array + * Split '.' or ',' separated strings to array * @param {JSON} obj * @param {array} array */ const splitStringAndBuildArray = (obj, array) => { - let elements = obj.split(','); + const elements = obj.split(','); - if (elements && elements.length > 0) { - elements.forEach(element => { - var fields = element.split('.'); - if (fields && fields.length > 0) { - array.push(fields) - } - }); - } + elements.forEach(element => { + const fields = element.split('.'); + + if (fields?.length > 0) { + array.push(fields) + } + }); } /** @@ -78,8 +77,7 @@ module.exports = function (db) { query.forEach(obj => { splitStringAndBuildArray(obj, array); }); - } - else { + } else { splitStringAndBuildArray(query, array); } } @@ -94,43 +92,33 @@ module.exports = function (db) { * @param {Sequelize.op} op */ const replaceKeyWithOperator = (json, key, op) => { - let value = json[key]; + const value = json[key]; delete json[key]; json[op] = value; } /** - * Iteratively replace json keys with Sequelize formated query operators. + * Iteratively replace json keys with Sequelize formatted query operators. * @param {JSON} json next json */ const iterativeReplace = (json) => { - Object.keys(json).forEach(function (key) { + Object.keys(json).forEach((key) => { if (json[key] !== null && typeof json[key] === 'object') { - - // console.debug("key: ", key); - let op = operators[key]; - // console.debug("operation: ", op); + const op = operators[key]; if (op) { replaceKeyWithOperator(json, key, op); - // console.debug("next: ", JSON.stringify(json[op], null, 4)); iterativeReplace(json[op]); - } - else { - // console.debug("next: ", JSON.stringify(json[key], null, 4)); + } else { iterativeReplace(json[key]); } } else if (key == 'model' && db[json[key]] != null) { - // json['as'] = json[key].replace(/^./, char => char.toLowerCase());// /^\w/ - json['model'] = db[json[key]]; - } - else { - let op = operators[key]; + json.model = db[json[key]]; + } else { + const op = operators[key]; if (op) replaceKeyWithOperator(json, key, op); } - - // console.debug("After Key:", key, " Query fields: ", JSON.stringify(json, null, 4)) }); } @@ -141,8 +129,7 @@ module.exports = function (db) { */ const unescapeEscapedQuery = (query) => { const queryString = query.toString(); - const queryStringUnescaped = unescape(queryString); - return queryStringUnescaped; + return unescape(queryString); } /** @@ -151,9 +138,8 @@ module.exports = function (db) { * @returns {JSON} sequelize formatted DB query params JSON */ const parseQueryFields = (query) => { - let json = JSON.parse(unescapeEscapedQuery(query)); + const json = JSON.parse(unescapeEscapedQuery(query)); iterativeReplace(json); - // console.debug("Resultent query fields: ", json); return json; } @@ -163,9 +149,8 @@ module.exports = function (db) { * @returns {JSON} sequelize formatted DB include params JSON */ const parseIncludeFields = (query) => { - let json = JSON.parse(unescapeEscapedQuery(query)); + const json = JSON.parse(unescapeEscapedQuery(query)); iterativeReplace(json); - // console.debug("Resultent include fields: ", json); return json; } @@ -175,23 +160,18 @@ module.exports = function (db) { * @returns {string|JSON} sequelize formatted DB query param */ const parseQueryParam = (query) => { - let elements = query.split(/:(.+)/); - // console.debug("Query param: ", JSON.stringify(elements, null, 4)); - if (elements && elements.length > 1) { - var param = {}; - const elementsArray = elements[1].split(',') - if (elementsArray){ - if (elementsArray.length > 1){ - param[operators[elements[0]]] = elementsArray - } - else { - param[operators[elements[0]]] = elementsArray[0] - } - // console.debug("Query param: ", param); + const elements = query.split(/:(.+)/); + + if (elements.length > 1) { + const param = {}; + const elementsArray = elements[1].split(','); + + if (elementsArray) { + param[operators[elements[0]]] = elementsArray.length > 1 ? elementsArray : elementsArray[0]; return param; } } - // console.debug("Query param: ", elements[0]); + return elements[0]; } @@ -226,18 +206,18 @@ module.exports = function (db) { return new Promise((resolve, reject) => { try { - var offset = 0, limit = pageSizeLimit; - var dbQuery = { + let offset = 0; + let limit = pageSizeLimit; + const dbQuery = { where: {} }; - const Op = db.Sequelize.Op; for (const key in req.query) { switch (key) { // Fields case 'fields': // split the field names (attributes) and assign to an array - let fields = req.query.fields.split(","); + const fields = req.query.fields.split(","); // assign fields array to .attributes if (fields && fields.length > 0) dbQuery.attributes = fields; break; @@ -266,7 +246,7 @@ module.exports = function (db) { // JSON (nested) query case 'query': - let parsed = parseQueryFields(req.query.query); + const parsed = parseQueryFields(req.query.query); dbQuery.where = { ...dbQuery.where, ...parsed }; break; From 55d066b118672f0bc4e9702814d6952c2dc54a81 Mon Sep 17 00:00:00 2001 From: Twaha Mukammel Date: Thu, 3 Nov 2022 17:54:23 +0600 Subject: [PATCH 2/4] 1.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index daa4da0..0cdb62c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sequelize-query", - "version": "1.0.3", + "version": "1.0.4", "description": "Sequelize query parser", "main": "sequelizeQueryParser.js", "scripts": { From cfcd23961fa7aa49f8ca40e9a83d7b1161f080bf Mon Sep 17 00:00:00 2001 From: Sourab Hossain Date: Thu, 3 Nov 2022 17:59:06 +0600 Subject: [PATCH 3/4] FIX: resolved config --- sequelizeQueryParser.js | 56 ++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/sequelizeQueryParser.js b/sequelizeQueryParser.js index d2e7d1d..af5a4ca 100644 --- a/sequelizeQueryParser.js +++ b/sequelizeQueryParser.js @@ -51,16 +51,15 @@ module.exports = (db) => { * @param {array} array */ const splitStringAndBuildArray = (obj, array) => { - let elements = obj.split(','); + const elements = obj.split(','); - if (elements && elements.length > 0) { - elements.forEach((element) => { - var fields = element.split('.'); - if (fields && fields.length > 0) { - array.push(fields); - } - }); - } + elements.forEach((element) => { + const fields = element.split('.'); + + if (fields && fields.length > 0) { + array.push(fields); + } + }); }; /** @@ -105,26 +104,20 @@ module.exports = (db) => { const iterativeReplace = (json) => { Object.keys(json).forEach((key) => { if (json[key] !== null && typeof json[key] === 'object') { - // console.debug("key: ", key); - let op = operators[key]; - // console.debug("operation: ", op); + const op = operators[key]; if (op) { replaceKeyWithOperator(json, key, op); iterativeReplace(json[op]); } else { - // console.debug("next: ", JSON.stringify(json[key], null, 4)); iterativeReplace(json[key]); } } else if (key == 'model' && db[json[key]] != null) { - // json['as'] = json[key].replace(/^./, char => char.toLowerCase());// /^\w/ - json['model'] = db[json[key]]; + json.model = db[json[key]]; } else { - let op = operators[key]; + const op = operators[key]; if (op) replaceKeyWithOperator(json, key, op); } - - // console.debug("After Key:", key, " Query fields: ", JSON.stringify(json, null, 4)) }); }; @@ -135,8 +128,7 @@ module.exports = (db) => { */ const unescapeEscapedQuery = (query) => { const queryString = query.toString(); - const queryStringUnescaped = unescape(queryString); - return queryStringUnescaped; + return unescape(queryString); }; /** @@ -167,18 +159,14 @@ module.exports = (db) => { * @returns {string|JSON} sequelize formatted DB query param */ const parseQueryParam = (query) => { - let elements = query.split(/:(.+)/); - // console.debug("Query param: ", JSON.stringify(elements, null, 4)); - if (elements && elements.length > 1) { - var param = {}; + const elements = query.split(/:(.+)/); + + if (elements?.length > 1) { + const param = {}; const elementsArray = elements[1].split(','); + if (elementsArray) { - if (elementsArray.length > 1) { - param[operators[elements[0]]] = elementsArray; - } else { - param[operators[elements[0]]] = elementsArray[0]; - } - // console.debug("Query param: ", param); + param[operators[elements[0]]] = elementsArray.length > 1 ? elementsArray : elementsArray[0]; return param; } } @@ -217,9 +205,9 @@ module.exports = (db) => { return new Promise((resolve, reject) => { try { - var offset = 0, - limit = pageSizeLimit; - var dbQuery = { + let offset = 0; + let limit = pageSizeLimit; + const dbQuery = { where: {}, offset, limit @@ -230,7 +218,7 @@ module.exports = (db) => { // Fields case 'fields': // split the field names (attributes) and assign to an array - let fields = req.query.fields.split(','); + const fields = req.query.fields.split(','); // assign fields array to .attributes if (fields && fields.length > 0) dbQuery.attributes = fields; break; From c1b32e641bf8b7ba031f183a4f5a6962a05f657b Mon Sep 17 00:00:00 2001 From: Twaha Mukammel Date: Wed, 27 Nov 2024 21:47:35 +0000 Subject: [PATCH 4/4] 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0cdb62c..4ce6e47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sequelize-query", - "version": "1.0.4", + "version": "1.1.0", "description": "Sequelize query parser", "main": "sequelizeQueryParser.js", "scripts": {