{"_id":"coffee-test","_rev":"28-5d924a28b44942a05adf7e7933f1996a","time":{"2.0.0":"2021-03-03T17:48:19.732Z","created":"2021-11-06T12:20:02.584Z","0.0.1-beta":"2021-11-06T12:20:02.732Z","modified":"2022-07-25T21:04:55.634Z","0.0.2-beta":"2021-11-07T03:53:49.532Z","0.0.3-beta":"2021-11-07T03:59:31.625Z","0.0.4-beta":"2021-11-08T03:33:49.879Z","0.1.0":"2021-11-11T09:03:44.149Z","0.3.0":"2021-11-23T03:45:22.100Z","0.4.0":"2021-11-28T09:45:38.111Z","0.4.1":"2021-11-28T09:59:15.555Z","0.5.0":"2021-11-30T11:36:20.178Z","0.6.0":"2021-12-22T02:14:25.943Z","0.6.1":"2021-12-23T05:37:51.955Z","0.7.0":"2022-03-13T03:04:17.799Z","0.1.0-night":"2022-06-05T09:28:54.271Z","1.0.0":"2022-06-05T09:31:06.172Z","1.0.1":"2022-06-11T03:47:06.948Z","1.1.0":"2022-07-25T21:04:55.564Z"},"name":"coffee-test","dist-tags":{"latest":"1.1.0"},"versions":{"0.0.1-beta":{"name":"coffee-test","version":"0.0.1-beta","description":"","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.0.1-beta","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-C8+eCsEvuN+Iw22a3XeZgW/2CPELVqUwKqsVovQ5foy5y+DvH5bPBr1wb1exi3I8LOwcbIyh5jCIC+5UynGmbw==","shasum":"3b2d1500f0a352e89e98f73adcb78228d0d20872","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.0.1-beta.tgz","fileCount":11,"unpackedSize":13864,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEXJmxeWFb3txsmQbSdnvHhu9+TVGOJrQtwqZMdz0W9wAiEA3iyz3rmefsy5ZwukJr02s5eRm2PUZo2VzvRq7/MoCyM="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.0.1-beta_1636201202585_0.36828746720854877"},"_hasShrinkwrap":false},"0.0.2-beta":{"name":"coffee-test","version":"0.0.2-beta","description":"","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.0.2-beta","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-M0Jrgp2aq/OtidqIcNardqBtMaAr0VspgwBgZwRf/mXl4hA8q6Pz2zhmgRq52cBHI8hm8pHeke6Kl62Y32WyxA==","shasum":"518599f95525f9b317354c08ff3146626ea1153e","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.0.2-beta.tgz","fileCount":11,"unpackedSize":14015,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrDtieN+0dmA8NG0o22QCUM8mNm+R/c006gpQWqQf7agIgZMr86jIXQhnfzPpX9iU+BfTF34UajryXI+N7Dz4cZJA="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.0.2-beta_1636257229387_0.2208881550104227"},"_hasShrinkwrap":false},"0.0.3-beta":{"name":"coffee-test","version":"0.0.3-beta","description":"","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.0.3-beta","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-42+TwAsMq3hICTHe9hVm3cr18kaQBYQ45v4fP5NqUWeA+WBi1OPqyrsKi926gCoqwIXvtk5k29d5O4VDbhE5cg==","shasum":"8d04dfe21f9581df7ebcc867aeb93a6782afb3ea","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.0.3-beta.tgz","fileCount":11,"unpackedSize":13962,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHaV8on2a5Jm7pfvSYlaFq3S/zIjh3EmUhbs+UrmEcqxAiA4kMJbpm2I1y729q2yp5oo6IuPXJoBd+IWPViy5AWaZA=="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.0.3-beta_1636257571528_0.9485902523300205"},"_hasShrinkwrap":false},"0.0.4-beta":{"name":"coffee-test","version":"0.0.4-beta","description":"","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.0.4-beta","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BXjULrHF83hylPPeviH8XqBKV3CjLoLaDwHd+3RH4ai8hhAhysqJu6WnnuO6h33eE1iTzBknpxNNLGTznaztYg==","shasum":"6ae8d2c3124f9476fa8b7b6f931b61acd22e4c5c","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.0.4-beta.tgz","fileCount":13,"unpackedSize":19128,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL42SBQutxV2VNvdwtlRErI1KUV+Sr5HHyZfZTgz2ZMAIgQywCGMvJprBuYFoJmjHcq8pzaAyqSCuwRCMYxvH9pDg="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.0.4-beta_1636342429741_0.0859989235375247"},"_hasShrinkwrap":false},"0.1.0":{"name":"coffee-test","version":"0.1.0","description":"CoffeeTest `(coffee-test)` is a lightweight typescript testing library/framework","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.1.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-9konQbK03G3KowJpSe2U3dxGntZsUIs0GiS6OTRSN0+czNJkdPEgKqSo22x40w9iOdgwGYHH2BJ2qlzrjzlIRA==","shasum":"67589305aaa2c63fded295be1ca7a94ddcc5acdd","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.1.0.tgz","fileCount":16,"unpackedSize":33168,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpvNRxkQw6fPe9AekY2l/wj8co4aK18hq3LbbvxN3/iAIhAJPKjuFqdT9kafw81eKB2p5F1nYEYfrxHtsXELp9qu7W"}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.1.0_1636621423955_0.3698540299329365"},"_hasShrinkwrap":false},"0.3.0":{"name":"coffee-test","version":"0.3.0","description":"CoffeeTest `(coffee-test)` is a lightweight typescript testing library/framework","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.3.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-t/l/f3vHZHN6paCd7MswQY+02NHXr/YkLPy5Kbz4yaoB3bpTPl+0TGUy/DlSs+vG/vHIYfAQ8j7UYnszRdCwvg==","shasum":"a5a2db863fbeb5b0eca6c9c7020c1b0cfc2535c6","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.3.0.tgz","fileCount":16,"unpackedSize":33597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhnGPSCRA9TVsSAnZWagAA3pIP/AygxSuKub37G1Tk11kw\nMJVMLq53/0lrKvfsURhZAVj4MsOrtLsSCPlwqRFKks7DEp5IBkN/bfpgYpPG\nsbINp2HnIC7X2UINSO+UjhDDHF2BaX/iM1i4nD2Q/bAWn160nv5kxdknYre3\nNI2ZyZFEdCOjOSX2mMwhuMTJC1jCSMNx3aCtz8AVSGhMXVATn0G/xqG2kvtO\n9OdKRfPfSAioY6elHwTR47nnIcwxqBJYoVYeBfMm+vDs9xEvqcxmpJ4k9pip\nHCUHtuajPW+myRAMCL/Z82Jc4cvIKfpAiPwvelwvKrc3o2i0OAOiAKEsGtmd\nreDm1bidrY2jWDI3OQkqvQYZyu+S6GHh3kWGWSXqjuF5KaoYXbSnv0QF5Avh\ni09k/LeY3Bpxcf7qjMYvrp4kYNaWktE5LRCDAV1H96vOjAXjFnqSIFZRdBHW\nWe7WEydjprwgvrGtLKMOYzqQrvwvlEJIDVf1Uh0mJujVvbemYm1ldLOtUX1P\nX+EzHialYzWs3Rct1ROQVR02IhBrlmLE0TuEwnJrm6jcmmLl3akBPdSrYp0E\nBF9DlwaHqmh4Wx+GlfsbLAsQu4V8cA4H0shw/CAOESwWJzcBtQZtIOq4lbnS\nvgXtnh0WmXoqiPa9tyIyYVZZKhgL0TISy7U4sfVueY2CfWNa0W8mN3qWOENU\n4Op6\r\n=snft\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzYtQK6dUJDMQKXIQSVxunnNpojDcCNLIYWDGqEQnOOAiBZGci6I+4PNjYV8eSw/fjsM5b6gEmhAYv6N1Rno/mBkQ=="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.3.0_1637639121941_0.8077692866085351"},"_hasShrinkwrap":false},"0.4.0":{"name":"coffee-test","version":"0.4.0","description":"CoffeeTest `(coffee-test)` is a lightweight typescript testing library/framework","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.4.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-WntGd0uQdjdOE3WgU6G45KWD5Cy+ZwkfF05ImKoaFZnCzPhnT986GtdrPCGI+NYJYYI9xdNtM+g7DDAdMOfrsg==","shasum":"ba75e8b79957a63ce0c3e3f26dbe47a7b5225e1d","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.4.0.tgz","fileCount":16,"unpackedSize":48523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJho0/CCRA9TVsSAnZWagAAi8AP/iUP4z2eS9ztfRNOh8bZ\no4a/qCxLtN9+6/J3e1dfz11r+nAy7DolqODAfUiyDiSLx1QkJw/RMxCuqHQE\nZGaKYVQ491tE8O8wrEkQhNT0PyHgfVi4pd0U9mYX8Az6z9de4ahR/dV2so+R\nbkkyexcl6dyJ2KrNZ2a1BrCG3QNIY0VNQ7MoTgGOemA1g88KnhNy3nH1ImTg\nocj2MrWVO0yWs0uinSlUckqBdgkEwOU7D27/6EZCaTqBqTP0jnZmG9FlrhwI\nLkDwc83M73h+/TDrbxDeFWcY3iqVUnN/yiCkfJWfbt+HF+7WHw224DG73jxY\n9tcwvrzL3mV6kW6sauEicYmAYbvlkjYcwduC1+Vbc6ZVbUopz4A3NSK+GS4z\nrAcwzGyLg/HZLnlTw5uy6+AZsHMJAbTfLwGYBrpQSOPnhd2KRn0Qekjt9+k2\nVIh/lRQ4EPMnWGaGrkQG03PsmO1cCyawN+oTc9dGNbczgPR1Ot80g6HaPqfW\nQFbrpVF7H4vWZgt2teUZ/FVRdwEg0h/vTpsuByRhbi1PR4dXtH5XKk6WxHwo\ndDrcapkt9ol0c1mwAW5Ifvnw4SVAY8BhluaxQrS9JTGgCDR1FX/EWkzzuWRY\nh6cbNGCrRxbG84Qbax8iJo23Wou9tLYVaKAqCB7jDcZDYXCr/LQ+UxpcGgLj\nPlCE\r\n=SFrm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENmW1fhn/TdOZdiB7MhwemdYk5yC7DDhZ4kczd7f6+/AiEA6gqMW2x0pNexSfq0bw8RFQtN5o7acJZ/RoiXYQbw8qQ="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.4.0_1638092737916_0.07269964452631594"},"_hasShrinkwrap":false},"0.4.1":{"name":"coffee-test","version":"0.4.1","description":"CoffeeTest `(coffee-test)` is a lightweight typescript testing library/framework","main":"index.js","author":"","license":"ISC","_id":"coffee-test@0.4.1","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bDCTExsXjXHfm+xzV3rJblBhGDphB5VSipzNYDfUEQyb1K+RL8028FZGL3K9OST7bAvCeoksgEco6HmiQGgFUg==","shasum":"e7201e8b787513bd29683a1da983de76ea44e7df","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.4.1.tgz","fileCount":16,"unpackedSize":48522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJho1LzCRA9TVsSAnZWagAAyn0P/1SXtGhYvHQQ0vvubqOK\nHj/TDDkYbJidb2F1FmJBrK12hK1EXbwFhGFttzPaDn1EpuX3zjiuCOof/OcY\n0GiovQJRvOi+BsyFEjxG/mYPg72CgLxOhfOdcPXHnDIH+FGNxYMysApm4wtH\nfH3NEzIx8779kzt702517/DX9kcBJgDenizaqT6CM/cI80SkFSYnFoSja9eo\nNWxzM+HKNsHVWC1RjHDMuTM0+yJ6vlZJ+GJyN7TglUMPlhwjVzRJZZ0ssqup\ncy0gouZ6tzgOj/nQofAPIZULWRV6V8152kN54lE6K/yZEsi0jKuvtiaLh7eY\nESZrk7RsBxBxElfAUAbLzRwnEwUQXRgMpxYD6/hcrvbeA36NRVl7t9HzJ/6q\nIP9XNcoMziJ/BoFett9XWTtNaKaKQFr48/I+Pa6gKydJ5qxKuMLePY/MFOL+\n0riqckK4lTBlfaUxUzeU7m3HTLHuAgGFDdvNBBmEz/ebd59ISDbPZeLz26gY\nUGKH7+9MJa8bfyay3zm9r3SB1KneUIC8OcNru8xyHK2DuPdnQYoRYpk8COQY\nBdvpInGxoO6Dbsj0PykJBWSwgkjI63gAnIWtsg4DAFffH58QdVwOxOeCwqxo\nJdUCssbamP+NLwuOqT54zjqC3gZou4iLNEwrXvPzsLjjBt3rRu1PaG4wvftF\nIwNa\r\n=57FN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA8cY4FVM6HhtEimpYjgDdbyDGCRV+l7ZSqdH/8WN13nAiEA7WJMMKBb80oivyDqJRGCiF8UuIAMAW2aAOqt4ZZj29o="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.4.1_1638093555306_0.8604449624578829"},"_hasShrinkwrap":false},"0.5.0":{"name":"coffee-test","version":"0.5.0","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","_id":"coffee-test@0.5.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-Mg2SCatuHSRd2zUozaXpqCs0PDoq+hLH2hM/8UxY/OjBXnR5hkezojpF9n5wJRW5RNXV2rp2avK9rmPVKjzs3A==","shasum":"5aee233b365e48e1e8c7d0bdd3de26c64125a2b9","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.5.0.tgz","fileCount":16,"unpackedSize":51594,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpgy0CRA9TVsSAnZWagAAFhYP/ido+S+hdYKbmMh5iBY/\nAGy72q2M+wvQAAxrOVKgQE59p04HDK6TNWxXPUMM4PB9JdSxL9b7dnedNOOY\nGQ5sxAvfTuFDd6r6IojflJh0Ds+Yk6b+Mdk3yxST9gBsoYXv98ft0WQ1RekL\n6VM4Q30QpNjX51V5gmM6EZJ4wSv7pyV6xeqDk1zxTrtpVPMolZBH7Ya7igFS\nlTz92ktI7rdsk5qZV5quE6RL2ohLo0QN4c34VRVD7va6LypezrB2L8viwRpK\nkgvHR/pV0Jsi7imZBdKbmdBiV52ED+ZjPCw1V5nlZy+CN92zToWLJtHKyTUl\nvSA4Hj1rfCaD48VG+hQ6Qjr4eWlWXT1/ZZTsc5+I7S62aOYlvuVvBlQiZQ6s\ndBA3/lK/3bB46yabJJSmUUBSFzNIZFEw9M9fczAnN/70reIlrEftntMUUarm\nfgvSUkt0ZIUedNMkGmFz1J3jgimgITcEWD34jOehSpd+RgO1QRjFv12ny8n8\n2VgZ4tHvQomamcGpQf3woLqF6WehfLowZgiObT2N+LyUHYshyz2SV/ZnKaTp\nCbj0S64EwvpFpCGnzJmVq7irFJIM3C3JzaXtwNA8aXw2vo8lc/+eR38BINyF\n6bNrXPcCELy7ZpnMPXD/y1Nw/UmuKMZDitfylKG5kckFjP6Mshx24Li6L2yW\nATmn\r\n=RhkN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHo1iOzpePD4sj+nO4iGTeO/4Hz2ohfuuqRsW4gsB5N6AiEA653mY34tSw45aM1O8l321gMyLyak6MbSHGduBcVlUXY="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.5.0_1638272180031_0.48274540797632737"},"_hasShrinkwrap":false},"0.6.0":{"name":"coffee-test","version":"0.6.0","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","_id":"coffee-test@0.6.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-iOe+OkgZtVYTkll4ZnseZTa+Ty+C/x8CqqT1cTYYzn42cDjoG2EbEWoIXfrd5+Y5C3IQhC92LBy56y0LSfO/Fw==","shasum":"9ff45651a3e597de38a84c75b0c22f6f6a5c06ac","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.6.0.tgz","fileCount":18,"unpackedSize":57035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwooBCRA9TVsSAnZWagAAA/AQAJGtmcg14MA+/YBGUi5v\n5c1XDnF849NVVI15bD4b/r6UIR9Xw0CaaHZ2E7LTuhNyRVkdQXZxtABRxC6I\nsCQyjozYI5b0rU0QN1CUdDHX3ObLEdg440Q7V/siFylA1f/2/XOMUMsePR9C\n9BDztVJMkW0d9E21s4eE1ZsAHV8MZ2C0NL5T3D23+darSZcPHlYjQ+HEGpOq\nqs0O96bq4V3ctliyY/uxUPrPA9CUQx7ziapOFMwAGP6Y1BD7EZW72CiRFLYy\nEht9mEdYnGfNoz113BJl1tm/UA1bpQdW4se5MMnF/BTPT1W7h9xTV2yRIJxb\nqOj/NxrvAhLzmiBozpJBL8BwtL1vlGeuEgkvyDEje8H/pLK/yZ35RL7y+jpy\nSZxasqWycfK6vrU0r1avwOgBjWdCHdJ6V4WJhUjb6Myb82ehI0ny8LPhZTsh\n2/RS5qyYsf/TcwyGCJB87tYeMXahPFL8KoYdtaQJUk/W4qIw58mw9TSeZ9Ba\nN2FMwr3RbDOyniRX7XHbjOqw3XQtA3JeYhp+qJbJD/HzaRFkR3ZypjhIhxVd\n8RrAPH/zl0NXkoaXeMrCAmcLNQOwUA4qqk0uv0YlDHthkY8mT4JGlPM4YDiE\naRNgQLQ4B0aKQsleIG3mFFmx4VWVSX7b6Wa8CzVbt2lIcwnJTyejhcKjxX8U\nW9fl\r\n=G8WB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAwoF0wb12zRxPDQSqd+aWn/gdYz16vWl6TJXiQFt8AHAiBQ/bisIFEqwEj4ahq2kTAiOKqlQ0VAMjN3dvPjOEcWBg=="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.6.0_1640139265732_0.7760983354535269"},"_hasShrinkwrap":false},"0.6.1":{"name":"coffee-test","version":"0.6.1","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"_id":"coffee-test@0.6.1","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ArN1GfGpOXYpEU+/uiyEsbo+6MzimYNooOiEPEzv7IMyObI/2yLe1kakIVv+u9kkIapu7WV1hmO+l2O6CjrnNQ==","shasum":"4f55c53296179d5c57b755021c2ca379facd3d6f","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.6.1.tgz","fileCount":18,"unpackedSize":57205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxAsvCRA9TVsSAnZWagAA6xcP/0TFFxeoIrZrbKNVXxu/\nk+0Ho3wP3yCx2yE3dRyuAmBhg80iaS5WcqJKcdOYh9exV1zFhGsIY8a7sZSI\nleoP6KlMtmYDpMCQHYU7L0kKHZGhG0kIgz3TpzBsfjOhsKJnt1hctvPy88J3\nvvSMdd9E80uiBRntKQ+PeBMWk99LCo/Wvu7LhDKAjUIx+tdUBdJwgdlat7Tm\n5GG5DR+WPKKXdod3CQjuLeDyDwtbtDzY2JIMJ+jmwc6H1bi6L+axVaOlWfXf\nIUWMdfHOQWyZX++aZE0SBZnxto8P0l8u4HD2gAvH2tTpxbT8Y3VRLqzTxWdY\n7J3MJsLK47C9fjvw4gqFZ8ALuZBfTuVBFn/ca1VAmVcyl47WkUsV50yHlh1x\nY0gb7TxMHp0A9KmsITkHAevRWqOUz8yEUekh2KMjrWHvTQkOaghKX7OB8DBN\niuJ42fTNOqYIIaRv6+9XNJ23cyMUf7gL0wsN+EOYCQqN0MYOOH4fIL/DShiq\nwrrxnOJ4CYvS198D5AuNnSk4VINFgMi4CLR/8yO7ysO+c1wQ2ESZmuU5fTvB\nzvPiJYb3C2DknvYm5yQ1j4tbzpBquD9MzI6Lg3Zacq5CCWNyd6SbrXsfH+xU\n2TO024IzYYzacMkhL4TMNaALuTMuWo7aV8trI0xfauNOyMCpViYYMYPN8Gk3\noy1/\r\n=HbUQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1Gr89nTpOxmPIHI5TrHyfGwCiEp327FZKqAxLy7ME5AiEAtcVJT3vlDT5OQlG5XPMnbydw8PWofbiXbj9m924iy8c="}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.6.1_1640237871852_0.7003960081924145"},"_hasShrinkwrap":false},"0.7.0":{"name":"coffee-test","version":"0.7.0","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"types":"./index.d.ts","gitHead":"a4f6570ecb4c668e85f62c993951e79612c3e98f","_id":"coffee-test@0.7.0","_nodeVersion":"14.16.0","_npmVersion":"8.3.0","dist":{"integrity":"sha512-1qEf98EqZ/fsvMuoXDODR2uzbWRwAyvquU9mDN+VIQiuQS78duft+q+0oNAidWaf+wocurjVLHPSd5uSmqiWDg==","shasum":"298ea3082f12aa81eb80aab9da3825b1db87b02b","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.7.0.tgz","fileCount":18,"unpackedSize":57894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiLV8xACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoo4hAAhKEVb4nxkishMfiBEeqoD8Tq5kdE/auzjEe1EdOuJZw6H5ZI\r\nmISkYUJTYcEMMFgvZRLk/NkJyQdzYu8rPKmCmSLv1FAYTynQLXeTzqYB3xdM\r\n2Hu8OsE+RkOzDArIYnawbArMMrHLPIrPi8/c0fcPxT3OdZvWIKbW+GSO8qf9\r\nGKI/pL3rNMA1loZO75em55kEMT+CYr8RODRLPoeNpXVLcONHX8Yb9xIaree5\r\n3/0ne5J0jOqpvvJbiVbMC7xtGNpsrRJU35Qnf7xsWAEGjp/y6EMpp//+D+Jq\r\nczLdUS7wjfCGIuzlQwK24EGrKZuOhDnrmEMfB4AVksc9P2zFwFgK6KHqA4gc\r\nSYnk8oDcbaWj01+8snGoCLBIWk5DYUegHOMswFsIeKtPsx1NOni3Tdt9suik\r\nvW34a6qnUpY9VoOSXUTD2qwyw0n1aUOa8YLDU+Gu1YOT9AOpT0iYROBdTENO\r\nrdgr49I6S1RyM1TQ8L6lbnqaIuCKSPOgXdpJLrpgGltFgCYAnAitAG6ES7mQ\r\nFS9VYLqj8JIbRejNcJTZca81YORehC0LP6EGH3IawgRcCap7VoGGKJ9EQFwo\r\nxUYyLGw7j15O+Y9weEmm3X/cNqeUQezEemIzjAynTluVUEmZKZwTi+T3o0sI\r\niVgw7gVOxzP95LMPfGhXY7Kvomj2mw4E/c4=\r\n=PWpp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKLDhRK0U2lGynXE+ixuW98M9uaJQjk6xfQdIpoENQTQIhAOPL73juCHyl7qrG03n4/+r+Cxo0Vh4pZbRiq72WUCgb"}]},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.7.0_1647140657582_0.4357379203500431"},"_hasShrinkwrap":false},"0.1.0-night":{"name":"coffee-test","version":"0.1.0-night","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"types":"./index.d.ts","gitHead":"a4f6570ecb4c668e85f62c993951e79612c3e98f","_id":"coffee-test@0.1.0-night","_nodeVersion":"14.16.0","_npmVersion":"7.24.2","dist":{"integrity":"sha512-7D1nBaXtdHWfaPCVfskuD4fGHRVSUYa81xXBZVtEIC6c09nZfdvGIcXbcQhveVqc46CSHcVPXG1lQB1W6oc83g==","shasum":"ad1ef162a5368da64bd63ee7cc96170a91aad22e","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-0.1.0-night.tgz","fileCount":18,"unpackedSize":57587,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZrGlzdMKH0jwPiDPMUuBBXRieR9bKTHYLtSTO7oxWCQIgId+UetmXiTDowoIngKi83L4fbPTuf7kwxFLtRcrUnWc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinHdWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIGQ//T5x60b6MFtNMUTbdVRa1qds6bQDuBAhJoUmhanQs3iTjdE4N\r\n3BNVrFX48uXWzPOCBsgqWylBabble5uYeiF6znoK/IvfhLbaCE74HxE4A0S/\r\nIKd61o9g//bl388vtsPYceh6phR3HNXOR2oB00cIRG//vLkN0KmmH1szV1o6\r\nJwwR8BW5/mzT4W53PNsTGpXAxg0RfISKUGFZhbi1I7zm3fkDTwEUMgY4fCNu\r\nhGsaHQHX6kHyS4Saf9PL8TaOPZDU14+6joSCbbo3yDbIToWpiQlvZzIF+QXT\r\ni8eKg4YI33FdAfhlZFinvIEdMMu8pYCtS2aFfuq7eQotFYkfdqv6XWu1DsDT\r\nI0gW6gjo+toHb2Xf3izjAdjw8tp6JB0Pw3j80rqv+n8mRrQGWZ+tzTxw/2wd\r\n4m2dfYUOkIpY8M2oDMvWtX6ltGB39vv0KMgRM85wgnQt8IEayoniK36Y+QTF\r\n5sIRSgwM4KbGaCFMhUBv81dqSyC83cNXdWNqEkqxXOg5VdnLPkU9Q9zXfk+/\r\nE9/vkzFpP/omt02n++6Ge2KlO4gq/HQH1hbG7xTq9V5bguxgXlwfrTdusFWC\r\nYTpqX47m20rDmR9XcqZRk6qiDWdESqt6POZSzoF91mfEoF64oOFU6KM5lQyi\r\nEFRvSj10YDH6q7ZgPAyH3nqvJH/gzVSvNug=\r\n=HCTY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_0.1.0-night_1654421334061_0.5008934988978437"},"_hasShrinkwrap":false},"1.0.0":{"name":"coffee-test","version":"1.0.0","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"types":"./index.d.ts","gitHead":"a4f6570ecb4c668e85f62c993951e79612c3e98f","_id":"coffee-test@1.0.0","_nodeVersion":"14.16.0","_npmVersion":"7.24.2","dist":{"integrity":"sha512-Loo0J7YW+AP/Sumxx+kEpd5MfcP0HX1SIBcERUgPZcN7isCH0SUR+gaaoxTCcx8Lad2zkum0Pg3RT2eeI4gMIw==","shasum":"8ebd973168df8a6578f6f43791763bc6a1c88ee4","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-1.0.0.tgz","fileCount":18,"unpackedSize":57581,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIElYOiN5GDDZGy5+VpGNEAKFB7FPPmx5NKJwq0TZ6LpSAiAZDE1aPOHXM7BPK6y/J4pNB8nKxTLq0ubnWXc0uUukLQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinHfaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZyg/9EEouKYSr37Ou+I++mv1Ins8f+7GvPVTfKooATMJvaAyplZ12\r\n8a4axuD58wYzfb1Nb9tAzJZNUihgv0a2g0kg6TJMuQJi6YqkRJO/2uuy/98G\r\nmVidpSlGk9OyT3oj7iFDMiPKVCanIw072r0gJyv2oHdwYlvKNbMNaFF/3Xkk\r\nb7zfVesXoj4hUvXo7WiLuP87YaWi6Q3ibLTox/3pWhsGW1OlHhecKKfr33C8\r\nMmKr/NdIa/mvsaEPIzV3eNFrtDWUhDcvtDv5TEZH38BZDexfWRkHUPUinsx6\r\n3/IhCDNSfTlGSnmSDX0nydJNxILZWyVz2mcbbKx5eLe9PZ/XHMOimRxYVMV7\r\nIaWJKjYnwuGRA1NQiP2cyN6AwD4keW21bqh0ApGIKOtX0DRQYOL0+EjqIksU\r\nDuuHLE93lDqyQlUJvgPmGGtrlZzXIJYaFyugiVDofWQcodTnBGJXIJFkV8kB\r\nQYcovUY8IozQwtI9k7Tx66sdlRdU8kxfDvLBXna2fBuNtnnhIxDE+Ihq3BWP\r\nEHWARwuxE/DFjYWlIhjt/vBmNqH+1vtQV+EVDPctE0SFfYUrwrsBJuCdbzNQ\r\nX/spc0VSm03AsGxOr9+X8z+9227TMRycY+ffnmPMIRwlCBNhjuiin9bkYaaD\r\n16BLTS43IhOt5fcEoEw+hTWWsQFx0xZaMy0=\r\n=BgG2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_1.0.0_1654421465940_0.4587080179510534"},"_hasShrinkwrap":false},"1.0.1":{"name":"coffee-test","version":"1.0.1","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"types":"./index.d.ts","gitHead":"a4f6570ecb4c668e85f62c993951e79612c3e98f","_id":"coffee-test@1.0.1","_nodeVersion":"14.16.0","_npmVersion":"7.24.2","dist":{"integrity":"sha512-kBlWQru6PEUt5WW1HUNn2D28MR2dQSNSjya0jV25xmawwcmUzSbYzWDZQdKk7FOSxhmlXnxXgBByJtNUlzWVSA==","shasum":"8b2e69b7701ac3b70b111c8061311b89026b75f8","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-1.0.1.tgz","fileCount":18,"unpackedSize":57581,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoNsPmRX08HkoKfJPZ31q1wsC0yrbKdcNkYy0evaUMDgIgCpI295pzG5ibpwvSA5bQwg79rw83I5ewLyC0wruDzaA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipBA6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQ1g//cq6AL+0kutF8FoyC75bZ4kTCjucmSMDPq74WARS8Z8OYv880\r\nBzzZYUgrlI0l154e2SCsuRH2nmNAb3JBrdK9Zs5DHWIPZOJ0Ar9WThmASqA/\r\nLZrLViBObMOtzWTsQMgXaYSaCZtjx8WcUPr+seRli5oyDV/gKyAZxzW67Zix\r\nRxGBW336c7Icv4YXKlSevIA8oydM2mX7KNi+KrNHas3KYHNlAnWOuYB6yo97\r\n3vG8Od7aYIAxMfhiz68dIYpWVnnTMmOFS6tNDMz9wVg3hMhacFrxxd8bDKp2\r\ndx6/pNbDo4QuSw2FRYMBpHsRE/ZgslsjtGKRnLYkhX4ZJCT1Cp3FvSErYTgw\r\nsO3YMpDjMUqzRiDjjtJyfLqzQ51Jeih2ySQh/Btog3poLaBKnDiXAz9wUisq\r\nenZIBjcRY5255yhhuh8Gu7DGQT1C+U6/1pyu0kFXc2oYo4Pt4RmPVdfohEIs\r\nGGmjUzcnWjNnjEBGJBQfNFAftCUpt0KxIsE1gngAaSWmt5ujNKivKgdwyKhq\r\naXvJFje0aGLJKbpPGD9eevkpeDkc/AfmHVGgpp31CE//w5ILCCkfXEOSfvbP\r\ndjOS++MlCf4gzC6OlptAMKtzBOaQ9Kva6i2zaWp8ol2f0fZI3g5Dd71g8vnB\r\nXJk48PB0FiNGi7LkV4OpYaMinWshCTcWVzs=\r\n=tMZ6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_1.0.1_1654919226741_0.35180707304615977"},"_hasShrinkwrap":false},"1.1.0":{"name":"coffee-test","version":"1.1.0","description":"A lightweight typescript/javascript testing framework","main":"index.js","author":{"name":"PhoenixShell"},"license":"ISC","keywords":["test","jest","framework","unit","mocha","testing"],"types":"./index.d.ts","gitHead":"a4f6570ecb4c668e85f62c993951e79612c3e98f","_id":"coffee-test@1.1.0","_nodeVersion":"14.16.0","_npmVersion":"7.24.2","dist":{"integrity":"sha512-eiqnzKUU359J7T4a/Kocz60oMvCmj8vVo/xjjEQOcdg0b0qc+FqkgwpRfNDUZCS+CS5+1OXQ3bc+CN4UqVGQzQ==","shasum":"ecc69a7c2eeb7beb24c76fb612f535e035eaf676","tarball":"https://registry.npmjs.org/coffee-test/-/coffee-test-1.1.0.tgz","fileCount":18,"unpackedSize":58050,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC06MMJlV+Vpeq4YpqNoYICxZ8zKydJnI8tNF48BUJEBAiAlVKsoUttfk/SMpCgv01jsuq1mpTYBMPJUK+KsyOxa1Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi3wV3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoqjg//Un9QnZdKGfs7PeJCUav3Xz+qtMk7J1kWPljolscXZV0T4j6M\r\nj77DStcoUWHKmNJ2//uqZq7tY4c9TM9FoLeHdwMyYygHDqqrj35d0G+e6880\r\nluwwoQfu+9WpSAlSOzHG4EbO5gHD7AwV3RsNrJFs93ZDaGFTZ+KAZ9qcNfza\r\nCEnqPcnOtmwn5csPRv4QWMMqbv6wO4EQ5Me2Q9s0A44QeicLjeqfK99idCcZ\r\nIEe93MpUQZDWq7K8GRXceMfKjpVOMiPKtbViI+mx31cbF6/JyPGXnO716wUy\r\nB62cs1dCgIbjuGcIXTYw1f+XwAJlRyTmqZFm0IezrigzyPIsKbBe9j2eMSMd\r\nzor3YBGYgCUq2P92mSa/O3cWCnFZpsxiofNScmE3VTIl3oxdLZJyPUsh4NeL\r\n9rPFpkVdY3CwSfUyNYZXDtbAgqaFC6eZhAuBu5F1exVfZbbACkTh0EaTVfCt\r\nEkjxZHX8M/oNTLUn0aFOCf1LqsNOUT7ecgyIh4jGkd45V72rP/cJ13bnJpcA\r\n4VAMG4TFVy+zJsQ62fVeXOKmWu++i6HDWsrMbvb6TPmvHyJ5tnkLXviAGSc1\r\ne407IQhThzhbQlzIgXGEsab1lTZMgpHkaY0eVBYbIE+opanvSwI3iMtzvkvD\r\n+gRRLGiXMTMuFQYoIz/STkC89mIWACNKLN0=\r\n=DrFH\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"},"directories":{},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coffee-test_1.1.0_1658783095301_0.6505639771472533"},"_hasShrinkwrap":false}},"maintainers":[{"name":"phoenixshell","email":"app.phoenixshell@gmail.com"}],"license":"ISC","readme":"\r\n# Coffee Test - Typescript Lightweight Testing Framework\r\n\r\n## Whats New In 0.6.1 ?\r\n\r\nYou can now force override all tests but using the --all CLI args \r\n\r\n## Whats New In 0.6.0 ?\r\nCoffee-Test has added support for long running tests using the `ongoing` function\r\n\r\n```typescript\r\nimport { recess, ongoing } from \"coffee-test\"\r\n//will fire off every 2s\r\nongoing(2000, () => {\r\n    //tODO: do ongoing loop work\r\n})\r\n\r\n//must add a recess when doing ongoing work as by default the framework will move to the next test after completion\r\nrecess(() => {\r\n    return 10\r\n})\r\n```\r\nCaller macthers not have 'trap' functions which can trigger when a certain number of calls is made\r\n\r\n\r\n```typescript\r\nimport { caller } from \"coffee-test\"\r\n\r\nconst didcall = caller();\r\n\r\n//will trigger when did call is called 5 times\r\nconst trapMatch = didcall.trap(5, () => {\r\n    //TOOD: fill trap call\r\n})\r\n\r\n//trap returns a  trap matcher \r\n\r\n```\r\n\r\n\r\n\r\n## Whats New In 0.5.0 ?\r\n\r\nThis release features a new feature I wanted to add, you can now `inject env /config` objects with `typed exams`. As stated below the idea behind `coffee-test` is to have each directory as a sub test environment with it's own logic. That is why there is no global binary executable like `jest`. To support this all exam functions and hooks can be typed with a single type for a `inject context` you can access the object in the function lamda\r\n object.\r\n\r\n### Context Injection\r\nAn exam function can now inject a context. The purpose behind `inject context` is to reduce the import dependencies of the file. This will allowing testing of interfaces independent of what's imported. The context object is a place to put things like debug login functions, config files & any dedicated testing functionality\r\n\r\nDefine a TestEnvironment\r\n```typescript\r\ninterface Api {\r\n    doSomething() : Promise<string>\r\n}\r\n\r\ninterface TestEnv {\r\n    debugLogin() : Promise<void>\r\n    api() : Api\r\n}\r\n```\r\nInside the exam test files add a type declare to the `exam` function\r\n```typescript\r\nimport { exam } from \"coffee-test\"\r\n\r\nexam<TestEnv>(\"My Exam\" async env => {\r\n    //use var lambda to access environment\r\n    await env.debugLogin()\r\n    await env.api().doSomething()\r\n})\r\n\r\n/*Can be used with hooks as well*/\r\nstartBatch<TestEnv>(env => {\r\n    //do start code\r\n})\r\n```\r\n## Inject the Context\r\nto inject the actual object, set the `injectContext` in the `runBatch` or `BeginExam` functions\r\n\r\n```typescript \r\nimport { BeginExam } from \"coffee-test\"\r\n\r\nconst env : TestEnv = {...}\r\n\r\nBeginExam({\r\n    injectContext : env\r\n})\r\n```\r\n## Testing All Interfaces and Implementations In Same File\r\n\r\nThe power of dependency injected testing is that you can test all implementations of an interface in with the same file, no need to rewrite & you can test multiple in same file\r\n\r\n```typescript\r\n//define interface to test\r\ninterface MyApi {\r\n    doCall() : Promise<string>\r\n}\r\n//Define implementation array to test in TestEnv config\r\ninterface TestEnv {\r\n    implementations : MyApi[]\r\n}\r\n//inject context with   injectContext : env\r\nBeginExam({\r\n    injectContext : TestEnv = {... instantiate}\r\n})\r\n```\r\nMake you exam types with `TestEnv`\r\n```typescript\r\nimport { exam } from \"coffee-test\"\r\n\r\nexam<TestEnv>(\"My Exam\" async env => {\r\n    //test all implementations in env\r\n    env.implementations.forEach(imp => {\r\n        //TODO: write assertions for implementation\r\n    })\r\n})\r\n```\r\nHaving the implementation objects in the `test-runner env` means that you can swap implementations on the fly\r\nand distribute test files to external consumers who implement said interface without any breaking changes\r\n\r\n## Summary\r\n\r\nCoffeeTest `(coffee-test)` is a lightweight typescript testing library/framework\r\n\r\n### Inception\r\n\r\nThis project started when I was looking for a JavaScript/Typescript framework to \r\ntest the libraries and packages I was making. I was using `jest/ts-jest`\r\nI had issues testing my async code it would 'timeout' and fail jest.\r\nAlso jest was designed primarily with javascript in mind. `coffee-test` fully leverages the typing ability\r\nof typescript to improve test writing with inferred type assertions.\r\n\r\n## Purpose\r\n\r\n`coffee-test` is designed to be a lightweight & flexible staging area for code. It does not \r\nprovide a binary or executable to run tests from a command line but does provide\r\nthe assertion library and an out of the box solution to easily run tests in a single `test runner`\r\n\r\n# Usage\r\n## Write a Test\r\nuse the `exam` function from the library to run a test. The signature is compatible with `jest`\r\n\r\n```typescript\r\nimport { exam } from 'coffee-test'\r\n\r\nexam(\"My Test Name\", () => {\r\n    //implement test with matchers\r\n})\r\n```\r\n\r\n## Matchers\r\nSimilar to `jest` syntax `coffee-test` providers matchers to assert the state of data & code flow.\r\n\r\nTaking advantage of the type system `coffee-test` provides 3 matchers to assert state & code flow\r\n\r\n- [CheckMatch] - Can check a value against an assertion\r\n- [ArrayMatch] - Can assert state of arrays or `typed maps`\r\n- [CallerMatch] - Asserts callbacks with functions\r\n\r\nCoffee test leverages the type system to write faster tests with type inference in the IDE\r\n> Note: all matchers can be inverted using the `.not` property to flip the assertion\r\n> eg: `check(2).not.is(3)`\r\n> eg `caller().not.isCalled()`\r\n> eg: `array([\"name\"]).not.contains(\"not inside\")`\r\n\r\n## CheckMatch\r\n`check` from index.js can assert a value against an expected value\r\n```typescript\r\nimport { check } from \"coffee-test\"\r\n\r\nexam(\"check data\", () => {\r\n    const age = 21\r\n     //checks age is 21. is() is a type param\r\n    check(age).is(21)\r\n\r\n    //'not' will invert the check value when asserting the state\r\n    check(age).not.is(34) \r\n\r\n    let name\r\n    //will cause the test to fail as not defined\r\n    check(name).isDefined()\r\n\r\n    /*  use isAny to pass 'any' object to assertion \r\n        should use .is() where possible\r\n    */\r\n    check(\"2\").not.isAny(null);\r\n\r\n    /*this is where the power of typescript comes to help\r\n    this will issue a compilation error since string is not a number\r\n    */\r\n    check(\"5\").is(5);\r\n\r\n})\r\n```\r\n### AutoComplete / Inferred assertions\r\nInferred typescript assertions come in extremely useful when dealing with\r\n`union` types. when because `.is()` is typed, the IDE can auto-complete\r\nand infer a type and throw compile error if doesn't match\r\n```typescript\r\nimport { check } from \"coffee-test\"\r\n\r\ntype ApiType = \"object\"  | \"array\"  | \"boolean\"\r\n\r\nexam(\"check data\", () => {\r\n    const response : ApiType = \"array\"\r\n\r\n    check(response).is(..) //<--- can auto complete this 'object' | 'array' | 'boolean'\r\n\r\n    check(response).is(\"not valid\") //<--- will throw compile error since it's not an 'ApiType'\r\n}\r\n\r\n```\r\n\r\n## ArrayMatch\r\nArray matcher can assert the state of `arrays` or `typed maps`\r\n```typescript\r\nimport { array } from \"coffee-test\"\r\n\r\nexam(\"check data\", () => {\r\n    const data : string[] = [\"apples\", \"shark\"] \r\n    //check the array has 'apples'\r\n    array(data).contains(\"apples\") \r\n\r\n    //check array not empty\r\n    array(data).not.empty() \r\n    // check index 1 is 'shark'\r\n    array(data).index(1, \"popcorn\")\r\n})\r\n```\r\n> Note: there are 2 ways to check if a value is in array.\r\n\r\n> 1) Using the `array(list).contains(val)` matcher \r\n\r\n> 2) On the value itself with `check(val).in(array)`\r\n\r\n## ListData / Typed Maps\r\n`array` accepts native arrays but also `mapped types` defined as\r\n```typescript\r\n/* what array(...) accepts  */\r\nexport type ListData<T> = {[key : string] : T } | T[]\r\n```\r\n\r\n## CallMatcher\r\nCall matchers are used when trying to assert whether a callback has been called\r\n\r\nThis is similar to `jest's expect(func).isCalled()`\r\n```typescript\r\nimport { caller } from \"coffee-test\"\r\n\r\nexam(\"check caller\", () => {\r\n     //create a caller matcher object\r\n    const didcall = caller()\r\n\r\n    const lamda = () => {\r\n        //add to the call count\r\n        didcall.call();  \r\n    }\r\n     //invoke the lamda\r\n    lamda()\r\n\r\n    /*Assert caller*/\r\n    didcall.isCalled() //check caller was called at least once 'count > 0'\r\n\r\n    /*You can 'freeze the caller meaning it will not except any future calls*/\r\n    didcall.freeze()\r\n\r\n    lamda() //will trigger a assertion fail since caller was frozen\r\n})\r\n```\r\n\r\n## Matcher Interface\r\nThis is the full definition of all the 3 type of Test Matchers\r\n\r\n```typescript\r\n\r\nexport interface CoffeeCheck<T> {\r\n    not : CoffeeCheck<T>\r\n\r\n    is(val : T) : void\r\n    isAny(val : any) : void\r\n    isTrue():void\r\n    isFalse():void\r\n    isNull():void\r\n    isUndefined():void\r\n    isDefined() : void\r\n    isTruthy() : void\r\n    isGreater(check  : T):void\r\n    isGreaterOrEqual(check : T) : void\r\n    isLesser(check : T) :void,\r\n    isLesserOrEqual(check  :T) : void\r\n    isRange(lower : T, upper : T) : void\r\n    isRangeExclude(lower : T, upper : T)  : void\r\n    isInstance<T>(type : T):void\r\n    isNumber():void\r\n    isBoolean():void\r\n    isString():void\r\n    isObject():void\r\n    isFunction():void\r\n    isBigInt():void\r\n    isMatch(regex : RegExp) : void\r\n\r\n    hasKey(key : string | number):void,\r\n    hasKeySize(size : number):void\r\n    \r\n    in(collection : any):void\r\n\r\n    throws():void\r\n}\r\n\r\nexport interface CoffeeMatchArray<T> {\r\n    not : CoffeeMatchArray<T>\r\n\r\n    is(another : ListData<T>) : void\r\n    length(size : number) : void\r\n    empty():void\r\n    contains(val : T) : void\r\n    index(index : number, val : T) : void\r\n    values(another : ListData<T>) : void\r\n    first(expect : T)  : void\r\n    last(expect : T) : void\r\n    \r\n    appearsExactly(val  :T, times : number):void\r\n    appearsGreater(val : T, times : number):void\r\n    appearsGreaterOrEqual(val : T, times : number):void\r\n    appearsLesser(val : T, times : number):void\r\n    appearsLesserOrEqual(val: T, times : number):void\r\n}\r\n\r\nexport interface CoffeeCaller {\r\n    not : CoffeeCaller\r\n\r\n    call() : void\r\n    \r\n    freeze() : void\r\n    count() : number\r\n\r\n    isCalled() : void\r\n    isCalledTimes(called : number) : void\r\n    isCalledTimesGreater(called : number) : void\r\n    isCalledTimesGreaterOrEqual(called : number) : void\r\n\r\n    allCalled(callers : CoffeeCaller[]):void\r\n    allCalledTimes(callers : CoffeeCaller[], times : number) : void\r\n    allCalledTimesGreater(callers : CoffeeCaller[], times : number) : void\r\n    allCalledTimesGreaterOrEqual(callers : CoffeeCaller[], times : number) : void\r\n}\r\n```\r\n\r\n## Test Runner\r\nAs stated earlier `coffee-test` does not provider a command line binary or executable to automatically run all tests, this is by design, but a default simple test batcher is provided as shown in the example. The default export from `coffee-test` can run all `.test.ts` files in a directory\r\n\r\n\r\n\r\n### Write a `test runner`\r\n\r\n```typescript\r\n/* MyRunner.ts */\r\nimport BeginExam from 'coffee-test'\r\n\r\nBeginExam({\r\n    dir : 'test/module' //will run tets in './test/module' directory\r\n})\r\n```\r\n> Note: `BeginExam` from default export will run tests shallow / Only in the specified director not anywhere else\r\n    \r\n    \r\n> Also note the `dir` parameter in `BeginExam` is relative to the current working directory\r\nIn NPM this will be relative to the `package.json` file\r\n\r\n\r\n\r\n## Ignore Exam (Temporary)\r\nYou can ignore an exam temporarily by putting a `'?'` mark in from of the test name\r\n```typescript\r\nexam(\"?Ignore Me\", () => {\r\n    //test will be ignored\r\n})\r\n```\r\n> You can force to run all tests in `BeginExam` with an override flag\r\n```typescript\r\nimport BeginExam from 'coffee-test'\r\n\r\nBeginExam({\r\n    dir : 'test/module',\r\n    runAll : true\r\n\r\n    /*'runAll' will force the batcher to run all tests even ignored ones*/\r\n})\r\n```\r\n## Selective Running of Tests\r\nWhen you are live testing in most cases you only want to run select files that contain\r\nthe tests you want to run.\r\n\r\nUse the `files` parameter in `BeginExam` to only run those files\r\n> Note: Ensure that `runAll : false | undefined` as runAll true will skip this \r\n```typescript\r\nBeginExam({\r\n    dir : 'test/module',\r\n    runAll : false,\r\n    files : [\"MyTest.test.ts\"]\r\n\r\n    /* only run 'MyTest.test.ts in module dir'*/\r\n})\r\n```\r\n\r\n## Test File Hooks\r\nWhen using `BeginExam` to run a set of tests inside a directory, you can use several hooks to run extra code\r\nbefore and after certain events\r\n\r\n```typescript\r\nimport { beforeExam, afterExam, startBatch, endBatch } from 'coffee-test'\r\n\r\nbeforeExam(()=>{\r\n    //Runs BEFORE each exam in the current batch\r\n})\r\n\r\nafterExam(()=>{\r\n    //runs AFTER each exam in the current batch\r\n})\r\n\r\nstartBatch(()=>{\r\n    //runs at the START of a current batch\r\n})\r\n\r\nendBatch(()=> {\r\n    //runs at the END of the current batch\r\n})\r\n```\r\n> `startBatch, endBatch` run when the current exam batch is pushed. When using `BeginExam` this is inside the file\r\nWhen Manual Batching this is when `pushBatch` & `runBatch` are called to create and run a custom batch\r\n\r\n\r\n\r\n## Run All Tests (Single Directory)\r\nSet `runAll : true` in `BeginExam` to run all exams expect ones inside `examIgnore()`\r\n\r\n\r\n\r\n# Manual Batching\r\nWhile `BeginExam` provides a simple quick way to run tests in a single directory. The API exposes some functions to batch and run tests in a more manual way.\r\n\r\nUnder the hood `coffee-test` will batch tests in separate groups to allow the hooks to be swapped out for each file\r\n\r\n\r\n`pushBatch, exam, runBatch` can be used to batch exams manually\r\n\r\n```typescript\r\nimport { exam, runBatch, pushBatch } from 'coffee-test'\r\n\r\nexam(\"Custom Batched Exam\" ,() => {\r\n    ///TODO:\r\n})\r\n\r\npushBatch(\"Custom Batch Name\");\r\n\r\nrunBatch() //runParams optional?\r\n\r\n```\r\n> Note when custom batching a test it's recommended ensure `BeginExam` is not begin used on that file otherwise\r\nyou will duplicate the results and exams will run twice\r\n\r\n## Hooking with manual batching\r\nWhen using the `beforeExam, afterExam, startBatch, endBatch` test codes to run custom code\r\nwhen manual batching you must call these before `pushBatch` is called as these hooks are tied to\r\nthe current batch you can working with\r\n\r\n```typescript\r\nimport { exam, runBatch, pushBatch, startBatch, beforeExam } from 'coffee-test'\r\n\r\nexam(\"Test 1\" ,()=> {})\r\n\r\nexam(\"Test 2\", () => {})\r\n\r\nstartBatch(()=>{\r\n    console.log(\"Starting Batch\")\r\n})\r\nstartExam(() => {\r\n    console.log(\"Start Exam\");\r\n})\r\n\r\npushBatch(\"Custom File\");\r\nrunBatch() //runParams optional?\r\n\r\n/*\r\nPrints:\r\n\r\n    Starting Batch\r\n    Start Exam\r\n    Start Exam <-- called twice as there are 2 exams before 'pushBatch' is called\r\n\r\n*/\r\n```\r\n\r\n# Example Setup\r\nThis is a full example setup to showcase how to use `coffee-test`\r\n### Workspace Details\r\n- VSCode, NPM, Typescript, ts-node-dev (to run typescript live)\r\n\r\n### Folder Structure\r\n```\r\n.\r\n├── src/\r\n│   └── .. [Source Files]\r\n├── test/\r\n│   ├── live-test/\r\n│   │   ├── #run.ts\r\n│   │   ├── TestFile1.test.ts\r\n│   │   ├── TestFile2.test.ts\r\n│   │   └── ...\r\n│   └── more-test/\r\n│       └── #run-more.ts/\r\n│           ├── MoreTest.test.ts\r\n│           └── ...\r\n└── package.json\r\n    \r\n```\r\n### package.json\r\n```json\r\n{\r\n  \"name\": \"--Your Project --\",\r\n  \"version\": \"0.0.1-beta\",\r\n \r\n  \"scripts\": {\r\n    \"live-test\": \"ts-node-dev --respawn ./test/live-test/#run.ts\",\r\n  }\r\n  ...\r\n}\r\n```\r\nI am a big fan of `ts-node-dev` to run a live testing environment. If you create a test runner using `ts-node-dev` you can\r\ntest while your write code and get instant feedback\r\n### (test/live-test/#run.ts)\r\n```typescript\r\nimport BeginExam from \"coffee-test\";\r\n\r\n/* injected enviroment definition*/\r\nconst env = {...}\r\n/*Use Provided Test bacther to run test quickly*/\r\n\r\n\r\nBeginExam ({\r\n    dir : \"test/live-test\", //the directory based on the relative current working directory to run the tests\r\n    files : [ \"TestFile1\"],  //??(Optional), name of tests to run excluding the `.test.ts` post-fix\r\n    runAll : false,     //while workign with live testing you dont need to run all just the selected\r\n                        //use this to override 'files' to force to run all tests in directory\r\n    injectContext : env,\r\n    //function to run before any tests or batches\r\n    startTest: async ()=>{\r\n        //runs before anything is started\r\n    },\r\n    endTest : async () => {\r\n        //runs at end of testing\r\n    },\r\n    beforeExam : async () => {\r\n        //runs before each 'exam'\r\n    },\r\n    afterExam : async () => {\r\n        //runs after each 'exam'\r\n    }\r\n})\r\n```\r\n### (test/live-test/TestFile1.test.ts)\r\n```typescript\r\nimport {exam, examIgnore, check, caller, array, timeout } from \"coffee-test\"\r\n\r\n/* This is an example test template */\r\nasync function doApi() {\r\n    //TODO:\r\n}\r\nfunction doCallback(callback : () => void) {\r\n    //TODO:\r\n}\r\n\r\nexam(\"Name of test\", async () => {\r\n    const didCall = caller()  //Create a 'caller' matcher object\r\n\r\n    const result = await doApi()\r\n    check(result).isDefined() //check result is defined\r\n\r\n    let resCall = false\r\n\r\n    doCallback(()=> {\r\n        resCall = true\r\n        didCall.call()  //add call count to check if caller\r\n    })\r\n\r\n    await timeout(1000) //for callback functions you can await inline with timeout(millis)\r\n    check(resCall).isTrue()  //check manual is callback is called. you can use caller() to create a call matcher\r\n    didCall.isCalledTimes(1); //check is caller is called exactly 1 time\r\n\r\n    const matchArray = array([]); //create an array matcher\r\n})\r\n\r\nexam(\"?Ignore Exam (Conditional)\", async () => {\r\n    /*\r\n    putting a '?' at start of test name will ignore it\r\n    This exam will be ignored only if the 'runAll' is not true \r\n    runAll forces all exams to run.\r\n    */\r\n})\r\n\r\nexamIgnore(\"Always ignore exam no expections\", () => {\r\n\r\n})\r\n\r\n\r\n\r\n\r\n\r\n","readmeFilename":"readme.md","description":"A lightweight typescript/javascript testing framework","author":{"name":"PhoenixShell"},"keywords":["test","jest","framework","unit","mocha","testing"]}