{"_id":"@elmordo/query-filters","_rev":"4-eca3f6036b0e41654208789993ea425c","name":"@elmordo/query-filters","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@elmordo/query-filters","version":"1.0.0","description":"Main purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.","main":"lib/index.js","scripts":{"test":"./node_modules/typescript/bin/tsc test/*.ts && mocha"},"repository":{"type":"git","url":"git+https://github.com/elmordo/query-filter.git"},"keywords":["query","filter","rest","pagination","sort"],"author":{"name":"Petr Jindra"},"license":"MIT","bugs":{"url":"https://github.com/elmordo/query-filter/issues"},"homepage":"https://github.com/elmordo/query-filter#readme","devDependencies":{"@types/chai":"^4.2.1","@types/mocha":"^5.2.7","chai":"^4.2.0","mocha":"^6.2.0","typescript":"^3.6.2"},"gitHead":"9437eab19ef9762cee228a37e3747acdf7c4c7ef","_id":"@elmordo/query-filters@1.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0vStrW4DEsZsw9pcYCvuZXKWaYpMfXg5UhLF3mtjw6OBhJYzvR5LOqasgzLx90RqPn+ji77NBhk3Z9e80vngrQ==","shasum":"b59664da5e72eb573f792e8b62c066c9ff88930f","tarball":"https://registry.npmjs.org/@elmordo/query-filters/-/query-filters-1.0.0.tgz","fileCount":30,"unpackedSize":50450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddT0jCRA9TVsSAnZWagAAGNoP/1BpVbvZdcaoRJPyaxzF\nmkhIZ7nDYlJnMKh66f2jPCV5BzeKHiwCcd3M+yjA4JK+r3i5v8CTNzRXz4l5\nq+ApjLir8AfjzA8IHwmffFz4sXG1PL68mQVDIgVJbtIacvu1aa9DwPJpqb8Y\n8lAEt/Trt371oFSqi/EevtrMv3LoCBXvqqfpcxez6c90BOifzbF8GUZ3IgMR\na82SzVBcaDoOaNB8uybtujL/ap4CPb+PGaT8tJrmXRFAY5bKUolEj6oKLQUI\nnf+T42tPHeXcdG3qX2YEC5GrB0+TuIU3vIlSFAdHux7vfi+iJNPjiF1HGqUd\nyYR+s8fciZnvz2ZTJMD7un/nsfowYWz9pY7JARnrl6UjqNXGUl8Or6UXvmTe\nOiLxaZdXBTCpEv3Jm4v9z/eQU8KXTTZDPG6h4yusIXkeN/MsBAOvmRZ2vrKB\nQQj1C/bWZC8iI2E5WVUmyKI6ludBT7qTMSgASDyTpjHGfZkoXuaiAIgaPmLI\nUhbQVHdGU5SReidR60ZvPgGsITxRXOp5XGJjooXAfEpg1JVfMT6V0U95v/J/\nqyuOmqjRL6WjEi5oo+5T5JIShIE8q2mL7XB9mlnDx2U3afI6biIE6rMeDxhH\nH+jyp34BxyLOo6F3QNFflqLKk6/juPUb1Ac7COHfPTR6yCy+eS6q3gXvTbPu\nzg6g\r\n=jNVU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMjQwTX19Zyh1WunTw0nTPjIUZZ0KB+u96at39p1w9+AIhALvrOmf1rnwY0MHcbbI0gmjRuqu+fOdZLDrsB/MZhXN/"}]},"maintainers":[{"name":"elmordo","email":"el.mordo@gmail.com"}],"_npmUser":{"name":"elmordo","email":"el.mordo@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-filters_1.0.0_1567964450414_0.3884000395167764"},"_hasShrinkwrap":false},"1.0.1":{"name":"@elmordo/query-filters","version":"1.0.1","description":"Main purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.","main":"lib/index.js","scripts":{"test":"./node_modules/typescript/bin/tsc test/*.ts && mocha"},"repository":{"type":"git","url":"git+https://github.com/elmordo/query-filter.git"},"keywords":["query","filter","rest","pagination","sort"],"author":{"name":"Petr Jindra"},"license":"MIT","bugs":{"url":"https://github.com/elmordo/query-filter/issues"},"homepage":"https://github.com/elmordo/query-filter#readme","devDependencies":{"@types/chai":"^4.2.1","@types/mocha":"^5.2.7","chai":"^4.2.0","mocha":"^6.2.0","typescript":"^3.6.2"},"gitHead":"9437eab19ef9762cee228a37e3747acdf7c4c7ef","_id":"@elmordo/query-filters@1.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HCd4fiGRFlnLyHz7Xc03v01tuq9cfzfEA59cRNJJfBbaJ8Ny5adee8zYdAhssM9meZ7EDsw+PxRsCIIYL8njYg==","shasum":"c2e03884578908536d38bf5bebe624330d7e4ffd","tarball":"https://registry.npmjs.org/@elmordo/query-filters/-/query-filters-1.0.1.tgz","fileCount":30,"unpackedSize":51206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddVzcCRA9TVsSAnZWagAAWiEQAKPL+JuLiju6/zN2Cs+O\nxltP/1JUIQvhjbojg2CJD/4e0zC3VvKCAJ03+FUf9cI1z5hg9lBe1mvGaxlz\nn73HYSlP4pmBFRk6q0k5jFVFnj6+lCTjKXls5RPU813akGZCET6vSdg5O0rg\n5VQ2JkaB/ZBGtrCsqUt/+YzMqe9YbUnrkIoOaYDeVR8o7U6WdWzUGbMO+6jr\nVGsSMZR6XCVHV+GqGgRcCEK+0Z6lNPP7uyy8tK03Mjb7PrqLxKlas+3loq49\nl3a4foG62Lyi6f8x72OTgc0bFhrCRKBfAo7LirT5hWngwo2Izom3dA8OxawL\nBmPA4KPRDlzIz2HVR93NUf8FXjNy10bCXh/85UP4+yygUrE7fvXnG/MbKP+K\nyuqkS+1TzCTr38A6Z/YNbsmFUszikvqgf/nQMqgTbjwosaLMtTPmp61t4Dp7\nn+q+eSW8ZpDr+qqYOt6ef8pd8rRXkU16Zk5j12r+GvfUoAM4iZHTkley711e\naifE1Enc31YhTJtku3TI5Nw24bChbRZR4oR1AZNoRk8XQEYU1oOprwZiqIeh\n2Z5XIe0qlo/YlpCgIGXeQLURcvBi7Q+qDOq1ecHa4suMdIfdgzBJUDAAwU+J\nSW7FBG4+1DgCPWH+8O41MpDandEP9rORkjS0qiJyWkvdig1RW6fXVOiQ0PwG\nAGho\r\n=0ZxX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdj0fMwUpRgTCKkh7EwEAg7gLaD5YTRZ2Qggxkh8rFPAiEAsNhq3lGSWeM5FdsmxO3GSZH5gc/WkTT8z+fuRqCo9Xk="}]},"maintainers":[{"name":"elmordo","email":"el.mordo@gmail.com"}],"_npmUser":{"name":"elmordo","email":"el.mordo@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-filters_1.0.1_1567972571434_0.40238364783434144"},"_hasShrinkwrap":false},"1.1.0":{"name":"@elmordo/query-filters","version":"1.1.0","description":"Main purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.","main":"lib/index.js","scripts":{"test":"./node_modules/typescript/bin/tsc test/*.ts && mocha"},"repository":{"type":"git","url":"git+https://github.com/elmordo/query-filter.git"},"keywords":["query","filter","rest","pagination","sort"],"author":{"name":"Petr Jindra"},"license":"MIT","bugs":{"url":"https://github.com/elmordo/query-filter/issues"},"homepage":"https://github.com/elmordo/query-filter#readme","devDependencies":{"@types/chai":"^4.2.1","@types/mocha":"^5.2.7","chai":"^4.2.0","mocha":"^6.2.0","typescript":"^3.6.2"},"gitHead":"3dd1cb715a00f92ca484950289e28fa3097e5f57","_id":"@elmordo/query-filters@1.1.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Grog5QTEiFg+H7Qt1F6s5DD3wczG89Acn5nIRfnPcMlKmWdRNftDziO3lAbqD0hoVHSlBOc7hsjnQ26xf9vT7A==","shasum":"d2eb4971f00b356b4dd439e4dbe11b3873f51e18","tarball":"https://registry.npmjs.org/@elmordo/query-filters/-/query-filters-1.1.0.tgz","fileCount":33,"unpackedSize":56398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmdf3CRA9TVsSAnZWagAAeKYQAId30Y4imuy2tkmjUsJR\nKiHPavtI8u+J8uX65UlYR196s6hqScl7iswZ/XtGcQA2RumwcVvh3mUEW9DX\ndzeVDBKvcDZAQOqEmu4JaHUIW4c26Xyx1fTyKZVqWfuis7aNdfK9A6QL1CU9\nTqxNTOXTzha6Ou7pLO3PaZ3UTmUZPKb7kG+pVhqQeQBnboAr5FH2Gh2qT1jm\nkSID+QYR7lONS/PT6Z8GQNJLQIoA1786ucDm3dEEdC3wtBjARTFkZkGy/8D2\nGweEkBHz6XNV37w+yxRk/M0uO7qSroXx5Qt65YbX7kA8YnzBUPf9h8f1l9PA\nz2nPLaLmTme4/3eQ0r5yIwZfPqvwukAUy6z16rmn41LiQgUxc6oqqGaXCpAs\nwsTTvRww14Ddztgy+n8/ViL2spH5g6gOhIZBQyjlox+c3Wjghi83BaImRQ8M\n1/HEQWXEHktuXKA3olhhApeAQAPBbYQEQx6kFzu2ogQ/LTOPU26nlBO4aSrW\nLxPRuy+3mOOse9vMZkGmTPtivpSpvfVRIq6mFZLeAz+ZQd8qYb0Tjh+m/6Dq\n1gP5kMOQMS29E60yoSb5wWmQ0orkkbRGOLNq3zhrL2pf5L13mmayruuC5E5+\ntY70iBHCRUSsXDw/mtTOPLLTQkPIbjP4aRos3fnWc990ssBkV1FvW0RMAxmr\n/tIo\r\n=mwLu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl+hl+Xyrgt/IYafY0MEwv01B4f8sUlbP6WRqtXfiLXwIgZEhDVeupUdRUbsmyo6m1j6xw5b8CJ1NgdybLxA738jE="}]},"maintainers":[{"name":"elmordo","email":"el.mordo@gmail.com"}],"_npmUser":{"name":"elmordo","email":"el.mordo@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-filters_1.1.0_1570363382564_0.5986660284763354"},"_hasShrinkwrap":false},"1.1.1":{"name":"@elmordo/query-filters","version":"1.1.1","description":"Main purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.","main":"lib/index.js","scripts":{"test":"./node_modules/typescript/bin/tsc test/*.ts && mocha"},"repository":{"type":"git","url":"git+https://github.com/elmordo/query-filter.git"},"keywords":["query","filter","rest","pagination","sort"],"author":{"name":"Petr Jindra"},"license":"MIT","bugs":{"url":"https://github.com/elmordo/query-filter/issues"},"homepage":"https://github.com/elmordo/query-filter#readme","devDependencies":{"@types/chai":"^4.2.1","@types/mocha":"^5.2.7","chai":"^4.2.0","mocha":"^6.2.0","typescript":"^3.6.2"},"gitHead":"ef91aad9d20be394dd1126e89697334424b64b8c","_id":"@elmordo/query-filters@1.1.1","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SUUKjaojnii1sqVL5HbvJrKDbYNk8rosvW3SebCrN+gjduvkNMJOoOiulGmfmi/0eXPRLgQX5cPFKsoBJUeJKw==","shasum":"abcddd62c794da1fe474c4007b4db95fa4c9b96a","tarball":"https://registry.npmjs.org/@elmordo/query-filters/-/query-filters-1.1.1.tgz","fileCount":33,"unpackedSize":58524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmuboCRA9TVsSAnZWagAAfvEP/2PgMRvMqUqzXB6RLtgt\nLcawOfA4xoniv+VI3VXxo9zkFenbQ+2U+S6HDYcxTDGr2SCZHJ2OcPiHcbzi\nDI3HCpPUoMb5s7Z+Yo2ePYXacxyZA6RIIHpN9l9AGz2+dQHOBp+JAn9idTAx\na9E1WI2FCIrE1d3y5rm/tpuajiZswqvDIi02FNxKxC4NvX833A4ncNvOXeMb\nQsHRPhSTXPHZxFfggc82erFkO4nFqNO5XRpfgftaONFYDpaL89TCv98hZrZf\n4ZyRZONfwHfyUlgWT1yn1E6RPAtht+BrAOEVU25SJIqmT1+5bxBFX01SlAwH\ngtfzQT8tUu2GAbmc4WCsQwsnU+4vMcIGP2bYPkyw5vUJGhEcNUwG9KS8Q4PI\nL3m5SmrrEQNLX8JX0aMyjimDVZANVNgdQAfyOUEWPVdPnAYB9LDxcO6Ce8w4\nCeBfdgT4fqWLcn1Y8+lZVWKznfEYA2H1CIv82wBMyY8SG/5MnNVtt7rcQAl8\nV5WDE2z9skf75DtGZswMIZtknw+HqAM1WxuxTLCZym839Uvsj74sDqTVu5XB\nyOeN2/cH5D/0wWfFyBaRYhhHfwwvp4jOp5FRC8pRjipdssOQLM6iapWXRUka\nCdQqjJG4+eiKsqRPq1tdYmxZwp6UEbActhvWNX88hiy0GsZeEotsCDN9wYKp\nqRhh\r\n=aZVk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOGZtg6gGg0V1C2K7CrqHGuyQDCh25tbf4vj3rEN8P1QIgOaQA0Akjtn7au/mW3lgBIQ4aQCINwcaqkCdGhbEH1pg="}]},"maintainers":[{"name":"elmordo","email":"el.mordo@gmail.com"}],"_npmUser":{"name":"elmordo","email":"el.mordo@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-filters_1.1.1_1570432744103_0.7481822739118535"},"_hasShrinkwrap":false}},"time":{"created":"2019-09-08T17:40:50.139Z","1.0.0":"2019-09-08T17:40:50.597Z","modified":"2022-04-05T07:22:09.797Z","1.0.1":"2019-09-08T19:56:11.569Z","1.1.0":"2019-10-06T12:03:02.701Z","1.1.1":"2019-10-07T07:19:04.247Z"},"maintainers":[{"name":"elmordo","email":"el.mordo@gmail.com"}],"description":"Main purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.","homepage":"https://github.com/elmordo/query-filter#readme","keywords":["query","filter","rest","pagination","sort"],"repository":{"type":"git","url":"git+https://github.com/elmordo/query-filter.git"},"author":{"name":"Petr Jindra"},"bugs":{"url":"https://github.com/elmordo/query-filter/issues"},"license":"MIT","readme":"# query-filter\n\nMain purpose of the `query-filter` is to provide functionality to generate URL query strings for filtering, sorting and pagination.\n\n## Filtering\n\nFilters are defined by threee properties of interface `Filter`:\n\n* `field` - name of the field (e.g. `\"username\"`)\n* `operator` - operator identifier (e.g. `\"like\"`)\n* `value` - value for the operator (e.g. `\"John Doe\")\n\nValue cannot be `null` or `undefined` because we do not know, if the `null` value is realy `NULL` or string with content `\"NULL\"`.\n\nThere are two styles of filter formats supported:\n\n1. Left hand operator (by `LeftHandedStyleFilter` class) - `username[like]=John Doe`\n2. Right hand operator (by `RightHandStyleFilter` class) - `username=like:John Doe`\n\n## Sorting\n\nSorts are defined by object with two properties:\n\n* `field` - name of the field (e.g. `username`)\n* `direction` - optional sort direction (`asc` or `desc`, default is `asc`).\n\nThere are three types of sort formats supported:\n\n1. Function like format (by `SortByFunction` class) - `asc(username)`, `desc(username)`\n2. Sign style format (by `SortBySign`) - `__sort=+username`, `__sort=-username`\n3. Property style format (by `SortByProperty`) - `__sort=username.asc`, `__sort=username.desc`\n\n## Pagination\n\nPagination is defined by object with two properties:\n\n* `page` - page index (e.g. 5)\n* `perPage` - number of records per one page (e.g. 20)\n\nThere is only one pagination style at this time:\n\n1. Pagination defined by two keys (by `PaginationByTwoKeys`) - `__page=5&__perPage=20`\n\n## Final query and query builder\n\nAll three parts described above are used in the `FilterQuery`. This object has three properties:\n\n* `filters` - list of filter definitions\n* `sorts` - list of sort definitions\n* `pagination` - pagination definition\n\nWhen some property is missing (is `null` or `undefined`) this part of query string won't be built.\n\nFinal query string is built by object implementing the `QueryBuilderInterface`. There are two query builders:\n\n* `AbstractQueryBuilder` with abstract properties (slots) for partial builders\n* `QueryBuilder` with partial builders passed by constructor.\n\nIf some partial builder is not set (the `null` or the `undefined` value is passed), this part of query string won't be built.\n\n## Example\n\n```typescript\n\nlet query: QueryFilter = {\n  filters: [\n    {field: \"username\", operator: \"like\", value: \"John Doe\"},\n    {field: \"age\", operator: \"gt\", value: 18},\n  ],\n  sorts: [\n    {field: \"registered_at\"},\n    {field: \"nickname\", direction: \"desc\"}\n  ],\n  pagination: {page: 0, perPage: 20}\n}\n\nlet queryBuilder = new QueryBuilder(\n  new RightHandStyleFilter(),\n  new SortBySign(),\n  new PaginationByTwoKeys()\n);\n\nlet parts = queryBuilder.build(query);  // list of string key-value pairs\nliet queryString = queryBuilder.buildString(query)  // all key-value pairs merged into query string\n\n```\n\n## Customizing builders\n\nAll builders can be customized by implementing builder interfaces. Each partial builder interface have only one method with one argument (list of items to be built) and returning list of strings.\n\nFinal query builder has two methods. Each take one argument - an object implementing `QueryFilter` interface. But return value is different:\n\n* The `build` method returns list of strings (like partial builders)\n* The `buildString` returns one string containing list of strings returned by `build` method and joined by `&` character.\n","readmeFilename":"README.md"}