{"_id":"@truffle/promise-tracker","_rev":"24-f0aa768ab0da4dccbd3a4c9dc359356b","name":"@truffle/promise-tracker","dist-tags":{"signTypedData_v4":"0.1.0-alpha.2","typescript-migrations":"0.1.1-typescript-migrations.0","latest":"0.1.7"},"versions":{"0.1.0-alpha.0":{"name":"@truffle/promise-tracker","version":"0.1.0-alpha.0","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.0-alpha.0","maintainers":[{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"3e24add76eeced42043537845c1251c21d47c23f","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.0-alpha.0.tgz","fileCount":6,"integrity":"sha512-mwozU4Wj80Xx1kf7lusKg2oPEM26XHH5NFjI8mZt06pbmmp1U7MTLhtXTijXiMCd2s+OQT2/57dz7dPvmv7YAA==","signatures":[{"sig":"MEQCIDq2Q6I3XUCu4ZXRfUAODc0J9GUrZzwiyYXPacvVGux5AiBVCtLov50uzw5RCpc3kqzVV4CdE9cHe07u9x9SOmzHow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitIQbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpGWw//bHmZ9pO2zAu2fMqHCGNNJOMgh1BMZUYeutOwChJ+k0mLTRVj\r\nB1UPk6uW1veHitAtBXqnJu9gCR/zUTM2Q3IHTCplTzfqkhQAQLshfUAg6Hm7\r\nc1eBatVzj+aSOVnwop7tJDhvtkMxCEFQTZCRxCu5qZBqquMZm7eRTIRbyaNJ\r\nkj2Rg1e+woLikdlApoOgWpXgjoVodG1uZeOFiOA1Oo5f9LEg/MFG4iopbbxF\r\n8RzpYyoIFV4wuRMZxyZYEyV5EkDyRzF0zNGhzebSblMxBv8Qn3wthxj3/wQ2\r\n1QOE4/HoPx+9K1LRAR4GEgKql1D8TrDCkJnpayjZ8a3lPzVfGhCTSFFyC8z4\r\nX61CX76ulNDBdK3zznYVLXJlQWMDrJJtHw03lXAxXPfFQ/bfNl05rLqZkSji\r\nvYS6vlyq4JVeVoyRF/zZeAaXYCsAMBqwyIvQU3RgOLENDHBRrAqQ/fybRdDW\r\nAXTUYrE52hfPHIS6gkBHD3NYHWlcizQOFXf3Wfrx3vsZ4TaYgbbPIKJLSTkZ\r\njbZVXKA3SJWhy+uSKYaOd6pICmgtJYeG6yRfN/gP9BCihjvtUiSmhM0h/al6\r\nAzpfCXq2nN9BL2Gx/5BH1SS0vwJzUW+ga5dcZaNUwMagxmxmgKlSoY2cMaxW\r\nTUFebCq2sf2F56OB2lJt0JY3FIkcGcC/UQU=\r\n=nV40\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ecd43cfe3d89d99231c171ced84cd113413d9c98","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"eggplantzzz","email":"pobol234@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v16.15.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","delay":"^5.0.0","ts-jest":"^27.1.2","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.0-alpha.0_1655997467255_0.6995330271182982","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@truffle/promise-tracker","version":"0.1.0","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.0","maintainers":[{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"3fb567fbaf791a168cffa207f4770829ccb1d4b8","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.0.tgz","fileCount":6,"integrity":"sha512-XH9gf7Vfgn4iPnERpJJPFSob85LXeKg8tkoUZku8JdAYUNIjVztLVJQwh54exsz7Npe6RPh/Hcj8Tiw65uooiA==","signatures":[{"sig":"MEQCIFAjWT3yjLDd9hHTBucA/EDN2qRYy8RJbt8lqQAMorDIAiBjTAm0GW/fMvGqVbfKAsjtwgtRewXVFV9yIObf+LzNeA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitND9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqjSw/9HvmYm+zmNLn7U4Ane4SclC56Af/ePdYwfKdgMQ10+GmrD7h1\r\nuJUhDhfEdtNH7tFJlR6Bvqxvs8IA68hDaSM94W228O2yi158R62YQSWRACUz\r\nBPDdIdYTzs03miCpmZH14n6p5kVePcZ8us6hVbPnElJVSX0G/WQrFr8FT0Ux\r\nR3HH0Hk3E639GJx/vW39jEh+z75GQhGDd3GcCTFeFtKe6BOc0/7gZtlpXPCC\r\nh6Uuo1STvuBr8lcQmFObyiErrVmIIdOOmvbMBqaGOPRiQYoBEK61pjFEbvez\r\n46d5USRENi2+JpIQXxwYze6IwM1zaw7yfbZ50Gj/dV9pnGZ6gBJikLEKrbUe\r\nwVxQmmNmJZ/CY5F+ZV3YOaiYni0jCLRMkNh3wbyifZIegVRHYTGlL2ns06Tx\r\nyFshQGnFIHoQq3aZctH93F+PH0RJuQvwmqevnR2O2VM+svEqNnD6yiWoMscG\r\n5LJf/ysFexrI+WVgnJCmrukQHET8idelb1sIA1LPpDs42MbNQ69NpLY4ZIe0\r\nPfxO2QOjyyewNJhgvoKdVyLF0JP/jgzykoocA2UQyPhwGSxkSnltzAYWpDnt\r\noiVD/M4FnBrBlbTdwpVL5ON0JosOxOJyEZUluphQmcD2Y+Fn5Z94VDlJI3Rt\r\nqc9Odmcfl1TkkRxARqDTeFQ3YJyaqhrsMHY=\r\n=T0UP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a6b6462487c2495b64d5e1a7a8a6490ca09e0a73","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"cliffoo","email":"cliffzhang08@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v16.15.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.5","delay":"^5.0.0","ts-jest":"^27.1.2","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.0_1656017148746_0.736838690402791","host":"s3://npm-registry-packages"}},"0.1.0-alpha.2":{"name":"@truffle/promise-tracker","version":"0.1.0-alpha.2","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.0-alpha.2","maintainers":[{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"221da3b1207714f4d9911acde515091c5d1dc7aa","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.0-alpha.2.tgz","fileCount":6,"integrity":"sha512-j8vW3zP91zFJJHwBMGc3JzjAHe9A+h2MHHi8mBTH9HIAYN1/pu9RDK/OKBCwrKvYY3PlyeSW+knmlRAr2UdRHA==","signatures":[{"sig":"MEUCIEUDwcKrHxOqAgaGfKQz/6wZ4ZfAxmnItd8gPd/5kE80AiEAiu5mOh83Ba2lrAe6gmeupeI58LuOTqt9UbQ+sWkiGWY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiteI+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0gw//XjZMZZXLXi1z3ft/aCGgeuVLsoMXzkvCNmuNkhdZjnRSUPLn\r\naaQq4J20C3NethsnL+D5C4MvV6oufpvxj08s4WjKzJrfwcJu74LEEnVV47Rq\r\nn0/xkO0upPWeJ4xFdhTEmc6keq1XuHl/padBrxNh0mvsYoswaXFZ1h1bwcb9\r\nwPp94UhSlVEm1JSxzO8xN92k00gFWG+xPACo7axm+xyokgyWXDfKDeghoIww\r\nvZqSpk7E3KaWaiD6BPcOoXpaAQlXBPpxHIJmgVN5fk0LnQl6tInyoJuFBH+J\r\nSUH/EooaijF1jC8BhqqnqBJMeGtx48KY7615UkKzNqFa3VMckCpyEkHwEFSW\r\n0B+SWlCooGHx7Df1qYeb9ZOPvtpw2Wv3KrNpgpnFpX6BpGdT2eIEBfErq0mF\r\nUkLiHxbP8cfXGDvRMZmjkua9d2o0/2vTpKSURL5bQkjmFOlyzM8GrCagSTLR\r\nr5mObReRQ8AFkUUIJdER1LhWXWpugBoiQvkbOSto+d+QI0UTKmF33g9ifQHa\r\n5/cjXsp8w0Cz++bHMRGHEIJzkXNbaAUuNQ0FdEjPlJ7VXStWDWGG3MapBfkI\r\nuZkxe5BKeP3UuILW5g0GUMMovt+9Bm0YPNRPEVz2jksrL733QUWAfmh1Hhf4\r\nrbc3SyX5DHwJEqFGt3FKPwbZuDyljnL+Xtc=\r\n=4TiM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","readme":"# `@truffle/promise-tracker`\n\nThis library is used for keeping track of asynchronous work that needs to complete prior to the process exiting.\n\n## Usage\n\n**IMPORTANT** Only use this library as a last resort. Typically you're better off architecting things so that you don't need process-level tracking of outstanding tasks.\n\nSome alternatives to consider before using this module:\n\n- Wherever possible, only make asynchronous calls from within an asynchronous\n  context (aka, avoid using `.then` and `.catch` callbacks).\n- Implement timeouts for long-running processes using `Promise.race`\n- Unref any best-effort/speculative timers\n  ([immediate](https://nodejs.org/api/timers.html#immediateunref),\n  [timeout](https://nodejs.org/api/timers.html#timeoutunref) to prevent them\n  from keeping your process alive when everything else is done\n\n### Tracking asynchronous operations\n\nFor the moment promise tracking is implemented as a method decorator, meaning it\n_must_ be applied to method declaration on a class.\n\nIt can be applied to any method, and it will only add special handling when methods return promises\n\n```ts\nimport { tracked } from \"@truffle/promise-tracker\";\n\nclass Foo {\n  // totally fine, even though it doesn't return a promise\n  @tracked\n  synchronousBar(): \"-\" {\n    return \"-\";\n  }\n\n  @tracked\n  async asyncBar(): Promise<\"-\"> {\n    return \"-\";\n  }\n\n  // this works the same as with `asyncBar`, even though it's not explicitly an\n  // async method\n  @tracked\n  promiseBar(): Promise<\"-\"> {\n    return new Promise<\"-\">(resolve => resolve(\"-\"));\n  }\n}\n```\n\n### Waiting for tracked operations to complete (async)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nawait waitForOutstandingPromises({ catchHandler: () => (exitCode = 1) });\nprocess.exit(exitCode);\n```\n\n### Waiting for tracked operations to complete (synchronous)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nwaitForOutstandingPromises({ catchHandler: () => (exitCode = 1) }).then(() => {\n  process.exit(exitCode);\n});\n```\n","gitHead":"4ad7d2c4c7ba31fc5e02c831d615cc58e863c2cd","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"eggplantzzz","email":"pobol234@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v16.15.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.4.5","delay":"^5.0.0","ts-jest":"^27.1.2","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.0-alpha.2_1656087102649_0.06652722750745932","host":"s3://npm-registry-packages"}},"0.1.1-typescript-migrations.0":{"name":"@truffle/promise-tracker","version":"0.1.1-typescript-migrations.0","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.1-typescript-migrations.0","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"9389a4031338a9dbef3d8345cf9d12d5913ec382","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.1-typescript-migrations.0.tgz","fileCount":6,"integrity":"sha512-0cL3b1AFREYwMacC02wJDhrf1rNG9Qv8rxKYu+6z8upX/RJkQGAtK9QIWrkdpo7WPGfRWNc8aTSL2l0SwRhfAg==","signatures":[{"sig":"MEQCIAlw5selczgX/QnzXuWiR/BVEYS0+yRQJ5PxPpD/X+JJAiAIR8Zjab66Wp5J16xvHKrVpYRhYivilkaxOWb2S7XV2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2LyOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmogohAAnG4cbTUqhrozF9Ud/yBPVgJKLGHV5dD+THn+rYqquhJaBrv6\r\nF4tUEq9zmy+PtWNFOM98F/hcVlJfpl5EUFCiVU4FHW43vPQR/HK+TaDME5/h\r\n62kWGeIQX3y1LYUCEp9s21epmBduIMeLHdKwZ9PEm8gGpxYkP2eitxEt483S\r\nHPp3Ek382X9NGMY/hh2oCATW82ONilQS7jH9qjnTfu9CBXAVLFIqDcz0WXq2\r\nI+wEoOy0myiSLFdmMsWTg8Tzs5It7J86wCHbUljT8b2ArEgg0k09YG8Pj4la\r\ne8gXdg9NV88axb48ni+eYh9MgiwObMOREG3yqXGbXWqfnhPgbTQrCnuy5DBO\r\nii1rt9cNlMrNoCtwsuIFLKxJ4q+b1ztxB24s0IUScFmripRmokGQXwqH/IG2\r\ng0czNtaMgQrwkKNS6Y97g+6bHiyeTUEIcc72cB1vEgIaO3/tcBotaPmP9Bbj\r\nbNL2DP5NcV6qZ9xOq8OC3B5jlK8zpfjHmN4gssl3okgTZ1Glu1qUaOcXoV2L\r\nRV2mzIRpo7Lk6hH+Vd/bbcRuefriB9xoWfc+lyQxMZ66GQSrP3rx9WgIfPsK\r\nuzlEQ2Eleu7fJk9SSemGUux4eTpD+vzJ4yqSpHG0NLLaZU3IF5l8wKwntajp\r\n6AgOr1oP5KTp9xJVdqhltJahG36zgiikbvI=\r\n=y5WR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","readme":"# `@truffle/promise-tracker`\n\nThis library is used for keeping track of asynchronous work that needs to complete prior to the process exiting.\n\n## Usage\n\n**IMPORTANT** Only use this library as a last resort. Typically you're better off architecting things so that you don't need process-level tracking of outstanding tasks.\n\nSome alternatives to consider before using this module:\n\n- Wherever possible, only make asynchronous calls from within an asynchronous\n  context (aka, avoid using `.then` and `.catch` callbacks).\n- Implement timeouts for long-running processes using `Promise.race`\n- Unref any best-effort/speculative timers\n  ([immediate](https://nodejs.org/api/timers.html#immediateunref),\n  [timeout](https://nodejs.org/api/timers.html#timeoutunref) to prevent them\n  from keeping your process alive when everything else is done\n\n### Tracking asynchronous operations\n\nFor the moment promise tracking is implemented as a method decorator, meaning it\n_must_ be applied to method declaration on a class.\n\nIt can be applied to any method, and it will only add special handling when methods return promises\n\n```ts\nimport { tracked } from \"@truffle/promise-tracker\";\n\nclass Foo {\n  // totally fine, even though it doesn't return a promise\n  @tracked\n  synchronousBar(): \"-\" {\n    return \"-\";\n  }\n\n  @tracked\n  async asyncBar(): Promise<\"-\"> {\n    return \"-\";\n  }\n\n  // this works the same as with `asyncBar`, even though it's not explicitly an\n  // async method\n  @tracked\n  promiseBar(): Promise<\"-\"> {\n    return new Promise<\"-\">(resolve => resolve(\"-\"));\n  }\n}\n```\n\n### Waiting for tracked operations to complete (async)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nawait waitForOutstandingPromises({ catchHandler: () => (exitCode = 1) });\nprocess.exit(exitCode);\n```\n\n### Waiting for tracked operations to complete (synchronous)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nwaitForOutstandingPromises({ catchHandler: () => (exitCode = 1) }).then(() => {\n  process.exit(exitCode);\n});\n```\n","gitHead":"a686945780ca094faaa3c237f4f94ceb659863e1","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v12.22.12+x64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"12.22.12","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"28.1.3","delay":"^5.0.0","ts-jest":"28.0.6","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.1-typescript-migrations.0_1658371214472_0.876301083444117","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@truffle/promise-tracker","version":"0.1.1","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.1","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"10f469dcfa742ac91918feb7c1a24690491c0db4","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.1.tgz","fileCount":6,"integrity":"sha512-lq7psQ/Pxvbw+DWoNSNBi08t9gEAdNHRSHdWq8421zJOSZrPkF2koD3Gi1QOHIjwyvRJZZNrNWGYQ8GdpNkFdw==","signatures":[{"sig":"MEQCIEal0ACcq0XnrXv8VUWN6NqQIV+PjhNFRmQH0cp6/a7VAiBeyz0nruuIc8VsGDyDaLnibsac6qeXu1KpRAGwoGmrhQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2eHpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqVDQ/8DZS8HkGeYw+GFTV5SUnojrHguRoyH9V7G4dzmxXC82W8Z8BC\r\nMLElTyCpFG1oKcMayUpVvu75IBsE0uP+YBGJmWmo4+MPdtcj3CgwzsLToko3\r\no1BBAzO0fHtyoPw+Ok6OTxnBvJ3OlSRH4HNHyr1yAkbHJCfy38dHKU/RQhtW\r\nR19iDRmrhW47UqAVeC8+o6d3/EXdfcGWvUhOzV7y9jhB4764B5Uz9GCTjgTS\r\nFRvoCs9Pzm9jueLclH5ZiYPAENokBIvP06TTdhyW9RNFTDQu30mhrW5wIMUo\r\n/uh9P2GfD8rSfAqx7LUA5wxAcM2Kh83YC3bDExeYbBzzQVEvBsGIMsXo31m+\r\nOJNP6VTuZVedM1jA0STwe5HgI4rTHDHfrSDteXqftneBLrluf+Y5IdLX6pTW\r\nia7aUXasNl1szZixBfzLGitAE8cYN5wc3MiMsw2YkjTN5pPEnEe9SxFWkk7L\r\nyb5LML91nLQ8ql2N82wMM6qyFpDZWet6Fe+rKYidasbW8cpS82DTpzKGd1xD\r\nwYl5kCaoII9rcQff9wty48emLBoRcDeOgL9RWeOzTwUqRCp/I9dpzSgiHlFp\r\nC+VsNza0JwulR/CVt+sqoQWCI/xytMCvQO66y6nY3ZSwWHDCB1OhFuvpv6Lk\r\nnhKAgqAjhoZsFhiE45T+cyfUU9oEYbIcGxE=\r\n=YfBj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"074c8ac1695d241096843a163a1bc95c34a3a117","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"cliffoo","email":"cliffzhang08@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v16.15.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"28.1.3","delay":"^5.0.0","ts-jest":"28.0.6","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.1_1658446313576_0.28041466449067665","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"@truffle/promise-tracker","version":"0.1.2","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.2","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"eb793af26a515400ee7c15ad20dda59e5d61cfd9","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.2.tgz","fileCount":6,"integrity":"sha512-4DL1F1yz/TwrYm7sTirFWm43o5N48TdEzB1p5vFJptZh41naErtjjeCWPGj1hsMMl8TD6MBmFGH29zVC9RGnLA==","signatures":[{"sig":"MEQCIHC3WipjTz6IRhRIJBy71uLFW1w5jEivK+vr8K3lXCGgAiATdPx2KmQa5QKIETWfvnvD+FNyRRbdW7P3gZ1PMXifVQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9C++ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6xRAAkL97EajyBLLz2/Pklmii4oXMpOm1DxTn3840DA6OrtZKgZp0\r\nEYPejevNA9qG6ThxvIZKP3aB3dJQru95U2D+rERlhZ9+6wVfF4+FnaKUqahp\r\nw9roCWy5QtoEi+7f3NOinaD/KYdoL/+Y4eGe2xfPIJ1rNJG1uze/vpHupRp6\r\nN99Zr7eDV5p5riR1robgBBYaqI0vSzHpg5pFcyaTSmzViagzSxdktnoP9wiH\r\n5Es4GBKlCsEIelzk5xJdgjvVYsy6qrRAhR0TH558RIKyfujyvaZmahHVkB3O\r\nX91Ljh//6+FCISyhOLy0mtznk9K5gOFcuODSVDplVbADgylWjvcGsarJPMK5\r\noyStUujQWeB4Ujv9pNqSTibaGUn7SFcb3oSxoJeQ2/eIEzmSU+Kh2TWlLeS0\r\ncnejzIQfgdAUseWH6xHv5+v+AsqD/LG0ZNZMH5TMDDb6alo6MpZiWGDEs+ep\r\napDbv0q0yv2dPuoSkWkHZxbwE5pIVZ7qFlPhCSubWUPGKyfqZ5aFJtqhNWKz\r\noU1Ka3ACz3xcmTHWXONtGv+P6vDZrDrSIMl1n4NMpynQna7qTlRsYygj3dSa\r\nMB2BPJiJEMeIjV8bKTVRH/8PnoUYaKPfIYsLu/RVUCuaydN65SH2VdTPKPmc\r\nBkwDUyYaORngPHNjoNWhPDqGHFpYQI0knjw=\r\n=M1dr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c0e9b091678b131d3a5e28fa46ff64afbc0e4828","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"kevinbluer","email":"kevin@bluer.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v14.20.0+x64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"14.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"28.1.3","delay":"^5.0.0","ts-jest":"28.0.7","typescript":"^4.1.4","@types/jest":"^27.0.3","@types/node":"^16.11.6"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.2_1660170174514_0.8977680006417319","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"@truffle/promise-tracker","version":"0.1.3","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.3","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"8a971a5f22ea6922b3578a49b05be481d2d2a3fa","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.3.tgz","fileCount":6,"integrity":"sha512-1Z5qEfu0KSS+774xe9aPPlLMvzCJNdEeTofne2HkEPLBb53Lb28ZZoMYrwE8eJRjMKMG+y75IYpX7SKcSgj+OQ==","signatures":[{"sig":"MEYCIQCmYn7eGmQVw7Td56XvIo68ej/3u9KlmjQSsxElsDuwGAIhANxLIEoxrlHuMeLeC+gEqg1fZ1T2FE7OXCdLArxEhH7h","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/XxhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyLA//XYEMQJ9Xn4AaQh9+g5MYqJc3/KUSKUIjYTwe8McaW6wirzrT\r\nc4juvHERkGwn8aiN7WB51ndj2uo4u7A6efKXEh3gJ2BFG+7CkJMuPNQS0ypd\r\nZc0ZABs/RGQIze4DgdN6N5J+BZkIk8fhHnbdc5ehhU5xxhiwsrg9CrLjKpeC\r\nl62sIdPT5QIEOgClrEA+XrRKD7WWSzzw+L3UUQEv8ZnB2XqiuPHXHm9TXPtB\r\nCYF5VTe+LcEuE97Ob8exx/6QrRMJqzRzFh2h32E+E2JMUKkze1TUlhLu7GFa\r\nnyjDdFdlOEgr1YSOPwCCo/EnZfvgOx5nlzeGs3XiUDF/+IqEf/n9O3StJ98R\r\nmzd815K6/C6CtXNwtKiEA4030a6/CjsK5KXRFnR51leulNmGvdACJAzn7Poh\r\nBnmrkzNGITKdtZx+0a0nc1THrwS/sRieUWTKF69m3lSbEBSDqhSvBvfVoshB\r\n+OZWAqg6yVnnexk/o72PVFeMqfoaAwYrF07Lt0NsMrQ/04emvjYYrJNRU1/L\r\nkgr3QeLFhVw3rFe91z4swrsx9NsqwAWlosoPsLgavLsnusdgBTXN4NQN9c29\r\nmNmY+DLzWCvQ1NHgY/QQEo8GskJV0eM9bWs34qHPhTEA7eSNDHNOOqoaiF4I\r\nIAmMYuu5LgZqn/sPH0g/ivnv56UMMBS6m7k=\r\n=gxj3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0d96061f25e0927cd1d158b1636464ded86a57bb","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"kevinbluer","email":"kevin@bluer.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"28.1.3","delay":"^5.0.0","ts-jest":"28.0.7","typescript":"^4.7.4","@types/jest":"^27.0.3","@types/node":"~12.12.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.3_1660779617673_0.6264641000427504","host":"s3://npm-registry-packages"}},"0.1.4":{"name":"@truffle/promise-tracker","version":"0.1.4","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.4","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"6f9d019b048a78b6d024bf2967e24dfa8c3a164d","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.4.tgz","fileCount":6,"integrity":"sha512-JqsZZXWXUnrF+zsU2jf12BXyVYAHQj0iJck7EyTsdy9Wdx1aSsqX9Cnc6U274Xk0xNXziV+NestyuoF3kHTWiw==","signatures":[{"sig":"MEQCIF2m4FhJUKWLA97qivohQu8vFBuU8SYdJ9tmrsZDZAfrAiB0LzpKF695R5V2kp5/x/vO/Eqnri7eq9FZDATNXciieA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjR0QYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrsdw//Ra8FlmMyasvI1w9gHu/EBbGlrZjH919Xd9Ap5YRdDSRMgLEK\r\nSpdxZxtimsoi2RczXcvztO1HqPVWQ8Kj13TLem4JKhfU2oo+5lc2OeMxSmGI\r\nCul6vKfnMYxyUqS0VzUywz1lqVRFRCfEwi3SCq4JiiDQaWhu3NaIHPVkCI/e\r\n6i3lw7WZDFMXhr1QWoUVgYHhygVn0Lg/hH9Wz+ApAocCRx7qtbMb+ecHFaOh\r\nj3QkEx641cZ9GoDDr0vzwf5sjeKHuq8Htbwx1O3Dj4fA8xXgJDZ1V1mgguaI\r\nG3wcKEVCLa/KT2/wJFkbiRLEjmKyWjc9XDV4qBKxQdn2iAKpRw26rVvymxal\r\nrBpEcYhq4Mjxl2XzlrSBN+MW3hZfKesJjYlDC59UGW+h/fBjzxt22MQ4N1SJ\r\n5mzua/S5kGBnjO36fdzIfvmvh9ULEkiHIg1Rg5wCWuF+tIya/+Q1KdKVBCF6\r\nqgf3PlnEwXlvSUYdVnfSwHqYD+MDHm1wq4618VR6BiTNcT58Nknci5g2ajW2\r\nagEd/IW12BLzUWIsQHx1S35tMlO2LJv7yNqmHT8wijRa65S9srWkHkXrsznH\r\n8OvNe2/I3wtr0mNj54XL3rnCYaS2E2JTNCx0fHxr9cGMQwq5ZdlquQp99V2C\r\nQ6PD5P9RflOI21veMIXg8MrUswHXT7aZ1Hs=\r\n=clDU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a029d3e45cf1b65914645b5f8205dfb45592d56e","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"cliffoo","email":"cliffzhang08@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/5.6.2/node@v18.8.0+x64 (linux)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"18.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.1.2","delay":"^5.0.0","ts-jest":"28.0.7","typescript":"^4.7.4","@types/jest":"^27.0.3","@types/node":"~12.12.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.4_1665614872576_0.7960893656032362","host":"s3://npm-registry-packages"}},"0.1.5":{"name":"@truffle/promise-tracker","version":"0.1.5","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.5","maintainers":[{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"benjamincburns","email":"benjamin.c.burns@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"tenthirtyone","email":"ASherbuck@gmail.com"},{"name":"lsqproduction","email":"ll@trufflesuite.com"},{"name":"kevinweaver","email":"kevinweaver2@gmail.com"},{"name":"leeftk","email":"leandro.faria@consensys.net"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"rkalis","email":"roscokalis@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"df68df14d45a32bda6237ab85169d1808e4b3928","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.5.tgz","fileCount":6,"integrity":"sha512-wZx8eeu/6rcwwkmRF0Y832/NSQR9A9u6pyhTozv+j77jklnd/KZvu2JlACaAjP30eL5SOtSrSOzAMcSh/trJjg==","signatures":[{"sig":"MEUCIQDS8Ul6xT6Xoyp8EcHgAhuoGnbrO4NOEkfGsykdNYFr3AIgWxMyeIhDiRBNY2cVDhn7usyODIcHaOtR7++t5pZotH4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjWZRkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpDBg//Vu6nMX/WSXcRMb9NXMi1KqP8ubjkrm8qDTVmulxZBppnSMDG\r\nMFTpTS0eyKZDPs3Y3R9WztVfoty3Qo2wcERiXzATIsVpBlo+xO7DPXM5Jukm\r\nYYoU8wgWMMarZoj6G9H6VCyCSDHv3YnRJUICLG6yUVDAx/L7rFMhHp84Yrlw\r\nUN0LmLoU+ZndRyYYLqId+JhB5wEo9UXPEyPgyHr6YjaqO3VrydbF+7tVVODf\r\nG5GYAW3qTsMhahpGWhaY0rrcjmXmm6HxhUJLDJ90WFfryXt77xW/IGnDXRns\r\nGjq5Cv72sMAbAA33mijsEaF4I3IJ6INjKH87AAVqDI8w4+y3vnUzdYghtnrQ\r\nNgZmYyycS5ZkqgKiKT8r4B2f34Vj7kcvv2ieT4+EUJNr0VpX63gXDCp1zvTY\r\nvQiLAnqAd7HPgt9N/HSPzDijRVylcKJRxTqfCAh/98wJyeaOryCIZgd6ih2m\r\nZ5W3bAvCALR2QUevy4TzBaGtNF4q34qYI6msQXNnzAWqlnRZuH6tyu46nrOW\r\n+XPP2tJm0fUeOF5lLN6xSGCgJ3HdIX8lsr0k3X4lY341TteQunUzelxR8SHE\r\nSZUiN3c3SqAwHatvJI55Q2n7ZIgbsrc9ozsuriT1sv+ZC5A6veNNorNn+gxi\r\nDqnB8yxYQzHxv0NGyXlvpoPfNZ5Evk3aKag=\r\n=Nf+T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d1e3f2d050bbced6e7c65e8779702b6b5a9b7c29","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"sukanyaparashar","email":"sukanyaparashar111@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/5.6.2/node@v16.18.0+arm64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.1.2","delay":"^5.0.0","ts-jest":"29.0.3","typescript":"^4.7.4","@types/jest":"^27.0.3","@types/node":"~12.12.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.5_1666815076582_0.7760889812928491","host":"s3://npm-registry-packages"}},"0.1.6":{"name":"@truffle/promise-tracker","version":"0.1.6","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.6","maintainers":[{"name":"cliffoo","email":"cliffzhang08@gmail.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"daecee974e8271387031f32765a414f76e727a79","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.6.tgz","fileCount":6,"integrity":"sha512-oUZ4Mc6Yt/qTvFZ/yD4nnUIN8pXhrBN0h4/SZ4e8W1TcHNvQkV6gUkkYkn8fZRvFwTMYjvWot+eAHHNRsSl/eA==","signatures":[{"sig":"MEYCIQDXmw9lzYLQDkCcKygTYy8ZilGJuYYsTuVZ/ZQq+iPXoQIhAJgfXHavf/mVXmDHgBIp6nBsl3wSX9WU7/SyQ0NxbnBw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11402},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"7983a54d1f931d770c6fbb028bc27cdbcf5dfcbe","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"eggplantzzz","email":"pobol234@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/5.6.2/node@v14.21.2+x64 (darwin)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"14.21.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.1.2","delay":"^5.0.0","ts-jest":"29.0.3","typescript":"^4.9.5","@types/jest":"^27.0.3","@types/node":"~12.12.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.6_1686083092384_0.5940168754356321","host":"s3://npm-registry-packages"}},"0.1.7":{"name":"@truffle/promise-tracker","version":"0.1.7","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"license":"MIT","_id":"@truffle/promise-tracker@0.1.7","maintainers":[{"name":"rizedr","email":"it@consensys.net"},{"name":"joshuafernandes","email":"fernandes.joshua@gmail.com"},{"name":"cliffoo","email":"e2is2uyz@duck.com"},{"name":"kevinbluer","email":"kevin@bluer.com"},{"name":"gnidan","email":"nick@gnidan.org"},{"name":"haltman","email":"harry.j.altman@gmail.com"},{"name":"eggplantzzz","email":"pobol234@gmail.com"},{"name":"fainashalts","email":"fainashalts@gmail.com"},{"name":"cds-amal","email":"cds.sudama@gmail.com"}],"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"dist":{"shasum":"edc5e5940656439db7b1956bd4838d12dd4b9ecf","tarball":"https://registry.npmjs.org/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz","fileCount":6,"integrity":"sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==","signatures":[{"sig":"MEQCIDkc4KhOY2/XfDq9zHjLFf69AxIDpwyztIgqZLwib8Y3AiBffvaZWRQXjeSGBXKSr72q6id9EXygKbs+0gesf+iEcg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11461},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":"^16.20 || ^18.16 || >=20"},"gitHead":"033fc64fcdf91ceef61100938d7ffbd53b63eee5","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"haltman","email":"harry.j.altman@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"_npmVersion":"lerna/5.6.2/node@v16.20.2+x64 (linux)","description":"A tool for wrangling async operations that need to complete before the truffle process exits","directories":{"lib":"lib"},"_nodeVersion":"16.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.1.2","delay":"^5.0.0","ts-jest":"29.0.3","typescript":"^4.9.5","@types/jest":"^27.0.3","@types/node":"~12.12.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-tracker_0.1.7_1694116179624_0.13528841181443396","host":"s3://npm-registry-packages"}}},"time":{"created":"2022-06-23T15:17:47.161Z","modified":"2026-04-29T21:46:37.657Z","0.1.0-alpha.0":"2022-06-23T15:17:47.472Z","0.1.0":"2022-06-23T20:45:48.991Z","0.1.0-alpha.2":"2022-06-24T16:11:42.879Z","0.1.1-typescript-migrations.0":"2022-07-21T02:40:14.742Z","0.1.1":"2022-07-21T23:31:53.768Z","0.1.2":"2022-08-10T22:22:54.719Z","0.1.3":"2022-08-17T23:40:17.876Z","0.1.4":"2022-10-12T22:47:52.825Z","0.1.5":"2022-10-26T20:11:16.728Z","0.1.6":"2023-06-06T20:24:52.608Z","0.1.7":"2023-09-07T19:49:39.801Z"},"bugs":{"url":"https://github.com/trufflesuite/truffle/issues"},"license":"MIT","homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"repository":{"url":"git+https://github.com/trufflesuite/truffle.git","type":"git","directory":"packages/promise-tracker"},"description":"A tool for wrangling async operations that need to complete before the truffle process exits","maintainers":[{"email":"it@consensys.net","name":"rizedr"}],"readme":"# `@truffle/promise-tracker`\n\nThis library is used for keeping track of asynchronous work that needs to complete prior to the process exiting.\n\n## Usage\n\n**IMPORTANT** Only use this library as a last resort. Typically you're better off architecting things so that you don't need process-level tracking of outstanding tasks.\n\nSome alternatives to consider before using this module:\n\n- Wherever possible, only make asynchronous calls from within an asynchronous\n  context (aka, avoid using `.then` and `.catch` callbacks).\n- Implement timeouts for long-running processes using `Promise.race`\n- Unref any best-effort/speculative timers\n  ([immediate](https://nodejs.org/api/timers.html#immediateunref),\n  [timeout](https://nodejs.org/api/timers.html#timeoutunref) to prevent them\n  from keeping your process alive when everything else is done\n\n### Tracking asynchronous operations\n\nFor the moment promise tracking is implemented as a method decorator, meaning it\n_must_ be applied to method declaration on a class.\n\nIt can be applied to any method, and it will only add special handling when methods return promises\n\n```ts\nimport { tracked } from \"@truffle/promise-tracker\";\n\nclass Foo {\n  // totally fine, even though it doesn't return a promise\n  @tracked\n  synchronousBar(): \"-\" {\n    return \"-\";\n  }\n\n  @tracked\n  async asyncBar(): Promise<\"-\"> {\n    return \"-\";\n  }\n\n  // this works the same as with `asyncBar`, even though it's not explicitly an\n  // async method\n  @tracked\n  promiseBar(): Promise<\"-\"> {\n    return new Promise<\"-\">(resolve => resolve(\"-\"));\n  }\n}\n```\n\n### Waiting for tracked operations to complete (async)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nawait waitForOutstandingPromises({ catchHandler: () => (exitCode = 1) });\nprocess.exit(exitCode);\n```\n\n### Waiting for tracked operations to complete (synchronous)\n\n```ts\nimport { waitForOutstandingPromises } from \"@truffle/promiseTracker\";\n\nlet exitCode = 0;\n\n// If no catchHandler is passed, rejected promises are handled silently.\n// This is because these promise rejections should already be handled by the\n// caller that created the promise.\nwaitForOutstandingPromises({ catchHandler: () => (exitCode = 1) }).then(() => {\n  process.exit(exitCode);\n});\n```\n","readmeFilename":"README.md"}