{"_id":"@coedl/elastic-query-builder","_rev":"3-8a1622bc1a673407eacc105372fb6984","name":"@coedl/elastic-query-builder","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@coedl/elastic-query-builder","version":"0.1.0","description":"A library to help construct elastic search queries","main":"index.js","scripts":{"develop":"rm -fr dist/* && tsc -w -p tsconfig-es5.json","build":"rm -fr dist/* && concurrently 'npm:build:cjs' 'npm:build:mjs'","build:cjs":"tsc -p tsconfig-es5.json","build:mjs":"tsc -p tsconfig-mjs.json","tests":"jest --coverage","tests:watch":"jest --watch"},"engines":{"node":">=14"},"engineStrict":true,"exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"}},"author":{"name":"Marco La Rosa"},"license":"GPLV3","devDependencies":{"concurrently":"^6.2.0","fs-extra":"^10.0.0","jest":"^27.0.5","prettier":"^2.3.1","typescript":"^4.3.4"},"dependencies":{"@elastic/elasticsearch":"^7.13.0","@types/jest":"^26.0.23","@types/lodash":"^4.14.170","@types/node":"^15.12.4","elastic-builder":"^2.16.0","headers-utils":"^3.0.2","lodash":"^4.17.21","node-fetch":"^2.6.1"},"gitHead":"3f0cb11527535c7e569b1f73ccfd44637741135a","_id":"@coedl/elastic-query-builder@0.1.0","_nodeVersion":"14.15.4","_npmVersion":"7.15.1","dist":{"integrity":"sha512-IUVE5E/iS4QZaB9SUcXfbae3oVonBcAF1OaT7Jl5TUpAyL6zM8PCvWBt1NVoL9cQXkNSK5fkjMWVSfmhZCWSbw==","shasum":"c51c501a9bd801a9de285cf55088fb1746ffeffd","tarball":"https://registry.npmjs.org/@coedl/elastic-query-builder/-/elastic-query-builder-0.1.0.tgz","fileCount":96,"unpackedSize":96428,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2U1/CRA9TVsSAnZWagAAPv4P/RH8wPbPWrYo0A3aEY3q\nusdE+KZ2YLnWWmlE+umYHYGh5iwstF5fmPEXbg1YLMFUT3lOtJ1qxN7f50/8\nl449Ta1bb68A+McWRXOsid0dRm/Sm8UeQVgBC03pP0U6a20aJs9SQnNeHDBl\n2uXue1WmTCVkGaa2px+zIMcqG9EUoCcDGxPO1EO8ozMbebClO9GafZLKTIt/\nqONPx5uU25ItLHW/QjB2+f6TIMeWtraU8KLbE0NQJbK2kV0Fz2zqnTbt6/dJ\n4R0zzIwXRKxlMi1iy1tAlbXWulO22JpW2313QILwLUXZyw3Et04bbPBNiZh8\nUgQOKkQ/iq4/zybv5InjI33vYpjXL5erOgb4t0ozq0qJMSrhQJE322WI25zj\n4g2ZXN/LkdslUerNTK2AI1VWfm26rC7o07tbPqqXtTFFH+TmaU6wCUUidsum\n5uaGfTCBC+w7VUux3OdZZj9cckkxtJakkPnv1w7ib4OcnHFwOCc2TG6gVQ2C\nNXQKnLEXA9jtvKtdXDKk/xvC/1ZKXR3Ij5g1TFcsDvew48PK9zWEwWKpM3FZ\nX3avkdMiRu5tituNQAQATc/BnFKmJX7OykolDmItgHNhnQiYcDksFNFpZZCk\ne4GNnTCjlBFkxzHuxdCUx6VKfMmwyN4J8OIlf5GMOa4kUQXFDtfABLf4H1SM\n24XJ\r\n=BszB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeN1uv1cXhmNghUz1iGgxODfdgOymhZpBOMv2AUvGm4QIhAMVkfDWSzWH5o5qQVl0DitHRsJHmWlomHQMDiWA/tU1y"}]},"_npmUser":{"name":"marcolarosa","email":"m@lr.id.au"},"directories":{},"maintainers":[{"name":"marcolarosa","email":"m@lr.id.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/elastic-query-builder_0.1.0_1624853886975_0.255064044548611"},"_hasShrinkwrap":false},"0.2.0":{"name":"@coedl/elastic-query-builder","version":"0.2.0","description":"A library to help construct elastic search queries","main":"index.js","scripts":{"develop":"rm -fr dist/* && tsc -w -p tsconfig-es5.json","build":"rm -fr dist/* && concurrently 'npm:build:cjs' 'npm:build:mjs'","build:cjs":"tsc -p tsconfig-es5.json","build:mjs":"tsc -p tsconfig-mjs.json","tests":"jest --coverage","tests:watch":"jest --watch"},"engines":{"node":">=14"},"engineStrict":true,"exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"},"./queries":{"import":"./dist/mjs/queries/index.js","require":"./dist/cjs/queries/index.js"},"./aggregations":{"import":"./dist/mjs/aggregations/index.js","require":"./dist/cjs/aggregations/index.js"}},"author":{"name":"Marco La Rosa"},"license":"GPLV3","devDependencies":{"concurrently":"^6.2.0","fs-extra":"^10.0.0","jest":"^27.0.5","prettier":"^2.3.1","typescript":"^4.3.4"},"dependencies":{"@elastic/elasticsearch":"^7.13.0","@types/jest":"^26.0.23","@types/lodash":"^4.14.170","@types/node":"^15.12.4","elastic-builder":"^2.16.0","headers-utils":"^3.0.2","lodash":"^4.17.21","node-fetch":"^2.6.1"},"gitHead":"51515338063ce3b20aeadeea6c72a9e2597c231f","_id":"@coedl/elastic-query-builder@0.2.0","_nodeVersion":"14.15.4","_npmVersion":"7.15.1","dist":{"integrity":"sha512-jzpaORyNOdrY+uec5jFJa+D3DQyyBn/gHEsrStEJAElLJEzaJdCOxmqXhqF1hdtdCKZPKb4u4Cj/gfS1nlka3Q==","shasum":"6ae8852e26348266be8c40420374746a792bf415","tarball":"https://registry.npmjs.org/@coedl/elastic-query-builder/-/elastic-query-builder-0.2.0.tgz","fileCount":96,"unpackedSize":96723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2WFiCRA9TVsSAnZWagAAOUwP/RQ1YrM9Gmwv/5hlMRqJ\nN1JIq8kvtbct2Otz631Yd4swXIsvTqzgozSK9H4QeGKeiHCQE0e5GsBYIfdR\nfjyw9k0+boHuz22DTzS1T6tFYLytBaX/rPycNSI7oKzMe79JxNvHpi5rzJGn\nGichZj70+Bl8sm/d79KL/ji6r07waA9NA+yiyyY5ZVK+fMsbACWUvOLhaohz\n2BQgiCnNPlvN5ZbmqsQ1demnX2+FljLJ3I8v9XMizZRXH0JzEBnOtRh0ZlR6\nUmwaD7tAyYThNX3RLWWoWmzMpKy2LK1QeJCxPp8DYnWe34Ub9LPmu88ypXTw\nzLvKWOohfkuhg+/31qwMkhVVc12RUOetka23gDh5InDHxLACD1sUc/u6T9eE\nPXBQY92L0qsr4Uy3ZToNCiIH6i3w6VRmqGfyo3t/fOYXRvrwlireij/1P3Ms\nuMdZFfWMj4uVOppQj8qkXaac7dpIPbtA+TnmOeSU4wkCpKIV9vpHxNBKnmC3\n1hxHLPpXjdqh9Z4TCBIPWtR1VgH5KTXE5PrivFk1oKZCgr6m4J8NDXy5pJKT\n5b8029az0Y9AFjGKpS2gkICCckIT++LUzCWg7e6rpu/BXYkP7DFCGWf/niSa\nOs2x9+hEAVHpk0hGWZfRJnn5Ny4hCfPOBjM36bjgltmAiVCyr18S/U8kCpT9\ntUfE\r\n=P7O2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvXpKJR6DMsbP8pGiDf3iwOZ9/kyQmCofsU+TIPSR+FwIhAOC0d62GMSSWcI08xZbmx/gn3nPeFGl5T3tsu22B4PbO"}]},"_npmUser":{"name":"marcolarosa","email":"m@lr.id.au"},"directories":{},"maintainers":[{"name":"marcolarosa","email":"m@lr.id.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/elastic-query-builder_0.2.0_1624858977937_0.8388310890883668"},"_hasShrinkwrap":false},"0.3.0":{"name":"@coedl/elastic-query-builder","version":"0.3.0","description":"A library to help construct elastic search queries","main":"index.js","scripts":{"develop":"rm -fr dist/* && tsc -w -p tsconfig-es5.json","build":"rm -fr dist/* && concurrently 'npm:build:cjs' 'npm:build:mjs' && npm run generate-docs","build:cjs":"tsc -p tsconfig-es5.json","build:mjs":"tsc -p tsconfig-mjs.json","tests":"jest --coverage","tests:watch":"jest --watch","generate-docs":"jsdoc --configure jsdoc.json --verbose"},"engines":{"node":">=14"},"engineStrict":true,"exports":{".":{"import":"./dist/mjs/index.js","require":"./dist/cjs/index.js"},"./queries":{"import":"./dist/mjs/queries/index.js","require":"./dist/cjs/queries/index.js"},"./aggregations":{"import":"./dist/mjs/aggregations/index.js","require":"./dist/cjs/aggregations/index.js"}},"author":{"name":"Marco La Rosa"},"license":"GPLV3","devDependencies":{"clean-jsdoc-theme":"^3.2.7","concurrently":"^6.2.0","fs-extra":"^10.0.0","jest":"^27.0.5","jsdoc":"^3.6.7","prettier":"^2.3.1","typescript":"^4.3.4"},"dependencies":{"@elastic/elasticsearch":"^7.13.0","@types/jest":"^26.0.23","@types/lodash":"^4.14.170","@types/node":"^15.12.4","elastic-builder":"^2.16.0","headers-utils":"^3.0.2","lodash":"^4.17.21","node-fetch":"^2.6.1"},"gitHead":"574bfac99534e564e39f146a45ad1993611a2285","_id":"@coedl/elastic-query-builder@0.3.0","_nodeVersion":"14.15.4","_npmVersion":"7.15.1","dist":{"integrity":"sha512-Dk+nd+zWU9TUQ+wkSQhdtQngOTO4RE6unkdeDCt5LdssMFslOZVMerCXwf+4HJ2snJrMw34FP5k0cd4c6zbpCw==","shasum":"fa68319b8ec3a7f2d6c585d40d763d5f59469db1","tarball":"https://registry.npmjs.org/@coedl/elastic-query-builder/-/elastic-query-builder-0.3.0.tgz","fileCount":213,"unpackedSize":2312893,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg28HTCRA9TVsSAnZWagAAwx4P/ROXoWY4UOZ1qsvi1fVM\nugsEOGikCbKSlklTqC+ee+2mda9a1rj+Q+8msL5qfBGIFSS6Km20kqsOUphi\nMGufqGDuXqjLF9afEuEjvad+Ah+ErU3FAWTV8TL1akP9KW3mUJ34qYjKT9FH\nZlXAMJGscQEI8iwIYgoKoCxcaHM3AvnAa1CujEYgO/F1OUE0LVA4yj0VweOM\nNB6InPckHVyB9t9081rA9JXZ3KTZeqxbdfKwsqZZpMcG6NUsPJzrADAWkFc2\nwi7toNqLIdnFuR9e0HZ7lrtAXM0thjNMSRbpSuhLExA/NFifQfalqgNYGHxO\nUpfNm+WEDgv1QbiuWNyi7aCW5eQ8xh9k+oPAZ2FmImiR21ote+zxeR0iPrgo\nXZxLJ9tQ6UW4sF53h4z8PI9SiISuZFpkvclHcO+RkaKs0RRaTSoPm3tQUDe2\nNRkFAmcB+VKon2KmVyiprMgyCMYQuYppZG1XyVDB6PUavqRN6hz3o1LOVjnk\nTYB4qRh2Lt3bMaZi/8mJ7WDq3bnjNHdUazvu+7NgYY2kl7kQ9OKS3DPKdIWU\niO8tAGpLFcBQxWrJogQtXyuBY/h95umbrOlOTa9GYdgkrRIpRpy4LShQ/Dhl\nfF6xXUWmMMgTHF9Nr/KWDtTFfasBGngRlVNoNcbHlz4g2nkUR7yku/ZOJuXU\nsJEr\r\n=ilSL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH5kYwcF52pnid2inC3ilwGQtnevi8uynJaBWSXEypEyAiEA40dJeUeQIhrKf/UixzRn3vPDtTEaMEkYQCww+xpC3qo="}]},"_npmUser":{"name":"marcolarosa","email":"m@lr.id.au"},"directories":{},"maintainers":[{"name":"marcolarosa","email":"m@lr.id.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/elastic-query-builder_0.3.0_1625014739297_0.5239969865470626"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-28T04:18:06.699Z","0.1.0":"2021-06-28T04:18:07.127Z","modified":"2022-04-05T00:10:21.390Z","0.2.0":"2021-06-28T05:42:58.052Z","0.3.0":"2021-06-30T00:58:59.484Z"},"maintainers":[{"name":"marcolarosa","email":"m@lr.id.au"}],"description":"A library to help construct elastic search queries","author":{"name":"Marco La Rosa"},"license":"GPLV3","readme":"# Elastic Query Builder\n\n- [Elastic Query Builder](#elastic-query-builder)\n  - [Developing the library](#developing-the-library)\n  - [Folder setup](#folder-setup)\n  - [Adding a query or aggregation](#adding-a-query-or-aggregation)\n  - [Publishing a new version](#publishing-a-new-version)\n  - [Usage - tutorial](#usage---tutorial)\n\nInspired by [https://elastic-builder.js.org/docs/](https://elastic-builder.js.org/docs/). I couldn't\nget it to work in the browser but the ideas are very cool so I thought I'd use this opportunity to\nsetup up a typescript library that supports both CommonJS (cjs) and ES (mjs) modules.\n\nAPI documentation is available at\n[https://coedl.github.io/elastic-query-builder/](https://coedl.github.io/elastic-query-builder/)\n\n## Developing the library\n\nIn a terminal:\n\n```\n> npm run develop\n```\n\nThis sets up typescript in watch mode to compile the code.\n\nIn another terminal:\n\n```\n> npm run tests:watch\n```\n\nThis gets Jest going in watch mode to run the tests. With regard to Jest - support for ES modules\nsupport is experimental\n({https://jestjs.io/docs/ecmascript-modules(https://jestjs.io/docs/ecmascript-modules)}) so note\nthat the tests use cjs imports from the cjs bundles in `dist`.\n\n## Folder setup\n\n-   `dist`: the built code - built by typescript - you should never be working in this folder\n-   `docs`: the API docs - built by jsdoc - you should never be working in this folder\n-   `src/queries/*`: the query fragment generators. Folder structure follows the categorisation @\n    [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html)\n-   `src/aggregations/*`: the aggregation fragment generators. Folder structure follows the\n    categorisation @\n    [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)\n\n## Adding a query or aggregation\n\nSay you needed an interval query as defined in `QueryDSL: Full Text Queries`:\n\n-   Add `src/queries/full-text-queries/interval-query.ts` with code to return the query fragment\n-   Add a test for it in `src/queries/full-text-queries/interval-query.spec.js` (note the JS\n    suffix - see note above re: jest and es modules)\n-   Register the query in `src/queries/index.ts`\n\n## Publishing a new version\n\n-   Build the distributables `(dist)`: `> npm run build`\n-   Check it in: `> git add dist docs && git commit`\n-   Bump the version: `npm version [major | minor | patch ]` as required\n-   Publish: `npm publish`\n\n## Usage - tutorial\n\nThe base building block is the `Query` class. Instantiate this to start building a query:\n\n```\nimport { Query } from '@coedl/elastic-query-builder'\n\nlet query = new Query({})\n```\n\nOnce you have a query object you can append a query clause to it:\n\n```\nimport { termQuery } from '@coedl/elastic-query-builder/queries'\n\nquery = query.append(termQuery({}))\n\n```\n\nOr if you have a complex set of queries append a `BoolQuery`:\n\n```\nimport { BoolQuery } from '@coedl/elastic-query-builder'\nimport { termQuery, matchQuery, rangeQuery } from '@coedl/elastic-query-builder/queries'\n\nquery = query.append(\n    new BoolQuery()\n        .must( [termQuery()] )\n        .should( [matchQuery(), rangeQuery({}) ])\n```\n\nMulti level compound queries are supported:\n\n```\nquery = query.append(\n    new BoolQuery()\n        .must( [\n            termQuery(),\n            new BoolQuery()\n                .should( [termQuery, rangeQuery] )\n        ] )\n        .should( [matchQuery(), rangeQuery({}) ])\n```\n\nNotice we're always storing the return query.\n\nWhen you're ready to search get the JSON representation of the query and search away:\n\n```\nquery = query.toJSON()\n\n// this is however you execute a query against elastic: see helpers.ts for the method let result =\nawait execute({ index, query });\n\n```\n\nAggregations are added in the same way:\n\n```\nimport { termsAggregation } from '@coed/elastic-query-builder/aggregations'\n\nquery = query.aggregation(termsAggregation({}))\n```\n\nOr many aggregations:\n\n```\nimport { termsAggregation, cardinalityAggregation } from '@coed/elastic-query-builder/aggregations'\n\nquery = query.aggregation([ termsAggregation({}), cardinalityAggregation({}) ])\n```\n\nAnd then execute:\n\n```\nquery = query.toJSON()\n\n// this is however you execute a query against elastic: see helpers.ts for the method let result\nawait execute({ index, query });\n```\n","readmeFilename":"README.md"}