{"_id":"mongo-collection-hooks","_rev":"33-33ab1a035ad3a933373f36840e7a6e96","name":"mongo-collection-hooks","dist-tags":{"latest":"0.2.20"},"versions":{"0.1.0":{"name":"mongo-collection-hooks","version":"0.1.0","author":"","license":"ISC","_id":"mongo-collection-hooks@0.1.0","dist":{"shasum":"b8a5318831e3cd991162d0e2e3986711fe880fe9","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.1.0.tgz","fileCount":103,"integrity":"sha512-Ld88CEFso209UlAy0DaRTlbXR/aG9dJv7MrJR2hrY5c8EquJc7g9Szl+w9gleV+VU2BS0NIOB2whoj0BwbWrzQ==","signatures":[{"sig":"MEUCIQC9/wxt9HNMlP8WHGt1iapTiYQLcRZY47fGdDzScy9NfAIgV46aMzkXVn1RLSb9nLXs5Dky5zRc5qXAItbRfpHDP+E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":458278},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"gitHead":"d3da6985a83a8c0e4f2f322a2173cbc7fa583fbc","scripts":{"test":"npm install && npm run test:unit && npm run test:types","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-legacy":"npx tsc --outDir legacy -p tsconfig-legacy.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.1.0_1719021530971_0.08428000217612142","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"mongo-collection-hooks","version":"0.1.1","author":"","license":"ISC","_id":"mongo-collection-hooks@0.1.1","dist":{"shasum":"269faac8e8e8cbe43a00e03a8fac6faa88f51b83","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.1.1.tgz","fileCount":88,"integrity":"sha512-gHLp1aqiRqN3ZfRB56wQVVzj1I4g5ujDJaNGJZwhC5VV4I4veuj77ghnyn/aamUCOywZ8qDf0hxI1oa2C1OYQQ==","signatures":[{"sig":"MEYCIQDYken9tY8Pr5pBbjJNX/Ll/zb9U6qyN4G7/1ZjsL9wIQIhAJUy1AK+FBDCY3th/Fq1FkxPDkYF5f1Q7DzSXXnNaJc6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":397875},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"gitHead":"d96e2b8a5bd70011439d172bc9b4f2557f5720a3","scripts":{"test":"npm install && npm run test:unit && npm run test:types","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-legacy":"npx tsc --outDir legacy -p tsconfig-legacy.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.1.1_1719099552657_0.196978739117041","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"mongo-collection-hooks","version":"0.1.3","author":"","license":"ISC","_id":"mongo-collection-hooks@0.1.3","dist":{"shasum":"601d2a9484dfb5fb21c3369df586fd2c8d42dfc5","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.1.3.tgz","fileCount":88,"integrity":"sha512-HrKBVxxnFi7WxHS1svd27uMXhIRX0Z4eXTY/yM9nEHbrhLVBcSkNDpgHh/HAKUK9XSRWrzz9ivXSwZDtTIPJfA==","signatures":[{"sig":"MEUCIBFhknEuNxEioNHQVh6MOWDXpZSEvlM2MGqPTbdLPQ91AiEA3KgC2xcWcnbvNd3zzzmFaCaBHJ51BJiazol7/EacOPU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":398085},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"gitHead":"76480ec684086c9a03e677a8a5ac95c259796a71","scripts":{"test":"npm install && npm run test:unit && npm run test:types","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-legacy":"npx tsc --outDir legacy -p tsconfig-legacy.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.1.3_1719100685257_0.09114477652493846","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"mongo-collection-hooks","version":"0.2.0","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.0","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"a32c6b83fd1acc49c77597ec1cf4ac211f4f9f8e","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.0.tgz","fileCount":251,"integrity":"sha512-X8YGK9gPL2XMLA3zxNKyoT7EzxV5KgrzZizxwObPZgeBaVLzd6GdWbnxjDxwOusxFvjnsvKXRVgEzKKkCtiAVA==","signatures":[{"sig":"MEUCIQDVB20ICOFGLUW01MWXv4rD4CaHVOoIcd5qmllZX9v/aAIgP9uigDAymAcE35bYIUyWwHGOyeJ2u+s4jieURfq4Rxk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1275169},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"}},"gitHead":"76480ec684086c9a03e677a8a5ac95c259796a71","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.7"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.0_1719967540490_0.5250442944653684","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"mongo-collection-hooks","version":"0.2.1","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.1","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"c5f654e554bda5180f3c9e72c2272858a5638ccc","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.1.tgz","fileCount":245,"integrity":"sha512-TuifzoaQAHQAtj04cnb+2+lTJMZyufoRAWUkoThqEEVNHwFtpzNc742lWabdEJ0ttP74rNCT8R93oFYQjJ1ghQ==","signatures":[{"sig":"MEUCIGp05+t8r/4X13mRvMBpih3Kdg4DsrbJo36wkyBx3VtsAiEAsZJ/+t4GZrQDh1xsxYm+fn25DU9acxLWBVHlHjPQXHY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1252511},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"76480ec684086c9a03e677a8a5ac95c259796a71","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.8"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.1_1720126659345_0.7611738358644962","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"mongo-collection-hooks","version":"0.2.2","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.2","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"dd70fea8a1e294942d7630b6cae63a30d7df74c8","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.2.tgz","fileCount":245,"integrity":"sha512-ZmboJaF/Jsn09wE+osVZPBAJ1i+NOpr67OdyNJOITu9JL2RNGxuPGifFjx+CE9Lolo/mTKiWUad07w7xjaAHRQ==","signatures":[{"sig":"MEUCIFtvmIfIT9prnupGVQ5oT2pSwgOCjcaVJFeUAyeM8+0RAiEAjFtzBBxf1HPLM3yzyHQV1FIFG13jVigkQiaNBW4ACsw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1252587},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"ea50dc002dc3dc83c755df8eaca18381e3b6594c","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.8"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.2_1720130238059_0.8302139735240799","host":"s3://npm-registry-packages"}},"0.2.3":{"name":"mongo-collection-hooks","version":"0.2.3","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.3","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"dd15dc5d5a36e5386df8e2eecf09320c251bb51a","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.3.tgz","fileCount":245,"integrity":"sha512-dZgJeytQuur8OLJLERU+8c5+3T6KRFUfulIvLCLI/Ke0crTED3DkzwfF9BsK+Juydu2XEsPrtXQVLB44dS4A7g==","signatures":[{"sig":"MEUCIQCmZZd5lxa9MC9N+Etj52odfq1/I9nKqcN55zCjglMYNAIgYcW9y+YO/tELfjhpxmN1yq3a3kL06o6UaekF/XTpCD0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1272538},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"917ad5a9c47f8fd09dff59aa42c9646de6aa198f","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.8"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.3_1720141175453_0.5460204637708075","host":"s3://npm-registry-packages"}},"0.2.4":{"name":"mongo-collection-hooks","version":"0.2.4","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.4","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"7fee53910db6a9c8ee6edac83c15655a06418bc4","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.4.tgz","fileCount":242,"integrity":"sha512-VBrb2mFIICUVhQULxclZmNSO/jiUEmugfdXIB89V5Wx5S8cYA1tXS9ReQlkS9iKelu/R4Y+080VCHwA5TtTtUQ==","signatures":[{"sig":"MEQCIB6MONQHOBkFSGu5qePa7qVO/IEdTdHEcfKtC088Dq6MAiB6Bl2qXrXO/3WMdsLmqqtesDgAEzeEnheTqTlfwK1kaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1260900},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"b7790aab1521c4fb23f876d4f250a07f54fabf52","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"10.8.2","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"22.8.0","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.4_1728784448740_0.3625991396914454","host":"s3://npm-registry-packages"}},"0.2.5":{"name":"mongo-collection-hooks","version":"0.2.5","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.5","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"a27192fca64a117e01c330db99acef3fc4ebebe6","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.5.tgz","fileCount":242,"integrity":"sha512-7WDlLWKwNLK3Cjj5rIi+RkuahBlSCCmQbsWqEVPqJAhgfmB0VHRU2HhABvz+mhy0LTdan+gIQ1hYtza/q/IC+A==","signatures":[{"sig":"MEUCIQCusQMc0/noa08GTY0s0HXZhk1PqH94Q1OJTxLwAv+YNQIgDpJkj71Ms8Yr5MyCZDoCtzsGTPBsoKdaMyCegMzSDE8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1261014},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"abf794ceaf21d7b5ef90974392aae309d4250c02","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.5_1736476578857_0.8208189037682407","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"mongo-collection-hooks","version":"0.2.6","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.6","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"dbb7ef85e5d1bbfcfa9ae464b7943a5a57940aec","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.6.tgz","fileCount":242,"integrity":"sha512-EFKqhBigquv2ln0nqHSFnS11LPGP3yn8AAm5v8Uisn+nHgMgs3oXF51FCJ94bqW9QGE33HBnGfGwXbokl1UFAg==","signatures":[{"sig":"MEQCIGdlj3W1eAIZcOD7q1tXADMpF2jgiHZY8StfZcnbUnQRAiB2wlFNKwLodQtNx7WbeFjBY7Zo+LJ0RBMi1l6XbaW3+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1261825},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"e746b222b47fc4144d7a8eab9e350fd81f19c95e","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.6_1736518198637_0.9032226952180007","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"mongo-collection-hooks","version":"0.2.7","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.7","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"cfc4f83cb4a04dde32e0b9f73432c3d546f19a4f","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.7.tgz","fileCount":242,"integrity":"sha512-YsGYSmIGthWMnG3xEHhsECd2bhfOcxa/KB5EazKOB/9fpQKGf3t3GPr9H8nTy86lmE5qHeLUA53M329D3wpXvQ==","signatures":[{"sig":"MEQCICN4QbdKgmT7WqQsz1WmnEoT5RDB0paX7UZCSaj1eHHpAiAfhKWAjJ7+q0Hb+REOuBFd5cZD91d8H/i2d66UXlC7iw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1266090},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"5cf17e75ad78b693c3aa4221973642680723e89e","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.7_1736798822477_0.21790189931674075","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"mongo-collection-hooks","version":"0.2.8","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.8","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"ce019bfce475f2ac8b5fabd285ba25652bc3f09d","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.8.tgz","fileCount":242,"integrity":"sha512-w3yeNXB9RjFvRcDrrXQGR+qcG3kYVMRGarc1mfVky3oBKXUQzz8exedK3HbsDctNDsTsHW6arrIRSfyIJZELmg==","signatures":[{"sig":"MEYCIQC9bkixPSVeLXzqy2jQWzEcKBIdK3mr8H59fSqf0Hru9QIhAPEB+osfzSllXE9Xw8N2hQNd54WIy9Bwwioy+di1eLTr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1267432},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"5cf17e75ad78b693c3aa4221973642680723e89e","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.8_1738685571759_0.8956058930521831","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"mongo-collection-hooks","version":"0.2.9","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.9","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"5409a2296aba1ada0f67733888c5974cb1878d3f","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.9.tgz","fileCount":242,"integrity":"sha512-nHI5WvSBd+bC7uvYTAD9h4TuslsH4mLiFzyyjswtIWlg/yX3Joodux/3CwP4i3SvOyKG/qhHOSTYPhLO8ZkYEQ==","signatures":[{"sig":"MEYCIQCOJNza4ytUtspe5XwNwjhtRJEvmNZsLR/EKWWhvNpJlQIhAOHANNkF5dkOSXooledrFk0NXauGj84UXrSNcBVr4j50","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1287124},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"d7bdb69bf52ae2c51187c577418803cbd33149f2","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.9_1743098119331_0.7761624765353659","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"mongo-collection-hooks","version":"0.2.10","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.10","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"c2f43ea7e3444250756165d350624749998038a5","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.10.tgz","fileCount":242,"integrity":"sha512-+c1Vm4e+mYe0v/Pq7i8jePrVS1dxH1tjheRCaWJ155MQ4RronvHnIcBF2qHWXqOANskWcLC8MDMCHZaE+zK6nQ==","signatures":[{"sig":"MEUCIQCXKaYeIDY8tXI5y8obBlcRXvFxi3D7B4apvJisWdgJAAIgTCQPiR39F/VpG4ZV0RqeUitGM7645D89s0NNyoORnyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2170763},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"d7bdb69bf52ae2c51187c577418803cbd33149f2","scripts":{"test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.10_1743109732319_0.2689039025461337","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"mongo-collection-hooks","version":"0.2.11","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.11","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"f470f68c433742e538f4eb646359a661e88d5360","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.11.tgz","fileCount":243,"integrity":"sha512-UPARXbbXmR9SkGTDqNA+E/t1YBPuL+4dPRoXGcTV2N8Wlihg3G8F0lrZKP3lxJpPxn7eXvoEdWPueY04ocF8Qw==","signatures":[{"sig":"MEYCIQCO+gUsqty+uTx8aMYaSMAF2noUZTl/Vptneojb965MdgIhAOHre9psykeQj1Stqgi/fGEkZBAYtOJny0zbHK5ZlNjs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2179570},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"ba998b6293734efbacd1ec6eb0343c57c6279d48","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.11_1744837967870_0.5743300941107188","host":"s3://npm-registry-packages-npm-production"}},"0.2.12-rc.1":{"name":"mongo-collection-hooks","version":"0.2.12-rc.1","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.12-rc.1","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"72ecb5a5a1afe3c5df98b5f2d52eaebe8fa8eddf","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.12-rc.1.tgz","fileCount":243,"integrity":"sha512-3f4oTm7D8hcV7rNjMJMitf6kgKG3KjrBUH7C1/Rw7tNJEyARblPwAjxNCcg1Uteb23nQ0sfYIQAEFY4wceVs1g==","signatures":[{"sig":"MEQCIGy2XDPNGVMwQtL2UrNV2Z/qxd7QvPh0HEgMP5/hwcjlAiB3e845Df5tOIB5pBP9SH/bizzenwp147OD8RnSLCU3xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2202444},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"84fc6e666bced187f1b1a3eed0eeb882b4d97820","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.12-rc.1_1744851416679_0.16324121361461885","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"mongo-collection-hooks","version":"0.2.12","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.12","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"fa1eb9fee2b5b95f6b027ccb6f2f31b575dc6d90","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.12.tgz","fileCount":243,"integrity":"sha512-Zn+cLo+X8rOMdj/UjBPCIz7Y0pRsvp3EbUgOXwjGYzlCNr5BxnneE7TuW7nl3ZsflBzwNEBEAKmIHYyfVX0zdA==","signatures":[{"sig":"MEYCIQDsl+zpQzUPDZ/u5b7/YZM+oUXr7EQv6yf4UxqRAR20WQIhAMPK0DiEzraqKwLhf6fZDiWpj8wuMYzZCGR/pBShm1B6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2202439},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"84fc6e666bced187f1b1a3eed0eeb882b4d97820","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.12_1744851552817_0.6348719590599368","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.1":{"name":"mongo-collection-hooks","version":"0.2.13-rc.1","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.1","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"d114288912c9e0e7fee6d1e91ebe1bf6c780fdfc","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.1.tgz","fileCount":243,"integrity":"sha512-P8EugUFbQMkGy2W1KFAIqNpW3GBOX10DF3YpJ3rKSJn+XlxwJcD2ftLAUfxQyo54rmPLgftv5t1JSfBgFw/ZMw==","signatures":[{"sig":"MEQCIBrrPR2aTZdw3xPxrRHdpX6VtrYEpq33L06mEvwQvJXcAiA/e/TQu+JSYukdv94aJpNJ4hpchrKGSza3kjuGHG3S7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329076},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"af00a67f0c00c190c391cfa9740988ee62e51802","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.1_1745332770143_0.75728198141053","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.2":{"name":"mongo-collection-hooks","version":"0.2.13-rc.2","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.2","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"a1f0d7ff293f4874870f401abb0c9bc280e62cbc","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.2.tgz","fileCount":243,"integrity":"sha512-zg2YDJLiVtvAT5OybX2wJ8dI+JnZ8EAbDecg5mvonq4j2JaNyFfYyzbvtOjClH81NKOsqhCF9G94UXf6Ubsc7w==","signatures":[{"sig":"MEUCIQDxP2y5UzZbE716muBxaW4sN6q2MgDP6zVFZPYTHnMt2QIgWidKxqR/qVl4KUsfJxelTnma0Eb2qnoEsKJM2Mg4MYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329523},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"af00a67f0c00c190c391cfa9740988ee62e51802","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.2_1745459680843_0.8473692611415875","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.3":{"name":"mongo-collection-hooks","version":"0.2.13-rc.3","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.3","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"28f46f6f4560cf9f6679c6c3dbb7b679dc3fd107","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.3.tgz","fileCount":243,"integrity":"sha512-xsrpku3/CVMyPIGRUOIvxa5+aigZkF5RcIAq3IRqFPCfAt+70o7uoiQmUiDs/g+MSDukBoN+rM+DdYqFTIHqYg==","signatures":[{"sig":"MEYCIQDhf66JoYlx1I1jd1gxqJZnuWkQLhXVMhqL7mMwlD0I8AIhANOg6B08qmAEQSEyF79V7k3D6/lwLfgvLrXFxDNmUq2o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329687},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"f3480f50cfc3b4d43afb689ea56d1f69c680531d","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.3_1745459882073_0.5947396468709119","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.4":{"name":"mongo-collection-hooks","version":"0.2.13-rc.4","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.4","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"1771974f57bf9d72385ab6746942aa852e9c88b2","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.4.tgz","fileCount":243,"integrity":"sha512-lgpvrGS8gSqyEmE2Us/HY5tbzygJEy4Nr+S1QvLnnc+TmYPVmgJLzOxCcOko3W6eeF05y8VdyvwKJdwsA6amVQ==","signatures":[{"sig":"MEQCICWkh119yC5O/H5oAf9m3/XxAESEF/nSraA7FDEj+dv6AiApxluAiD+/IW/mtw63nxJ3mTGvinNW1bhpelIRrdcliw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329759},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"f3480f50cfc3b4d43afb689ea56d1f69c680531d","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.4_1745460248865_0.3223870685469423","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.5":{"name":"mongo-collection-hooks","version":"0.2.13-rc.5","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.5","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"e3928c8f32cc92b611ef865de73b93aef535bfea","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.5.tgz","fileCount":243,"integrity":"sha512-D3YPtXeFX2YBeTxEZv931YVQ05c0paX5+YviH6hnm/VB0gzPtRmUSin1rLjrGfHoGGl24qCGy+FNzHYupgRDnQ==","signatures":[{"sig":"MEQCIEHPFv+7hC4Cz9UczjfOl1myXO5ixV3ESdLb4thh9/saAiB1WjtHuW+Us4UC7i1ihxQduHAjKJqgRH98joVv5ZmOvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329813},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"f3480f50cfc3b4d43afb689ea56d1f69c680531d","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.5_1745460707820_0.19436959963643674","host":"s3://npm-registry-packages-npm-production"}},"0.2.13-rc.6":{"name":"mongo-collection-hooks","version":"0.2.13-rc.6","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.13-rc.6","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"447fb9b835ce3e42f1c5a38948b126915988a10e","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.13-rc.6.tgz","fileCount":243,"integrity":"sha512-7QSicGGb6y+xJayvToTuGMjvzeVkVHSzl77AKWbinUBRLr6wfpkgBkAwvISrcaxRWyTdvjdgW/37BkV8KlWWaQ==","signatures":[{"sig":"MEQCIFXzG4wTIHNXX6vrQ5CGQC2Qop8zlPQ9REvM9pQmeaDXAiAIA+8YZLZB/144d14UmzNXMdOBnPo2r4JrqkuY179uvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329813},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"f3480f50cfc3b4d43afb689ea56d1f69c680531d","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.13-rc.6_1745585921700_0.5638371603615937","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"mongo-collection-hooks","version":"0.2.14","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.14","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"fc4a138f702ff1804d3a92f441f6d1a4b4b2fa37","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.14.tgz","fileCount":243,"integrity":"sha512-pLaiXsZNhzL3jMylOt4YdYDRDfOGRgb6ytVZ3eakmiE63zPMLVm3JKFipIe2CNIlDpejCnbadMP/MhOsxx7qMA==","signatures":[{"sig":"MEUCIQDeJnHhL+BxP1UffZq12VYqr6+Uy5r93SK6YGdB5s2urgIgdZ+rupDroGV8dq71hm8xDLhZuq2h95DgCpsIx/7/k0c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329808},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"d3c825485329f1a6483dc10c44cc8f265ce6e034","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.14_1745702701123_0.19498782114945734","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"mongo-collection-hooks","version":"0.2.15","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.15","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"20fe71a7df3de72850b5c99e028576cebab82ec6","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.15.tgz","fileCount":243,"integrity":"sha512-Zmh4ODZJW1KDA5X+g+gZeszGl4fWrojec/TN5TwiZAOyKROsHUT7Z938MztiH2kWW0jlxzbhFOcVUrXO32Y6nw==","signatures":[{"sig":"MEQCIAFjVf9f6uxWPXDo8t5mpk8vhHMlnz0R4443ubO/Nn5/AiApONB2cTsDcoraAfjL38ckOQAmcE+iRgd+fNVPVV/m1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1329802},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"45db6fb7022170377bdec2babeb14fcaaabff5b4","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.15_1746045666977_0.5340368832910458","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"mongo-collection-hooks","version":"0.2.16","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.16","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"746b74c242d50af2a12bc3dd7c2443e5b4ec815c","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.16.tgz","fileCount":243,"integrity":"sha512-RPcpCxTXjPleB8jYJ8KI1UPRfxM5VU+2dQBvIBtFYggYR4GozHcBBYoPcVUh92pPG2bVUe6soI3BYT3VWNpCEg==","signatures":[{"sig":"MEYCIQDRoAELa7dh2Qtpt6nmQObVGzuAedwMh/y+RvwRyRlHNgIhALVvr3kEYukwn3bdRgQcNhFyB8CvmTaRSqHdmcIPx0YH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1331089},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./*":"./lib/*","./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"45db6fb7022170377bdec2babeb14fcaaabff5b4","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.16_1746049512737_0.10710634253815488","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"mongo-collection-hooks","version":"0.2.17","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.17","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"411788707267a0a83feb55cd9670afa0c0963a3c","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.17.tgz","fileCount":243,"integrity":"sha512-DaBHeQZNiaqdASzqDp5LPvkD6c15SnzqaQNkfQG/OCMu7SoSuFmRhyTI1ZBAYiZT1XqxOrue1lBNOm+jHDsqJA==","signatures":[{"sig":"MEQCIGZ5R+CkL3ql8O5DcQ7AaLWpywEN/fke3kJCmMkU61cnAiAwvRRkmvzeXtvEMZsaEQgCZKQPdt7XnyK1AAICjTxzmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1331122},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./*":"./lib/*","./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"d1f64e5ce023ee8a8ab440fbcc6ff0e802c49ac6","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.17_1747157330863_0.3437318317370599","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"mongo-collection-hooks","version":"0.2.19","author":"","license":"ISC","_id":"mongo-collection-hooks@0.2.19","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"dist":{"shasum":"b73e89dfd0e581e8383433dbb5f160ef80cc26c3","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.19.tgz","fileCount":243,"integrity":"sha512-Dxq2wBi41U6ZO+ktB6QYrxMd0svb9GddParX/j5Gx68sADC4Aky3J5SLT9KQsLvO+1jqzZUAk8BuBzVUki3H/g==","signatures":[{"sig":"MEQCIBcMmN27Z80C5cLoIHfEStbSOrKwYRNuGaI8HNUmrUJpAiB+F1xQ9eVTwVZGxpdltUMDFKYA7oU8rpsbqjxjhLtJAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1332144},"main":"lib/index.js","type":"module","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./*":"./lib/*","./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015/*":"./es2015/*","./es2020/*":"./es2020/*"},"gitHead":"f756d21b7917f0ea28847f450cd25350eb0e728b","scripts":{"lint":"npx eslint src","test":"npm install && npm run test:unit && npm run test:types","build":"npx tsc","test:unit":"node --enable-source-maps --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch":"node --enable-source-maps --watch --test test/index.js","build-es2015":"npx tsc -p tsconfig-es2015.json","build-es2020":"npx tsc -p tsconfig-es2020.json","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js"},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"_npmVersion":"9.6.7","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","directories":{},"_nodeVersion":"18.17.1","dependencies":{"mongo-collection-helpers":"^1.0.13"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^9.1.0","eslint":"^9.24.0","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1","@blastjs/minimongo":"^0.1.0","mongo-query-compiler":"^1.0.7","eslint-config-prettier":"^10.1.2"},"_npmOperationalInternal":{"tmp":"tmp/mongo-collection-hooks_0.2.19_1748884139149_0.7502191793260407","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"mongo-collection-hooks","version":"0.2.20","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","main":"lib/index.js","type":"module","scripts":{"build":"npx tsc","build-es2020":"npx tsc -p tsconfig-es2020.json","build-es2015":"npx tsc -p tsconfig-es2015.json","test":"npm install && npm run test:unit && npm run test:types","test:unit":"node --enable-source-maps --test test/index.js","test:watch":"node --enable-source-maps --watch --test test/index.js","test:types":"cd examples/simple && npm install && npm test","test:watch-inspect":"node --enable-source-maps --inspect-brk --watch --test test/index.js","test:watch-only":"node --enable-source-maps --watch --test-only test/index.js","test:coverage":"NODE_V8_COVERAGE=.coverage npm test && npx c8 report --clean --temp-directory \"./.coverage/\" --report-dir \"./.coverage-report/\" --src \"./lib/*\" --reporter lcov --exclude=\"lib/abstract*\" --include=\"lib/*\" --reporter json-summary","prepublishOnly":"npm run build && npm run build-es2020 && npm run build-es2015 && npm test && npm run lint","lint":"npx eslint src"},"types":"./lib/index.d.ts","author":"","license":"ISC","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./es2020":{"types":"./es2020/index.d.ts","default":"./es2020/index.js"},"./es2015":{"types":"./es2015/index.d.ts","default":"./es2015/index.js"},"./*":"./lib/*","./es2020/*":"./es2020/*","./es2015/*":"./es2015/*"},"dependencies":{"mongo-collection-helpers":"^1.0.13"},"devDependencies":{"@blastjs/minimongo":"^0.1.0","c8":"^9.1.0","eslint":"^9.24.0","eslint-config-prettier":"^10.1.2","mongo-query-compiler":"^1.0.7","mongodb":"^5.9.2","typedoc":"^0.25.13","typescript":"^5.4.2","typescript-eslint":"^8.30.1"},"gitHead":"a3ad6b7f9734937b13c2a33bc2edc5a082be0e17","_id":"mongo-collection-hooks@0.2.20","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-qfFapWdLWngErEpEWfL9z3o06S7di6FrpuZpj6WodHFacUtBKr7wqg60QF6QB7o4cRp5NmysFTgqhnJyI33EtQ==","shasum":"509d14c6376d3c788f9922d5beab7a564f4b4e27","tarball":"https://registry.npmjs.org/mongo-collection-hooks/-/mongo-collection-hooks-0.2.20.tgz","fileCount":164,"unpackedSize":978400,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID7xQwA2LtwPDImm+rScpMvoP0uaqGxHPw2+uKAfZq9BAiBKLg23N131pq9kZzcW8+37vy3FFHcB/y2FHX7xn5Nf4A=="}]},"_npmUser":{"name":"znewsham","email":"zack.newsham@gmail.com"},"directories":{},"maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mongo-collection-hooks_0.2.20_1762372432201_0.018096587113628715"},"_hasShrinkwrap":false}},"time":{"created":"2024-06-22T01:58:50.971Z","modified":"2025-11-05T19:53:52.900Z","0.1.0":"2024-06-22T01:58:51.162Z","0.1.1":"2024-06-22T23:39:12.898Z","0.1.2":"2024-06-22T23:56:21.351Z","0.1.3":"2024-06-22T23:58:05.432Z","0.2.0":"2024-07-03T00:45:40.682Z","0.2.1":"2024-07-04T20:57:39.624Z","0.2.2":"2024-07-04T21:57:18.193Z","0.2.3":"2024-07-05T00:59:35.605Z","0.2.4":"2024-10-13T01:54:08.990Z","0.2.5":"2025-01-10T02:36:19.063Z","0.2.6":"2025-01-10T14:09:58.862Z","0.2.7":"2025-01-13T20:07:02.715Z","0.2.8":"2025-02-04T16:12:51.976Z","0.2.9":"2025-03-27T17:55:19.486Z","0.2.10":"2025-03-27T21:08:52.609Z","0.2.11":"2025-04-16T21:12:48.255Z","0.2.12-rc.1":"2025-04-17T00:56:57.050Z","0.2.12":"2025-04-17T00:59:13.072Z","0.2.13-rc.1":"2025-04-22T14:39:30.405Z","0.2.13-rc.2":"2025-04-24T01:54:41.022Z","0.2.13-rc.3":"2025-04-24T01:58:02.385Z","0.2.13-rc.4":"2025-04-24T02:04:09.076Z","0.2.13-rc.5":"2025-04-24T02:11:48.080Z","0.2.13-rc.6":"2025-04-25T12:58:41.879Z","0.2.14":"2025-04-26T21:25:01.369Z","0.2.15":"2025-04-30T20:41:07.165Z","0.2.16":"2025-04-30T21:45:12.935Z","0.2.17":"2025-05-13T17:28:51.095Z","0.2.18":"2025-05-28T18:45:55.653Z","0.2.19":"2025-06-02T17:08:59.339Z","0.2.20":"2025-11-05T19:53:52.713Z"},"license":"ISC","description":"This package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).","maintainers":[{"name":"znewsham","email":"zack.newsham@gmail.com"}],"readme":"# Mongo Collection Hooks\nThis package implements collection hooks, similar to [Meteor Collection Hooks](https://github.com/Meteor-Community-Packages/meteor-collection-hooks) but without the meteor dependencies (or any other in fact).\n\nThe `HookedCollection` class takes as an argument a collection implementing the mongodb `Collection` interface - or whatever portion of it you intend to use. For example, if you only plan to use `insertOne` - you need only provide something that implements `insertOne`. Things do get a little more complex for `insertMany` and similar, since they may also require access to `find`. In general this is only a problem in very specific situations (e.g., a client side implementation that talks to the server). The typical argument here would be an actual mongo collection, on the server. However this would happily work client side with whatever implementation you provide.\n\n## Basic Usage\n\n```typescript\n\nimport { HookedCollection } from \"mongo-collection-hooks\";\nimport { MongoClient } from \"mongodb\";\n\nconst client = new MongoClient(process.env.MONGO_URL);\n\nconst collection = new HookedCollection(client.db().collection(\"MyCollection\"));\n\n\ncollection.on(\"before.update\", () => {\n  // do something\n});\n```\n\n## Hook types\nThere are approximately 180 distinct hooks which can be used in different combinations.\n\nIn general, there is one set of hooks per top level function of a collection in the set of:\n- `insertOne` and `insertMany`\n- `updateOne`, `updateMany` and `replaceOne`\n- `deleteOne` and `deleteMany`\n- `findOne`, `findOneAndUpdate`, `findOneAndReplace` and `findOneAndDelete`\n- `find` and `aggregate` (synchronous hooks)\n- `distinct`\n- `count`, `countDocuments` and `estimatedDocumentCount`.\n\nThere are also hooks which are registered against a collection, but will be triggered by cursor actions, e.g., `aggregate` or `find`. These can be specified per cursor type (e.g., `before.aggregation.cursor.forEach`) or general (e.g., `before.cursor.forEach`)\n- `forEach`\n- `toArray`\n- `asyncIterator`\n- `next`\n- `close`\n- `rewind` (sync)\n- `execute` (see notes below)\n- `count` (find only)\n\nLastly, There are some additional hooks implemented to assist with certain types of requirements (e.g., metrics):\n- `*` - triggered for every operation (including cursor events)\n- `count*` - triggered for all count operations\n- `findOne*` - triggered for `findOne` and `findOneAnd<Replace | Update | Delete>` operations\n- `insert`, `update`, `delete` - triggered once per document from the relevant operations that can insert, update or delete. These are particularly interesting, expensive and complicated hooks and are documented further below.\n\nAll the options above (including `*` and cursor generic hooks) provide 4 hooks.\n- `before`\n- `after` (triggered in the case of either success or error)\n- `after.success`\n- `after.error`\n\n\nAll hooks are triggered with a single argument of this general form - the *exact* structure is documented per hook. In general there is a lot of overlap between the `before` and `after*` variants of a hook\n\n```typescript\ntype StandardBeforeHookCallArg = {\n  thisArg: HookedCursor | HookedCollection,\n  invocationSymbol: symbol, // a unique per-invocation symbol, the same will be provided to `before` and `after*` hooks\n  args: unknown[] | never, // the arguments of the function - possibly different from the original arguments as they could be modified by previous hooks\n  origArgs: unknown[] | never, // the origianl arguments of the function, exactly as passed in\n  // these are provided for nested hooks, e.g., \"update\" could have a caller of \"updateOne\"\n  caller?: string,\n  parentInvocationSymbol?: symbol,\n  signal?: AbortSignal\n}\n\ntype StandardAfterSuccessHookCallArg = StandardBeforeHookCallArg & {\n  result?: unknown, // the result of the function, possibly modified by previous hooks\n  resultOrig: unknown, // the original result of the function, exactly as returned\n}\n\ntype StandardAfterErrorHookCallArg = StandardBeforeHookCallArg & {\n  error?: any, // the error thrown by the function\n}\n\ntype StandardAfterHookCallArg = StandardBeforeHookCallArg & {\n  result?: unknown\n  resultOrig?: unknown\n  error?: any\n}\n\ntype StandardDefineHookOptions = {\n  tags?: string[] // used in combination with the {includeTags | excludeTags} from StandardInvokeHookOptions\n}\n\ntype StandardInvokeHookOptions = {\n  includeTags?: string[],\n  excludeTags?: string[],\n  includeHook(hookName: string, hook: Hook, options: Options): boolean\n}\n```\n\n## A note about hook order\nThe exact order in which the hooks for a single event will run are illustrative, but shouldn't be relied on entirely until this hits v1.0 - until then they'll change as seems appropriate. The only thing that can be guaranteed is the `before` hooks will all complete before the functionality they hook, and the `after` hooks will all start after the functionality they hook has completed.\n\n## Properties\nAn explanation of each of the properties of the argument you might find in a standard hook\n\n### args\nThe `args` property will be the same type as the call args for the function the hook is for - for functions that take no arguments (e.g., toArray()) there will be no `args` property. Most `before.*` hooks are allowed to return a transformation of the `args` object - which will be provided to subsequent hooks as well as ultimately used by the function implementation.\n\n### argsOrig\nLike `args`, the `argsOrig` property is the same type as the call args - and will always be the exact same values as passed in - regardless of the return of previous `before` hooks.\n\n### invocationSymbol\nThe `invocationSymbol` property provides a way of associating pairs of before and after executions - regardless of the number of `{before|after}.findOne` hooks applied - they will *ALL* receive the same `invocationSymbol` for a single call to `findOne`.\n\n### thisArg\nThe `thisArg` property is a reference to whichever collection or cursor triggered the hook.\n\n### result (after only)\nThe `result` property will be the same type as the return type of the function being hooked - e.g., for `updateOne` the `after.updateOne` hook will accept a `result: UpdateResult` property. Must `after` hooks are allowed to return a transformation of this result, while still adhering to the type, which will be passed to subsequent after hooks and returned. For functions that don't return a result, e.g., `forEach()` - there will be no `result` property.\n\n### resultOrig (after only)\nLike `result`, the `resultOrig` property is the same type as the return type of the function being hooked. And like `argsOrig` - this property will always represent the original value returned, regardless of previous `after*` hooks.\n\n### error (after only)\nIn the case of an error, it will be provided to the `after.error` and `after` hooks. In general these do *NOT* chain - and they cannot return a transformation of the error.\n\n### parentInvocationSymbol\nIn cases where multiple hooks are triggered (e.g., a single `updateMany` call may trigger multiple `update` hooks, one per document) it is useful to know the underlying invocation which triggered these \"child\" hooks. This is the `invocationSymbol` of that \"parent\" call - and thus will be the same for all \"child\" hooks.\n\n### signal\nIf provided to the call, a signal will be passed to all hooks to allow any hook with long running operations to exit early.\n\n### caller (TBC)\nIn the case where a hook isn't directly related to a function (e.g., `after.update`), or could be triggered from multiple places (e.g, `before.cursor.toArray`) the `caller` property identifies where the call came from - it typicailly appears with the `parentInvocationSymbol`.\n\n\n## Hooks\nSome hooks are pretty simple and will be lightly documented with a trivial example and the type of arguments they accept. There are a handful, those listed above that are more interesting and will be documented to a higher level.\n\n### update\nThe `update` hook is one of the most interesting, complicated, expensive and powerful hooks. It will fire once for each document updated - whether through `update*`, `replaceOne` or `findOneAnd{Update | Replace}`. The `before` hook have efficient access to the current document (tuned via a projection option on the hook). The `after*` hooks have efficient access to both the previous and modified document if the hook is configured to do so. The use of the `update` hook allows transforming the modifier on a per-document basis.\n\nThe `getDocument` hook ensures the DB is called at most once per document - regardless of how many hooks require the document. Hooks can also be configured to greedily load these items, ensuring no additional DB operations (at the cost of a heavier initial query).\n\nIn the case of `updateMany` if no `before.insert` or `after.insert` are to be used, the underlying implementation's `updateMany` will be used. However, if hooks are defined `updateOne` will be used instead. In all other cases the correct underlying implementation will be used. In all cases, the filter returned by before hooks will be combined with any `{ _id }` query - correctly targetting a single document.\n\nThis hook allows several options at registration time:\n| Option | Limitation | Description |\n|---|---|---|\n| `projection` | | The union of projects will be used to fetch the document when `getDocument()` is called. |\n| `shouldRun` | | As the mere presence of these hooks can be very expensive (e.g., additional cursor at minimum) this function can be used to tune which hooks should be ran. Allowing you to filter |\n| `fetchPrevious` | After | whether the previous document should be fetched. If any after hook uses this field, the relevant document will be pulled from the DB before the update. |\n| `fetchPreviousProjection` | After | As with `projection`, also the union of all defined, used to control which fields of the document are available on `previousDocument`. |\n\n\n```typescript\n\ntype FilterMutator = {\n  filter: Filter,\n  mutator?: UpdateFilter | Partial,\n  replacement: Document\n}\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    caller: \"updateOne\" | \"updateMany\" | \"replaceOne\" | \"findOneAndReplace\" | \"findOneAndUpdate\"\n    args: UpdateCallArgs | ReplaceCallArgs | FindOneAndUpdateCallArgs | FindOneAndReplaceCallArgs,\n    argsOrig: <same as args>,\n    _id: string,\n    getDocument: () => Promise<Document | null>\n    filterMutator: FilterMutator\n    filterMutatorOrig: FilterMutator\n  },\n  returns: FilterMutator | void | Promise<FilterMutator | void>\n}\n\ntype After = {\n  callArg: Before[\"callArg\"] & {\n    previousDocument?: Document,\n    // the result is tied to the caller - checking the caller will infer the result type.\n    result: UpdateResult | ModifyResult<TSchema> | Document\n    resultOrig: <same as result>\n  },\n  returns: UpdateResult | ModifyResult<TSchema> | Document | void | Promise<UpdateResult | ModifyResult<TSchema> | Document | void>\n}\n\ntype DefineBeforeHookOptions = StandardDefineHookOptions & {\n  projection?: Document | (({ argsOrig, thisArg } : Before[\"callArg\"][\"argsOrig\"], thisArg: HookedCollection }): Document\n  shouldRun?: ({ argsOrig, thisArg }): { argsOrig: Before[\"callArg\"][\"argsOrig\"], thisArg: HookedCollection }): boolean | Promise<boolean>\n}\n\ntype DefineAfterHookOptions = DefineBeforeHookOptions & {\n  fetchPrevious?: boolean\n  fetchPreviousProjection?: Document | (({ argsOrig, thisArg } : Before[\"callArg\"][\"argsOrig\"], thisArg: HookedCollection }): Document\n}\n```\n\n\n### delete\nThe `delete` hook is similar to the `update` hook - in particular, the `before.delete` hook receives almost identical parameters to the `before.update` hook - e.g., it can access the entire document if necessary.\n\nThis hook allows several options at registration time:\n| Option | Limitation | Description |\n|---|---|---|\n| `projection` | | The union of projects will be used to fetch the document when `getDocument()` is called. |\n| `shouldRun` | | As the mere presence of these hooks can be very expensive (e.g., additional cursor at minimum) this function can be used to tune which hooks should be ran. Allowing you to filter |\n| `fetchPrevious` | After | whether the previous document should be fetched. If any after hook uses this field, the relevant document will be pulled from the DB before the deletion. |\n| `fetchPreviousProjection` | After | As with `projection`, also the union of all defined, used to control which fields of the document are available on `previousDocument`. |\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    caller: \"deleteOne\" | \"deleteMany\" | \"findOneAndDelete\"\n    args: DeleteCallArgs | FindOneAndDeleteCallArgs,\n    argsOrig: <same as args>,\n    _id: string,\n    getDocument: () => Promise<Document | null>\n    filter: Filter\n    filterOrig: Filter\n  },\n  returns: Filter | void | Promise<Filter | void>\n}\n\ntype After = {\n  callArg: Before[\"callArg\"] & {\n    // the result is tied to the caller - checking the caller will infer the result type.\n    result: DeleteResult | ModifyResult<TSchema> | Document\n    resultOrig: <same as result>\n  },\n  returns: DeleteResult | ModifyResult<TSchema> | Document | void | Promise<DeleteResult | ModifyResult<TSchema> | Document | void>\n}\n\ntype DefineBeforeHookOptions = StandardDefineHookOptions & {\n  projection?: Document | (({ argsOrig, thisArg } : Before[\"callArg\"][\"argsOrig\"], thisArg: HookedCollection }): Document\n  shouldRun?: ({ argsOrig, thisArg }): { argsOrig: Before[\"callArg\"][\"argsOrig\"], thisArg: HookedCollection }): boolean | Promise<boolean>\n}\n\ntype DefineAfterHookOptions = DefineBeforeHookOptions & {\n  fetchPrevious?: boolean\n  fetchPreviousProjection?: boolean\n}\n```\n\n### insert\nThe `insert` event is fired once for every document inserted into the database, this obviously includes `insertOne` and `insertMany` - but less obviously can also include any of the update functions too, e.g., `updateOne` and `findOneAndReplace`. If calls to those functions include `upsert: true` in the options and no matching document is found, the `insert` hooks will fire. The underlying implementation however does not change. A call to `findOneAndReplace` will always call `findOneAndReplace` of the underlying implementation. As such, it is possible for you to receive a `before.insert` hook for an update, with an `after.insert.succes` hook indicating that a document was updated and NOT inserted.\n\nThe `before` hook chains the `doc` property - returning a new document here will change what is inserted.\n\nThis hook also supports returning the `SkipDocument` symbol to indicate this document should not be inserted.\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    caller: \"insertOne\" | \"insertMany\" | \"updateOne\" | \"updateMany\" | \"replaceOne\" | \"findOneAndReplace\" | \"findOneAndUpdate\"\n    args: InsertOneCallArgs | InsertManyCallArgs | UpdateCallArgs | ReplaceOneCallArgs | FindOneAndUpdateCallArgs | FindOneAndReplaceCallArgs\n    argsOrig: <same as args>,\n    doc: Document\n  },\n  returns: Document | void | Promise<Document | void> | SkipDocument\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: InsertOneResult\n    resultOrig: InsertOneResult\n  },\n  returns: InsertOneResult | void | Promise<InsertOneResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n\ncollection.on(\"before.insert\", ({\n  args,\n  argsOrig,\n  invocationSymbol,\n  thisArg,\n  doc\n}) => doc);\n```\n\n### findOne\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, FindOptions & StandardInvokeHookOptions],\n    argsOrig: <same as args>\n  },\n  returns: FindArgs | void | Promise<FindArgs | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: Document | null,\n    resultOrig: Document | null\n  },\n  returns: Document | null | void | Promise<Document | null | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n\n\ncollection.on(\"before.findOne\", async ({\n  args,\n  argsOrig,\n  invocationSymbol,\n  thisArg\n}) => {\n  return mutatedCopyOfArgs;\n})\n```\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `findOne` the following hooks (if defined) will run in order.\n\n- `before.*`\n  - `before.findOne`\n  - `before.findOne*`\n  - (`after.findOne.success` or `after.findOne.error`) and `after.findOne`\n  - (`after.findOne*.success` or `after.findOne*.error`) and `after.findOne*`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### insertOne\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Document, InsertOptions],\n    argsOrig: <same as args>,\n    _id?: InferIdType\n  },\n  returns: [Document, InsertOptions] | void | Promise<[Document, InsertOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: InsertResult,\n    resultOrig: InsertResult\n  },\n  returns: InsertResult | void | Promise<InsertResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions & { includeId?: boolean }\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `insertOne` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.insertOne`\n    - `before.insert`\n    - (`after.insert.success` or `after.insert.error`) and `after.insert`\n  - (`after.insertOne.success` or `after.insertOne.error`) and `after.insertOne`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### insertMany\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Document[], InsertOptions],\n    argsOrig: <same as args>,\n    _ids?: InferIdType[]\n  },\n  returns: [Document[], InsertOptions] | void | Promise<[Document[], InsertOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: InsertResult,\n    resultOrig: InsertResult\n  },\n  returns: InsertResult | void | Promise<InsertResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions & { includeIds?: boolean }\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `insertMany` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.insertMany`\n    - `before.insert` once per doc - in parallel\n    - (`after.insert.success` or `after.insert.error`) and `after.insert` once per doc - in parallel\n  - (`after.insertMany.success` or `after.insertMany.error`) and `after.insertMany`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### deleteOne\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, DeleteOptions],\n    argsOrig: <same as args>,\n    _id?: InferIdType\n  },\n  returns: [Filter, DeleteOptions] | void | Promise<[Filter, DeleteOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: DeleteResult,\n    resultOrig: DeleteResult\n  },\n  returns: DeleteResult | void | Promise<DeleteResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions & { includeId?: boolean }\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `deleteOne` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.deleteOne`\n    - `before.delete`\n    - (`after.delete.success` or `after.delete.error`) and `after.delete`\n  - (`after.deleteOne.success` or `after.deleteOne.error`) and `after.deleteOne`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### deleteMany\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter[], DeleteOptions],\n    argsOrig: <same as args>,\n    _ids?: InferIdType[]\n  },\n  returns: [Filter[], DeleteOptions] | void | Promise<[Filter[], DeleteOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: DeleteResult,\n    resultOrig: DeleteResult\n  },\n  returns: DeleteResult | void | Promise<DeleteResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions & { includeId?: boolean }\ntype CallOptions = DeleteOptions & StandardInvokeHookOptions & { ordered?: boolean, hookBatchSize?: number }\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `deleteMany` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.deleteMany`\n    - `before.delete` once per doc - in parallel\n    - (`after.delete.success` or `after.delete.error`) and `after.delete` once per doc - in parallel\n  - (`after.deleteMany.success` or `after.deleteMany.error`) and `after.deleteMany`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### updateOne\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, Mutator, UpdateOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, Mutator, UpdateOptions] | void | Promise<[Filter, Mutator, UpdateOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: UpdateResult,\n    resultOrig: UpdateResult\n  },\n  returns: UpdateResult | void | Promise<UpdateResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `updateOne` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.updateOne`\n    - either:\n      - `before.update`\n      - (`after.update.success` or `after.update.error`) and `after.update`\n    - or (if upsert):\n      - `before.insert`\n      - (`after.insert.success` or `after.insert.error`) and `after.insert`\n  - (`after.updateOne.success` or `after.updateOne.error`) and `after.updateOne`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### updateMany\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, Mutator, UpdateOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, Mutator, UpdateOptions] | void | Promise<[Filter, Mutator, UpdateOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: UpdateResult,\n    resultOrig: UpdateResult\n  },\n  returns: UpdateResult | void | Promise<UpdateResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\ntype CallOptions = UpdateOptions & StandardInvokeHookOptions & { ordered?: boolean, hookBatchSize?: number }\n\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `updateMany` the following hooks (if defined) will run in order:\n\n\n- `before.*`\n  - `before.updateMany`\n    - once per doc, either:\n      - `before.update`\n      - (`after.update.success` or `after.update.error`) and `after.update`\n    - or (if upsert):\n      - `before.insert`\n      - (`after.insert.success` or `after.insert.error`) and `after.insert`\n  - (`after.updateMany.success` or `after.updateMany.error`) and `after.updateMany`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### replaceOne\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, Document, UpdateOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, Document, UpdateOptions] | void | Promise<[Filter, Document, UpdateOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: UpdateResult,\n    resultOrig: UpdateResult\n  },\n  returns: UpdateResult | void | Promise<UpdateResult | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `replaceOne` the following hooks (if defined) will run in order:\n\n- `before.*`\n  - `before.replaceOne`\n    - either:\n      - `before.update`\n      - (`after.update.success` or `after.update.error`) and `after.update`\n    - or (if upsert):\n      - `before.insert`\n      - (`after.insert.success` or `after.insert.error`) and `after.insert`\n  - (`after.replaceOne.success` or `after.replaceOne.error`) and `after.replaceOne`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### findOneAndUpdate\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, Mutator, FindOneAndUpdateOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, Mutator, FindOneAndUpdateOptions] | void | Promise<[Filter, Mutator, FindOneAndUpdateOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: ModifyResult | Document | null,\n    resultOrig: ModifyResult | Document | null\n  },\n  returns: ModifyResult | Document | null | void | Promise<ModifyResult | Document | null | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `findOneAndUpdate` the following hooks (if defined) will run in order:\n\n- `before.*`\n  - `before.findOneAndUpdate` -> `before.findOne*`\n    - either:\n      - `before.update`\n      - (`after.update.success` or `after.update.error`) and `after.update`\n    - or (if upsert):\n      - `before.insert`\n      - (`after.insert.success` or `after.insert.error`) and `after.insert`\n    - (`after.findOneAndUpdate.success` -> `after.findOne*.success` or `after.findOneAndUpdate.error` -> `after.findOne*.error`) and `after.findOneAndUpdate` -> `after.findOne*`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### findOneAndReplace\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, Document, FindOneAndReplaceOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, Document, FindOneAndReplaceOptions] | void | Promise<[Filter, Document, FindOneAndUpdateOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: ModifyResult | Document | null,\n    resultOrig: ModifyResult | Document | null\n  },\n  returns: ModifyResult | Document | null | void | Promise<ModifyResult | Document | null | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `findOneAndReplace` the following hooks (if defined) will run in order:\n\n- `before.*`\n  - `before.findOneAndReplace` -> `before.findOne*`\n    - either:\n      - `before.update`\n      - (`after.update.success` or `after.update.error`) and `after.update`\n    - or (if upsert):\n      - `before.insert`\n      - (`after.insert.success` or `after.insert.error`) and `after.insert`\n  - (`after.findOneAndReplace.success` -> `after.findOne*.success` or `after.findOneAndReplace.error` -> `after.findOne*.error`) and `after.findOneAndReplace` -> `after.findOne*`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n\n### findOneAndDelete\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [Filter, FindOneAndDeleteOptions],\n    argsOrig: <same as args>\n  },\n  returns: [Filter, FindOneAndDeleteOptions] | void | Promise<[Filter, FindOneAndDeleteOptions] | void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: ModifyResult | Document | null,\n    resultOrig: ModifyResult | Document | null\n  },\n  returns: ModifyResult | Document | null | void | Promise<ModifyResult | Document | null | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n#### Invocation order [See note](#a-note-about-hook-order)\nWhen invoking `findOneAndDelete` the following hooks (if defined) will run in order:\n\n- `before.*`\n  - `before.findOneAndDelete` -> `before.findOne*`\n    - `before.delete`\n    - (`after.delete.success` or `after.delete.error`) and `after.delete`\n  - (`after.findOneAndDelete.success` -> `after.findOne*.success` or `after.findOneAndDelete.error` -> `after.findOne*.error`) and `after.findOneAndDelete` -> `after.findOne*`\n- (`after.*.success` or `after.*.error`) and `after.*`\n\n### Cursor hooks.\nWhat follows are the cursor hooks - they are defined against a collection, and will apply to all relevant cursors created. `aggregation.cursor.*` hooks will apply to aggregation cursors `find.cursor.*` hooks will apply to find cursors, `cursor.*` hooks will apply to both. All these operations will have a `parentInvocationSymbol` which either identifies the `find` operation or, only in the case of `find.cursor.execute`, the cursor operation which triggered the execute.\n\n### find.cursor.toArray\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: never,\n    argsOrig: never,\n    // the find symbol\n    parentInvocationSymbol: symbol,\n  },\n  returns: void | Promise<void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: Document[],\n    resultOrig: Document[]\n  },\n  returns: Document[] | void | Promise<Document[] | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n### find.cursor.count\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: never,\n    argsOrig: never,\n    // the find symbol\n    parentInvocationSymbol: symbol,\n  },\n  returns: void | Promise<void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: number,\n    resultOrig: number\n  },\n  returns: number | void | Promise<number | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n### find.cursor.next\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: never,\n    argsOrig: never,\n    // the find symbol\n    parentInvocationSymbol: symbol,\n  },\n  returns: void | Promise<void>\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: Document,\n    resultOrig: Document,\n  },\n  returns: Document | void | Promise<Document | void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n### find.cursor.forEach\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: [(iterator) => void],\n    argsOrig: [(iterator) => void],\n    // the find symbol\n    parentInvocationSymbol: symbol,\n  },\n  returns: [(iterator) => void]\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: never,\n    resultOrig: never\n  },\n  returns: void | Promise<void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n### find.cursor.execute\nThis is one of the interesting ones - tying into the actual cursor execution would require patching the internal function `_initialize` on a mongo cursor. In general, this is not necessary - it's sufficient to trigger the before and after events assuming the init *will* happen. If you truly want to know when a cursor executes, you can pass in the `interceptExecute: true` option.\n\n```typescript\ntype Before = {\n  callArg: StandardBeforeHookCallArg & {\n    args: never,\n    argsOrig: never,\n    parentInvocationSymbol: symbol,\n    caller: \"find.cursor.next\" | \"find.cursor.toArray\" | \"find.cursor.forEach\" | \"find.cursor.asyncIterator\"\n  },\n  returns: [(iterator) => void]\n}\n\ntype AfterSuccess = {\n  callArg: Before[\"callArg\"] & {\n    result: never,\n    resultOrig: never\n  },\n  returns: void | Promise<void>\n}\n\ntype DefineHookOptions = StandardDefineHookOptions\n```\n\n### TODO - all the others\nThey all have the same shape, 180 is a lot of copy/paste.\n\n\n## Extension\n\nIn some cases, you may want to modify the behaviour of either the collection, or possibly the `FindCursor` itself. If you just need a custom implementation and no extra typing, you can achieve this by passing a `findCursorImpl` to the collection constructor:\n\n```typescript\nclass MyFindCursor<T extends any, TSchema extends Document> extends HookedFindCursor<T, TSchema> {\n\n}\n\nconst collection = new HookedCollection(mongoCollection, { findCursorImpl: MyFindCursor });\n```\n\nHowever, if you require typing of your new class, you unfortunately need to subclass `HookedCollection`\n\n```typescript\nclass MyCollection<TSchema extends Document> extends HookedCollection<TSchema> {\n  constructor(collection, options) {\n    super(collection, { findCursorImpl: MyFindCursor, ...options });\n  }\n\n  find<T = any>(...args): MyFindCursor<T, TSchema> {\n    return super.find(...args) as MyFindCursor<T, TSchema>\n  }\n}\n```\n\n### Extending events\n\nIn addition to extending the type of cursor returned, you may find you want to tie into the hook system and still retain strong typing for the definition and invocation of those hooks. This can be achieved with an additional generic parameter.\n\n```typescript\n\n\ntype MyCollectionExtraEventsDefinition = {\n  \"customMethod\": ExternalBeforeAfterEvent<{\n    args: [string];\n    result: number;\n    thisArg: ExtendedHookedCollection;\n    forCollection: true;\n  }>;\n};\n\n// --- Custom Cursor Event Definitions ---\n\ntype MyCursorExtraEventsDefinition = {\n  \"customCursorMethod\": ExternalBeforeAfterEvent<{\n    args: [number];\n    result: boolean;\n    forCursor: true;\n    forCollection: false;\n    thisArg: ExtendedHookedFindCursor;\n  }>;\n};\n\nclass ExtendedHookedCollection<TSchema extends Document> extends HookedCollection<TSchema, MyCollectionExtraEventsDefinition & MyCursorExtraEventsDefinition> {\n  constructor(collection, options) {\n    super(collection, { findCursorImpl: ExtendedHookedFindCursor, ...options });\n  }\n\n  find<T = any>(...args): ExtendedHookedFindCursor<T, TSchema> {\n    return super.find(...args) as ExtendedHookedFindCursor<T, TSchema>\n  }\n\n  async customMethod(arg: string, options?: StandardInvokeHookOptionsFromCollection<ExtendedHookedCollection<TSchema>>): Promise<number> {\n    // Use the protected _tryCatchEmit method\n    return this._tryCatchEmit(\n      \"customMethod\",  // The base name of the event\n      { args: [arg] }, // Arguments for the 'before' hook and the operation\n      \"args\", // Key in emitArgs to chain from 'before' to the operation\n      async ({ beforeHooksResult: [chainedArg] }) => {\n        ...\n      },\n      options\n    );\n  }\n}\n\nclass ExtendedHookedFindCursor<\n  TSchema = any,\n  CollectionSchema extends Document = Document\n> extends ExtendableHookedFindCursor<TSchema, CollectionSchema MyCursorExtraEventsDefinition> {\n  ...\n}\n```\n\nThese types ensure that `this._tryCatchEmit` correctly typeschcks the arguments for either the collection or cursor hooks and that `myCollection.on(\"customMethod\")` works as you'd expect. You can see an example in `examples/simple/src/extended.ts`\n","readmeFilename":"README.md"}