{"_id":"@anderjason/composablequery","_rev":"6-51ea7765afda14448c5744db81d07b54","name":"@anderjason/composablequery","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@anderjason/composablequery","version":"0.1.0","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","gitHead":"dd5ac086c3ee375b36322190228d1ea1913884e3","_id":"@anderjason/composablequery@0.1.0","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-VOH9SCwTBPZHCKIqNRLN5/gLY6OR26eQ6Za/RQyvRBikQmKM6Jjdq2CSlrBJ8+2SKfMYM/xtPcmCavKyuNE8cA==","shasum":"e8a59397e5ac238b8b2c99a32d677d2241f4a254","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.1.0.tgz","fileCount":15,"unpackedSize":14845,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRYK48Fg/P+hcrCcdKHp9pdF0/ladK5Zw+oQflPeWBCAiEAonp8Ypha6USGIh5BM0tu8meaapiaa1Yq7a3ZNUN1KkE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYpenACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrmxQ//VxqbDaPzfMddCguP5dOhjC+ezR2ljlZIi6xHyH0qsYw/HZ8x\r\nKAbw6jc3j+0G9tVorwgutE3guN5/Tmfh0S5OOctX4LzVXZHvyeif86Ns5b6l\r\nq7jjmvqp24yMR3YNMaromPhL2cZjD43IJa2mQGaR+FBQGWQNH5wwg4nFTBhX\r\nLq6NBt5/dUVOEH/4Yj6oqJbui6NW6cdl56zs82HxY9yYaq7f9WEYByhThBYA\r\nLvuTJoRw/qNfPws/g23BwZ5voS96qa5eMZhbz16qG92IhS30mOYIlHBeXUIw\r\nAujmkDoON3+lGMMPuKtI5kJT3S0lRHGwKXVykOqVlqvGkgY7s24SOhSV0X4+\r\nD71pCPriXC5X9Xen/7CPG7pTddltN9owfa7l6JSdJTVKUndTnMTkOH0dD6L3\r\nZ5dIa0q/sKvqTHQa6CHJtCClZsjWDPLyS2rguFQR93ZK+cU6Fvi1A0/8t29v\r\nLWWnKOyU7nwcjsjk5nrxh6c3JjfCZSdp6UssVteBgaZ9yRUO5jxq8NDkqH5i\r\n3+e5bwNnokyM+VH0C9Yvln1pUcFEqF/obSf+OcEf9Ou3no11R8GdPXJr2pUt\r\nj1EMFTmvtjBNAV18YggNxZQyhgF20b+rUT1HCtez0O39MIGtwm9Mw/DIm4Md\r\nkSiSAtb/uNKO2YPZ9uDNLHFFWU2dhhyprzo=\r\n=VOq8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.1.0_1667405735675_0.9234834356720716"},"_hasShrinkwrap":false},"0.1.1":{"name":"@anderjason/composablequery","version":"0.1.1","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","gitHead":"ffad5b7a9e7f85dc15036f34c1f5d8ec0b44679a","_id":"@anderjason/composablequery@0.1.1","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-Mnek/zu5TFqhIJ4QGSt/DfJ2J6aatMpASgoJmc66CM2Kc5TYlr2dWJLzgaRyfxd5p1FTdU8Il9pw1TCknTAsJg==","shasum":"5bf655a41cbf9cddb1cc57d8fa9278c0f0a7595a","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.1.1.tgz","fileCount":18,"unpackedSize":15341,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAgvorLwpX/TiNjEE4+pBhOb588pSEAKkMa2IWje6oSVAiEAnePQc9MU8X6UGixH0A0E7Hbm0972XzQEFMOfp+59hUM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYpxTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpqcw/7BD2qy4y7FTsq/7vl9G2AKVYT9XoS49drmnLrcNWnq1gyMfPV\r\numMBvhrc2cHsWgTzW7eY1YOGn8m392dWrizCX9Y+lzYViaN3KWyzgC09ovFv\r\nNL8K0uPA+8jGLYxxbXwE9YrWFveWnKhnicVEvf+wf4QCh93ITj1/jDvgewaN\r\nEPNKkUMZ64Wzvbj2v9YtGbHVP98jCncRzOSEAFndmO+zW8sshCxwxHJQDnxM\r\nuNIKsOGl82MH+K6n8BBkcrnScofiRHJpsJdp5Fp7WnMdx3QYqOjQk1B08kGY\r\nzDuJXh0bFs1Wi23IxT4TwRsvfxVlxLGVmVlG1S4VZCb8lWJiyWbdVzdzSvNh\r\nghrp2qTDO+SCVn3AiGPQsADvGYyonOWPzY9XoKzg5XyZ6E4kP/7VhZRS5smD\r\nbiau6JUVOZx9P3YTKl/87qq22aneHVcj2XOAg3NksHy4OJwcLDcfFGSn1mQr\r\nlI1SnxyVvLmVhvgy+jSf7KOYDMoDThVVTO9v+5gfw7l86vImN316fnQf9xLa\r\nNsJf8zaakJ4bNyCsmdCvnYz1JIVXtfl6Tt+OJk5vylFsBTGDVWczs3XELFj7\r\nRsuLxnEfXKFpILJlqbpdNTEmN03MpRlUBWix2/3t6sfXPSim3Ams3k+7LlJ/\r\nA/q+Hcum26eEAsgN4GcnPuxISo8bYhKch9w=\r\n=IE1L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.1.1_1667406931734_0.4906097813545607"},"_hasShrinkwrap":false},"0.1.2":{"name":"@anderjason/composablequery","version":"0.1.2","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","gitHead":"ffad5b7a9e7f85dc15036f34c1f5d8ec0b44679a","_id":"@anderjason/composablequery@0.1.2","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-qpkOGnaMYcU/WU34BfldiWYMtQmyIY+DNgOYyoQkfs7GBMmkr9K0vhGRcf7iK0Mor6x7jM+DKkPxO87hR0WkQA==","shasum":"1fbc425300feabc7185c3758a73fea321d0924ce","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.1.2.tgz","fileCount":18,"unpackedSize":15470,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOAoi+PuFQ3kJnCsVNsM0Pnui2rGKZGqL6mat7W4kJFwIhAPHraP6GPy4jKT6+sRvehHNo0DqKrQpfWAwRYsAEXAR/"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYqCcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoq6w//dDQjpl1/kIiOL9S3+IxreXvTyI0QqWPrzsW5FTXFWft6XX1v\r\nzmEUj1ozYrKyEZ7MLECaWK0tirwIXYEoEkFkjLQqRWZuUN+bb08XjJtbM9Ro\r\nP1ZHFqVOg4Bacjuodhu9DrtU9QMbuhhZm4oZ+6OP0BmhSmY44UBPvFLUZEMZ\r\nUneA1l947zHnKYI7Ygyebqw1DnqeUTgcfzK0yTmpHDuyrToKpbLYB+mPeyE3\r\nSpdYo1Y2wMbbQUAnDMQYWUUBAvMBcJULg8t5R7Qx1lxxZWDg7zL7xYzkJWb6\r\ncCPY5fmOaKzNL1q13XBdZFbAn9LyzAcADCPimH7cswWphpFXrui5ASk3sFQl\r\nO6vfjQg3uh17YrAlKkKasYRas4sSvb1e43MhclDhn8bn8qJP+ShLr66Gd8Ib\r\nkXA3DrvnBaApJkk3B1rJSHyfeSsO/n8+OqjEF+RUZPol35NggfDJ4/6J6uDk\r\nVHF41JXf8chQW2HWGwRwJKsyCisYTKnhhik8GGHonc2nU8NQ6yWurPCEhi1I\r\nTaQ7Y2t4LWm1NYusRCodnkY7xnFg6fT0PW1MQ6FhHP3B0mWdF0gBt62MtSqd\r\nx7ykAOzS50gRGSfWc5O2U9dzJb0f+eE49noiT2rJMqTFOl/K9OXm+7aBqFvE\r\nrGd8aofDxZQ9OU4FQ49hFIEKHHU9OgiXk8k=\r\n=FvxS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.1.2_1667408028201_0.7173782569583009"},"_hasShrinkwrap":false},"0.1.3":{"name":"@anderjason/composablequery","version":"0.1.3","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","gitHead":"ffad5b7a9e7f85dc15036f34c1f5d8ec0b44679a","_id":"@anderjason/composablequery@0.1.3","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-xKcjKCesIBAx2Jol/KTcAYKBvMcDEMGuG+S9moLbigTFvBORwQbhXs8Jcv139GPxSwdLo7tJ5y5X7PBe04nwgQ==","shasum":"b44fa1e6344ec29e7da16142cb388e0c26331b21","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.1.3.tgz","fileCount":18,"unpackedSize":16509,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC38nH+BYlZf/OsJR1gylRsygadEaG+GpCNUad/WeXgugIhAOn4fxqlZPbU1m7NUq8Hz2M5VWFUMSXTW/vKhGqMl/OW"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYqnoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrGMA/+NceWSRskBEu8D4/kfkNGh4aQozL1VQ0gqbyfr5GeU9svD8LP\r\nzfRYhNoE+T/MUz6ghusWYNgGodeKBY744eJXEbz+8A+npNGf9AQr4v5TTDug\r\nM97ajIaNjDvCoTDUYf/J9C19P4/3j5c6SeZoVXTLdgh9Uuvsj/CPu4s5WF5j\r\nU7R2TvvvBnYn5se2/SD5PIpxpc2DMkr+9aA4pnLtyVTndeDxgGf3I6zNcAHK\r\nMd5w64+8H2SvmqpLEuaW8FortT340lA3FhO2Kezdtjp0/jyh7R6QFiCcGQxf\r\nS+TqtHjTKi/WJoA5tTu46nBW1ty1/9bLXRO8r+kEpRqhV/UKsXpzpm+kbxrG\r\njc1PDx0ArD2ywpGzuSpjgwptD4Hk8ET2ok9lN7qQlpvr9Zk0Ldvlm1ffAJ7f\r\nkrFwb+QZW4LGTbdcDV6/UibIqboF4FBsAtsqwzdZZ+QPp5S2u7R4pvbD61h2\r\nmSddYjFPenmZ+/F2khGtNheK7y1S9t86KCxobyyGC9Kwo0v1uhOIsyBT69in\r\nB4jYjf8xEtoX4yWXTR74phvZDdT20Vcqyt2ogbVD154NJwbrB+0aJP2k9+Mu\r\nYe/fU8GmRwx/bBEp4YBZI9JqZ57Y709zPgWTeuMwFFmmKkUq2jX/Z1Cl1hkL\r\n71F5RV1gl5jVNaZETs4ZbPtEYFiBlNTeIQs=\r\n=f+hH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.1.3_1667410408559_0.9977662309059196"},"_hasShrinkwrap":false},"0.2.0":{"name":"@anderjason/composablequery","version":"0.2.0","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","gitHead":"51ea386537a08032dd290eb4191e52cd28193f4e","_id":"@anderjason/composablequery@0.2.0","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-AgbEPxgypQtxhuBaYS3orv4zTw4BgyKlLAYXhh5sXHG6zRqJjBxvElQpDzklzYO/UmoPR5IbyJoPdmE2pzwFFA==","shasum":"a7f23154fc4b5d19c8c704d5c9777066fa77c061","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.2.0.tgz","fileCount":18,"unpackedSize":15853,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH/gCQB0JxtZdeSjZ7PBis/9i83gkjs1l5Dm/h8wLK1gAiEA6XJgt7RXw3vtE58uSFAG75FVmt/+gwOPCzwcYPWLo3k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxjLIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrpKw/9HqUpB4kNbKAYpwXGXw1Lslt4I6ttH6s5NVhRHxbaLfauZVdV\r\n94u5HfLkM7f9oKes+pa8DdYzz3FGOqgsuIJbyDFa11kFqTXDYZ5OGj9wCuHC\r\nYQjRI4mt7x4UWELdjqaEagWgWlWlom7vpKPrE6peZllgoGyodUGIhoqTiNj9\r\n0qhQABBBSlax6bdcxkEYtEVzCxBCeYIU8Y07Dcw0MMARrVx15m5vdoWqZXqB\r\ntIad4XZWNBHJ+GBOQNA8hgxqGLv4rpZOi3N9n3ScYKB2giAbPqrl50h9eeyA\r\n9Yk4jkeOj0qeGDj6cDpYmacfOa9UM6bnsxjYbcwjR3oNhf0AF6RDGvst6YAX\r\nDeZoVuz/f03ehwEH2hQVJ26jcCu9rvsnAVO8TMNOYvT5ShM45AyslkB5cHEl\r\ndukWl5ndaIQJMybDu+tJQEW1yu0aLDzTLEjhVb+VeIp8vkprsiENBzl4cKxt\r\ndEJceQJSAZrbUPi+fjs60Nmg008Z5tLYLLixovpV6Ef8KScgt8Rn1K/Kj5Fm\r\n2CBIBUxyGCoj177slxnLHL3kEy152n6D8jz/kfaBdcjnrWb8RHppM2T45Bd2\r\nRaJIa7vi/DkV67WYLbK+Ypy6WfN8LqrwdgqtgIoVKMxDp4vpxasofjUpy6uC\r\n00P/LrOA1+c9xU150KrDfc+RbizPPz9sOiQ=\r\n=90u2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.2.0_1673933512736_0.2825425050056405"},"_hasShrinkwrap":false},"0.2.1":{"name":"@anderjason/composablequery","version":"0.2.1","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","devDependencies":{"@types/node":"^18.11.18"},"gitHead":"9899c7181bb507543b50a7fe419325341ed45845","_id":"@anderjason/composablequery@0.2.1","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-KjKecSci8DK8pTkUq39lbR03g3SPfRWtpN8XenIlBYaMI+zdU/qvkRPVzM4CijvmGxCJ402b4hP4S4kksxzsrQ==","shasum":"b3d441d752f0f708674760e80716bdbae18a21af","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.2.1.tgz","fileCount":18,"unpackedSize":15952,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhrz8Dsx+3hlTvkUSCGO+ehaRMMdKLVHSO+FZGJPOwJQIgRpFJsFJ6yKr6hhB1G55MOMTQqYB8HjJhNbOc3BU6ntM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxwtbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrqIQ/7Bb+rAQDKk4+9G4T+RqqQ3YqJI7mmY7AkJYfYyzVGWqjnM6u4\r\n30d01OW2J56nmTs340mBdMbXR05NqIXDBbRjJXb+T7NLtFIdfPu+c1D0nGt9\r\nufQ+rffxcaKEAF2x6MeImGYXiap4ckw3Meypij29Yxb44cOSzfvZKQ2Oy0qp\r\nTXRIkuI0gAKeETauPhsuMca8V3iDsoA0e9NyitN1tvnsCl9MdbGKMq1cVXpm\r\nVp6HJeJiUxRDCFRqH67v1PKSYJJsDBIWKpUID3XLF+v4mwOEpOiK9nEvSLez\r\nwe6g4xFpUODUWRFFY0RdwE62ipXHVgpNhiG/yDV2SpMPKIOd1MS/6GAyT+wx\r\nsRVl88b0UMfBN8bdYllaq9kjkxz9m2n/eOTP8d7sgzsy6sKmzzsv3DT6LIkf\r\nhKMx7JnPvJknU9dlRhr9A4T2cvs/Zu3Ewuy4C8Vrq4MRU5RKgtXOR6CPdwTg\r\n7W83CvdViuh+BqqRPZSzJlBzfTdoJgQGP7ns2sbu4NUIjaV8nvm52B5U+VeA\r\n9qm5od+I/jdaAVvM90RaIk4r2+J/tXDVzW2dd4uO+KdtZWJmvdeKQ0L6BVq4\r\n+ww9cxZJQ/fui60CN+XknSOcTtBqfJ25J2JYSdgFVsZxWaWwyTk1mDbB9FIn\r\n5F/0fDTb0eGrKvvK0ovvqA1xOkt10iJ4ntc=\r\n=elCH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.2.1_1673988955251_0.6262984108587879"},"_hasShrinkwrap":false},"0.3.0":{"name":"@anderjason/composablequery","version":"0.3.0","description":"<h1 align=\"center\">ComposableQuery</h1>","main":"./dist/index.js","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"license":"MIT","private":false,"scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist && rm -rf test","test":"tsc -p tsconfig.test.json && TEST=1 node test/index.test && rm -rf test"},"dependencies":{"@anderjason/tests":"^2.0.0","@anderjason/util":"^2.7.0","typescript":"^4.8.4"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"homepage":"https://github.com/anderjason/composablequery#readme","devDependencies":{"@types/node":"^18.11.18"},"gitHead":"364ffbaa79bff9d3c5ea231a29d3d00211a57625","_id":"@anderjason/composablequery@0.3.0","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-rbi9XGf0k5Yo0sFU5RC4g5VJKQaF1jEAvN6Gg8FII8ncKQUNHJsChh/zjzL5H3ljg3sjktczoWfwByvhhUFKAg==","shasum":"51fb102a0897c27d079e2d817217ee2d617d5109","tarball":"https://registry.npmjs.org/@anderjason/composablequery/-/composablequery-0.3.0.tgz","fileCount":18,"unpackedSize":16005,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDjYkrcnHkbUuhQexyZTu4LwVrWVOi3hbWd0JzyPHT3PAiB3/Bjv3Gjb03PlxsWDYLnOlJ/XVNxTs4wy8bUTo+/CKQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyDdYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHyQ//XjF1iDzZe39L2/BPi4G3ZPvOlIbZk875qjuj1F5L5Gr+mOVh\r\n8y2cQ5Xrjgh2Qcgs+pEi0VI0XS8apHZu7p6Y4LMr+LQcSdRLHPscMnvp6Z+Q\r\nnQt7dItauuC3GvtBw9D6ihusU/kOti14IckW1TrqsFUMN+fnURrPUgPK3+FX\r\naC78ta2AERata0rtCYKiuaWpJP7b1FEdQ6GGu1xUqZ6vbj+2/YJvQcaV1LGS\r\nVUgOkU5sSakBfnPZN6SOhH8/N1Akox3BPCwYUWxiIhzXz8KDRHlujiC6sXsl\r\n5sD3mZGW7+p29CjBDopU9VC0IwYKIRlrI0g6de+TWsqWrw/QTu1NiPegulst\r\nDBY2ZCHd4SYKZXlK9n4QWrY14GYsBmaZcQwI0y9EC+QntMLcmMfpNCreZGqz\r\noRHJ3/Z5xDvnxI8E1sUZ/4ipUiAqak46c2RXXgzfovqvuH9knDlik1s7faRi\r\noQlN7N1zqzib+FAM4K6f/iJSKChZg3hHljiBrNL7jMGCReDlR57lq7q1COaA\r\n3muYV6FkrkH1N4ykTmOrRN5gsLMZbbsqrwuAZ+hoB/QfuVUD6jxig6q0bSHd\r\nlqRiXTafglqKke7Cx7V8dolu9hWjG8RIWQVt6AqM+maHD6GqiVhiNQWgCAU2\r\n9ZJEXe/KoI66zna2dj17xtBbH5qLRIOkt0I=\r\n=PvLP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anderjason","email":"jason@gearsandwires.com"},"directories":{},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/composablequery_0.3.0_1674065752212_0.4545011807564445"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-02T16:15:35.584Z","0.1.0":"2022-11-02T16:15:35.812Z","modified":"2023-01-18T18:15:52.486Z","0.1.1":"2022-11-02T16:35:31.900Z","0.1.2":"2022-11-02T16:53:48.353Z","0.1.3":"2022-11-02T17:33:28.764Z","0.2.0":"2023-01-17T05:31:52.904Z","0.2.1":"2023-01-17T20:55:55.486Z","0.3.0":"2023-01-18T18:15:52.389Z"},"maintainers":[{"name":"anderjason","email":"jason@gearsandwires.com"}],"description":"<h1 align=\"center\">ComposableQuery</h1>","homepage":"https://github.com/anderjason/composablequery#readme","repository":{"type":"git","url":"git+ssh://git@github.com/anderjason/composablequery.git"},"author":{"name":"Jason Anderson"},"bugs":{"url":"https://github.com/anderjason/composablequery/issues"},"license":"MIT","readme":"<h1 align=\"center\">ComposableQuery</h1>\n\n<div align=\"center\">\n  <strong>Make your own SQL building blocks</strong>\n</div>\n<div align=\"center\">\n  A lightweight library for composing parameterized SQL queries from nested parts.\n</div>\n\n<br />\n\n<div align=\"center\">\n  <!-- Stability -->\n  <a href=\"https://nodejs.org/api/documentation.html#documentation_stability_index\">\n    <img src=\"https://img.shields.io/badge/stability-experimental-orange.svg?style=flat-square\"\n      alt=\"API stability\" />\n  </a>\n</div>\n\n<br />\n\n<div align=\"center\">\n<img src=\"docs/images/composablequery.jpg?raw=true\" alt=\"Project image\" />\n</div>\n\n<br />\n\n## Table of Contents\n\n- [Example](#example)\n- [Installation](#installation)\n\n## Example\n\n```typescript\nimport { ComposableQuery } from \"@anderjason/composablequery\";\n\nconst conditionPart = new ComposableQuery({\n  sql: `state = $1 AND type = $2`\n  params: ['California', 'Post Office']\n});\n\nconst selectQuery = new ComposableQuery({\n  sql: `SELECT * FROM locations WHERE $1 AND is_deleted = $2`\n  params: [conditionPart, false]\n});\n\nconst flatQuery = selectQuery.toFlatQuery();\n```\n\nThe `flatQuery` value in the example above is set to:\n\n```typescript\n{\n  sql: \"SELECT * FROM locations WHERE state = $1 AND type = $2 AND is_deleted = $3\",\n  params: ['California', 'Post Office', false]\n}\n```\n\n### Tokens\n\nTokens can be added to a query to be replaced by parameters later. The token `$1` represents the first value in the parameters array. `$2` represents the second value, and so on.\n\nThe query text and parameters are always kept separate, so they can be passed to the database engine separately. This is helpful for preventing SQL injection attacks.\n\n```typescript\nimport { ComposableQuery } from \"@anderjason/composablequery\";\n\nconst query = new ComposableQuery({\n  sql: `SELECT * FROM people WHERE status = $1 AND company_id = $2`\n  params: ['active', 'company123']\n});\n```\n\nYou can reuse the same token multiple times in the same query. The following query uses the token `$1` twice:\n\n```typescript\nconst query = new ComposableQuery({\n  sql: `SELECT * FROM locations WHERE city = $1 OR display_name = $1`\n  params: ['San Francisco']\n});\n```\n\nThe number of unique tokens in a query must match the number of parameters. The following query is invalid because it has two tokens `$1` and `$2` but only one parameter:\n\n```typescript\nconst query = new ComposableQuery({\n  sql: `SELECT * FROM locations WHERE city = $1 OR display_name = $2`\n  params: ['San Francisco']\n});\n```\n\n### Supported SQL\n\nComposableQuery doesn't parse or evaluate the SQL text, so you can use any query syntax you like. It's up to you to ensure that the SQL text is valid for the database engine you're using.\n\n### Supported parameter types\n\nThe following parameter types are supported:\n\n- `string`\n- `string[]`\n- `number`\n- `number[]`\n- `boolean`\n- `Buffer`\n- `null`\n- `undefined`\n- `ComposableQuery` (see [Composition](#composition) section)\n\n### Composition\n\nComposableQuery objects can be composed together to create more complex queries.\n\nIn the example below, `selectQuery` includes a nested partial query `conditionPart`:\n\n```typescript\nimport { ComposableQuery } from \"@anderjason/composablequery\";\n\n// conditionPart is only a portion of a SQL query,\n// intended to be embedded in another part\nconst conditionPart = new ComposableQuery({\n  sql: `state = $1 AND type = $2`\n  params: ['California', 'Post Office']\n});\n\n// selectQuery is the root query\nconst selectQuery = new ComposableQuery({\n  sql: `SELECT * FROM locations WHERE $1 AND is_deleted = $2`\n  params: [conditionPart, false]\n});\n```\n\nThe `conditionPart` object represents only part of a full SQL statement. It can be embedded into other queries as a parameter. To do this, the `selectQuery` SQL statement has a token `$1` in it, and `conditionPart` is passed as the first parameter. Queries can be nested any number of levels deep.\n\nNested queries (like `conditionPart`) and root queries (like `selectQuery`) are the same from a technical perspective. The only difference is that in your usage, you consider one of them the query that you plan to run.\n\nComposableQuery objects can be flattened into a single SQL string and a single parameter list using the `toFlatQuery` function on whichever query you consider the root query.\n\n```typescript\n// In this example, flatQuery is set to a plain JavaScript object\n// with two properties: sql and params\n\n// The sql property is a string containing the full SQL statement\n// The params property is an array of parameters\n\nconst flatQuery = selectQuery.toFlatQuery();\n```\n\nIn the code above, the `toFlatQuery` method returns the following object, with values that are ready to be sent to a database engine:\n\n```typescript\n{\n  sql: \"SELECT * FROM locations WHERE state = $1 AND type = $2 AND is_deleted = $3\",\n  params: ['California', 'Post Office', false]\n}\n```\n\n### Executing queries\n\nTo keep this library small and reusable, it's up to the user to decide how to execute the query. For example, you could use the [pg](https://www.npmjs.com/package/pg) library to execute the query:\n\n```typescript\nimport { ComposableQuery } from \"@anderjason/composablequery\";\nimport { Pool } from \"pg\";\n\nconst pool = new Pool();\n\nconst condition = new ComposableQuery({\n  sql: `state = $1 AND type = $2`\n  params: ['California', 'Post Office']\n});\n\nconst selectQuery = new ComposableQuery({\n  sql: `SELECT * FROM locations WHERE $1 AND is_deleted = $2`\n  params: [condition, false]\n});\n\nconst flatQuery = selectQuery.toFlatObject();\n\npool.query(flatQuery.sql, flatQuery.params, (err, res) => {\n  if (err) {\n    // error\n    console.log(err.stack);\n  } else {\n    // success\n    console.log(res.rows);\n  }\n});\n```\n\n## Installation\n\n```sh\n$ npm install @anderjason/composablequery\n```\n\n## License\n\n[MIT](https://tldrlegal.com/license/mit-license)\n","readmeFilename":"README.md"}