{"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","name":"@truffle/promise-tracker","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","license":"MIT","scripts":{"test":"jest --verbose","build":"tsc","prepare":"yarn build"},"_npmUser":{"name":"eggplantzzz","email":"pobol234@gmail.com"},"homepage":"https://github.com/trufflesuite/truffle/tree/master/packages/promise-tracker#readme","keywords":["ethereum","etherscan","ipfs","solidity","verify-source","sourcify","compile"],"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"},"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"}],"_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"},"_id":"@truffle/promise-tracker@0.1.0-alpha.2","version":"0.1.0-alpha.2"}