{"_id":"@activate-core/hapi-query-builder","name":"@activate-core/hapi-query-builder","dist-tags":{"latest":"2.1.0"},"versions":{"2.1.0":{"name":"@activate-core/hapi-query-builder","version":"2.1.0","description":"The hapi-query-builder hapi.js to get all query from url and create mongodb query.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","check":"npm run format && npm run lint","format":"prettier --write \"**/*.+(js|yml|yaml|json)\"","lint":"eslint .","lint:fix":"eslint . --fix"},"keywords":["hapi","hapi.js","query","hapi-query","mongodb","mongodb-query","query-builder","hapi-query-builder","hapi-mongoose","hapi-mongoose-query"],"homepage":"https://github.com/singhamjesh/hapi-query-builder#readme","bugs":{"url":"https://github.com/singhamjesh/hapi-query-builder/issues"},"repository":{"type":"git","url":"git+https://github.com/singhamjesh/hapi-query-builder.git"},"author":{"name":"amjesh"},"license":"ISC","engines":{"node":">=18.20.1"},"peerDependencies":{"@hapi/hapi":">=21.x.x"},"dependencies":{"@hapi/boom":"^10.0.1","joi":"^17.12.2","lodash":"^4.17.21","mongodb":"^6.5.0"},"devDependencies":{"@hapi/hapi":"^21.3.6","eslint":"^8.57.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.1.3","prettier":"^3.2.5"},"directories":{"example":"example","lib":"lib"},"_id":"@activate-core/hapi-query-builder@2.1.0","gitHead":"9f9cb1c93f2c5533a9d40b78099ae1243855e092","_nodeVersion":"18.17.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-1H7vG4iWCs//XzUfXGURYZ9qqZDMwDxx4S0Crgx8fZWH9sX/n0nfmRZByqz6RD4ZwnyX5+Umhv/O381Lx6SQ5A==","shasum":"4fdce7fbccdc05fb45101a28763ce77d86537f61","tarball":"https://registry.npmjs.org/@activate-core/hapi-query-builder/-/hapi-query-builder-2.1.0.tgz","fileCount":17,"unpackedSize":31705,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBQW1hYKZpnZZLlv55K2GiLAeVSCFtUUsWTbBkNLLHTOAiBijhhOgrXt0PnIexrA04fgeuFXqrYB4BaRF5WKKDxhhw=="}]},"_npmUser":{"name":"activate-spritz","email":"signups+spritz@activate.co.uk"},"maintainers":[{"name":"activate-spritz","email":"signups+spritz@activate.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hapi-query-builder_2.1.0_1742552626307_0.8298422929716447"},"_hasShrinkwrap":false}},"time":{"created":"2025-03-21T10:23:46.243Z","2.1.0":"2025-03-21T10:23:46.546Z","modified":"2025-03-21T10:23:46.768Z"},"maintainers":[{"name":"activate-spritz","email":"signups+spritz@activate.co.uk"}],"description":"The hapi-query-builder hapi.js to get all query from url and create mongodb query.","homepage":"https://github.com/singhamjesh/hapi-query-builder#readme","keywords":["hapi","hapi.js","query","hapi-query","mongodb","mongodb-query","query-builder","hapi-query-builder","hapi-mongoose","hapi-mongoose-query"],"repository":{"type":"git","url":"git+https://github.com/singhamjesh/hapi-query-builder.git"},"author":{"name":"amjesh"},"bugs":{"url":"https://github.com/singhamjesh/hapi-query-builder/issues"},"license":"ISC","readme":"# Universal query builder for Hapi.js\n\nHapi-query-builder is a Hapi.js plugin. It is an ambitious attempt to create a\nkind of \"URL\" to \"Mongoose/mongodb query\" translator which provides a mongoose/mongodb query for\nGET API. It provides facilities to the developer to pass query params in URL and\nget the mongoos/mongodb query.\n\n#### The primary benefits of this plugin (currently) are:\n\n- Ability to convert directory query params to mongoose/mongodb get query.\n- Supports all get query command of mongoose/mongodb (like- pagination and populate)\n- Automatically identify where condition and option from query params.\n- You can access mongoose/mongodb query in request parameter with name \"parsedQuery\". It\n  is object witch hold where and option keys.\n- For better experience use \"mongoose-paginate-v2\" npm package.\n\n## Installation\n\nYou can add the module to your Hapi using npm:\n\n```bash\n npm i hapi-query-builder --save\n```\n\n## Compatibility\n\nnode: >= 18.x.x,  \nhapi: >= 21.x.x\n\n## Quick start\n\nIn your Hapi apps `server` object simply add `hapi-query-builder` and also add\nthe routes for your API as described on the hapijs.com site.\n\n```Javascript\nconst Hapi = require('@hapi/hapi');\n\n(async () => {\n    try{\n        const server = await new Hapi.Server({\n            host: 'localhost',\n            port: 3000,\n        });\n\n        await server.register({\n            plugin: require('hapi-query-builder'),\n            options: {\n                defaultSelectField: '_id', // (optional)- Pass field name for default select if $select is empty\n            },\n        });\n\n        server.route({\n            method: 'GET',\n            path: '/query',\n            handler: function (request, h) {\n                return {\n                    query: request.parsedQuery,\n                };\n            },\n        });\n\n        await server.start();\n        console.log('Server running at:', server.info.uri);\n    } catch (err) {\n        console.error(err);\n        process.exit(1);\n    }\n})();\n```\n\n### Example\n\nYou just pass query in query params form Front-end in request.\n\n```\nconst axios = require('axios');\n\nconst response = axios.get('/user?email=example@email.com&$limit=10&$skip=1&$sort=updatedAt|-1');\n```\n\nYou can get mongoose query in handler in hapi.js\n\n```\n handler: function (request, h) {\n   query: request.parsedQuery,\n };\n\n\n// example response\n{\"where\":{\"email\":\"example@email.com\"},\"options\":{\"lean\":true,\"offset\":1,\"limit\":10,\"sort\":{\"updatedAt\":\"-1\"}}}\n\n```\n\n## Documentation\n\n### Where\n\nPassing DB field name (Get all record where field match with value)\n\n```\n- GET       /api-path?field1=value&field2=value&.....fieldn=value\n- Ex        /user?_id=5ff48a66070a2466418e6adc&email=example@email.com\n- Result    {\"where\":{\"_id\":\"5ff48a66070a2466418e6adc\",\"email\":\"example@email.com\"},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Or operator\n\nPassing DB field name ($or condition for mongodb)\n\n```\n- GET       /api-path?$or=field1|value,field2|value,.....,fieldn|value\n- Ex        /user?$or=_id|5ff48a66070a2466418e6adc,email|example@email.com\n- Result    {\"where\":{\"$or\":[{\"_id\":\"5ff48a66070a2466418e6adc\"},{\"email\":\"example@email.com\"}],\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Select field value\n\nPassing DB field name with space in $select\n\n```\n- GET       /api-path?$select=field1 field2 field3..... fieldn\n- Ex        /user?$select=_id email title name\n- Result    {\"where\":{},\"options\":{\"select\":\"_id email title name\",\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Search query($q) (in given fields)\n\nPassing search text with DB fields name with pip operator in $q\n\n```\n- GET       /api-path?$q=text|field1,field2....fieldn\n- Ex        /user?$q=amjesh|email,name\n- Result    {{\"where\":{\"$or\":[{\"email\":{\"$regex\":\"amjesh\",\"$options\":\"i\"}},{\"name\":{\"$regex\":\"amjesh\",\"$options\":\"i\"}}]},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Search with case sensitive\n\nPassing DB field name and search value with pip operator in $search\n\n```\n- GET       /api-path?$search=field|value,field1|value,....fieldn|value\n- Ex        /user?$search=name|Amjesh,email|amjesh@example.com\n- Result    {\"where\":{\"name\":{\"$regex\":/Amjesh/}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Search without case sensitive\n\nPassing DB field name and search value with pip operator in $isearch\n\n```\n- GET       /api-path?$isearch=field|value,field1|value,...fieldn|value\n- Ex-       /user?$isearch=name|Amjesh,email|amjesh@example.com\n- Result    {\"where\":{\"name\":{\"$regex\":/amjesh/,\"$options\":\"i\"}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Populate\n\nPassing modal with comma separated in $populate\n\n```\n- GET       /api-path?$populate=modal1,modal2,....modaln\n- Ex        /user?$populate=post,comment\n- Result    {\"where\":{},\"options\":{\"populate\":[\"post\",\"comment\"],\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### Sort\n\nPassing DB field name for shorting in $sort  \n_For Ascending pass value 1 or asc and_  \n_For Descending pass value -1 or desc any one_\n\n```\n- GET       /api-path?$sort=field1|1,field2|1\n- Ex        /user?$sort=updatedAt|1,_id|1\n- Result    {\"where\":{},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{\"updatedAt\":\"1\",\"_id\":\"1\"}}}\n            OR\n- GET       /api-path?$sort=field1|-1,field2|-1\n- Ex        /user?$sort=updatedAt|-1,_id|-1\n- Result    {\"where\":{},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{\"updatedAt\":\"-1\",\"_id\":\"-1\"}}}\n```\n\n### Skip(optional)\n\nSkip record for pagination in $skip(By default it's 0)\n\n```\n- GET       /api-path?$skip=value\n- Ex        /user?$skip=1\n- Result    {\"where\":{},\"options\":{\"lean\":true,\"offset\":1,\"limit\":20,\"sort\":{}}}\n```\n\n### Limit(optional)\n\nPassing limit for total number of record for pagination in $limit.  \nYou can pass defaultLimit in plugin option\n\n```\n- GET       /api-path?$limit=value\n- Ex        /user?$limit=100\n- Result    {\"where\":{},\"options\":{\"lean\":true,\"offset\":0,\"limit\":100,\"sort\":{}}}\n```\n\n### IN or NOT IN\n\nGet all records where the value does $in(In) or does not $nin(Not-in) match from\nvalues\n\n```\n- GET       /api-path?field[$in]=value1,value2.....valuen\n- Ex        /user?id[$in]=10,11,12,13,14\n- Result    {\"where\":{\"id\":{\"$in\":[\"10\",\"11\",\"12\",\"13\",\"14\"]}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### GT Or GTE\n\nGet all records where the value does $gt(Greater then) or does not $gte(Greater\nthen equal to) match from value\n\n```\n- GET       /api-path?field[$gt]=value\n- Ex        /user?comment[$gt]=100\n- Result    {\"where\":{\"comment\":{\"$gt\":\"100\"}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### LT or LTE\n\nGet all records where the value does $lt(Less then) or does not $lte(Less then\nequal to) match from value\n\n```\n- GET       /api-path?field[$lt]=value\n- Ex        /user?likes[$lt]=100\n- Result    {\"where\":{\"likes\":{\"$lt\":\"100\"}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n### NE\n\nGet all records where the value does $ne(not equal to) match from value\n\n```\n- GET       /api-path?field[$ne]=value\n- Ex        /user?archive[$ne]=true\n- Result    {\"where\":{\"archive\":{\"$ne\":true}},\"options\":{\"lean\":true,\"offset\":0,\"limit\":20,\"sort\":{}}}\n```\n\n","readmeFilename":"README.md","_rev":"1-5b9f783460eca08c9d0bf823163597d9"}