{"_id":"froebel","_rev":"17-d3e6d7faaa46281033e4c3abc52173eb","name":"froebel","dist-tags":{"latest":"0.23.2"},"versions":{"0.14.1":{"name":"froebel","version":"0.14.1","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"typedoc":"^0.22.15"},"gitHead":"23428fd60901ce69c203f40e4abfce21824ba1de","_id":"froebel@0.14.1","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-Xb6ysDNTd5ObV+MXUxM3vfXUYFSUhiqCTtULt67rUJIjM0KchHWfyGCZSaVB52p+/Uzwnec8g8FJD4UdUIZyKA==","shasum":"440aea579e383972cf76d6965fdfed1f0c32c11e","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.14.1.tgz","fileCount":102,"unpackedSize":129289,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA7G7REDS9pqbhovgBTbGYIZqWY8p9WLZKGOEJV4aOmhAiEAgTsnBo1gc/hSG1gDvI1PV9zCnXsRUU1kTDEH7NvCuO4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij7yqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqb0w//Y3JUrRPZWfA7Wf3+CQsdb7alUTTR64UtCGwgHxKAS8Vbe53D\r\nCmvjeJp0FoLTPlvvaDVKtwpxuxlFGbN6uSUoKJauZ/wwaYXgh28DYwqJF/Uk\r\nSb24fqrybuZwoYPbiDgURX6ZSqAMyYZba/hLD5BwEJMrlY3hBPCaRbOl3VxF\r\nwiQgutWC0UBY8QM2xqMHMg+rV0M7c6kv0lqRo5mXttf02Mys+/W8UwTanE6a\r\nB0fPNRYtrEWHl64MkwbBgMvhTJZoDosxHPVeQtI+1OF0Op8WHdVjmbv1ledA\r\nLROWlZRZWVn3pn1C/9spPhgIo1p6Lo9R8cApFlsmlYht/HSZiSbQvlD2a2ff\r\ncHVrGemAvcZ1Mv+pUV0m6uIYVKHea2AO4IPby/qnrNZeocXZVow2J44Pm3tv\r\nzt6o8TzbR2sDoyJF4pSKKFUM2RILEsCH4IjrqMj1s322r9JcSwIcSR1Z13hh\r\nKoAdmsxGKvEOYWZrs3DToK2ME39goY/iANkZwkYd9swtARGsHItR9y1LDjcC\r\nboogRG/upE/VtzEh6t8bG4yHZ5IADO5obWvEMulUvXQ9M5ttqaPQ1AI6AqfC\r\nfRSjSlZA8Q93PlbL2kKO/b1BSZbE+4GU3TmVNr4KJ8kwIFebE9RwW7+R8EBS\r\nJeCNuvFTeRUI2s4ZSa1y/xJgjmwAvrc4Hsg=\r\n=O4iQ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.14.1_1653587114590_0.17684832813937135"},"_hasShrinkwrap":false},"0.14.3":{"name":"froebel","version":"0.14.3","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.15"},"gitHead":"4f089f72509ef9f3ae3eaa7c7a8993e8f1817693","_id":"froebel@0.14.3","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-T8LRJeKCBpakXaEXOQ6uQBxdxILLuVxp0EFI55zjni7fh/5qDhp+I+8Lh2nwsi9pdTsQO7MaghUJCt9c+Ym2LQ==","shasum":"1ce1dd72c8d5df01670f46e2cd3f6bb0d4f7892b","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.14.3.tgz","fileCount":102,"unpackedSize":140573,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzIAtTKHyvtA0EiJnRbROrFWY57odkoyarSfiCKHyyVgIgCz4Hd53FKkb06ZpiQphWBB8IFFSCZj6spPZV0q6rW5E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij8teACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpSlBAAooV9zin4JKyUk4zt43/+0MrUsQ6hZ+AFoYodmYia+xeCV2KE\r\nQc2jF7B1mnm28skU0jK/+YGHx73dXLEG3tyFjkMTwcq6mOa+UQXi5NO0hXgy\r\noQAywj7xnKrztoMdKgO+3JlNjysUa0vAhZClEIq4K5HQXL9tK71RXYvzopUC\r\njHUogNbHl/9a7b5DRpGggMEv30cyq0xFzNIqYD22jvKl/2sRlBujt/t4SXbK\r\nfbhUCZB3jOWm52f7jtKn5ZswROyVi30Aezn1hMKqMCNKkc+3Xj7vBUavGkQB\r\nc9QXvqf7jmfXHlB7WgRcmWvGFq4l6mwVOZ1rJ8puFq4SQgzEQdhIxkXuG716\r\ntdv+JfW1E3WcOVQzok6j1bpbC0VUoto03KiL9hnSaEH2k4EiQRhmNRLWNlT5\r\nejcTlesJ9xEZA/cLCAUUVvRVRxrGGOBkWscTpl3EA62+aCkpgKgo4777CCAJ\r\ng/ul3+L9y+Ga39OU306tuy/gZYmQ1FAA2Zs0738Hg4Ass5ZC6/zvHlonuwT9\r\n/y/nhLL+kSCyYIXgDGMep+uUq+dsC7r/SJE98Kps+zILDMvmOjOdultpll2/\r\n81oJ7AErQ53GkAP4Lqxf0wMLhDignDdZp6ePl2D0kppzwMniY5w3/t9Jiyy8\r\nZn+BZvKFKnnK4ogPIYAqNrlMO6FDA61UoTU=\r\n=PFvQ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.14.3_1653590878678_0.6699473277347368"},"_hasShrinkwrap":false},"0.14.4":{"name":"froebel","version":"0.14.4","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.15"},"gitHead":"d0183a6cbdd998c138aeffceb019c37c223399cc","_id":"froebel@0.14.4","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-Bk1QET+k9hrmbHuHhaq955N3HaLzsSBMc0Anhs9owz/QaCGUaX7ZKVlcFxthtP6kiqw1gUe1vTrgTVQZMqHrEw==","shasum":"6944de70ce5198354aad30e81874fdd6c80e6b65","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.14.4.tgz","fileCount":102,"unpackedSize":138248,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1lS1Wo5npqj+JSVHluuvu/DwH0XLL5Mdexi0gleedRwIhAOnk229KbzaS7Fqtrvh/yCcsoor/cehw6Ivqg1cL3H96"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij9RnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoeFA/8Djr+RWFc/x+8bIDUXpryNPnWEikl8WDEEyw0+c+VKANCYRht\r\nPuDRsMoHX4zsZGaNnUSNzuQbXqQNCIOncKiRW/8reWw2+SdGTWoZdMf3GOeR\r\nXBAmgLzmzUaeDoii64/q+LgdLCb7+x3gQF2S9XcrECZWdl1Q/jkffYsTeoeh\r\n6jgojz+Jyzkc2CnSWzfvi92JctF1IN17xkNN+dr3SVVxLqgIbbodikll8Q/D\r\nHTEN0jH26VX4dJgCzuBY/rfa8rAFWp8aXLip64gwCAmLclrcfh3iYYCpXBOA\r\nQ9MZ+iyjXeUIuZwEv+WIgf0qBGLOrrkU2/QY6zrBUMMvWdryQRhcF2TfpkoQ\r\nrpmVNnoh/OtvSlIUPFn7XSzj2s6z8PX1fHythNJeXSdk0q5+6JyvBnaYpFZ/\r\nhWHgP2Box5Nvs2wNBZ9YBCpJQa42T4zzP+GeUp6iKukqOOG/8JlF9ANqfKGO\r\nF2tpn4ZQZDf8QahVMQiDw0MP9HmRMB9m2SN55eJLtRXfz4VVX8/54lxlrGn6\r\n3yGaDROa/rJI7PmDcbHydLrj8Jz9PYziu+l7P2NaRliWfRbjG+F0Z0CvNH75\r\nTfo4zSpM3F7C6KzO08fpcfPmaqUiVSmuvgv0pSOFtBK62qDON4jSkswNKdO6\r\nXFLHaeXU9UhEovB3LUxXN553Ka69rLFMybw=\r\n=ZA/y\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.14.4_1653593191298_0.500074084079901"},"_hasShrinkwrap":false},"0.15.0":{"name":"froebel","version":"0.15.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.15"},"gitHead":"339507d693b84fb13264700f9d05fc396dba7428","_id":"froebel@0.15.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-2gF6TRYBLv3fMzPs4qUU66R/0w6k2A9kgmhIjTrQa0Y/3zYgX6P2fkAkUNYsfrPC91ZlLCTOwqwBXt1jEX7hkg==","shasum":"6657ec70e39759f975d79da8fa169211d527ead9","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.15.0.tgz","fileCount":106,"unpackedSize":148845,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlzgJxtne5PcsZlG2vTdfakhYbzAaFv85jveZGpZFeLgIgcKVDRiJGYB2uG71EO80Q+nsmjhp9mtDUQFw9nAiWCOI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikSgMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqjxg/7Bn03l4GwA/LensjdPU5ABk7HNKY9CODxrDryFqWfXaCbDYsa\r\nz1hAIVS6OQrJTj0JQM0leNIWXahfXTzHb/Kiw9fSrDk29re7cVUCit62BsIW\r\nrHyciaRPcgUj5fu8HOGCPUDXhrH6pUXeZLREJTeBBm6P4z/6egXXrhT5Zck4\r\nB2lJDsKSULwmI4aU4pv/KdmVOBVhdn2GX1Fh2IvV09BmfVPMVyhN5nRJW4wK\r\nKI/p9Yv57qSH+1rwCrhyy6wzMcqLgjf7sllz3BMJn+7SvdfxmoUIOaWp8FDX\r\n26scXmASHc/2bkMRhuTqV/Lr7U+LkL7UaYQCRYWfC0xu1qM6eCT01WMHpm4v\r\nYRdjabXVtiQY8KP3ds3gWx755I/6WMitQG9WhaMtNlj09YQqwa15uOHw1xlS\r\nrci3lmZLXlQLuHHwj4pbBYwfeEcvf6+rAGNMljSAGqBIRcCqniuk6KFDuRU0\r\n3B4JkdBTv2xdNw6SgzZwOEbRVmvTSg9+h/mYpU8o2S3I4CZsjwvlvK8a9r0m\r\n9qHvItUpXtbuZ21inhcpyD238weLO0OElwZjHlxnJ+FcdArcSeDxS5h+1WeF\r\nXiYI9pUZzrdZpyHk2pUPK8uPjMyT4wNb0Kui7dUshXhT2cfKhaCFec/qulVc\r\np4cVMjIJEP3saYxpk+ms3I7KOYY/xh4imdE=\r\n=qJjy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.15.0_1653680140567_0.420485376280054"},"_hasShrinkwrap":false},"0.16.1":{"name":"froebel","version":"0.16.1","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.15"},"gitHead":"ca9a6495d8c794661023a12747794b1d5eab680f","_id":"froebel@0.16.1","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-Y+a/0OLEGqoVHAoPx4FlY/yQXQVkceVuRVsWinhIyA3bR74ZOibGSiKg7DZtv81g8Ab7TOjQaF89HKj02lWAzg==","shasum":"2a4d790b9f228a3934e466b02dbec0f8fda4b3e3","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.16.1.tgz","fileCount":109,"unpackedSize":158659,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICyveFJNE9AXTLBzIPM/ECkIm7JMeQKGwSE31qqXuCqgAiEAwYNwCPvPSg65JB2H3Os81veEsv9oVI39WbCLR9fN9F0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJikimzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr/aw//SD3jpfltSnjZEn1xbgTENf9i/4ChNkrD6UsxuTZyNFzj12mb\r\nHVdzEALPpmbSQXYfoGN8A7ltSlb/pU7BhsgYHTH1FaiIhs7OPOG2DNWif+H9\r\ncWFDExwgty4JjEf4yJOa5L6wr6Tbrd6vpApAtaHPalx+xbdggDWU73KteVJg\r\ncykmgmNrHY7unc87B+JQcRKuN0pOP0CFNeWSi9hFHva/dBta5yqOFlxMBY9M\r\ngAS43iKTxbITl60PtECneHtBgwVwjmIilH2HDdDE+vw4jbNUtZkJsC0Ds47Z\r\nVYL+XhudOCl6IE3zlcY0cgW1QODBnQM6ECUbN496AeZhWf9hGtoeNW+zR0cf\r\nf+oFjxx1ledB/JgAKWWsB0fpK3nM94gkp6ZqdDSvjAvK5hSFscbmC3ArmrYG\r\n7oxQZgDJV/C1dYS94okLhfaSflx0493XqvqBwgC9SGgaDVwMLZ1Idc9fp0Is\r\nkW2Q46xMd9OAXyg9tqeK6+2Sb8sReMj4Y1c65hYB9t48H6gMYi24M8K1ksKb\r\nUAkkjtQfZGsjz0U3UCs95EtxgnBQCpKEwidr87Nh+xWmnaOLnfA22WDQyh+u\r\nmpZ7juE8CYEbHK4jbNt2ANYFuyKa+cLULdetEynQEGmvjN1yzTiTuVOjcVTk\r\npLyEpi6QvGBXHxkQjOFjXlw9xxgMMBRGDUc=\r\n=Zk5b\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.16.1_1653746098867_0.4189977888238099"},"_hasShrinkwrap":false},"0.17.0":{"name":"froebel","version":"0.17.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"12b3e850bff93e2f2c2b9b8f208bc2b4dabd4ed3","_id":"froebel@0.17.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-reZdfnUIXBF6a1s6mcwx+DctPRZYGmNcU5kUAq47yrQ4rvpSKw/yN4eCIs4uEFLHUpT7bSBnqd60jC2jN7fbGg==","shasum":"4c523dd09b92a3ec753ab2d9082d4fc5bd25fcad","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.17.0.tgz","fileCount":111,"unpackedSize":163674,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQbdcT6dU62Dv98mKS7gvFwGk33amVKx/FK9hvb10N8QIgbLVzIoAcVvq5eSTUcknFbLX3nA1dpMKEPUlZoIGxlc8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipeYdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp42xAAmdjuNNKLPNukT4p1VleUFYsLAGttgHGzuoXWfJTibI3kIN7w\r\nZEuokqQB4kFEQbew8uRw5ccmER9D1sl7LwZxHcmIzgnFJUV66NoSyfcM2Bf2\r\n04jRzPJyHNuBb1V35ZWuVceXxl0SxrK/PVH9TYAU9rrjhZt1LRw0cWlSLA3z\r\n6p8hTfEIFQOBfJLrxO5Y0j7elhxtKvrbrDgAiMxWs/N7q9aw7/r5iyq36COk\r\nkp6ze5MJHMZrNLNwe6UItgD1mroC1G5ig1vqJoaucn20s+6ByjBZPn/3kxFx\r\nYBQjY/PpCRs2NNGYiLAJeGM06XK/M2WuJchnLrCaGLYyK2XiqU6F4qrjDcMt\r\n9vPM/Pw/XG1wNn2HwlJPg7X+0EScT0wdR+tsq6DRruZZIFAYmCkdN8c1LWMU\r\npNH5ws18P0BThMEUnecFQ2yjuIfTp3KMPKF01x39p57Nfjt1J9BZXJhcOJrr\r\n9iVuq6r2/LNDkehf3UF1w9o0yVbnXMTELsXpoe9BwsZ6qNe1dBOIhhCxn1IR\r\n8d3kB/osAnCEDQkE8nkR2CQ5ZNy4Br51yK00HRbYlH2GjMsmHarvKtY3ogmM\r\npsaXFqcdThHBCMjW0SJyKVz+uOZUZKWWuG19FXMq6JFDFOFJPMId17mpRD0r\r\nkbeOR13fIsmXPng5ktgDMf8OwepuWQqfB74=\r\n=XnAT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.17.0_1655039517120_0.6067988646680402"},"_hasShrinkwrap":false},"0.18.0":{"name":"froebel","version":"0.18.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"4fa8e6c32749a620c834f3033cd284266fd1ffee","_id":"froebel@0.18.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-dPkcmnYFA58qLY29MExdUg6/DopBfSeltd66oR9MosezkkXOdjHt0qvNPQbsaAdavJkzqEusiWxOa5TvFjMo5g==","shasum":"262332eb8c28a2b07a3063d9301c0d542825c24a","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.18.0.tgz","fileCount":115,"unpackedSize":169101,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJRzbxdJv8xGukD6O8FQebTCWGxjPUoyygibiAXxRUXQIhAPlIT6ajmhm2C5bWR3O6uoc/uVQRoOiaK0x90kGuHi33"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyXzfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpTlA/+MYi5BYK1cVz9OwGC1FHp3XRXRV8WUGcFCDgjWYBS8fUTT70c\r\nfEYNV4XSBdkrqbHH5sPn5QMSjvHk7gvWsELLEy/s+hz+lJjoNu/qLAUMzmc5\r\n2hfRbiP3SjlEn1aWMbOtpLFZPP/jMnZm34QJdNeb7AmEqqr6yfMGMDtRRe8o\r\n8DMHpVQ53Ae7tbUDNr2X6BclNWIuSkjO/f5bnTYbz6xYvz4LccVYvfZxTRiO\r\nIOzTTwINt68GmlsYx4BkMI+wd2VAv6qCtTdrT+O+u4nCtvPOpm84Qkmk5iVX\r\nzpD0wmOTm22LDTElNcuEmEyzLqmsgkrbf9Yzexgdhf2ig8/Q36vaqweakijk\r\nm0xVEI/Y5LydaXMbCJjQX94JjetvsdLJMam1heEpcH2HcfAb4glwTnSQPbPR\r\nYZFhen4LaC9b7gAmBwsX3+7hAIO0JxwF7oLUMP+wssSnNuH9ymyYrYqu50b4\r\ntBEAJvaM6r3Z0vOvJFjdldYGEEsSp8jkLWntUPzqyBinzhunJMLrj+FKE4yh\r\nXdrcvU1flqz3kX3wxlAYssyCnLS/gPx/+ddnnjpjvHG33+JThr6DDrZnXgWx\r\ncMuQZm61zHI7+5wpGjk02Uezy2+EOgb5r28qJeEIepvGk/Bv/ov2Q220+GRR\r\nrAkXJFyh1+wRMf0lakR34tZuq258TUE+7q4=\r\n=47vN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.18.0_1657371871221_0.70049615385701"},"_hasShrinkwrap":false},"0.19.0":{"name":"froebel","version":"0.19.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"5cb3b42fa23d5907f44082c8bfd36db7592ea3fb","_id":"froebel@0.19.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-d0lOfGFUgH6h4rMKPRqzxD8IpMHhqw1oCGWq8GMg1bw9zwgdzhyw8Fq//FluLYgOVoNNK5v+MFRxxG9GnsWHrg==","shasum":"658958aed288e17593e160a78c3c4478d576587c","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.19.0.tgz","fileCount":115,"unpackedSize":383772,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDmraPvg618SzFh8H5VEBVvprFneWAPFB5mYMVeWlBSaAiB9D9jtkSzy69i2pSMGYCBaMuyeEf005LfciZN8cgJEuQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7k1QACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo0MA/9G3I8eoMDjO5UPLROz/8rrPTkU9zxiR2SU0EwxGUtwBjrbHSE\r\nAFcbCh9miunoGxmgptwn7JxHg5W5BsrNnMsZ19ROs7P3QQlfjwT2hTodJssl\r\nDuWYC4AMtKeYaJl34xYUUGsVUp12hWnsx9Qw3Bdsla0V4NHgFgzquZOYVP3k\r\nFEX/AiDYDPm37qiMKVEGhfhTWQF6TFnjyzk8i7GJQq6N3QKiTN6lbroJqCXp\r\nlHosmo/4LU+W/9pNMb51Hy3YdzXEfCRWKgvDY+LC4Xtd0A61VyTY09YGGCD3\r\nB8XUNKd69l9IAOwceuOD9R05hKpmu4Y48Q8kMI04cEmIaZjE95C8+mOQ4X4Z\r\nLij8K9oBvVJaSc7Gve/vl9KPKJPGTo3eE3JmxqFb4GD2U+jkdxwrcp99zBby\r\nJMcoeeP+qTO00gUfTT3k8eSoFfvLjfdxT1FtH1kAHDY668z6tvuhH4htxwet\r\nnTe6/CdzA6Npdx2/nY++kXd4KZ9hkmJN6LvOKCEwQwd+RCnVzEBJxRXcnNHh\r\n2COd8tdihF//gogUl9GWxI4sIEkZkxUkFMI9ihmDIsFCjnqyQSod/OPLP+v1\r\nyUTgvUcFdQzZL3k9xxaPON+UiEU+bIVYvUiMlcULgUrQhK+xim5xxES+ZgxI\r\nzYfLZd8CuNSKHOhWKk2s9V5QrJkw/CzHlHg=\r\n=dqo5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.19.0_1659784527964_0.31794961473813665"},"_hasShrinkwrap":false},"0.20.0":{"name":"froebel","version":"0.20.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"adcb8a276235d32c45c738cb26eb696abc46247b","_id":"froebel@0.20.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-AmxAizbZdAsiJBYppub0v0eai2hP2KMVZUtcuHuV6UgZY465bt3IMWGoaPCwWH5GRkLjHFcxmWWkApIkkmG60w==","shasum":"a3763e9d421463baa39ed9d2479b102cb35a6ab4","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.20.0.tgz","fileCount":117,"unpackedSize":389415,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3GJiCJA/x2/Rs3Op7I03UDH/ZHFl6JMOF7cCFD08UPQIhAIg+xeeStnMaC3NbMmnxNffKeq6/wxT3la6vjNghxAZo"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi78c3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpygRAAmrBMKMglaDyYpVHckjRaiYjC7Spo0ha/7F7ZW3hfN3/xm+gX\r\nSsK0Myb9paaLMTpplNj5+H+O4BaTK/Y+kR1Wh0OhKXRWCjgkRTCxf0S3iteA\r\ni7/ONTj2RzcHrK3pdkEyzU6pcgcRmjqT9G4YUcYw3p1UM3jH26BveK7e/AE2\r\nHVG9DV5Gztub6A9wGX28NiSrw7yJQY7mpwArGtqm/ktyxZ/4HVFOskdNx7aR\r\nD+TlfqY4mJbPFR/WMQ7gTNoDUJ8/2YxTey3OX+6iE/fnYN1gZMpjwZTphQjf\r\n98QnRz1t7EGo2GiwEQM+ax/PgNmKAj/Hak4Yp7cW46tjXvWpepoPi+7RY8Pu\r\nVD1VqAY7+j7R3AH4eZB4olJpIF5amuuwS3eQAGi8wV3JKxQ2M3a+HcE752fZ\r\nHFq0/91OIDZqvKyqfdPdOGhRyJmIfM2KwfLdlV4ih90NoP533OVJ6ZrWqSm0\r\nJyhkgog13sOnqNiYUw0BvmCwwGHRW3HLBYRzBCCFxE/GWthLf2jW1k7RVygw\r\nTdA8wtF+X1LNlWqIFuIlYl7xh+FqIFGdpq104BbZCM+PnFdkHdx6sF/aFmdA\r\n7hELG1HITRYFr55Lznit/e6iDkW7W/lhKhYsz48Ojh1ZbQQkeeaZl0qxYGav\r\nKZ5NZrcAXTRzx6LBwbDv9UcbtAI17KJGlMo=\r\n=4waU\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.20.0_1659881270947_0.3725085996497881"},"_hasShrinkwrap":false},"0.21.0":{"name":"froebel","version":"0.21.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"f0e3b8b75d90ca274ae14fcc8e169dd690ab88c8","_id":"froebel@0.21.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-8UadyZEhHfGugQk/jtXhkg/j5E8eg2y+7y66kZ5va52pRld0yAEki63kVknmsjAy629sAhN4KaXLt6m/6Fiw/A==","shasum":"9c09cbc0e6618eeb068b240642707d1c74b7e098","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.21.0.tgz","fileCount":174,"unpackedSize":450297,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoukvczmqUD62RKYH/HLCCVqiHkRKDEzofojfotzlTfgIgLhEzpWCic+EjmkUH2mezU6MPKHTj2gF2G5B9Y8otHA8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8URuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrptA//ZKQTm2bfEggh6WkIjGWvaRgSnSpcI4nIz7KvBZeq/BlK7ppl\r\nJmBlYCkQN0TVX4obFqFcgn8F/EE8HGHECgWagI20BTuVb17RFEbMu3Hh3hEr\r\nxl4IsiFmFgI6EIJx1mxOwF3QOrW3aqHcmEft7hl1N6BYGC3O5AaOgU8oiqGx\r\nTqpZo/j494sWtFLftiioS4iOxP4G8U7UJqK5L4f5H3QZWaPV67h/uMfB97Fv\r\n6UF1nT4VYztSuPhKYUTSDCZVICvf+hUVJMWQDMGnUAIVga6rWvELDTCF/cAW\r\nq/Tko9mhag3FMfXdpakLKWocVwdRsns0X7JK2Oceziw5VUpitiejSl9Qf5Ae\r\n6IrkVNP/pC3ujVLuzqoSV8RO1IhffJL0ItmmHzE/jAdhh9N8j38YoEbVfEvt\r\nYeM9idsUOt6OhlIjJ42kASVbYLJKj1U0aYrbv81R/kbKCh6fJPswti+Y+QRl\r\nTtUaWz7oWvPMSbPXscNavOmjP7UgzRapKjwEOErjng2OmYLwGlxrvC+tO18W\r\nra2VEALGcNj8Vz8om+0kcyA8EM2jvYMRXvkZ9pLyNNbRtBt63xBcBEphYd8g\r\nJ7WFPTVjcEmRAbbiELYwHwM+q3dC1H94R6NLqUa6OhHFFMUlB3Gs9HqvU+mf\r\npDxVr6ANg+X0ohz/hzP4ovC/di8DKLMv3F8=\r\n=fOZc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.21.0_1659978862346_0.9524640476667576"},"_hasShrinkwrap":false},"0.21.1":{"name":"froebel","version":"0.21.1","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"b8705632eebcc35f705bbcb3fe60935f444aa0bf","_id":"froebel@0.21.1","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-9tq5GIXOdlbOPQNHxYxe5kI1Vli4pAX3yqCqht8oIwA75cFt9hwdG87WgR1Pooh/I/NLoC/RP8zgjYKpZKPd5g==","shasum":"49975f4a922f47370a3c66e87a541ae06f35e602","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.21.1.tgz","fileCount":175,"unpackedSize":453719,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCe/AlMsD1/xlfQbYKVbImrvwu8Jc//A9uUlxkk5qXzIQIhAJWNddMcNOIMD6Bk4lTyFFHADym3ifi1UzuGCALwI+YS"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi84zKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo2/g//ZshyjakZqLsg6j/hI1NuMHaSyrMb9buyz+bNI/bp8uA7btzv\r\nF2zIo8y8sE5YS7dVX9ZkK9fvW5UpSVYNEwZY1iUShH2uYscRjrR1PMU5z54M\r\nmuhfhQuc1yVvQSGUTNA5TqhphPC9eIjKpkaL3oX5hMKmL4s93fhiZLYVvCFf\r\nT8WodRGupphb1lCqLSvWuIwObTsyzh9/cipqKF3YG5Zn+MzsYdmt/kcu8q20\r\n2ABY2KpQEBgkiJ6BW3TBBbLuqzu0nywXG5zMKziaJeyh01k6oGtr1aXrHZ7R\r\nk34O+WrsuDXfYoS1W9MuUAg7UaiZwJXViMAGMtXV3uy7tqe6roSXKFLYD3hZ\r\nPzp55C8wRo3Tt6xe1KjmBkPPaOJz3IQasAKQuc123OGwdG6rE3a9JCgBXVx4\r\nS/R4iYhOZCWI5kMrvEeR/EKqzjSuBBbYd5m/BTYkovfvCFhONYaUS+2ric1V\r\ncO7SSfUJilm0bBoIHzjWsa6aPqs+zjpjBgkobNblk3sI7Wnb1aByn4pNmQJH\r\napPmOdxCSiz7WDUNNBBJo+2BoOQv1aAjWr3v4QHcJDkI4KQsi50J4vmykc0a\r\nP1rmCJq7iVY782feGIqzLtNAccARY4IMCRNWNovmo9uobsmCb4A99s/a3vxj\r\no5wlsTZesC6Os+iz+S7PKqaq5fd3pGYREkM=\r\n=iW+t\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.21.1_1660128458586_0.5825828132404232"},"_hasShrinkwrap":false},"0.21.2":{"name":"froebel","version":"0.21.2","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"d80ab3b708f660d54fddc9e66d5260e6130e60a1","_id":"froebel@0.21.2","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-HCgnUXHmFBqyAwpb1/fIi1oxl/fsvAwZrVlKtqIY0hzq9+TWnHlSAHb8GXOjTvMYHWMmg1AGERV0bnHiYnqphA==","shasum":"6f803f01df88440b3d6bdeda69b93c1ed9b62137","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.21.2.tgz","fileCount":174,"unpackedSize":452240,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTMcyF83jXsSsXcakaL3rfAmeKB6f57JbS4s3cHai2KAIhALkTq1veuCtF7NqBfzwvMQQ5GuPGcE9kiwFFDBS7x5kp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9SGdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2Uw//RizSBzSKy3btu22wqzAHvQuchL34gVVSyF3U/NcWlIGqHTtR\r\nObrO/QJemcujoTKwH6ka6DaEB9UZ0ja2u/G7CsZl+a+VxNKH0S1nImVuX2/m\r\nav1fMnm688YraCYqO0+Pn1K96j1NJpNKGdYbNVZo1vAeSSAbzZnq6PVxQ54C\r\nGMhHe3AdjZlsCnO10TMl4i0mgtxxu1qjOkQi9SJElOKf06WPsXlUgmr2DDQ9\r\nLjdi5IYPVTGkITyQbmATuIseHe1mMkjFsXZihFIQyA+DXaZaAcn0foGxxxSM\r\n+H/EWmGXzn2kY/lvlhFpZv/IUECKNJMlpuWXdZpZvkdFXrwrzZRmBv7IBYyR\r\nRw1MVWZP1hiQUSAVDbZ5jMq2918FCDP+dyyg0B96TGhwxe4fVog9FKoFXBIV\r\nLHJ15NesmSP7H+Qp2RnFRa0j67dSgqD3Q/CG5pUTnsrHvPSb9yDwQmTo1obh\r\n61vlf85YiMqtTeHbIOMPyn9xL5l1XY8upZDCf/VGHOlvXvsCWcrMZrMTIlSS\r\nayDniLshw9DyqFEg2bZ3nKkGNaKZdouC/jqajhW4zGuIjSFLaq8xM47jU+nU\r\niF24HqCo0cHTd1ohfhf/AIgvwXYA9csHLLbrAIKK8ZBbrbZoRXjYnas6RzYc\r\nXekCU+OkYSfqFhdfyoDy47ALVP0QsY1/94U=\r\n=nnKu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.21.2_1660232093546_0.7652607816320931"},"_hasShrinkwrap":false},"0.21.3":{"name":"froebel","version":"0.21.3","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"f0f8abca17647ac6896041125e1bfc9db16051ca","_id":"froebel@0.21.3","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-MqyU/nwqUZULHcr7dD0vaSrt+LUEuvgF0aN8LfXbwTJysQF/s3Y0P46SKnOoiVpELftdJXdUbOZ8VReRIOG5DQ==","shasum":"a780c45ccd6599c3840c0b74c6e3538b6e87a566","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.21.3.tgz","fileCount":174,"unpackedSize":452248,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMl/Hr/wxaPkWdrhlkrHnxQtZYrFTOCrDItDYqO1Lv3AiBzmOcNfpgFyff1Knv5TU22O5rlYzEkwZMkCt2s45Wzfg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9SZjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq1ThAAlvgS7X2Rihz9aKxhEWblr1nRBer4I6j5KSI17FIYcWLguIVI\r\nqsKKSq/9W1URpV0KCY2GB1EuVlgHRp2/vh9wQ8rlQTw362rDGx/fJi6wsDtT\r\nFcHuaY+kYjI5iKgfDlS/8wIYygQtkcPlhDNMA3vxBpGkF867VxctVJUlM7bF\r\ngrw4nNDtxf063ZcHJwYMGsHwBBLLqPe57X+jQsIzy6CGi0m7L3CBGnxdPFV8\r\nl447renf/ABhNAZzpFef3PkvdvHeOSEuGki4o8ERuLAsWP+Vhnc28tJiWzI/\r\ngRe3NhoS2IZsdYZs/3VaHEUq3M8Bug+p8QVlF9Lszg/Uqu9zynmoNJj9SgRd\r\nRJ+zmlmAW/B51XjPN0Hx2NPti1WXTunNjvtTWPuJmkbZOW9ouO2UHjJu3kpo\r\ngiYWSJSc8xsFdlCOQcaXYeZOt4PQglJsZUh1S8tCnrxFBWTNGOuIbMfoEpqt\r\n7iEdHXtmUq2UgN47y+I5x32k3jM5XeY0NASRs+mhYQfVyjfs5iowLx22vXA4\r\nZHV2dBQMNmr10a7Zcg4XeclOOOIuQm19hJpAPHuKrR/+e+O+ftoV24shG14k\r\nLN0K9KZwKJfFAkktvSIQIrPTitjKziprowbGatVQeUOkcuPKyK6md/tVgXgV\r\n8R4H2xs7Y0QH5hsGePPbmVDQAtVogQ8iCtg=\r\n=5FfP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.21.3_1660233314879_0.21036248375722622"},"_hasShrinkwrap":false},"0.22.0":{"name":"froebel","version":"0.22.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unary":{"require":"./unary.js","import":"./unary.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"b43e822803a5fd5516e0571f25e20e9138986c8d","_id":"froebel@0.22.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-BF0Qm4qq860UAr57wfgFqoy1Df+5VyuenDC/ZTJEcIqwsSBBTrsP0bFEhuIMNOB/+JYcfIpDG+lHFC595Eqonw==","shasum":"268beed3d4afecadb4b465046199063205e20fa1","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.22.0.tgz","fileCount":177,"unpackedSize":461324,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCK5kkzmgOY8o1JWHTofNs045z9OSkpuR7FuQCzeZMxlgIhANDbhoIlZtOYybaCHvD3C/V3m27YwrIcmGE2nuT2rs1M"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQX7rACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrKThAAn4RCZ86dlcEyv7q/hBx2SdJ/Lsq1gxZpJ4H51cLjHvuis5hc\r\nSeXJ/yRn8ZgH7aDVLdUX0qi0SIs23GcnivTJr+5mM24+V7fnyL9ZtlQPcO/x\r\n3IKuW9Vss1op9ELGhr2KxpRLB+w77SjkkH6M59fLpXY7AWsNHo6iiHbMpt7+\r\nh3b8sN/du6rsQyaguUsy6Nt4mlxh6YwxC7+5C24rMVT/8x4+5k91kvMkmEc0\r\nEs1VWjN9jAzq8GX+8+Ki9X1cvI22E7ltrOgPkWNgPnR+G6qwh/JWxaRaiANJ\r\nvRF6a88keJPoxEDq2H6VsXgPr1GPtgi6csnruxQnVrsL9LVG1XHKqP2U49lC\r\ns4W1rLnGLcZ2lqSzDHHjh5AM8f4s7qSiF8+oTyMl40iiRVRiqzujCz/3LpVl\r\nHP5ogTvwVbByoqeKUkmXytZWBCOnHrJg5jEdhp6eOiWRZV8xaXqA1w6UaIaI\r\nl2+b5E0XyqbMHWRIYP9YQLWP22VdMgYUfbc+sdVOM+yAo4TKB4bhL0CzV8Hb\r\njmaK+aTzr/QJX1dCJ43JEC8k0pDVi3tIlSPHNE4y5h2KG7ic4tw6dLcKCcH2\r\nirPte5UdpIqNllqJm8DSSJsiuExus3bAVKLBHLXSy3xWg3tEGDQhlC1t4wHt\r\nIcUWF5SMcoZ7ycglSzu5rtJDZxbRBsr5Vbo=\r\n=AWgq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.22.0_1665236715488_0.1153356706478621"},"_hasShrinkwrap":false},"0.23.0":{"name":"froebel","version":"0.23.0","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./merge":{"require":"./merge.js","import":"./merge.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unary":{"require":"./unary.js","import":"./unary.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"bd90ce2dc963fef6b216b087e2efd0098971b9cb","_id":"froebel@0.23.0","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-QkSodpZfhwX+07q6ALbh2TweQ+1s8mMsW/cLvcWlF8yFX3xO7GzMM02Jns6mkf3GU1RAQalJ0VSj0dc2k2999Q==","shasum":"7ca0e0e5f4e1e8d1f7564e1f4e10c9fb64a88fb6","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.23.0.tgz","fileCount":180,"unpackedSize":469651,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjK1wCMK1YG5EVheY0tgK/rwRsoNCWox1/DJHTUrZZ4AIgAJ3srUXNg1+o5hcEN1URPRCsUjH5Xz5Iy1OmwIxnPFc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjjKnwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpwUQ//f+a9LS7HZEqKPzmTkbReebK8xzzxKQ0TVw6mymla2/5ql8Hl\r\naxLY31gxLsIfMnZKvM9rQxL/sC9H5rjyRp+wM+Y8SXALSvrtp51W4f57HrDk\r\ni6Gyht/fy53nRi49/qvO7cN4MPVaR4duEC240kSHqDYg5l/lP3ZiasyuoSKN\r\nskIXRy7P+cmNSoA4756F1OKfAilblT1xy9eTaOTDnVmtxzdL3PtBYm8T4pCB\r\nDv7VJr6I9eSLbwLhGwX3Hlv5P179s91A1FRH3kJwJ+mlZsZeVdYmKoLU9BYC\r\ngIyMNZj4I9JTresBD+fNkz7w6LSj+c4ThImSYmfcI/xMg+sMnqs0WanrbtY0\r\nM533DU2xgNEF9zHptDh1keZfsZshzz7UqRU9nnXatKPGBefLUo20V7urA7gg\r\ndX3evmG9gZBeJ4sjA8JHfFgRpAytURYcWjV0YG1yIUYUVX0diPT6eiC7JKpQ\r\nIqlY7YW1Cn4I8e/WIO7G2VxHKI5sKFAG+Y2YfMbb8Uk9JMoXNyC4BPVsUrxC\r\npnXiXTXfNvAwZ4DvkE6rN3KWrJ3YTQrldHZYXRlU00MIu18GBeth+7V5W85T\r\nw2Qp+pqGZjYXUjQ8Z3QzLlAFYMVpnIVbSApnYIBvaXMLWLisqK/VA7kTg1JR\r\nEeelRBZ5OV7k6L5y01R8y5QQC6IQrDHY46M=\r\n=0742\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.23.0_1670162928021_0.7207191152950418"},"_hasShrinkwrap":false},"0.23.1":{"name":"froebel","version":"0.23.1","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./merge":{"require":"./merge.js","import":"./merge.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unary":{"require":"./unary.js","import":"./unary.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"c9f21495575565a1ae5c43f6b422e919830df560","_id":"froebel@0.23.1","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-BjXApOgnZctgi5E5zvUPzxIs6jq658TAmOlM0AGtgGGNs9M9UjJ4YiUoUEZRbrzvOj/zf7TNk1wFzaw7Mxkm/w==","shasum":"d5f80dcfdd0efdbc44106a6326b34a6e397f4115","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.23.1.tgz","fileCount":180,"unpackedSize":469817,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGJ+FPGOIqeYggyW+1ITH5g5rMeOfeFmp7c6Zl5tI/vXAiEAjz678UPSUp7cDOaL7UPbOS3GU/iz2Re8TE4nz403ajk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjucFVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrCkA//cn+kvJuAsVqcmGYxC1UA01viOTSTSHHQ6CoIIkGXOkIV1Xrg\r\nYep96YxH27zlkqBZEQPTtrcTC6swsIT7GMr4uaWCkUCrkg80icjVM0d7UE9t\r\nByKz2/cmm7YwggpmL4l3v7Gfv52VxTYByJekxH2QedCuYmInkcp95KNM4ojy\r\naWevqv1PdFDXrj/TElTIrkx4MmRH5Oslqes/NriiWNdKKtSpdqCAkDPuPxyW\r\nhF5LKsSMfwVsOhpFwCavPAWxkzKKkhM4IcGTGLJ0GbUvnbWGAx/pOz/SA7s0\r\nqcAM/fy+Jiw48nnwjC3gFfozb5fIGRhzX/DRnzyAXTbKDmgvjzqEpjx9BQ1j\r\n1+VrVuqbWEoa7egqmgOMvAbRCOWbM81u8dSho2Rxm25uxQk/hzRRvyQ4bN1O\r\nB0YV/l0LtOxqOccZ3hIRwiG7puq9i2IAnGbyfAXJvjsejtaygfU2sYVBDnYx\r\n0w6bp7ynJNt7wKwSDwl7vP+qkd3HhJXSSSc5n02ky5hFRgu+kp+PugIPwUly\r\nvK8H7rB/UF+q20eRWvrxFP7VtXqvD01DZflAdCIu33i01beNvxooRqwwck8d\r\nm4+EeXwJr/8t09hnyME0QHwrvdNn5nlxhqiIbV5fQNRvABp1HUwA2cwuwsrC\r\n+30E/FK3a9nzuxRHzeHWAk920iZjWPxB+6U=\r\n=HEgc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.23.1_1673118037341_0.15783153631351365"},"_hasShrinkwrap":false},"0.23.2":{"name":"froebel","version":"0.23.2","description":"TypeScript utility library","main":"index.js","types":"index.d.ts","exports":{".":{"require":"./index.js","import":"./index.mjs"},"./atWrap":{"require":"./atWrap.js","import":"./atWrap.mjs"},"./batch":{"require":"./batch.js","import":"./batch.mjs"},"./bimap":{"require":"./bimap.js","import":"./bimap.mjs"},"./bundle":{"require":"./bundle.js","import":"./bundle.mjs"},"./callAll":{"require":"./callAll.js","import":"./callAll.mjs"},"./case":{"require":"./case.js","import":"./case.mjs"},"./clamp":{"require":"./clamp.js","import":"./clamp.mjs"},"./clone":{"require":"./clone.js","import":"./clone.mjs"},"./debounce":{"require":"./debounce.js","import":"./debounce.mjs"},"./ds":{"require":"./ds.js","import":"./ds.mjs"},"./equal":{"require":"./equal.js","import":"./equal.mjs"},"./equality":{"require":"./equality.js","import":"./equality.mjs"},"./error":{"require":"./error.js","import":"./error.mjs"},"./except":{"require":"./except.js","import":"./except.mjs"},"./forward":{"require":"./forward.js","import":"./forward.mjs"},"./function":{"require":"./function.js","import":"./function.mjs"},"./ident":{"require":"./ident.js","import":"./ident.mjs"},"./index":{"require":"./index.js","import":"./index.mjs"},"./invoke":{"require":"./invoke.js","import":"./invoke.mjs"},"./isPromise":{"require":"./isPromise.js","import":"./isPromise.mjs"},"./iterable":{"require":"./iterable.js","import":"./iterable.mjs"},"./list":{"require":"./list.js","import":"./list.mjs"},"./map":{"require":"./map.js","import":"./map.mjs"},"./math":{"require":"./math.js","import":"./math.mjs"},"./memoize":{"require":"./memoize.js","import":"./memoize.mjs"},"./merge":{"require":"./merge.js","import":"./merge.mjs"},"./noop":{"require":"./noop.js","import":"./noop.mjs"},"./nullish":{"require":"./nullish.js","import":"./nullish.mjs"},"./nullishChain":{"require":"./nullishChain.js","import":"./nullishChain.mjs"},"./object":{"require":"./object.js","import":"./object.mjs"},"./omit":{"require":"./omit.js","import":"./omit.mjs"},"./oneOf":{"require":"./oneOf.js","import":"./oneOf.mjs"},"./partial":{"require":"./partial.js","import":"./partial.mjs"},"./partition":{"require":"./partition.js","import":"./partition.mjs"},"./path":{"require":"./path.js","import":"./path.mjs"},"./pick":{"require":"./pick.js","import":"./pick.mjs"},"./pipe":{"require":"./pipe.js","import":"./pipe.mjs"},"./predicate":{"require":"./predicate.js","import":"./predicate.mjs"},"./prefix":{"require":"./prefix.js","import":"./prefix.mjs"},"./promise":{"require":"./promise.js","import":"./promise.mjs"},"./promisify":{"require":"./promisify.js","import":"./promisify.mjs"},"./queue":{"require":"./queue.js","import":"./queue.mjs"},"./range":{"require":"./range.js","import":"./range.mjs"},"./repeat":{"require":"./repeat.js","import":"./repeat.mjs"},"./select":{"require":"./select.js","import":"./select.mjs"},"./settled":{"require":"./settled.js","import":"./settled.mjs"},"./shuffle":{"require":"./shuffle.js","import":"./shuffle.mjs"},"./sortedArray":{"require":"./sortedArray.js","import":"./sortedArray.mjs"},"./sortedMap":{"require":"./sortedMap.js","import":"./sortedMap.mjs"},"./string":{"require":"./string.js","import":"./string.mjs"},"./suffix":{"require":"./suffix.js","import":"./suffix.mjs"},"./surround":{"require":"./surround.js","import":"./surround.mjs"},"./take":{"require":"./take.js","import":"./take.mjs"},"./throttle":{"require":"./throttle.js","import":"./throttle.mjs"},"./truthy":{"require":"./truthy.js","import":"./truthy.mjs"},"./types":{"require":"./types.js","import":"./types.mjs"},"./unary":{"require":"./unary.js","import":"./unary.mjs"},"./unzip":{"require":"./unzip.js","import":"./unzip.mjs"},"./zip":{"require":"./zip.js","import":"./zip.mjs"}},"repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"license":"ISC","bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"homepage":"https://github.com/MathisBullinger/froebel#readme","devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/plugin-transform-typescript":"^7.18.12","@babel/preset-env":"^7.18.10","@types/node":"^17.0.35","typedoc":"^0.22.17","typescript":"^4.7.3"},"gitHead":"4860d718c8806a0bba026a2b955c2fb5b478359e","_id":"froebel@0.23.2","_nodeVersion":"14.18.2","_npmVersion":"8.10.0","dist":{"integrity":"sha512-/JKWifYmyj3XBEkM29NLEcEa4OhfCtKIUCzzgFrIi001s1ciIlQUKXUSRY7kS/e+U0Rf5HiyggypvaT1qiQQLg==","shasum":"f327ab369a3ec0dfd844d7f8e7f0a65f9ba6cd9b","tarball":"https://registry.npmjs.org/froebel/-/froebel-0.23.2.tgz","fileCount":180,"unpackedSize":469879,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZs3OJzEti5RKrbSeeUoSDftfUqqBgJPztSHZgU8axTAIhAOAQgwABItaBaqjEXkC8kEdMj/RYRzJYae1F59A+dOY6"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvC09ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJfg//RlilZ7s5lEvTrVaBvCRtyNAjswXhuGBzRmaA5DIm3ewcFV6X\r\nfmWjGBgXe/mx5BFmvHrXo59CzJB4EI70KMxbiJPGtyauuPvTnUi05rUaY3aE\r\n1EqM+u+IYBOi+cYNCcFBvhnOi0ZBPVDF80CKp8K9QeGRDEaKApfsV71Ot5W9\r\n/Vb4cfxEnTm8R/2xsv1AA2JMFfaHICa1aIcwyxoT4SfAxIdd8JVbMQZ7fE+S\r\nCkU2ZYWSsmWh1JdzOjHL98+52suNAuaqL1dTuqNDnSKQmwfHL5xdFbOhnWVp\r\n/EmIGW0svSq1UWxcPnDtPenIUL0kOKLVW10bav01xdHYcmFtpSXcxb6ZDIoY\r\nyePbJXNR46q3Q4bTemksUCV61YxjWzsAIMz9yTm0ia4W5ZY/zibNjGmvMM2o\r\ns88JeZHlf266kmoR0Ggwx9a6sgKspGPNi2gM+BbGbWlxjMfpA54ugh8Bgrhq\r\nL4wuRqJRVljO/SQgpqbNyfnyYMVRzw7UecgX27SA3CLSVglwYnT7kyaVa+s/\r\nU13XBahUcqsheQj99Z9RbNHT5mYDc025CJgWo7maORYXQsHfbknsnMXfNIam\r\n7ZRPD2y1XBZb1Jmk+zO0zvBEXjyi2+jhSeBYPZfAF+iLzmM6JTX5e/m08m4f\r\nPHuwhl5E85pYdCeXbk4arpt3gPNi/o3O4Lo=\r\n=YcvJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mathis_bullinger","email":"mathis@bullinger.dev"},"directories":{},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/froebel_0.23.2_1673276733063_0.9619804201046314"},"_hasShrinkwrap":false}},"time":{"created":"2022-05-26T17:45:14.588Z","0.14.1":"2022-05-26T17:45:14.772Z","modified":"2023-07-15T21:03:18.678Z","0.14.3":"2022-05-26T18:47:58.836Z","0.14.4":"2022-05-26T19:26:31.490Z","0.15.0":"2022-05-27T19:35:40.743Z","0.16.1":"2022-05-28T13:54:59.054Z","0.17.0":"2022-06-12T13:11:57.323Z","0.18.0":"2022-07-09T13:04:31.473Z","0.19.0":"2022-08-06T11:15:28.205Z","0.20.0":"2022-08-07T14:07:51.134Z","0.21.0":"2022-08-08T17:14:22.492Z","0.21.1":"2022-08-10T10:47:38.795Z","0.21.2":"2022-08-11T15:34:53.743Z","0.21.3":"2022-08-11T15:55:15.036Z","0.22.0":"2022-10-08T13:45:15.690Z","0.23.0":"2022-12-04T14:08:48.209Z","0.23.1":"2023-01-07T19:00:37.554Z","0.23.2":"2023-01-09T15:05:33.217Z"},"maintainers":[{"name":"mathis_bullinger","email":"mathis@bullinger.dev"}],"description":"TypeScript utility library","homepage":"https://github.com/MathisBullinger/froebel#readme","repository":{"type":"git","url":"git+https://github.com/MathisBullinger/froebel.git"},"author":{"name":"Mathis Bullinger"},"bugs":{"url":"https://github.com/MathisBullinger/froebel/issues"},"license":"ISC","readme":"# Froebel - a strictly typed TypeScript utility library.\n\nThis is my (WIP) personal collection of TypeScript helper functions and utilities that\nI use across different projects. \nThink an opinionated version of lodash, but with first-class types.\n\nIf you have an idea for a utility that might make a good addition to this collection,\nplease open an issue and suggest its inclusion.\n\nRuns in Deno, Node.js, and the Browser. Get it from [deno.land](https://deno.land/x/froebel@v0.23.2) \nor [npm](https://www.npmjs.com/package/froebel).\n\n## Installation\n\n### Using npm\n\n```shell\nnpm install froebel\n```\n\nand — assuming a module-compatible system like webpack — import as:\n\n```ts\nimport { someUtility } from 'froebel';\n// you can also import the utility you need directly:\nimport memoize from 'froebel/memoize';\n```\n\n### Using Deno\n\n```ts\nimport { someUtility } from \"https://deno.land/x/froebel@v0.23.2/mod.ts\";\n// or import just the utility you need:\nimport memoize from \"https://deno.land/x/froebel@v0.23.2/memoize.ts\"\n```\n\n---\n\n## Available Utilities\n\nEach category also has a file exporting only the utilities in that category, so\nif you want to only import utilities from one category, you could import them as\n\n```ts\nimport { throttle, debounce } from \"froebel/function\";\n```\n\nA few utils are exported from multiple categories but will only be listed here\nonce. For example `isPromise` is exported from both the `promise` and the \n`predicate` category.\n\n### Table of Contents\n\n\n\n- __`function`__\n    - [ident](#ident)\n    - [noop](#noop)\n    - [partial](#partial)\n    - [forward](#forward)\n    - [unary](#unary)\n    - [callAll](#callall)\n    - [pipe](#pipe)\n    - [applyPipe](#applypipe)\n    - [bundle](#bundle)\n    - [bundleSync](#bundlesync)\n    - [nullishChain](#nullishchain)\n    - [asyncNullishChain](#asyncnullishchain)\n    - [throttle](#throttle)\n    - [debounce](#debounce)\n    - [memoize](#memoize)\n    - [limitInvocations](#limitinvocations)\n    - [once](#once)\n- __`list`__\n    - [atWrap](#atwrap)\n    - [zip](#zip)\n    - [zipWith](#zipwith)\n    - [unzip](#unzip)\n    - [unzipWith](#unzipwith)\n    - [batch](#batch)\n    - [partition](#partition)\n    - [shuffle](#shuffle)\n    - [shuffleInPlace](#shuffleinplace)\n    - [take](#take)\n    - [range](#range)\n    - [numberRange](#numberrange)\n    - [alphaRange](#alpharange)\n- __`iterable`__\n    - [repeat](#repeat)\n    - [take](#take)\n- __`object`__\n    - [pick](#pick)\n    - [omit](#omit)\n    - [map](#map)\n- __`path`__\n    - [select](#select)\n- __`equality`__\n    - [oneOf](#oneof)\n    - [equal](#equal)\n    - [clone](#clone)\n    - [merge](#merge)\n- __`promise`__\n    - [promisify](#promisify)\n    - [createQueue](#createqueue)\n    - [isPromise](#ispromise)\n    - [isNotPromise](#isnotpromise)\n- __`predicate`__\n    - [truthy](#truthy)\n    - [falsy](#falsy)\n    - [nullish](#nullish)\n    - [notNullish](#notnullish)\n    - [isFulfilled](#isfulfilled)\n    - [isRejected](#isrejected)\n- __`string`__\n    - [prefix](#prefix)\n    - [suffix](#suffix)\n    - [surround](#surround)\n    - [capitalize](#capitalize)\n    - [uncapitalize](#uncapitalize)\n    - [upper](#upper)\n    - [lower](#lower)\n    - [snake](#snake)\n    - [kebab](#kebab)\n    - [camel](#camel)\n    - [pascal](#pascal)\n    - [screamingSnake](#screamingsnake)\n    - [transformCase](#transformcase)\n- __`math`__\n    - [clamp](#clamp)\n- __`data structures`__\n    - [BiMap](#bimap)\n    - [SortedArray](#sortedarray)\n    - [SortedMap](#sortedmap)\n\n\n\n## Function\n\n#### `ident` \n  \n```hs\n(value: T) => T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/ident.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/ident.test.ts)_</sup></sup>\n\n> Identity function.\n\n\n#### Import\n\n```ts\n/* Node: */  import ident from \"froebel/ident\";\n/* Deno: */  import ident from \"https://deno.land/x/froebel@v0.23.2/ident.ts\";\n```\n\n\n\n\n---\n\n#### `noop` \n  \n```hs\n() => void\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/noop.ts#L1)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/noop.test.ts)_</sup></sup>\n\n\n\n\n#### Import\n\n```ts\n/* Node: */  import noop from \"froebel/noop\";\n/* Deno: */  import noop from \"https://deno.land/x/froebel@v0.23.2/noop.ts\";\n```\n\n\n\n\n---\n\n#### `partial` \n  \n```hs\n(fun: T, ...argsLeft: PL) => (...argsRight: PR) => ReturnType<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/partial.ts#L17)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/partial.test.ts)_</sup></sup>\n\n> Partially apply a function.\n\n\n#### Import\n\n```ts\n/* Node: */  import partial from \"froebel/partial\";\n/* Deno: */  import partial from \"https://deno.land/x/froebel@v0.23.2/partial.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst divide = (dividend: number, divisor: number) => dividend / divisor\n\n// (divisor: number) => number\nconst oneOver = partial(divide, 1)\n\n// prints: 0.25\nconsole.log(oneOver(4))\n```\n\n---\n\n#### `forward` \n  \n```hs\n(fun: T, ...argsRight: PR) => (...argsLeft: PL) => ReturnType<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/forward.ts#L28)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/forward.test.ts)_</sup></sup>\n\n> Given a function and its nth..last arguments, return a function accepting\n> arguments 0..n-1.\n\n\n#### Import\n\n```ts\n/* Node: */  import forward from \"froebel/forward\";\n/* Deno: */  import forward from \"https://deno.land/x/froebel@v0.23.2/forward.ts\";\n```\n\n\n\n\n#### Examples\n```ts\nconst divide = (dividend: number, divisor: number) => dividend / divisor\n\n// (dividend: number) => number\nconst divideBy2 = forward(divide, 2)\n\n// prints: 0.5\nconsole.log(divideBy2(1))\n```\n\n```ts\nconst fetchUrl = async (protocol: string, domain: string, path: string) =>\n  await fetch(`${protocol}://${domain}/${path}`)\n\nconst fetchRepo = forward(fetchUrl, 'github.com', 'MathisBullinger/froebel')\n\nconst viaHTTPS = await fetchRepo('https')\n```\n\n---\n\n#### `unary` \n  \n```hs\n(fun: T) => Unary<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/unary.ts#L15)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/unary.test.ts)_</sup></sup>\n\n> Turns `fun` into a unary function (a function that only accepts one\n> argument).\n> \n> Note: `fun` must accept at least one argument and must not require more than\n> one argument.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import unary from \"froebel/unary\";\n/* Deno: */  import unary from \"https://deno.land/x/froebel@v0.23.2/unary.ts\";\n```\n\n\n\n\n#### Example\n```ts\n['1', '2', '3'].map(unary(parseInt))  // -> [1, 2, 3]\n```\n\n---\n\n#### `callAll` \n  \n```hs\n(funs: F[], ...args: P) => ReturnTypes<F>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/callAll.ts#L16)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/callAll.test.ts)_</sup></sup>\n\n> Take a list of functions that accept the same parameters and call them all\n> with the provided arguments.\n\n\n#### Import\n\n```ts\n/* Node: */  import callAll from \"froebel/callAll\";\n/* Deno: */  import callAll from \"https://deno.land/x/froebel@v0.23.2/callAll.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst mult = (a: number, b: number) => a * b\nconst div  = (a: number, b: number) => a / b\n\n// prints: [8, 2]\nconsole.log( callAll([mult, div], 4, 2) )\n```\n\n---\n\n#### `pipe` \n  \n```hs\n(...funs: T) => PipedFun<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/pipe.ts#L27)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/pipe.test.ts)_</sup></sup>\n\n> Given a list of functions returns a function that will execute the given\n> functions one after another, always passing the result of the previous\n> function as an argument to the next function.\n> \n> If one of the given functions returns a promise, the promise will be resolved\n> before being passed to the next function.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import pipe from \"froebel/pipe\";\n/* Deno: */  import pipe from \"https://deno.land/x/froebel@v0.23.2/pipe.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst join = (...chars: string[]) => chars.join('')\npipe(join, parseInt)('1', '2', '3')  // -> 123\n\nconst square = (n: number) => n ** 2\n\n// this is equivalent to: square(square(square(2)))\npipe(square, square, square)(2)  // -> 256\n\n// also works with promises:\nfetchNumber :: async () => Promise<number>\npipe(fetchNumber, n => n.toString())  // async () => Promise<string>\n```\n\n---\n\n#### `applyPipe` \n  \n```hs\n(arg: Parameters<T[0]>[0], ...funs: T) => CheckPipe<T, CarryReturn<ReturnTypes<T>, Parameters<T[0]>>, false>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/pipe.ts#L57)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/pipe.test.ts)_</sup></sup>\n\n> Like `pipe` but takes an argument as its first parameter and invokes the pipe\n> with it.\n> \n> Note: unlike in `pipe`, the first function of the pipe must take exactly one\n> argument.\n> \n> \n> <sub>see [pipe](#pipe)</sub>\n\n\n#### Import\n\n```ts\n/* Node: */  import { applyPipe } from \"froebel/pipe\";\n/* Deno: */  import { applyPipe } from \"https://deno.land/x/froebel@v0.23.2/pipe.ts\";\n```\n\n\n\n\n#### Example\n```ts\napplyPipe(2, double, square, half)  // -> 8\n```\n\n---\n\n#### `bundle` \n  \n```hs\n(...funs: λ<T>[]) => (...args: T) => Promise<void>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/bundle.ts#L12)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/bundle.test.ts)_</sup></sup>\n\n> Given a list of functions that accept the same parameters, returns a function\n> that takes these parameters and invokes all of the given functions.\n> \n> The returned function returns a promise that resolves once all functions\n> returned/resolved and rejects if any of the functions throws/rejects - but\n> only after all returned promises have been settled.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import bundle from \"froebel/bundle\";\n/* Deno: */  import bundle from \"https://deno.land/x/froebel@v0.23.2/bundle.ts\";\n```\n\n\n\n\n---\n\n#### `bundleSync` \n  \n```hs\n(...funs: λ<T>[]) => (...args: T) => void\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/bundle.ts#L29)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/bundle.test.ts)_</sup></sup>\n\n> Same as [bundle](#bundle), but return synchronously.\n> \n> If any of the functions throws an error synchronously, none of the functions\n> after it will be invoked and the error will propagate.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { bundleSync } from \"froebel/bundle\";\n/* Deno: */  import { bundleSync } from \"https://deno.land/x/froebel@v0.23.2/bundle.ts\";\n```\n\n\n\n\n---\n\n#### `nullishChain` \n  \n```hs\n(...funs: [] | [FF, ...FR[]]) => (...args: Parameters<FF>) => ReturnType<FF> | ReturnType<FR[number]>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/nullishChain.ts#L26)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/nullishChain.test.ts)_</sup></sup>\n\n> Given a list of functions that accept the same parameters, returns a function\n> that given these arguments returns the result of the first function whose\n> result is not nullish.\n> \n> This is equivalent to chaining together invocations of the passed in\n> functions with the given arguments with nullish coalescing _(`??`)_ operators.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { nullishChain } from \"froebel/nullishChain\";\n/* Deno: */  import { nullishChain } from \"https://deno.land/x/froebel@v0.23.2/nullishChain.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst isAdult   = (age: number) => { if (n >= 18) return 'adult' }\nconst isToddler = (age: number) => { if (n <= 3) return 'toddler' }\n\nconst ageGroup = nullishChain(isAdult, isToddler, () => 'child')\n\n// this is functionally equivalent to:\nconst ageGroup = age => isAdult(age) ?? isToddler(age) ?? 'child'\n\nageGroup(1)  // prints: 'toddler'\nageGroup(10) // prints: 'child'\nageGroup(50) // prints: 'adult'\n```\n\n---\n\n#### `asyncNullishChain` \n  \n```hs\n(...funs: [] | [FF, ...FR[]]) => (...args: Parameters<FF>) => Promise<PromType<ReturnType<FF>> | PromType<ReturnType<FR[number]>>>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/nullishChain.ts#L45)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/nullishChain.test.ts)_</sup></sup>\n\n> Same as [nullishChain](#nullishchain) but accept asynchronous functions too.\n\n\n#### Import\n\n```ts\n/* Node: */  import { asyncNullishChain } from \"froebel/nullishChain\";\n/* Deno: */  import { asyncNullishChain } from \"https://deno.land/x/froebel@v0.23.2/nullishChain.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst readFromCache = (id: string): Resource => { if (id in cache) return cache[id] }\nconst readFromFile  = (id: string): Resource => { if (fileExists(id)) return readFile(id) }\nconst fetchFromNet  = async (id: string): Promise<Resource> => await fetch(`someURL/${id}`)\n\n// async (id: string) => Promise<Resource>\nconst getResource = asyncNullishChain(readFromCache, readFromFile, fetchFromNet)\n```\n\n---\n\n#### `throttle` \n  \n```hs\n(fun: T, ms: number, opts?: {leading: boolean, trailing: boolean}) => λ<Parameters<T>, void> & {[cancel]: () => void}\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/throttle.ts#L14)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/throttle.test.ts)_</sup></sup>\n\n> Create a throttled function that invokes `fun` at most every `ms` milliseconds.\n> \n> `fun` is invoked with the last arguments passed to the throttled function.\n> \n> Calling `[throttle.cancel]()` on the throttled function will cancel the currently\n> scheduled invocation.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import throttle from \"froebel/throttle\";\n/* Deno: */  import throttle from \"https://deno.land/x/froebel@v0.23.2/throttle.ts\";\n```\n\n\n\n\n---\n\n#### `debounce` \n  \n```hs\n(fun: T, ms: number) => λ<Parameters<T>, void> & {[cancel]: () => void}\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/debounce.ts#L14)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/debounce.test.ts)_</sup></sup>\n\n> Creates a debounced function that delays invoking `fun` until `ms` milliseconds\n> have passed since the last invocation of the debounced function.\n> \n> `fun` is invoked with the last arguments passed to the debounced function.\n> \n> Calling `[debounce.cancel]()` on the debounced function will cancel the currently\n> scheduled invocation.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import debounce from \"froebel/debounce\";\n/* Deno: */  import debounce from \"https://deno.land/x/froebel@v0.23.2/debounce.ts\";\n```\n\n\n\n\n---\n\n#### `memoize` \n  \n```hs\n(fun: T, opt: {limit: number, weak: W, key: (...args: Parameters<T>) => K}) => T & {cache: W extends false ? Map<K, ReturnType<T>> : Cache<K, ReturnType<T>>}\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/memoize.ts#L70)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/memoize.test.ts)_</sup></sup>\n\n> Returns a copy of `fun` that remembers its result for any given arguments and\n> only invokes `fun` for unknown arguments.\n> \n> The cache key is computed using the `key` function. The default `key`\n> function simply stringifies the arguments.\n> \n> If `limit` is specified, only the `limit`-last entries are kept in cache.\n> \n> The function's cache is available at `memoized.cache`.\n> \n> If `opt.weak` is `true`, non-primitive cache keys are stored in a WeakMap.\n> This behavior might for example be useful if you want to memoize some\n> calculation including a DOM Node without holding on to a reference of that\n> node.\n> Using weak keys prohibits setting a `limit`.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import memoize from \"froebel/memoize\";\n/* Deno: */  import memoize from \"https://deno.land/x/froebel@v0.23.2/memoize.ts\";\n```\n\n\n\n\n#### Examples\n```ts\nconst expensiveCalculation = (a: number, b: number) => {\n  console.log(`calculate ${a} + ${b}`)\n  return a + b\n}\nconst calc = memoize(expensiveCalculation)\n\nconsole.log( calc(1, 2) )\n// calculate 1 + 2\n// 3\nconsole.log( calc(20, 5) )\n// calculate 20 + 5\n// 25\nconsole.log( calc(20, 5) )\n// 25\nconsole.log( calc(1, 2) )\n// 3\n\ncalc.cache.clear()\nconsole.log( calc(1, 2) )\n// calculate 1 + 2\n// 3\n```\n\n```ts\nconst logIfDifferent = memoize(\n  (msg: string) => console.log(msg),\n  {\n    limit: 1,\n    key: msg => msg\n  }\n)\n\nlogIfDifferent('a')\nlogIfDifferent('a')\nlogIfDifferent('b')\nlogIfDifferent('a')\n\n// a\n// b\n// a\n```\n\n---\n\n#### `limitInvocations` \n  \n```hs\n(fun: T, limit: number, ...funs: ExcS<T>) => T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/invoke.ts#L19)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/invoke.test.ts)_</sup></sup>\n\n> Returns a version of the function `fun` that can only be invoked `limit`\n> times.\n> An optional `except` function will be called with the same parameters on any\n> additional invocations.\n> \n> If `fun` returns anything but `void` (or `Promise<void>`), supplying an\n> `except` function is mandatory.\n> \n> The `except` function must have the same return type as `fun`, or — if `fun`\n> returns a promise — it may return the type that the promise resolves to\n> synchronously.\n> \n> The `except` function may also throw instead of returning a value.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { limitInvocations } from \"froebel/invoke\";\n/* Deno: */  import { limitInvocations } from \"https://deno.land/x/froebel@v0.23.2/invoke.ts\";\n```\n\n\n\n\n---\n\n#### `once` \n  \n```hs\n(fun: T, ...funs: ExcS<T>) => T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/invoke.ts#L40)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/invoke.test.ts)_</sup></sup>\n\n> Special case of [limitInvocations](#limitinvocations). `fun` can only be invoked once.\n> \n> <sub>see [limitInvocations](#limitinvocations)</sub>\n\n\n#### Import\n\n```ts\n/* Node: */  import { once } from \"froebel/invoke\";\n/* Deno: */  import { once } from \"https://deno.land/x/froebel@v0.23.2/invoke.ts\";\n```\n\n\n\n## List\n\n#### `atWrap` \n  \n```hs\n(arr: T[], i: number) => T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/atWrap.ts#L3)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/atWrap.test.ts)_</sup></sup>\n\n> Access list at `i % length`. Negative indexes start indexing the last\n> element as `[-1]` and wrap around to the back.\n\n\n#### Import\n\n```ts\n/* Node: */  import atWrap from \"froebel/atWrap\";\n/* Deno: */  import atWrap from \"https://deno.land/x/froebel@v0.23.2/atWrap.ts\";\n```\n\n\n\n\n---\n\n#### `zip` \n  \n```hs\n(...lists: T) => Zip<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/zip.ts#L16)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/zip.test.ts)_</sup></sup>\n\n> Takes multiple lists and returns a list of tuples containing the value in\n> each list at the current index. If the lists are of different lengths, the\n> returned list of tuples has the length of the shortest passed in list.\n\n\n#### Import\n\n```ts\n/* Node: */  import zip from \"froebel/zip\";\n/* Deno: */  import zip from \"https://deno.land/x/froebel@v0.23.2/zip.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst pairs = zip([1,2,3], ['a','b','c'])\nconsole.log(pairs) // prints: [[1,'a'], [2,'b'], [3,'c']]\n```\n\n---\n\n#### `zipWith` \n  \n```hs\n(zipper: (...args: {[I in string | number | symbol]: U}) => U, ...lists: T) => U[]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/zip.ts#L35)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/zip.test.ts)_</sup></sup>\n\n> Same as [zip](#zip) but also takes a `zipper` function, that is called for\n> each index with the element at current index in each list as arguments. The\n> result of `zipper` is the element at current index in the list returned from\n> `zipWith`.\n\n\n#### Import\n\n```ts\n/* Node: */  import { zipWith } from \"froebel/zip\";\n/* Deno: */  import { zipWith } from \"https://deno.land/x/froebel@v0.23.2/zip.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst sums = zipWith((a,b) => a+b, [1,2,3], [4,5,6])\nconsole.log(sums) // prints: [5,7,9]\n```\n\n---\n\n#### `unzip` \n  \n```hs\n(...zipped: T[][]) => Unzip<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/unzip.ts#L15)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/unzip.test.ts)_</sup></sup>\n\n> Reverse of [zip](#zip). Takes a list of tuples and deconstructs them into\n> an array (of length of the tuples length) of lists each containing all the\n> elements in all tuples at the lists index.\n\n\n#### Import\n\n```ts\n/* Node: */  import unzip from \"froebel/unzip\";\n/* Deno: */  import unzip from \"https://deno.land/x/froebel@v0.23.2/unzip.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst [nums, chars] = unzip([1,'a'], [2,'b'], [3,'c'])\nconsole.log(nums)  // prints: [1, 2, 3]\nconsole.log(chars) // prints: ['a','b','c']\n```\n\n---\n\n#### `unzipWith` \n  \n```hs\n(zipped: T[][], ...unzippers: U) => {[I in string | number | symbol]: ReturnType<U[I]>}\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/unzip.ts#L39)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/unzip.test.ts)_</sup></sup>\n\n> Same as [unzip](#unzip) but accepts an `unzipper` function for each tuple\n> index. The `unzipper`'s return value is used as the value in the list at\n> that index returned from `unzipWith`.\n> \n> The `unzipper` takes the current element as its first argument, an\n> accumulator as second argument (initially `undefined`) and its return value\n> is the accumulator passed into the next invocation.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { unzipWith } from \"froebel/unzip\";\n/* Deno: */  import { unzipWith } from \"https://deno.land/x/froebel@v0.23.2/unzip.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst [nums, str] = unzipWith(\n  [ [1,'a'], [2,'b'], [3,'c'] ],\n  (n, acc: number[] = []) => [...acc, n],\n  (c, str = '') => str + c\n)\n\nconsole.log(nums) // prints: [1, 2, 3]\nconsole.log(str)  // prints: 'abc'\n```\n\n---\n\n#### `batch` \n  \n```hs\n(list: T[], batchSize: number) => T[][]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/batch.ts#L14)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/batch.test.ts)_</sup></sup>\n\n> Takes a `list` and returns it in multiple smaller lists of the size\n> `batchSize`.\n> The last batch may be smaller than `batchSize` depending on if `list` size is\n> divisible by `batchSize`.\n\n\n#### Import\n\n```ts\n/* Node: */  import batch from \"froebel/batch\";\n/* Deno: */  import batch from \"https://deno.land/x/froebel@v0.23.2/batch.ts\";\n```\n\n\n\n\n#### Example\n```ts\nbatch([1,2,3,4,5], 2)  // -> [ [1,2], [3,4], [5] ]\n```\n\n---\n\n#### `partition` \n  \n```hs\n(list: T[], predicate: (el: T) => el is S) => [S[], Exclude<T, S>[]]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/partition.ts#L30)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/partition.test.ts)_</sup></sup>\n\n> Takes a `list` and returns a pair of lists containing: the elements that\n> match the `predicate` and those that don't, respectively.\n> \n> Think of it as `filter`, but the elements that don't pass the filter aren't\n> discarded but returned in a separate list instead.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import partition from \"froebel/partition\";\n/* Deno: */  import partition from \"https://deno.land/x/froebel@v0.23.2/partition.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst [strings, numbers] = partition(\n  ['a', 'b', 1, 'c', 2, 3],\n  (el): el is string => typeof el === 'string'\n)\n// strings: [\"a\", \"b\", \"c\"]\n// numbers: [1, 2, 3]\n```\n\n---\n\n#### `shuffle` \n  \n```hs\n(list: T[]) => T[]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/shuffle.ts#L5)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/shuffle.test.ts)_</sup></sup>\n\n> Shuffles `list` using the Fisher-Yates shuffle algorithm.\n> The original `list` is not modified and the shuffled list is returned.\n\n\n#### Import\n\n```ts\n/* Node: */  import shuffle from \"froebel/shuffle\";\n/* Deno: */  import shuffle from \"https://deno.land/x/froebel@v0.23.2/shuffle.ts\";\n```\n\n\n\n\n---\n\n#### `shuffleInPlace` \n  \n```hs\n(list: unknown[]) => void\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/shuffle.ts#L16)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/shuffle.test.ts)_</sup></sup>\n\n> Same as [shuffle](#shuffle) but shuffles `list` in place.\n\n\n#### Import\n\n```ts\n/* Node: */  import { shuffleInPlace } from \"froebel/shuffle\";\n/* Deno: */  import { shuffleInPlace } from \"https://deno.land/x/froebel@v0.23.2/shuffle.ts\";\n```\n\n\n\n\n---\n\n#### `take` \n  \n```hs\n(n: number, list: Iterable<T>) => T[]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/take.ts#L11)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/take.test.ts)_</sup></sup>\n\n> Takes `n` elements from the iterable `list` and returns them as an array.\n\n\n#### Import\n\n```ts\n/* Node: */  import { take } from \"froebel/list\";\n/* Deno: */  import { take } from \"https://deno.land/x/froebel@v0.23.2/list.ts\";\n```\n\n\n\n\n#### Example\n```ts\ntake(5, repeat(1, 2))  // -> [1, 2, 1, 2, 1]\ntake(3, [1, 2, 3, 4])  // -> [1, 2, 3]\ntake(3, [1, 2])        // -> [1, 2]\n```\n\n---\n\n#### `range` \n  \n\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/range.ts#L66)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/range.test.ts)_</sup></sup>\n\n> Creates a range between two values.\n> \n> <sub>see [numberRange](#numberrange) and [alphaRange](#alpharange)</sub>\n\n\n#### Import\n\n```ts\n/* Node: */  import range from \"froebel/range\";\n/* Deno: */  import range from \"https://deno.land/x/froebel@v0.23.2/range.ts\";\n```\n\n\n\n\n---\n\n#### `numberRange` \n  \n```hs\n(start: number, end: number, step: number) => number[]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/range.ts#L17)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/range.test.ts)_</sup></sup>\n\n> Constructs a numeric between `start` and `end` inclusively.\n\n\n#### Import\n\n```ts\n/* Node: */  import { numberRange } from \"froebel/range\";\n/* Deno: */  import { numberRange } from \"https://deno.land/x/froebel@v0.23.2/range.ts\";\n```\n\n\n\n\n#### Example\n```ts\nrange(2, 6)      // -> [2, 3, 4, 5, 6]\nrange(8, 9, .3)  // -> [8, 8.3, 8.6, 8.9]\nrange(3, -2)     // -> [3, 2, 1, 0, -1, -2]\n```\n\n---\n\n#### `alphaRange` \n  \n```hs\n(start: string, end: string) => string[]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/range.ts#L43)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/range.test.ts)_</sup></sup>\n\n> Constructs a range between characters.\n\n\n#### Import\n\n```ts\n/* Node: */  import { alphaRange } from \"froebel/range\";\n/* Deno: */  import { alphaRange } from \"https://deno.land/x/froebel@v0.23.2/range.ts\";\n```\n\n\n\n\n#### Example\n```ts\nrange('a', 'd')  // -> ['a', 'b', 'c', 'd']\nrange('Z', 'W')  // -> ['Z', 'Y', 'X', 'W']\n```\n## Iterable\n\n#### `repeat` \n  \n```hs\n(...sequence: [T, ...T[]]) => Generator<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/repeat.ts#L11)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/repeat.test.ts)_</sup></sup>\n\n> Returns a generator that repeats `sequence`.\n\n\n#### Import\n\n```ts\n/* Node: */  import repeat from \"froebel/repeat\";\n/* Deno: */  import repeat from \"https://deno.land/x/froebel@v0.23.2/repeat.ts\";\n```\n\n\n\n\n#### Example\n```ts\n// prints: 1, 2, 3, 1, 2, 3, ...\nfor (const n of repeat(1, 2, 3))\n  console.log(n)\n```\n\n---\n\n#### `take` \n  \n```hs\n(n: number, list: Iterable<T>) => Generator<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/take.ts#L25)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/take.test.ts)_</sup></sup>\n\n> Takes `n` elements from the iterable `list` and returns them as a generator.\n\n\n#### Import\n\n```ts\n/* Node: */  import { take } from \"froebel/iterable\";\n/* Deno: */  import { take } from \"https://deno.land/x/froebel@v0.23.2/iterable.ts\";\n```\n\n\n\n\n#### Example\n```ts\n[...take(5, repeat(1, 2))]  // -> [1, 2, 1, 2, 1]\n[...take(3, [1, 2, 3, 4])]  // -> [1, 2, 3]\n[...take(3, [1, 2])]        // -> [1, 2]\n```\n## Object\n\n#### `pick` \n  \n```hs\n(obj: T, ...keys: K[]) => Pick<T, K>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/pick.ts#L9)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/pick.test.ts)_</sup></sup>\n\n> From `obj`, create a new object that only includes `keys`.\n\n\n#### Import\n\n```ts\n/* Node: */  import pick from \"froebel/pick\";\n/* Deno: */  import pick from \"https://deno.land/x/froebel@v0.23.2/pick.ts\";\n```\n\n\n\n\n#### Example\n```ts\npick({ a: 1, b: 2, c: 3 }, 'a', 'c') // { a: 1, c: 3 }\n```\n\n---\n\n#### `omit` \n  \n```hs\n(obj: T, ...keys: K[]) => Omit<T, K>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/omit.ts#L9)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/omit.test.ts)_</sup></sup>\n\n> From `obj`, create a new object that does not include `keys`.\n\n\n#### Import\n\n```ts\n/* Node: */  import omit from \"froebel/omit\";\n/* Deno: */  import omit from \"https://deno.land/x/froebel@v0.23.2/omit.ts\";\n```\n\n\n\n\n#### Example\n```ts\nomit({ a: 1, b: 2, c: 3 }, 'a', 'c') // { b: 2 }\n```\n\n---\n\n#### `map` \n  \n```hs\n(data: Map<IK, IV>, callback: (key: IK, value: IV) => [OK, OV]) => Map<OK, OV>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/map.ts#L34)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/map.test.ts)_</sup></sup>\n\n> Map over `data`. `data` can be a regular object, a `Map`, a `Set`, or an\n> array.\n\n\n#### Import\n\n```ts\n/* Node: */  import map from \"froebel/map\";\n/* Deno: */  import map from \"https://deno.land/x/froebel@v0.23.2/map.ts\";\n```\n\n\n\n\n#### Examples\n```ts\n// -> { a: 1, b: 2 }\nmap({ a: '1', b: '2' }, (key, value) => [key, parseInt(value)])\n```\n\n```ts\n// -> Map([ [2, 1], [4, 3] ])\nmap(new Map([ [1, 2], [3, 4] ]), (key, value) => [key + 1, value - 1])\n```\n## Path\n\n#### `select` \n  \n```hs\n(obj: T, ...path: P) => PickPath<T, P>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/select.ts#L16)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/select.test.ts)_</sup></sup>\n\n> Returns the value in `obj` at `path`. If the given path does not exist,\n> the symbol `none` is returned.\n\n\n#### Import\n\n```ts\n/* Node: */  import select from \"froebel/select\";\n/* Deno: */  import select from \"https://deno.land/x/froebel@v0.23.2/select.ts\";\n```\n\n\n\n\n#### Example\n```ts\n// -> 'something'\nselect(\n  { a: { deeply: [{ nested: { object: 'something' } }] } },\n  'a', 'deeply', 0, 'nested', 'object'\n)\n```\n## Equality\n\n#### `oneOf` \n  \n```hs\n(value: T, ...cmps: TT) => value is TT[number]\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/oneOf.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/oneOf.test.ts)_</sup></sup>\n\n> Checks if `v` is one of `cmps`.\n\n\n#### Import\n\n```ts\n/* Node: */  import oneOf from \"froebel/oneOf\";\n/* Deno: */  import oneOf from \"https://deno.land/x/froebel@v0.23.2/oneOf.ts\";\n```\n\n\n\n\n---\n\n#### `equal` \n  \n```hs\n(a: unknown, b: unknown) => boolean\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/equal.ts#L9)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/equal.test.ts)_</sup></sup>\n\n> Checks if `a` and `b` are structurally equal using the following algorithm:\n> \n> - primitives are compared by value\n> - functions are compared by reference\n> - objects (including arrays) are checked to have the same properties and\n>   their values are compared recursively using the same algorithm\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import equal from \"froebel/equal\";\n/* Deno: */  import equal from \"https://deno.land/x/froebel@v0.23.2/equal.ts\";\n```\n\n\n\n\n---\n\n#### `clone` \n  \n```hs\n(value: T) => T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/clone.ts#L15)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/clone.test.ts)_</sup></sup>\n\n> Returns a copied version of `value`.\n> \n> If `value` is primitive, returns `value`.\n> Otherwise, properties of `value` are copied recursively. Only `value`'s own\n> enumerable properties are cloned. Arrays are cloned by mapping over their\n> elements.\n> \n> If a path in `value` references itself or a parent path, then in the\n> resulting object that path will also reference the path it referenced in the\n> original object (but now in the resuling object instead of the original).\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import clone from \"froebel/clone\";\n/* Deno: */  import clone from \"https://deno.land/x/froebel@v0.23.2/clone.ts\";\n```\n\n\n\n\n---\n\n#### `merge` \n  \n```hs\n(a: A, b: B) => Merge<A, B>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/merge.ts#L76)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/merge.test.ts)_</sup></sup>\n\n> Recursively merges `A` and `B`. If a property in `A` and `B` is of a\n> different type (i.e. it's not an array, Set, Map, or plain object in both,\n> the value from `B` will be used in the result).\n> \n> If there are self-references in the cloned values, array / Set items, or Map\n> keys or values, they will also be self-referencing in the result.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import merge from \"froebel/merge\";\n/* Deno: */  import merge from \"https://deno.land/x/froebel@v0.23.2/merge.ts\";\n```\n\n\n\n## Promise\n\n#### `promisify` \n  \n```hs\n(withCallback: T, resultIndex?: N, errorIndex: null | number) => Promisified<T, N>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/promisify.ts#L56)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/promisify.test.ts)_</sup></sup>\n\n> Turns a function accepting a callback into a function returning a promise.\n> You can specify in which parameter (if any) the callback expects to receive\n> a result and in which it expects an error.\n> Pass `null` to `resultIndex` or `errorIndex` if no result or errors are\n> passed to the callback. By default the first argument passed to the callback\n> is interpreted as result and none of the arguments as error (if the function\n> accepting the callback throws or rejects, that will still result in the\n> promisified function rejecting).\n> \n> The `callbackFirst` property allows passing additional parameters after the\n> callback and `callbackLast` will pass additional parameters before the\n> callback.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import promisify from \"froebel/promisify\";\n/* Deno: */  import promisify from \"https://deno.land/x/froebel@v0.23.2/promisify.ts\";\n```\n\n\n\n\n#### Examples\n```ts\nconst notify = (cb: (msg: string) => void) => { msg('something') }\nconst waitForMessage = promisify(notify)\nawait waitForMessage()  // -> 'something'\n\n// here result is passed at index 1 and errors at index 0.\nconst callbackAPI = (cb: (error?: Error, data?: unknown) => void) => {}\nconst asyncAPI = promisify(callbackAPI, 1, 0)\n```\n\n```ts\nconst sleep = promisify(setTimeout).callbackFirst\nawait sleep(200)\n```\n\n```ts\nconst fs = require('node:fs');\nconst stat = promisify(fs.stat, 1, 0).callbackLast\n\ntry {\n  const stats = await stat('.');\n  console.log(`This directory is owned by ${stats.uid}`);\n} catch (err) {\n  console.error(err)\n}\n```\n\n---\n\n#### `createQueue` \n  \n```hs\n() => Queue\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/queue.ts#L46)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/queue.test.ts)_</sup></sup>\n\n> Creates a `queue` function that accepts a function as it's only parameter.\n> When `queue` is invoked, the passed in function is executed after the last\n> function passed to `queue` has finished executing. The `queue` function\n> returns the result of the passed in function asynchronously.\n> \n> Reading `queue.done` is `true` if no functions are currently executing /\n> scheduled and otherwise a promise that resolves once the last function has\n> stopped executing and no futher functions are queued.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import createQueue from \"froebel/queue\";\n/* Deno: */  import createQueue from \"https://deno.land/x/froebel@v0.23.2/queue.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst queue = createQueue()\n\nqueue(async () => {\n  console.log('start a')\n  await delay()\n  return 'end a'\n}).then(console.log)\n\nqueue(async () => {\n  console.log('start b')\n  await delay()\n  return 'end b'\n}).then(console.log)\n\nqueue(async () => {\n  console.log('start c')\n  await delay()\n  return 'end c'\n}).then(console.log)\n\nawait queue.done\n\n// start a\n// end a\n// start b\n// end b\n// start c\n// end c\n```\n\n---\n\n#### `isPromise` \n  \n```hs\n(value: unknown) => value is Promise<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/isPromise.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/isPromise.test.ts)_</sup></sup>\n\n> Checks if `value` looks like a promise.\n\n\n#### Import\n\n```ts\n/* Node: */  import isPromise from \"froebel/isPromise\";\n/* Deno: */  import isPromise from \"https://deno.land/x/froebel@v0.23.2/isPromise.ts\";\n```\n\n\n\n\n---\n\n#### `isNotPromise` \n  \n```hs\n(value: T) => value is Exclude<T, Promise<any>>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/isPromise.ts#L19)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/isPromise.test.ts)_</sup></sup>\n\n> Checks if `value` is not a promise.\n\n\n#### Import\n\n```ts\n/* Node: */  import { isNotPromise } from \"froebel/isPromise\";\n/* Deno: */  import { isNotPromise } from \"https://deno.land/x/froebel@v0.23.2/isPromise.ts\";\n```\n\n\n\n\n#### Example\n```ts\n(value: number | Promise<unknown>) => {\n  if (isNotPromise(value)) return value / 2\n}\n```\n## Predicate\n\n#### `truthy` \n  \n```hs\n(value: T) => value is PickTruthy<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/truthy.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/truthy.test.ts)_</sup></sup>\n\n> Checks if `value` is truthy. Literal types are narrowed accordingly.\n\n\n#### Import\n\n```ts\n/* Node: */  import { truthy } from \"froebel/truthy\";\n/* Deno: */  import { truthy } from \"https://deno.land/x/froebel@v0.23.2/truthy.ts\";\n```\n\n\n\n\n---\n\n#### `falsy` \n  \n```hs\n(value: T) => value is PickFalsy<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/truthy.ts#L5)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/truthy.test.ts)_</sup></sup>\n\n> Checks if `value` is falsy. Literal types are narrowed accordingly.\n\n\n#### Import\n\n```ts\n/* Node: */  import { falsy } from \"froebel/truthy\";\n/* Deno: */  import { falsy } from \"https://deno.land/x/froebel@v0.23.2/truthy.ts\";\n```\n\n\n\n\n---\n\n#### `nullish` \n  \n```hs\n(value: T) => value is Nullish<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/nullish.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/nullish.test.ts)_</sup></sup>\n\n> Checks if `value` is nullish. Literal types are narrowed accordingly.\n\n\n#### Import\n\n```ts\n/* Node: */  import { nullish } from \"froebel/nullish\";\n/* Deno: */  import { nullish } from \"https://deno.land/x/froebel@v0.23.2/nullish.ts\";\n```\n\n\n\n\n---\n\n#### `notNullish` \n  \n```hs\n(value: null | T) => value is T\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/nullish.ts#L20)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/nullish.test.ts)_</sup></sup>\n\n> Checks if `value` is not nullish. Literal types are narrowed accordingly.\n\n\n#### Import\n\n```ts\n/* Node: */  import { notNullish } from \"froebel/nullish\";\n/* Deno: */  import { notNullish } from \"https://deno.land/x/froebel@v0.23.2/nullish.ts\";\n```\n\n\n\n\n#### Example\n```ts\nconst nums = (...values: (number | undefined)[]): number[] => values.filter(notNullish)\n```\n\n---\n\n#### `isFulfilled` \n  \n```hs\n(result: PromiseSettledResult<T>) => result is PromiseFulfilledResult<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/settled.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/settled.test.ts)_</sup></sup>\n\n> Checks if `result` (returned from `Promise.allSettled`) is fulfilled.\n\n\n#### Import\n\n```ts\n/* Node: */  import { isFulfilled } from \"froebel/settled\";\n/* Deno: */  import { isFulfilled } from \"https://deno.land/x/froebel@v0.23.2/settled.ts\";\n```\n\n\n\n\n---\n\n#### `isRejected` \n  \n```hs\n(result: PromiseSettledResult<unknown>) => result is PromiseRejectedResult\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/settled.ts#L7)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/settled.test.ts)_</sup></sup>\n\n> Checks if `result` (returned from `Promise.allSettled`) is rejected.\n\n\n#### Import\n\n```ts\n/* Node: */  import { isRejected } from \"froebel/settled\";\n/* Deno: */  import { isRejected } from \"https://deno.land/x/froebel@v0.23.2/settled.ts\";\n```\n\n\n\n## String\n\n#### `prefix` \n  \n```hs\n(prefix: T0, str: T1, caseMod?: C) => `${string}`\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/prefix.ts#L12)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/prefix.test.ts)_</sup></sup>\n\n> Returns `str` prefixed with `prefix`. Optionally, allows prefxing in camel\n> case, i.e. `prefix('foo', 'bar', 'camel') => 'fooBar'`, or snake case, i.e.\n> `prefix('foo', 'bar', 'snake') => 'foo_bar'`.\n> \n> The result is strictly typed, so `prefix('foo', 'bar')` will return the type\n> `'foobar'`, not just a generic `string`.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import prefix from \"froebel/prefix\";\n/* Deno: */  import prefix from \"https://deno.land/x/froebel@v0.23.2/prefix.ts\";\n```\n\n\n\n\n---\n\n#### `suffix` \n  \n```hs\n(str: T1, suffix: T0, caseMod?: C) => `${string}`\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/suffix.ts#L8)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/suffix.test.ts)_</sup></sup>\n\n> Returns `str` suffixed with `suffix`. Same case and type behavior as\n> [prefix](#prefix).\n\n\n#### Import\n\n```ts\n/* Node: */  import suffix from \"froebel/suffix\";\n/* Deno: */  import suffix from \"https://deno.land/x/froebel@v0.23.2/suffix.ts\";\n```\n\n\n\n\n---\n\n#### `surround` \n  \n```hs\n(str: A, surrounding: B) => B extends \"\" ? A : Surround<A, B>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/surround.ts#L13)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/surround.test.ts)_</sup></sup>\n\n> Surrounds the `str` with `surrounding`. `surrounding` must have an even length.\n\n\n#### Import\n\n```ts\n/* Node: */  import { surround } from \"froebel/surround\";\n/* Deno: */  import { surround } from \"https://deno.land/x/froebel@v0.23.2/surround.ts\";\n```\n\n\n\n\n#### Example\n```ts\nsurround(\"foo\", \"()\")      // \"(foo)\"\nsurround(\"foo\", \"({[]})\")  // \"({[foo]})\"\n```\n\n---\n\n#### `capitalize` \n  \n```hs\n(str: T) => Capitalize\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L12)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Upper-case first letter of string.\n\n\n#### Import\n\n```ts\n/* Node: */  import { capitalize } from \"froebel/case\";\n/* Deno: */  import { capitalize } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n---\n\n#### `uncapitalize` \n  \n```hs\n(str: T) => Uncapitalize\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L16)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Lower-case first letter of string\n\n\n#### Import\n\n```ts\n/* Node: */  import { uncapitalize } from \"froebel/case\";\n/* Deno: */  import { uncapitalize } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n---\n\n#### `upper` \n  \n```hs\n(str: T) => Uppercase\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L20)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Strictly typed `String.toUpperCase()`.\n\n\n#### Import\n\n```ts\n/* Node: */  import { upper } from \"froebel/case\";\n/* Deno: */  import { upper } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n---\n\n#### `lower` \n  \n```hs\n(str: T) => Lowercase\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L24)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Strictly typed `String.toLowerCase()`.\n\n\n#### Import\n\n```ts\n/* Node: */  import { lower } from \"froebel/case\";\n/* Deno: */  import { lower } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n---\n\n#### `snake` \n  \n```hs\n(str: T) => DelimitedCase<T, \"_\">\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L40)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transforms a variable name to snake case.\n> \n> Note: The rules for transforming anything to snake case are somewhat vague.\n> So use this only for very simple names where the resulting value is\n> absolutely unambiguous. For more examples of how names are transformed, have\n> a look at the test cases.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { snake } from \"froebel/case\";\n/* Deno: */  import { snake } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n#### Example\n```ts\nsnake('fooBar') // 'foo_bar'\n```\n\n---\n\n#### `kebab` \n  \n```hs\n(str: T) => DelimitedCase<T, \"-\">\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L64)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transforms a variable name to kebab case.\n> \n> Note: The rules for transforming anything to kebab case are somewhat vague.\n> So use this only for very simple names where the resulting value is\n> absolutely unambiguous. For more examples of how names are transformed, have\n> a look at the test cases.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { kebab } from \"froebel/case\";\n/* Deno: */  import { kebab } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n#### Example\n```ts\nkebab('fooBar') // 'foo-bar'\n```\n\n---\n\n#### `camel` \n  \n```hs\n(str: T) => CamelCase<T>\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L88)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transforms a variable name to camel case.\n> \n> Note: The rules for transforming anything to camel case are somewhat vague.\n> So use this only for very simple names where the resulting value is\n> absolutely unambiguous. For more examples of how names are transformed, have\n> a look at the test cases.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { camel } from \"froebel/case\";\n/* Deno: */  import { camel } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n#### Example\n```ts\ncamel('foo_bar') // 'fooBar'\n```\n\n---\n\n#### `pascal` \n  \n```hs\n(str: T) => Capitalize\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L109)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transforms a variable name to pascal case.\n> \n> Note: The rules for transforming anything to pascal case are somewhat vague.\n> So use this only for very simple names where the resulting value is\n> absolutely unambiguous. For more examples of how names are transformed, have\n> a look at the test cases.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import { pascal } from \"froebel/case\";\n/* Deno: */  import { pascal } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n#### Example\n```ts\npascal('foo_bar') // 'FooBar'\n```\n\n---\n\n#### `screamingSnake` \n  \n```hs\n(str: T) => Uppercase\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L122)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transforms a variable name to screaming snake case.\n> \n> <sub>see [snake](#snake)</sub>\n\n\n#### Import\n\n```ts\n/* Node: */  import { screamingSnake } from \"froebel/case\";\n/* Deno: */  import { screamingSnake } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n\n#### Example\n```ts\nscreamingSnake('fooBar') // 'FOO_BAR'\n```\n\n---\n\n#### `transformCase` \n  \n```hs\n(str: T, targetCase: C) => DelimitedCase<T, \"_\">\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/case.ts#L135)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/case.test.ts)_</sup></sup>\n\n> Transform a variable name to `targetCase`\n> \n> <sub>see [snake](#snake), [kebab](#kebab), [camel](#camel), [pascal](#pascal), and [screamingSnake](#screamingsnake)</sub>\n\n\n#### Import\n\n```ts\n/* Node: */  import { transformCase } from \"froebel/case\";\n/* Deno: */  import { transformCase } from \"https://deno.land/x/froebel@v0.23.2/case.ts\";\n```\n\n\n\n## Math\n\n#### `clamp` \n  \n```hs\n(min: number, num: number, max: number) => number\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/clamp.ts#L2)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/clamp.test.ts)_</sup></sup>\n\n> Clamp `num` between `min` and `max` inclusively.\n\n\n#### Import\n\n```ts\n/* Node: */  import clamp from \"froebel/clamp\";\n/* Deno: */  import clamp from \"https://deno.land/x/froebel@v0.23.2/clamp.ts\";\n```\n\n\n\n## Data Structures\n\n#### `BiMap` \n  \n```hs\nclass BiMap<L, R>(data?: Map<L, R> | [L, R][], aliasLeft?: AL, aliasRight?: AR)\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/bimap.ts#L172)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/bimap.test.ts)_</sup></sup>\n\n> Bidirectional map. Maps two sets of keys in a one-to-one relation.\n> \n> Both sides are accessible (at .left & .right, or at their respective alias if\n> one was provided in the constructor) with an interface similar to that of the\n> built-in Map and the same iteration behavior.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import BiMap from \"froebel/bimap\";\n/* Deno: */  import BiMap from \"https://deno.land/x/froebel@v0.23.2/bimap.ts\";\n```\n\n\n\n\n#### Examples\n```ts\nconst nums = BiMap.from({ one: 1, two: 2 })\n\n// different ways of iterating over the entries\n[...nums.left]                 // [['one',1], ['two',2]]\n[...nums.right]                // [[1,'one'], [2,'two']]\n[...nums.left.keys()]          // ['one', 'two']\n[...nums.left.values()]        // [1, 2]\n[...nums.right.keys()]         // [1, 2]\n[...nums.right.values()]       // ['one', 'two']\n[...nums]                      // [['one',1], ['two',2]]\n[...nums.right.entries()]      // [[1,'one'], [2,'two']]\nObject.fromEntries(nums.right) // { '1': 'one', '2': 'two' }\n\n// setting a value\nnums.left.three = 3\n// when accessing a property using bracket notation (i.e. nums.right[4]),\n// JavaScript coerces the key to a string, so keys that aren't strings or\n// symbols must be accessed using the same access methods known from Map.\nnums.right.set(4, 'four')\n\n// remapping values\nnums.left.tres = 3          // {one: 1, two: 2, tres: 3, four: 4}\nnums.right.set(4, 'cuatro') // {one: 1, two: 2, tres: 3, cuatro: 4}\n\n// deleting\ndelete nums.left.tres    // {one: 1, two: 2, cuatro: 4}\nnums.right.delete(4)     // {one: 1, two: 2}\n\n// reversing the map\nconst num2Name = nums.reverse()\nconsole.log([...num2Name.left])                 // [[1,'one'], [2,'two']]\nconsole.log(Object.fromEntries(num2Name.right)) // {one: 1, two: 2}\n\n// other methods known from built-in Map\nnums.size               // 2\nnums.[left|right].size  // 2\nnums.clear() // equivalent to nums.[left|right].clear()\nconsole.log(nums.size)  // 0\n```\n\n```ts\n// giving aliases to both sides\nconst dictionary = new BiMap(\n  [\n    ['hello', 'hallo'],\n    ['bye', 'tschüss'],\n  ],\n  'en',\n  'de'\n)\n\ndictionary.de.get('hallo') // 'hello'\ndictionary.en.get('bye')   // 'tschüss'\n\ndelete dictionary.de.hallo\nconsole.log(Object.fromEntries(dictionary.en)) // { bye: 'tschüss' }\n\n// you can also use the BiMap.alias method:\nBiMap.alias('en', 'de')<string, string>()\nBiMap.alias('en', 'de')([['hello', 'hallo']])\nBiMap.alias('en', 'de')(new Map<string, string>())\nBiMap.alias('en', 'de')({ hello: 'hallo' })\nBiMap.alias('en', 'de')(new Set(['hello']), new Set(['hallo']))\n\n// the same arguments can be used with BiMap.from, e.g.:\nBiMap.from(new Set<number>(), new Set<number>())\n```\n\n---\n\n#### `SortedArray` \n  \n```hs\nclass SortedArray<T>(compare: Cmp<T>, ...value: T[])\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/sortedArray.ts#L134)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/sortedArray.test.ts)_</sup></sup>\n\n> Sorted array. Behaves much like a regular array but its elements remain\n> sorted using the `compare` function supplied in the constructor.\n> \n> Contains most of the methods defined on regular JavaScript arrays as long as\n> they don't modify the array's content in place.\n> \n> New elements are added using the `add(...values)` method.\n> \n> Elements can still be accessed using bracket notation as in plain JavaScript\n> arrays but can't be assigned to using bracket notation (as that could change\n> the element's sort position).\n> \n> Elements can be removed using the `delete(...indices)` method, which returns\n> an array containing the deleted values.\n> Deleting an element using `delete sorted[index]` will also work, but results\n> in a TypeScript error because element access is marked readonly.\n> \n> Array methods that pass a reference of the array to a callback (e.g. `map`,\n> `reduce`, `find`) will pass a reference to the SortedArray instance instead.\n> \n> The `filter` and `slice` methods will return SortedArray instances instead of\n> plain arrays.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import SortedArray from \"froebel/sortedArray\";\n/* Deno: */  import SortedArray from \"https://deno.land/x/froebel@v0.23.2/sortedArray.ts\";\n```\n\n\n\n\n---\n\n#### `SortedMap` \n  \n```hs\nclass SortedMap<K, V>(compare: Cmp<K, V>, entries?: null | [K, V][])\n```\n\n<sup><sup>_[source](https://github.com/MathisBullinger/froebel/blob/main/sortedMap.ts#L11)_ | _[tests](https://github.com/MathisBullinger/froebel/blob/main/sortedMap.test.ts)_</sup></sup>\n\n> Behaves like a regular JavaScript `Map`, but its iteration order is dependant\n> on the `compare` function supplied in the constructor.\n> \n> Note: The item's sort position is only computed automatically on insertion.\n> If you update one of the values that the `compare` function depends on, you\n> must call the `update(key)` method afterwards to ensure the map stays sorted.\n> \n\n\n#### Import\n\n```ts\n/* Node: */  import SortedMap from \"froebel/sortedMap\";\n/* Deno: */  import SortedMap from \"https://deno.land/x/froebel@v0.23.2/sortedMap.ts\";\n```\n\n\n","readmeFilename":"README.md","users":{"flumpus-dev":true}}