{"_id":"@ashnazg/quantum-promise","_rev":"5-2fb3e242069b063f3328f279adf34388","name":"@ashnazg/quantum-promise","dist-tags":{"latest":"2.0.0"},"versions":{"0.0.1":{"name":"@ashnazg/quantum-promise","version":"0.0.1","description":"a promise that runs its creator only when you try to observe the results","main":"qp.js","author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{},"devDependencies":{"chai":"^4.3.4","mocha":"^9.1.2"},"_id":"@ashnazg/quantum-promise@0.0.1","dist":{"shasum":"0418e112d5d7b6a1008c56b83e0019884bd6878a","integrity":"sha512-A2AdEi1MDd4e6D2tdChRqatSbhyf6GyZZ1lLRI71tbtkpTynmaKwmAhUKbqI8++SkkPS25Xzfbf4LEt9VHDsNw==","tarball":"https://registry.npmjs.org/@ashnazg/quantum-promise/-/quantum-promise-0.0.1.tgz","fileCount":5,"unpackedSize":4209,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8Bjr8NjTXM9CVkEQUWCDl7Zlyeypw7Hk5owCsolqPHgIgYMi9IDa2BrcOKWLNO2qBLBkYsqTARpl4kH+vMVuinjs="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quantum-promise_0.0.1_1634076789451_0.5684203305362954"},"_hasShrinkwrap":false},"0.0.2":{"name":"@ashnazg/quantum-promise","version":"0.0.2","description":"a promise that runs its creator only when you try to observe the results","main":"qp.js","author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{},"devDependencies":{"chai":"^4.3.4","mocha":"^9.1.3"},"_id":"@ashnazg/quantum-promise@0.0.2","dist":{"shasum":"7c9719b606885b0db8e59f8e8a86a0d393c5e41e","integrity":"sha512-zlhJ4dtBJDr8w1aAu133ung8mP4to/FABr8s3nBUdOfKTgvLeSbNeB48XmEWnxRedgMbFmldTvU8ZEMEqeSE0g==","tarball":"https://registry.npmjs.org/@ashnazg/quantum-promise/-/quantum-promise-0.0.2.tgz","fileCount":6,"unpackedSize":6414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh119jCRA9TVsSAnZWagAAFUUP/RyoLoJ9znGMloCKOFWt\nb/7091nZMmR5auZEkvbf0cANbkdKCTJKoziiwRug7bKoeU+MkQPBPhLMf3T9\nRTLIu1eJIy39TyZ6N/YfxIVd4sS2K2gIPTFP7HccvUAjxJSnaKdCvuQCssGB\nmZDbJovyrWb3m6H5OiPgwZs0/z38rm/Q3YQegio9FPnxKUEgHAYQZCt2FZB8\nVzceRTp+cizBkNJamZc/2Uiv1+T/S6eDQqvAdxvrbCRWpmgm+xkVrwoW5d0/\nME/1LcZ4c9tBtIvh6J4gxj/z3hhN8n5DtSce1MJlS5qg7QSGPgnbWAAYwBZI\nHZdI7QfE+pd2VOWWOINR3Wn0g/bmRf/ND25/1Wc8x9bCGGbQ1nOY1GPPtEwS\n5w1lLR99En79HWy+fFZ15v5S93DkxoZJcPZeB+Q3oeVToPXcYgUCVtXoqngW\nHO8Ph/+IPwJ+YOvRfnvpTlu4rckmDJArNMqu17X4IkWx2j+yMO4/ae0N7bh/\nKCyE7C3vVm79/nY3dSwPHyMqjlBWxs9tJPZejNLb7wEVeMxtzYb9WL3tbfYr\nPeXcvjLsX7VW1slxBVQS8+oDyPzvchiHW14vinuk03/wVqoA/W/Nl4lzg1/5\nlEOt5PIqYHnB+ZsM3zxViHgb9kExTmEJt9e4CcoxTeRyc2NczRemP6IoqunY\nRhDG\r\n=mCl0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7Wvelo1ujmjMkgXgnonYgy8ayzPVPHoMEG3ldVdXC/AiA8WW9b1KgdVDp/E3Ha0inGQG68iJi8qgF9tH+yPoFP8g=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quantum-promise_0.0.2_1635256264081_0.422444236106263"},"_hasShrinkwrap":false},"1.0.0":{"name":"@ashnazg/quantum-promise","version":"1.0.0","description":"a promise that runs its creator only when you try to observe the results","main":"qp.js","author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{},"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0"},"_id":"@ashnazg/quantum-promise@1.0.0","dist":{"shasum":"198afb9151eaba4dfa070bfb75aac118fc17e945","integrity":"sha512-b32eHWZDn/enxTyTFpCNoSJb9QB4rlzqiBsvH9XX5PUcfSnaAA6N8yDxn4yLYJSDGd1lsPMK83b00rAugbsoBQ==","tarball":"https://registry.npmjs.org/@ashnazg/quantum-promise/-/quantum-promise-1.0.0.tgz","fileCount":6,"unpackedSize":8439,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJwESZYGkkqoxBEhsoXSM9y+rlbc2Y/iRu2qJx9+26JwIhAJhjeCHyXi9pW3KbDqDSRmdiMHnZaSxFljr7aPCUl+b0"}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quantum-promise_1.0.0_1683475582059_0.9855648048126293"},"_hasShrinkwrap":false},"2.0.0":{"name":"@ashnazg/quantum-promise","version":"2.0.0","description":"a promise that runs its creator only when you try to observe the results","main":"qp.js","author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{},"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0"},"_id":"@ashnazg/quantum-promise@2.0.0","dist":{"shasum":"fdf8a4adff7bc8a42583453e622363b1db34e9b4","integrity":"sha512-LE+torfANa+/Vooyp/BeZXEikoT8OlVhxJvaC3b1GsbFhtv9sSLd9LRhuTs9BRk/jopZkp0QdBowkWO/JY3Ryg==","tarball":"https://registry.npmjs.org/@ashnazg/quantum-promise/-/quantum-promise-2.0.0.tgz","fileCount":6,"unpackedSize":8112,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNuqTy1p3O9FcdOScep80/hDhaBgLfv2+eVNuXOd+j7AiBbUTLQxxKy0JF2Gb7KhXIfWVW+AyAj+b0cJNk5Vt95Qg=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/quantum-promise_2.0.0_1701291257605_0.9223737916544164"},"_hasShrinkwrap":false}},"time":{"created":"2021-10-12T22:13:09.407Z","0.0.1":"2021-10-12T22:13:09.650Z","modified":"2023-11-29T20:54:17.976Z","0.0.2":"2021-10-26T13:51:04.212Z","1.0.0":"2023-05-07T16:06:22.250Z","2.0.0":"2023-11-29T20:54:17.779Z"},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"description":"a promise that runs its creator only when you try to observe the results","author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","readme":"## Quantum Promise\n\n<!-- ~/projects/ashnazg-npm/quantum-promise/qp.js -->\n\nIt's like a promise, but with more lazy procrastination: it only starts once you await or .then() it.\n```js\nconst qp = require('quantum-promise'); // https://ashnazg.com/docs/lib/quantum-promise\n\nasync function dowork() {\n\tconsole.log(\"running\");\n\tawait q.delay(1000);\n\tconsole.log(\"done\");\n}\n\nconst promise = qp(dowork);\nconsole.log(\"about to run\");\nawait promise;\n```\n\n## Is used as a mix-in\nAn object can become an awaitable deferred action by using this as a mix-in, and can replace the `run()` behavior after creation but before awaiting:\n\n```js\nclass Foo {\n\tconstructor() {\n\t\tObject.assign(this, qp(this.doDefault));\n\t}\n\n\tdoDefault() {\n\t\tconsole.log(\"default action that's triggered by await\");\n\t}\n\n\tconfigEdgeCase() {\n\t\tthis[qp.run] = () => {\n\t\t\tconsole.log(\"running edge case\");\n\t\t};\n\t}\n}\n\nconst foo = new Foo();\nfoo.configEdgeCase();\nawait foo;\n```\n\nAll this weirdness allows squirrelnado to express ETL jobs with the following `await => commence` syntax, because I dislike verbose boilerplate:\n```\nconst {read} = require('@ashnazg/squirrelnado');\nconst rows = await read('db://endpoint/tablefoo'); // the lack of any explicit termination means \"resolve to array of rows\"\n\n// or instead of calling await on the opening step, chain them and await the last:\nawait read('db://endpoint/tablefoo').map(row => {\n\trow.calc = 42;\n\treturn row;\n}).write('db://endpoint/report_table');\n```\n","readmeFilename":"README.md"}