{"_id":"arql-ops","_rev":"1-8aa2f85559f7c1a66d8540ea447c8856","name":"arql-ops","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"arql-ops","description":"Tiny library for functional composition of ArQL operators","version":"1.0.0","license":"MIT","pika":true,"sideEffects":false,"dependencies":{},"devDependencies":{"@pika/plugin-build-deno":"0.6.1","@pika/plugin-build-node":"0.6.1","@pika/plugin-build-web":"0.6.1","@pika/plugin-ts-standard-pkg":"0.6.1","@pika/types":"0.6.1","typescript":"3.6.3"},"source":"dist-src/index.js","types":"dist-types/index.d.ts","main":"dist-node/index.js","module":"dist-web/index.js","deno":"dist-deno/index.ts","_id":"arql-ops@1.0.0","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"aidanok","email":"therealaok@gmail.com"},"dist":{"integrity":"sha512-7nj1QWj8uNP4LipeF6Wkbn3We/2ZVDAaEJWxMk6NNBM5bZBAKsAAn1ime34+2nyuaaA/yBALaanuhF674JjBRw==","shasum":"0eeb7ee7ae71e0c8937c8c82c6bb79a25235dae3","tarball":"https://registry.npmjs.org/arql-ops/-/arql-ops-1.0.0.tgz","fileCount":9,"unpackedSize":11319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdohEHCRA9TVsSAnZWagAAfL8P/3tT46wyO9t17QWvpVQY\nC7GF51es1GdNXNQ8Si0p3T8RfGk+Xqt8/qbloTtm8dek7Ukqcd4b9m+FXUio\n9uiebZ/tPWZOAERKl9rSK/SHaIOy9tUf0mizAbf6lLdEgOoy7qYPqcsgCqYz\nyTw0yLgHu4Z4kCSh5zvTUD2s7A7mEsvEHhKnYOFX5Bwb6GSt+3C4yVnHw5Ej\n1EuAHzFpcH+zGF1KwSozh0jy+bdInesqRADccT9zKoklv+EHOigaa3UCUEvp\nBRCHq768Mq7pmicSg1UtL7vkepEiJ/M49iXkW7ndhiREzmF610zeiMrhY4yl\n9JAOcn6Gi4t428fmkUwA5KMTEPE4AkxTLza3SdPq4XwTt1auZlGfVZU5inhB\nJ8KbtQQZ5CExapeZrbRchgGU7ejAK7m545QKXmlO2Fxq9zgk4jw7WhsKjnwi\nd7TZs5uA+x6tJ6g0Qt+qT9zJqhQA6Bq65n9LUm26irF3xjCINkewfJXycO+Q\nlVR5Hg+xXv/zBzGT+MHLtTDqXu4Pj6SlJvJAmm3eKrwy9S2Xe3YOl+lXlU2Q\nkBqSRqjl/tzUlNwVdabTRidKM7sR+MnqgM1OecuqUxIUeqbF3Dj6ENUNdFWQ\nQZbsD1EBd56Ks+2xi8Fvl8KtpeetYrHo9Tb33iSAKiAptj62iO8Oz1aldVVq\nx2Hn\r\n=mXER\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7sdZx4vzhsjhchuAUD/GZAJlxT8MqPCFj23I9fYVe6gIgEfNL3QiPXq5eu6JkwLjBNLZyJJ5svKEJq455lu1Qwxw="}]},"maintainers":[{"name":"aidanok","email":"therealaok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/arql-ops_1.0.0_1570902278539_0.557952355142211"},"_hasShrinkwrap":false}},"time":{"created":"2019-10-12T17:44:38.539Z","1.0.0":"2019-10-12T17:44:38.707Z","modified":"2022-04-11T15:08:01.376Z"},"maintainers":[{"name":"aidanok","email":"therealaok@gmail.com"}],"description":"Tiny library for functional composition of ArQL operators","license":"MIT","readme":"\n## ArQL ops\n\nVery tiny (53 lines including whitespace) library to build ArQL for queries for Arweave <https://www.github.com/ArweaveTeam/arweave-js>\n\nPackaged up with <https://github.com/pikapkg/pack>, for web, node, typescript and even deno! \n\nFor fun, it's published on the on the arweave blockchain itself :)\n\n`npm install https://kybjhezuyftg.arweave.net/ITTPLYoxidZzAJP50FQ03QJUSkkh9iKHcmMcLZOvqtQ` \n\n- PROS: exact dependency pinning, immutable blockchain so package can't be removed or \n        replaced with something malicious. (although npm lockfiles and exact versions will take of this too)\n- CONS: not exactly easy to remember install line :D manual upgrades\n\nThis works because npm can install a .tgz file from any url, so it was just a matter of running `pika build`, tar'ing the pkg/ folder it produces, and uploading to arweave.\n\n\n\n### Usage examples\n\n\n```typescript\nimport { and, or, equals } from 'arql-ops';\n\nconst myQuery = and(\n  equals('from', 'awalletaddressXyz'),\n  equals('App-Name', 'super-app'),\n  or(\n    equals('someTag', '4'),\n    equals('someTag', '5'),\n    equals('someTag', '6')\n  )\n);\n\nconst results = await arweave.arql(myQuery);\n\n```\n\n\nWith spread operators:\n\n```typescript\n\nconst myQuery = and(\n  equals('App-Name', 'my-app'), \n  equals('myFooTag', 'bar'),\n  or(\n    ...listOfPossibleSomeTagValues.map(val => equals('someTag', val))\n  )\n);\n\nconst results = await arweave.arql(myQuery);\n\n```\n\n`and()` and `or()` will take any number of arguments and produce the correct Json of nested expressions: \n\n```typescript\n\nconst query = and(\n  equals('my-super-tag', '1'),\n  or(                                     \n    equals('my-color-tag', 'red'), \n    equals('my-color-tag', 'blue'),\n    equals('my-color-tag', 'purple'),\n    equals('my-color-tag', 'orange'),\n    equals('my-color-tag', 'white'),\n    equals('my-color-tag', 'black'),\n  )\n);\n\n```\n\nThis will produce a query that matches TXs with the tag 'my-super-tag'=1 , AND any of the color values that match 'my-color-tag' \n\n\nOutput Json:\n\n```json\n{\n  \"op\": \"and\",\n  \"expr1\": {\n    \"op\": \"equals\",\n    \"expr1\": \"my-super-tag\",\n    \"expr2\": \"1\"\n  },\n  \"expr2\": {\n    \"op\": \"or\",\n    \"expr1\": {\n      \"op\": \"equals\",\n      \"expr1\": \"my-color-tag\",\n      \"expr2\": \"red\"\n    },\n    \"expr2\": {\n      \"op\": \"or\",\n      \"expr1\": {\n        \"op\": \"equals\",\n        \"expr1\": \"my-color-tag\",\n        \"expr2\": \"blue\"\n      },\n      \"expr2\": {\n        \"op\": \"or\",\n        \"expr1\": {\n          \"op\": \"equals\",\n          \"expr1\": \"my-color-tag\",\n          \"expr2\": \"purple\"\n        },\n        \"expr2\": {\n          \"op\": \"or\",\n          \"expr1\": {\n            \"op\": \"equals\",\n            \"expr1\": \"my-color-tag\",\n            \"expr2\": \"orange\"\n          },\n          \"expr2\": {\n            \"op\": \"or\",\n            \"expr1\": {\n              \"op\": \"equals\",\n              \"expr1\": \"my-color-tag\",\n              \"expr2\": \"white\"\n            },\n            \"expr2\": {\n              \"op\": \"equals\",\n              \"expr1\": \"my-color-tag\",\n              \"expr2\": \"black\"\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n```\n\n\n\n\n\n \n","readmeFilename":"README.md"}