{"_id":"si-funciona","_rev":"42-13be707e4e9d3b7903637605556d1b65","name":"si-funciona","dist-tags":{"latest":"2.7.1"},"versions":{"1.0.0":{"name":"si-funciona","version":"1.0.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"MIT","_id":"si-funciona@1.0.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"203dea1c4fabaec784076ffb69a86ac3aaa4decf","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-1.0.0.tgz","fileCount":151,"integrity":"sha512-BLUfGtn4y5WEBtRysMQgMjBYUcUzAhg2E/4Dye2UEEKe4tu2mPvq2l2oDcFqF4/SDG7FRklHHunm7pL2oOLIKQ==","signatures":[{"sig":"MEYCIQDdtiXHeT7WDaphV+HBqnJrEAEi+mMLp2gaVsW4ozalSQIhANYj2wPXn2nwp7pT6laLY1FYVFMlFUUw6J31WYM0GZRy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1668470,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCf3eACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoirhAAmEg/j/x7NbMyn+Me9N/FeoHIQCz5W2bUlYHQ2k6mkFc4euT/\r\n5WDSfR0zz8nuJOziHmMpLXgaQ+R4w739wI5TpUSPzf1lVppK0oIUWJoPIyGb\r\n49NjPiKY/9tmbdirbIroBUKxhL/mzy7++ytHfRRfhLqExxg1qO98PXqeLmaO\r\n6WiFkP4Go4+Jdlw4pjLv23aAo7NWVWdeqqlhDKl7KzJzkmSqfWYqLUsfd9aa\r\nFSYWF51NOvi7yyZ0snPg6xYkhKp/OiwVODYIxhVwXs0Wfg3Cufm9wmLmmdpS\r\ntMjE9ls9iWkFkaIsqpuJMiq0PzQpZlF9GflJWPBeduKsNOMUBLMhqxVGJLAY\r\nYJRN2zA1FjK95kBnRk9xLqsbODPRiPIvlKbr7+vbAuLvuj6fpn6Q3NlwGCzt\r\nH2yFTTbC2AlaeI4nraFSqNKx9r3wX3Z84Durn5QRUARNX67hdFXvOUTuvLGK\r\nGiwjuT+a2mPqAFP/QFkQGlEsdl3Gm5OiT81av3Oemi8P2TLhwXtrwZLZWLy7\r\nn2eqDH7BjXGNuiXC+Vqg3lVsobZLelDNY2eUFQchFxPQcQocmRTuCr1fs9bI\r\neF2CWxGFwqsHww1QSlcoUlUhN7ih/hiHhcn2LtvsttSz6Cs3YqJwY6EEvTH5\r\nmKIv5k/NM52xREyqdVzkm6U2HRmPi2T8Dzc=\r\n=vIe1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"dcc4b05ad159e796237efb048c10eb48de43b5f8","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"9.5.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"18.14.2","dependencies":{"npm":"^9.6.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jest":"^29.4.3","jsdoc":"^4.0.2","standard":"^17.0.0","js-build-tools":"^1.2.0","jest-environment-jsdom":"^29.4.3"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_1.0.0_1678376414422_0.7216187248214636","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"si-funciona","version":"1.0.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"MIT","_id":"si-funciona@1.0.1","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"40498272bf6a8476e432091ae692e13dc3e89a0d","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-1.0.1.tgz","fileCount":151,"integrity":"sha512-q0FlTexkqFmOJMvPgqXh4WVpOaHRmrVyAnz3DK5Ld1/t8AicBmHcH6W60Oz15bZpCMwuJyNTABdmGSN6FhWKpw==","signatures":[{"sig":"MEQCIEeY5ps28+nLHrK/3ckCWeoSDtdy42fiaEFlUXUG/cSHAiALwhl1BLfwK0k4kcpi4YSAGG50roVkL5sCViR/suDgyQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1670561,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkEIfkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrKwg/+OTpEG7MrT7jBkGNCID6QIx0Xip67kPCxMHesvAthIJHA2QwU\r\n60HggDSd7vKcy7/3V5R7ejJKxZ6lqJFBBIYl5qxOUyJe01+pugk1bZlGF5KX\r\nh+3vsvoYxXJYyL9jVrsRX5wO9Stn4cM+R2pxl4NlmnIJGVst5FebDTB8y60S\r\nOubBHwBWXvR2pEpEuf/7mnn9YRmfb8tTZ8AQMJQqJdKnx4dvtFjPxsYBJ88B\r\nZplkp31lwLhkpocWH0ECUTorTbxQTY+5PdJtrTBMvd/b10UjHGOyoIbMqAkE\r\nh1VBphqLOK1Bwn7q6ZDUhbd9kJZbdeM4IhUdDn0UuLWN5yM1hQEhPBENVLzK\r\n+ikm/jUlLC2PuVoPUh3iLXHc6ZoBfnB0C3pM8aYSkDKpQnOZcr630L7QfzAh\r\nK5d4Ng/F7pB0IptmKbGBUfW4qGrqN3C5oJ9fwi35lamhlkSjKZtPna5AU/Ah\r\n/AUC4MAtSpkb7ikOG6jIcDZrLjok1Odi/dtaz/GqAG5hAG9ESZFSFW0Kf9f4\r\nG84wH7t+EKhJ47coPzF4vMCffEvPCH4brFrwZpDYs2otd+oA/rkVjA/Yfa9K\r\ntTMjNoueX214t/ND+h6kU5jDUikFaEQUxkWscBBauWJZw+uUD3ordcPZYUMu\r\noCmHk3X3ST5cFzvkXZkwWlPPuEM0Jolo+HA=\r\n=tOBJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"57e1deef2945baefa8340bf9594d4c3b02c50615","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"9.5.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"18.14.2","dependencies":{"npm":"^9.6.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jest":"^29.4.3","jsdoc":"^4.0.2","standard":"^17.0.0","js-build-tools":"^1.2.0","jest-environment-jsdom":"^29.4.3"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_1.0.1_1678804964436_0.32880422644035723","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"si-funciona","version":"1.1.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@1.1.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"81ab7fba8c4967182c834a78e147863ef66ae78f","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-1.1.0.tgz","fileCount":151,"integrity":"sha512-jnOeLr0WtYtWsiejAdKe9WuZPoJlx2BDhQ4DAh9+Kqoe+R/hffc5c0SiKIQfipgCzkaaYu3m9F+KKY6Ynaz/Aw==","signatures":[{"sig":"MEQCIEU/uYHlnhWqsMYUDb8a3r6Tkz+w5Y+VgiZv+1vw5Y/mAiByxnf+6Jorrzas3nsefZQxmP+R2mO0qbeNJjFUl3igAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1705156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkHFUWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpG9Q/7BRON+bF3+stjbvPTkKBFyv8dsoE1AcgMSe8PA2Wi/UHeKqbT\r\nyIXjYKLsspKNaLz5ArRyiT3BGgVy3UPYrDk2JYG0eqAIUESDYJWPfgp0dpBI\r\nWdD4+2AQKLsdZNvi82CRFWVSSu1VItgFqGcjkjxGleaH3Ql5vu4dsmB5eSt5\r\npkkRmiGR3RSg3yFirC0+Ivff5r+UjmkjRJPMD8RK85lK/5d9NjaonR7g46hh\r\nASghNAs600UWiSXVJ8pHJw5cWxzOz4rQa8CbV6N8AHoTmYjCX3uQRZzkJ1Pp\r\nvjqds914+/NgwTo0T7WuzelFEl9IFu0NPaZSrfg5Tjt2BB5mfq5KjFZMgYuw\r\nV4zyBdml2Je1Wbq4r9zGY8xkmTROBkR3sfD/IaL9FoRnpIgs9CkbCqRyp6Il\r\njlCs0C726zv6+NFVA5TVPK2eKRnVT9uukoC3E23qMJc6twxcYwC5Tc212gYA\r\nl0oW+jET1H9lkMoNIaOCAOaKxHKjG57mqzLXphgUmICD+4A/X6z9BjDAHaG3\r\nuZl02KiKqQ/GKNrMvg8OD0WAanKeRWYlg7di2JngBXCAYz/tUPKj62Qjnqv9\r\nb/XQKw9HvcV+CbTUJGViFzja+DUxrIfjUtEGVAnOaL/IAFKmAf0yeVJloMTI\r\ncvox3AX+gQmVgRdi4+0n8Ogw3/4b/+pUVWI=\r\n=5o/W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"8c7374a1a18e29568638af5049ab90557e917202","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"9.6.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"19.8.1","dependencies":{"npm":"^9.6.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.0.0","js-build-tools":"^1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_1.1.0_1679578390375_0.6275194386034761","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"si-funciona","version":"1.1.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@1.1.1","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"a1d9e71f4985292c405d05fa054962600e7bbf4f","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-1.1.1.tgz","fileCount":151,"integrity":"sha512-tBGEm95VPAY9R9R5XkBMDQeoYTQirergF05iF58m4pbJkirnO/wonSExwtp4aV1rMOeEU3izkC9p4xldfoC86Q==","signatures":[{"sig":"MEYCIQCxQWv7rXVfCRA9gurSYza5jE4MO1xMQ1CB0GLm0n9T5wIhANC2gRMypNVqwMm/zb5bXt4kJFIvPX4IwLUI7xCBfD1+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1548336},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"f8f563989e1a8e79e5e56a6ce789b0d149c0ada2","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"9.6.7","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"19.8.1","dependencies":{"npm":"^9.6.7"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_1.1.1_1685831527580_0.44364951380862383","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"si-funciona","version":"1.2.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@1.2.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"bf018295b5d3399a11d237560d63f21b72cfbd8c","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-1.2.0.tgz","fileCount":151,"integrity":"sha512-W7WEhw9HMAYdrmweVQdBywqKX2S3vNJ4x3XFvwCHlrfp3Cr8EpToxwdz4ZsQ19UNuRY2ZN5qigLhCqweMmEuUg==","signatures":[{"sig":"MEQCIB3Qp/aUCoVg3L/1eCYkhORn+Ye5KNwJg9NeFZlBInfgAiBJvsJ4q5pS5+yslDBm1uzSMwpLT/AMMkYLtVUfqE2cvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1572509},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"99e4fd97425449f6102d7f184e8d4474d0a63b76","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"9.7.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"19.8.1","dependencies":{"npm":"^10.0.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.1.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_1.2.0_1694032738961_0.5295466115916188","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"si-funciona","version":"2.0.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.0.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"b1d02714dd34d0da875d547da81fedda6ebb097b","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.0.0.tgz","fileCount":151,"integrity":"sha512-ugvR0qJQjfYcpncF5jYOdBAp7kAORsHutvTwlvLChg3wpkQ9kgX3SlNZlQhiEP5wJM/gYXZSF4qnxp8ImvY28Q==","signatures":[{"sig":"MEYCIQDekf5SVzSiwtEmRg2v/IvPVNNfiL58QUS7B4B+JRi+BAIhALQCc6I7KrNlkH5BQMap2+l4X2phMuBrwU6yEEcPzdDh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1550963},"main":"dist/main.min.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"552cc263f3261137e02366237822e3b503d0aebd","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.0.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.1.0","gulp-rename":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.4"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.0.0_1694489753780_0.17076114078310867","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"si-funciona","version":"2.0.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.0.1","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"213598c9b04ce3c657d19073704051b614b1dc35","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.0.1.tgz","fileCount":224,"integrity":"sha512-1ALWkH9BD7PlEWP4fCxA8LSHYwEoS8u7Nm7f4WZFj3JVEk9La7KqSx6/W/DOIW1CeCK4kh2Sz4Cval4XI4GEVg==","signatures":[{"sig":"MEQCIDEkw+g8cCNqU+7zBNIEq1bd8TBckpXW6ZeL1wBy/0gLAiAy9187T/kJelvFzZIKlVBvHAUMTXWVvtlekz9XfzX0QQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1605069},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"b93e79c0e402afcd57d6c84eafcf52f1f1566164","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.0.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.1.0","gulp-rename":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.0.1_1694535860020_0.06593451417214657","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"si-funciona","version":"2.0.2","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.0.2","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"245e1e5baede12f704a99ccdcd06a950fa505462","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.0.2.tgz","fileCount":224,"integrity":"sha512-mDhYGV1cZNJKTq1tCdpXxbmTWEpdwGXPA5YYNwiEyj4UM4oMEKlHECDLdIu2ga6XeWHSR6RqcdeweXHPs4bzIQ==","signatures":[{"sig":"MEYCIQDxO7KcYIgfov6GW2CPZBox0/zJBYTeBJgsr77P66jDiwIhAPRZsV9lE35PGlRV1dHktoIDoONUOBRV+Vq2dN+1y9Uq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1605058},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"f595bb76c08b0ac6a45f5c543ab8bd551c748186","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.0.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.1.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.0.2_1694536155682_0.9458207516771746","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"si-funciona","version":"2.0.3","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.0.3","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"3d55f206ff382e5fcd592559ac542e000ac692a1","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.0.3.tgz","fileCount":224,"integrity":"sha512-oC2LsYUvsauklnbWoaovUsF0vsnXuhqdAEb10CVNNmuiBKdFz8+U80dfT0ZFr6Gl4EjXvCVoUWavc1JKCkqhYg==","signatures":[{"sig":"MEUCIGl8SUitbZ3U20qLgb7deEFlhxyynloZRusURZc8rYJ3AiEA3mBSN7OhxeFR+zF2FkOy7vbsKNuDLa59Rty9aaJmNts=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1612190},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"f8105f50ecdb40cf11e6ea929c90bc769334557f","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.1.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.1.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.0.3_1696301123938_0.22469839780269774","host":"s3://npm-registry-packages"}},"2.0.4":{"name":"si-funciona","version":"2.0.4","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.0.4","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"bac9b4b9b05cdba94c589339ad850bbf4aed0b3d","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.0.4.tgz","fileCount":224,"integrity":"sha512-j6lZVOXhmw48tCzu/f3VKeFCOJL1wc5/JuxKwc92eZZHlnc1AAbOsHsI0EwdaxUx57Mj+73eoKbPFbNY0XnYvA==","signatures":[{"sig":"MEUCIQDx2JlvYNRykGgQkF2lUce5IU2oyuLu2xy+O6k65liWXwIgLN6IFnHWgfiEXIwmo+Y4ADFAzWeG5onlkM0InytEeLw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1607707},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"2e36da0cebae1e01fcf18fd0635f1771ef11c549","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.2.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.2.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.8"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.0.4_1697327419459_0.3757061556501946","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"si-funciona","version":"2.1.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.1.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"db8b052dfbc6aa045206b5e7745ad13558d88569","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.1.0.tgz","fileCount":230,"integrity":"sha512-EDttJArxC2KN0geSrZjwEEhLQnd85oFnrmsR1Jv7Z0ZH5BCYdJCRmZaqkLXpIsVP5k6Nmc0bgw3YvIpMM4bApA==","signatures":[{"sig":"MEYCIQDWWvmc1K82Xb0Y8KDiCZI1k2HYjOdjXap8QJObGNKhYwIhAOuUMMUDrJDQ70ZqO2WO9uF7B0EdCzBLata4OQyfHGzj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1612329},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"cdc49af37dea1cdbf51adde61716dc9ee3dbdcf0","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.2.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.2.3"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.10"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.1.0_1700079067933_0.3512088104161395","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"si-funciona","version":"2.2.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.0","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"a188e1555b234e0845d6660e2412f5387f6f0272","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.0.tgz","fileCount":230,"integrity":"sha512-PdfruWT2fuzD8iGW9epj7XAVv5qmCJWh28VSN9b/DUoo7CGqgR6Y1K+qJU4w3HazhVjFh2mBCt84Huzi+Hcqyg==","signatures":[{"sig":"MEUCIGnFMgqFELU841QlHy06rCNaXRlEKsM8dCPby7+E1jOcAiEAicXqgqVR23rzjw49xe4BZuhQptY+kJq7bTsfU8KqlfI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1630810},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"230adeb7e7fb62d094fa4aa05fdec12889a15a48","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.2.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.2.5"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.11","collect-your-stuff":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.0_1702330552034_0.5615714699737138","host":"s3://npm-registry-packages"}},"2.2.2":{"name":"si-funciona","version":"2.2.2","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.2","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"0efe9b73162afb694bf5fcabc30d60171f1501fc","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.2.tgz","fileCount":230,"integrity":"sha512-vsAC7H5oHkjR3SZLN7pc0STctt6+Z74Y+VoKgr6flJ8CM/IRlkUcjGDnvQqBODa5tyoYZSi8fVWp1EdYYTFBqQ==","signatures":[{"sig":"MEQCIHCbnC8RkpH/a6cqX+kAkmIMC/VLIM+V9CJTe5+sdyvSAiBnfuqGi1Hf/0fuUwCU5QRxyZs3gSoYnMZGkp7BtLdBSA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1627728},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"509c453bce6507ba81991dd1050588d79612172f","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.2.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.2.5"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.2.12","collect-your-stuff":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.2_1704219188593_0.5923105316899349","host":"s3://npm-registry-packages"}},"2.2.3":{"name":"si-funciona","version":"2.2.3","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.3","maintainers":[{"name":"joshuah13","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"11579fc79d2437ba793365232abec192537be4ef","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.3.tgz","fileCount":230,"integrity":"sha512-YX/gvRbRzaO+wNB/ZWUSBynTraQGQo69GucbFd7j9siXtMbLEljWYD9GVYYNlvW5fqbKMK1/O/7GYxG4u+iuLg==","signatures":[{"sig":"MEQCICdXcdOuZIeENmMUfMz6PmeD/SHcysE6fajFugHK1Vv5AiBmujaGCYIK8esWwSciReLH/tXaiYQtbVsh22TucAfc7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1627727},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"joshuah13","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.2.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.2.5"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^2.3.1","collect-your-stuff":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.3_1704401444286_0.12977276317490394","host":"s3://npm-registry-packages"}},"2.2.4":{"name":"si-funciona","version":"2.2.4","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.4","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"2df79310416a192853a030f46ae6308bd2a45c17","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.4.tgz","fileCount":239,"integrity":"sha512-PAQmYlZaogHIGtjEi/cS90+QYB2SOrVTygV5tf/I+rqizTxByanD2DhA2IdN7sn3BEA0rinZg2DiTn3GS9+Njg==","signatures":[{"sig":"MEQCIGkvjeKCvY+71caoqBGWuHqJw54qlEDcslQwg4ED05tEAiBjHmtMMBAlrDTYQhbmbo3vxG3JRYSi8F2GgvrscQwScQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1636000},"main":"dist/main.min.js","types":"dist/main.js","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.4.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^3.0.0","test-filesystem":"^1.2.0","collect-your-stuff":"^1.1.6"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.4_1707761824537_0.7495266196050856","host":"s3://npm-registry-packages"}},"2.2.5":{"name":"si-funciona","version":"2.2.5","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.5","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"c4d4ec5b0c2ac8c42a4fec661d7cbea5a524c580","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.5.tgz","fileCount":239,"integrity":"sha512-qeMMmB4vX4ivnykwD2eVA5zEXVFa8SVh6163dwcnGh6ZzFhY/Gpt0st/dN+4VHGN5SOf/vpBPUKs7mh1/aLw1Q==","signatures":[{"sig":"MEQCIBiWHGaa/a/AhM+qMBbNwO2H3t7OMbEoOtkiJJW08VzCAiByxpaehfdA3D4deCNWfOOofehDBhxEtIoRRYQnp12RQw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1636002},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.4.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^3.0.1","test-filesystem":"^1.3.1","collect-your-stuff":"^1.1.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.5_1707850558677_0.48837933631987207","host":"s3://npm-registry-packages"}},"2.2.6":{"name":"si-funciona","version":"2.2.6","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.6","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"6513ea14cd0d455d3457c1a1ab4fa3a0f22033bd","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.6.tgz","fileCount":239,"integrity":"sha512-arwywIsr2bGoLExrlz18CR29gbwmxaJHDUKvCRWtM9WD7057znvAqQCJ6d2SGmoX9X2jvFPKl+ynYq/J2B2x6w==","signatures":[{"sig":"MEUCIQDuww/X3tiq9sAVNAY+SF2nTVEleFoI1++o3rxPSpwEDAIgJMuCrOSiw7u0V5deb6W3zMhxlHBeNcjU+ph2EyUZB5E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1650778},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.4.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.5.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^3.0.3","test-filesystem":"^1.3.3","collect-your-stuff":"^1.1.8"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.6_1709336261870_0.7410795023751469","host":"s3://npm-registry-packages"}},"2.2.7":{"name":"si-funciona","version":"2.2.7","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.7","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"aef333e1ae09329b4176d17fc69d8d3d46d71f39","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.7.tgz","fileCount":239,"integrity":"sha512-GLIK81iQuOlnGwVMaRLK9Q4Q9xQ5f28vhwgLBEa7Lzgy4PaUXw+PT63/Wpe4iJDlucpdrxjQXCDb5zBR0xusyQ==","signatures":[{"sig":"MEYCIQDc94UVc31CKcBjv70uSlBdd2cRp4tyQlZdc4m8TOV0igIhAKlt7eLjWjRhmCKKiDo6F4rxFCvr1rUyEa7LQCagDJu5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1650778},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.5.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.5.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^4.0.2","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^3.0.4","test-filesystem":"^1.3.3","collect-your-stuff":"^1.1.9"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.7_1710785825132_0.14947243721623416","host":"s3://npm-registry-packages"}},"2.2.8":{"name":"si-funciona","version":"2.2.8","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.8","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"4de846fab205047eb9fd08efdeb4b4c11ca1c037","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.8.tgz","fileCount":239,"integrity":"sha512-VeD7Vo64Id4j6C6QLarhqp42oEW2V2MSsTrR1VxUEYbcjrTfy05D0QvtSgQaORSP2vPSnZ/kk+P53ptVzySoAQ==","signatures":[{"sig":"MEYCIQDVsHnqjT/vixsKbgEKjwjpTr3+p5IRE6vZDXBDRp6rxQIhAIjkaN3qNECmKQ9ED+JAHx5yX3GRypXqVwtda2YM+FZX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1650778},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.5.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.5.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jsdoc":"^4.0.2","standard":"^17.1.0","js-build-tools":"^3.0.4","test-filesystem":"^1.3.3","collect-your-stuff":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.8_1712251125305_0.9803873135892822","host":"s3://npm-registry-packages"}},"2.2.9":{"name":"si-funciona","version":"2.2.9","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.9","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"4033873129453fadf8293ea7a623de84cbe92b8a","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.9.tgz","fileCount":239,"integrity":"sha512-jVYtqHjoe68JKw9CzKaJhgJEsW9MwVt+A7a80So8GKDD8fWdwk1pbwzh0SXYadaMX9uqGNng5t5n3LF33rGqUA==","signatures":[{"sig":"MEQCIHDFDJkA01bIgiBKZyoJ/3JTXNhqTRemoNImiBaQ8f+mAiAxoov2mX6+lUQoiW4Fdyi/lfCy9i3033MA+nQVa1FXUg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1674674},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.8.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jsdoc":"^4.0.3","standard":"^17.1.0","js-build-tools":"^4.0.1","test-filesystem":"^1.3.5","collect-your-stuff":"^1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.9_1717447106289_0.10520268768056562","host":"s3://npm-registry-packages"}},"2.2.10":{"name":"si-funciona","version":"2.2.10","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.10","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"777cd63e9e28b39b0e537c8892cd5c64cc0c7886","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.10.tgz","fileCount":239,"integrity":"sha512-bYlldQWXEayYRNz6H61kKmrxTe8baurW1d+ELR+U4YvHnFj5RCrMTwoipYBtdVYibXyiuFu4naE+IzPlaYA0GQ==","signatures":[{"sig":"MEUCIE52IRz2L1O5fCz3ofgq5cvZxnlcjpeGr/2JH47XVx7cAiEAvppxyQIbKMGHElvD6Hz7WKa1xUQxKhaj4hL3PY8h584=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1674675},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.8.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jsdoc":"^4.0.3","standard":"^17.1.0","js-build-tools":"^4.0.3","test-filesystem":"^1.3.5","collect-your-stuff":"^1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.10_1718162221378_0.4695310408879536","host":"s3://npm-registry-packages"}},"2.2.11":{"name":"si-funciona","version":"2.2.11","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.11","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"3875661727ea0e2d150f505f643cd8974c33edc0","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.11.tgz","fileCount":239,"integrity":"sha512-vUFiKwFlflKDLjp3/D5v7LCLlawuuloq0ihNVmOTknj74/4sr/A0a5BhOL2xKmhhXI9QuQmW1bdePOPz5JTBIQ==","signatures":[{"sig":"MEUCIQDaZjkdrP9dHPVPP6kIv6UBJWxhbXqjHZzT74V4027JOwIgRA3ZOO3uC27KLP8E/o8VquuG/zPubtMg325dnf505M4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1679219},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.1","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.8.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jsdoc":"^4.0.3","standard":"^17.1.0","js-build-tools":"^4.0.4","test-filesystem":"^1.3.6","collect-your-stuff":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.11_1723170945525_0.9817638527667716","host":"s3://npm-registry-packages"}},"2.2.12":{"name":"si-funciona","version":"2.2.12","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.12","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"280ac401bb35126972f0f460b48e56821ba8ef4a","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.12.tgz","fileCount":239,"integrity":"sha512-fixXlsfSBPTz1jNayy9uJtZgPjyeXGTEbysHP7zdcheTWq+PpiMlG/EbG1Mybb32nj8u9rwcWIJd6O/ELbvyuw==","signatures":[{"sig":"MEUCIQD69RzQxyNyuq3JjDkf2Sh2/tyBySt1xi41pifPIUrWHAIgFMAEhKNbWh7mVM3vr44j2UWSHvEwvZBi6rcNYY/Vytw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1682960},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^10.9.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","jsdoc":"^4.0.4","standard":"^17.1.2","js-build-tools":"^4.0.7","test-filesystem":"^1.3.7","collect-your-stuff":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.12_1729889533034_0.16855465891712318","host":"s3://npm-registry-packages"}},"2.2.13":{"name":"si-funciona","version":"2.2.13","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.13","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"b62794e68a89b07cb3d357b35343c443106ed88c","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.13.tgz","fileCount":239,"integrity":"sha512-7+HY2NNJeuFeWsfpJLI/YwSr4idO/sRvtpR+p6puDBf2Aq3bsKvcpiPqOi0Vc/+YNsFF7LPbeJVpBX0tVQMn4Q==","signatures":[{"sig":"MEUCIQCFdt7VdIn8178RCVuG5rg40trgJBfWMRNla2PczeIg9gIgehI4/TTYy6cKC3IY1UaqHg0vXgSwQIm04eraleHmU24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1782039},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^11.6.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.4","standard":"^17.1.2","js-build-tools":"^4.0.9","test-filesystem":"^1.3.9","collect-your-stuff":"^1.2.4"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.13_1757204834027_0.2401463621842308","host":"s3://npm-registry-packages-npm-production"}},"2.2.14":{"name":"si-funciona","version":"2.2.14","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.14","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"5c0e6a6d6b41f0de5fb41cd04a4b32c224215ae4","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.14.tgz","fileCount":239,"integrity":"sha512-mZ1zbgFoRq+/wCaDYxUu0PtboEHEn2PMcJ06SRnPSXq1l3LSO/SSEvEXwkJ4hacwqXgMRdERtcZUYDHcAigkNw==","signatures":[{"sig":"MEUCIAoISh2+kSjMjNod7TjNF9vdHH3bU24GYHebtGwxMNCTAiEAvetZ06sqQ6nWajhkP35yjuuVyiJ+5w6ETpYuswVN7ZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1844260},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^11.18.0"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.10","test-filesystem":"^1.3.12","collect-your-stuff":"^1.2.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.14_1782762986135_0.018666756650570715","host":"s3://npm-registry-packages-npm-production"}},"2.2.15":{"name":"si-funciona","version":"2.2.15","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.15","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"61bf0812d50f368961a2b821863dc0462f37bdd3","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.15.tgz","fileCount":239,"integrity":"sha512-q0zc7VzZ7rm6r90ZFLbEIPyQXUMrtINs3z1z7Jsjc7hgZQ8S2e1GtfFP10VCgQvZCPlkmorxfcSNi/uu8kOn3w==","signatures":[{"sig":"MEUCIHgWmtq17nJY9Us5IYHaUa1gXQfGWizcrJmzjkqyogYCAiEA41gL4K61HXlLK6JW+bzbhCQXaRwnCWQEwrHYiG0dZOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1844259},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.11","test-filesystem":"^1.3.12","collect-your-stuff":"^1.2.5"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.15_1783740644118_0.5120870578029031","host":"s3://npm-registry-packages-npm-production"}},"2.2.16":{"name":"si-funciona","version":"2.2.16","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.2.16","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"c66143f3bf2bee86fa39471023a4c4999cb6491e","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.2.16.tgz","fileCount":239,"integrity":"sha512-syuGe83QT10rYXGQvNYDkZ9JzpHpfKtZiBeulAm/gc1/CBi61+lrfhSSn1/ZdKRbbUKG2z/JbdQZnLaf5yeulA==","signatures":[{"sig":"MEQCIHU37mjc2aelX6die/vpmumTszJuTo1D/8CK5PJzHBqUAiBf88pLw+jmZy9IYk1oJ7IxgQym0JF/fPc5SPhaOhjxFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1844259},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.12","test-filesystem":"^1.3.14","collect-your-stuff":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.2.16_1784305660831_0.7191558347764708","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"si-funciona","version":"2.3.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.3.0","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"1f4c5fb746a545cbef6f93e8a5e3066e34154183","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.3.0.tgz","fileCount":251,"integrity":"sha512-YgcpMKfLFrbWqVLymLjAJvswrDILOJ++1aK65MkvbTPk0FrdqL+aTJU5RUwzQmQdYwPXj/nC+rICAfqZ/t/WBA==","signatures":[{"sig":"MEYCIQDHzVvxrLwExmFEUPF1eBbIw4Jsh8CVoQYQja8uPd2vyAIhAOoRLdFTL3TBEcWrsiZz9qVKWBXhtAD+57PqLJiuE1q4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1860531},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.12","test-filesystem":"^1.3.14","collect-your-stuff":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.3.0_1784604762178_0.45675917099278895","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"si-funciona","version":"2.3.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.3.1","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"507bfbe4158a2f187c4186397148bbf081a0f196","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.3.1.tgz","fileCount":251,"integrity":"sha512-XVNnmTuZ1xw2UJG0l6tpneAdmI4QJ/8Lat6T6PaWLV/a+h0Vd1rIbzhriA7jZXaG9DmnboIiWryh/p5GREtCLA==","signatures":[{"sig":"MEUCIQCVFf/hkkbcXoB4dE5zPxQ6crT8p4IqvOVT0ilgLsId+QIgMOPM+Ak7Q7B1IQ78Fsp1nUQZGXO2ExcrPCp6RwEd8I8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1860799},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.12","test-filesystem":"^1.3.14","collect-your-stuff":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.3.1_1784662060667_0.05801735301753652","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"si-funciona","version":"2.3.2","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.3.2","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"c49953c61c6c1a450b2ba343f23bf07f9f9f2cf0","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.3.2.tgz","fileCount":251,"integrity":"sha512-xjDzfRB1LB673gfr1UG9sBz00+oAxeruLx4SqkqcPD36udLn69DI8MEPIi6tcTIajNG+jtx+Wxhux6hclKykKQ==","signatures":[{"sig":"MEQCIDMjRBp0yhfR0r5C6A5uhKGeP72k1Ry2gRAdG9U2IbeiAiBg3f3khmKNz5yqOwIpPqJfgLHhyIFNZZ8Aq6e6mV7UYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1860949},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.0.12","test-filesystem":"^1.3.14","collect-your-stuff":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.3.2_1787025773307_0.24453593911197502","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"si-funciona","version":"2.3.3","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.3.3","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"1b87a501301479b017eea270f76ef7754b4df279","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.3.3.tgz","fileCount":251,"integrity":"sha512-LyYA7ZYjZM60Ab2lGGj1sIvZQkdF24CR3aGTpY6gaTlOhRWQJZTRjHHucvzzDHS6ND4U25B8S7uHftRfYCp/cA==","signatures":[{"sig":"MEYCIQC2oJEGMB0e2cDbrjtQZaaI8kqI/y7+ZJnfXsV9njX9DAIhANco6qSVoni671MTABubq21cyAun+xmbsUNYJpNq6hrz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIExM++8ZFZ9HBkh0z2HkongFzGo6yzB7A2LKNHsUn/gYAiEAofw+xuhITu7pubAQ1I0NdegqU+VRtAcTFDr5ZjPb4Ao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1841025},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.1.1","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.3.3_1789765233783_0.4495103841578001","host":"s3://npm-registry-packages-npm-production"}},"2.3.4":{"name":"si-funciona","version":"2.3.4","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.3.4","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"4a141cc12370b29e9f951fe33b20c0217fc0e8d4","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.3.4.tgz","fileCount":251,"integrity":"sha512-GAD/3o9iWA6P03wvtFZJ2RgLWtSkikWlaH2f1zkdw6hPj0BBQKSoipxlzEK0kCVYjkqcktXXe/YrlZtTmCJiNg==","signatures":[{"sig":"MEQCIFKtUzyPgHii7IiUA3uaDbJHRfsOK0u/co+Pv/e2p7zNAiBoeI2jMaM0slY5jIG13uomfoeMGESmBnkPLEa3GSTREQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHCwryTAeW4yDvFWG0wnirlJZlu1ZckVQkgKS1Rp/0/TAiBqgLVp/IF8iAPGGBD19JV05wLeDgcyMnEmdVIR6+4fIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1908230},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"10.8.2","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"20.6.0","dependencies":{"npm":"^12.0.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^4.1.1","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.3.4_1789766719972_0.7368073557056058","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"si-funciona","version":"2.4.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.4.0","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"ad7551d556080e4c056e480bab1e60c992ca7f14","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.4.0.tgz","fileCount":251,"integrity":"sha512-NVcDwwEq703jF/FkWjaO/hy31yaCAChSs1yzEODclKBK56Hzr0JtS1GQKd7AJOGGaDK4cLgIoLA2KSamoNgYRQ==","signatures":[{"sig":"MEUCIQDE+E74cTvTbfx1jqiUvu4ixnaYv7qRw8uybFns734WJAIgPWDz5hQv+5Zs9ead7UTNX47zLYvUlHsg/plUxveYVsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF+r3UYffTR3ofVDdZhiSQGz6e8xv994QYcaUhTtMCj8AiEApRkzWQbE+mcm8b40MYdHlXeTqpTico5rLMKI6gSn0Go=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1910521},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"00cf493e2bd1fda4ab6df87313f8073e14629f4e","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.0.0","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.4.0_1789999866605_0.9967346217208357","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"si-funciona","version":"2.4.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.4.1","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"2462a4f89989cb4bd09ca41111c00a6417e560af","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.4.1.tgz","fileCount":251,"integrity":"sha512-UuVnyZlzN6PzlRI69XC8a6CYRjAPJUBlf1iv0wkPAVdGUGYxq37KYG49XB2a/h9W1K5CfeZQ+i0nuRFSrbQ/Dg==","signatures":[{"sig":"MEUCIFtMCNDEMeQ935xDdy2A1FZesdQKmbN4pAMdoAKXLn3KAiEAsrQP6c9d4+F+Q0tsmIBUkcgq4gtR5aE5SI+Eyc23fdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICzzxFKAhej3WSYvVAFl2w7NI70v+SntIKeb7xFNu4laAiBlYzu1eCQNvc3CIsb06aHGOooIzcvIBvcEdkd93MvU9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1910613},"main":"dist/main.min.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"c9228a63f3019b2d20c87dd0292f81598fcd2570","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.0.0","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.4.1_1790006419783_0.5804379432847482","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"si-funciona","version":"2.5.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.5.0","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"7c230e73b436114d39c2af3714516df7b8a9b1f6","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.5.0.tgz","fileCount":251,"integrity":"sha512-FX822yh9enLkPcvLQ1iI1jChS6Q/5YGpEzq3grZ4d4zugo2WeVLpY9X3pWLgrLMnG57PeNILMLh6sw9PKmpy8g==","signatures":[{"sig":"MEQCIA1porBICOrW+4KnAxc1h6iW4LS44Sjvs4ii3OE8nvmPAiB81c4UaQpljKLe/UQfxwoYUepP6cTyndPigUGIEQKRnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDwikEoUep4i9pTVIhXmYU/HeBjuX/an6ro4UfL9ieubAIhAPgqM7XlBjmQjXEl9ry2wLDoVGjGmUDrEtDZu6qetuiR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1938545},"main":"dist/main.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"961d7a4e09480f07a3ea6715afa2750f2b1bcb25","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.0.0","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.5.0_1790007942955_0.7542792235442484","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"si-funciona","version":"2.6.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.6.0","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"7f52cb9754de05f259d7d58b6cf7a56286f6aa10","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.6.0.tgz","fileCount":254,"integrity":"sha512-wV5o94HQViHbmltEhprTthRoq5rWsJ+jcc7YQSlXhhGDwzPHYYw87xpj4+3svnU8CRtuj2wNwicbfQyMOX+9gg==","signatures":[{"sig":"MEQCIAW/66QtgQOIz09hfxAAVcomwXKpBDA205ohf+nWBecVAiABfzQyPwGoXjLfOU3Lko9eTdvKYMa8N+5t2QZvstzRnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDiDHGXB2h2uOBEHjtSZIeqBPUFdRTTg2qTRYx0KN/AYAiB5yQhi5fvagkZqocDAwka1eXuIBQqWQARJvfktwr0tQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1947881},"main":"dist/main.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"e59702a5119eb2437c5ba2c0d4c0dd83f211c69d","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.0.0","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.6.0_1790035436092_0.4835679870536427","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"si-funciona","version":"2.6.1","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.6.1","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"4225d63f363f25a83ba716bac324ed73f900ec80","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.6.1.tgz","fileCount":254,"integrity":"sha512-bDif+K5EXrV5ynKnNTo9+kL4psXmApIMoZmVfB2Gl9gtO/h+7zgnqdipuQVK2HPRGRpLcwHtaTcOepNeiGMT/A==","signatures":[{"sig":"MEUCIBgRnSffWbOkqSxsERCRbNCX9iDGf2fCPp7X45IopjAwAiEAnlU08UPuQ6PXKc13DRw63pTRQfO72YNVmihzRbEniz0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC9ftyyncU1gmKTXgJeE2wCYqSrCS4BQDnOPjJ8Ty2SzwIgMAkOJbqu2mcTge/wSeqF/1WbPEyzcYgd07Tsez0p58M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849855},"main":"dist/main.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","gitHead":"5d7a4bc2b195fa40be88a94e751824ffa02d07e4","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.0.0","test-filesystem":"^1.5.0","collect-your-stuff":"^1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.6.1_1790037968829_0.9200532102820469","host":"s3://npm-registry-packages-npm-production"}},"2.6.2":{"name":"si-funciona","version":"2.6.2","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.6.2","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"c52d1c502b489033effd814ac8a0be41d461f1c3","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.6.2.tgz","fileCount":254,"integrity":"sha512-yq3JKiL3xDT9OhDMnOUj6h9x+4qQyO47G6/W1I4k6dzeI3fDEPcEL/41sHXcTv5nqjmOTD/S1FyqfPnu99ScIw==","signatures":[{"sig":"MEUCIQDrh2Pbva4//RUpII2yZQvSXgAX+EsUjt70/YTQbo7t3wIgH7wvcrKB9yJWq6k53GP8MqrSsHxWVbwK2SJXWoKmm+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCHNY2rmZe5A9g7pQ1cfaaOyh/oYXtT59BVEyl8aHPnkgIgAv5OJ2nQ4QW/TJT1V5lxENVflMkSnc4C4cNAVrbNJLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":848266},"main":"dist/main.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.2.0","test-filesystem":"^1.5.1","collect-your-stuff":"^2.1.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.6.2_1790208340445_0.1134798158357313","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"si-funciona","version":"2.7.0","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","_id":"si-funciona@2.7.0","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"homepage":"https://github.com/jheagle/si-funciona#readme","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"ce2a02b54cda4adec922be2dc850ee3272c4ea58","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.7.0.tgz","fileCount":254,"integrity":"sha512-nnyXbDOayRCgBxVjP63D1YqbWg0YuFdV4Vu1G6lWBhu6AcTaAZdtY9I6SknupZ0FRcFNst/oHl7vHt/2DjamGg==","signatures":[{"sig":"MEQCIDyCt/A5JayPR+NqdMn37ep0fOr+j2rJRfMZaqhmarDtAiAyVB+vaG4RG4yT05rijXH187HSqrJhcMqXcYJ9N0Mu6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDG5kuBrOWlQBpGoQHapkNDqx7j3GEgScPXaAANxU/yvQIhANzW9Au7IoqMxTGwD6Yw7RzCL0VtXIAU4SmpKwEjLkJN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849696},"main":"dist/main.js","types":"dist/main.d.ts","funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.2.0","test-filesystem":"^1.5.1","collect-your-stuff":"^2.1.2"},"_npmOperationalInternal":{"tmp":"tmp/si-funciona_2.7.0_1790217385194_0.7398890112455618","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"_id":"si-funciona@2.7.1","bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"dist":{"shasum":"42aba300f2684a46c0a480765cabc5129460948f","tarball":"https://registry.npmjs.org/si-funciona/-/si-funciona-2.7.1.tgz","fileCount":254,"integrity":"sha512-lGuqqaEOhJ9E9Ot7kNjHylZlbVByWIbfri/yWDrqAMJVwMCy0WrCx80lE4oD4wWU2afMXx+Wqk3ZIhbN9xLNfA==","signatures":[{"sig":"MEUCIBDYR4RD42mYBW4mbqln+fkkGW3r0g3sOWtrhcjmrJOvAiEAtUef9Z8LQ+bojiZfkbSH0fRLanThclVMh2wSXxf5ee0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGpZmG+CycetQUk4qcfEvkufx/MZ4UbDgEzmjwEKhgs/AiAzU0wkYQee1+k5pA+Dd7QfFxA/cOWWgJEJgewCet13mA=="}],"unpackedSize":852017},"main":"dist/main.js","name":"si-funciona","types":"dist/main.d.ts","author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"funding":"https://www.paypal.com/donate/?business=LRYR6SZRWKXVY&no_recurring=0&item_name=Let%27s+build+together+today+to+simplify+our+jobs+tomorrow.&currency_code=CAD","license":"GPL-3.0-or-later","scripts":{"dev":"gulp","test":"gulp testFull","build":"gulp build","watch":"gulp watchFull","readme":"gulp readme","htmldocs":"jsdoc -R MAIN.md -c ./.jsdoc.conf.js -d docs","test:quick":"gulp testQuick","watch:test":"gulp watchTest","resolutions":"npx npm-force-resolutions"},"version":"2.7.1","_npmUser":{"name":"jheagle","email":"joshuaheagle@gmail.com"},"homepage":"https://github.com/jheagle/si-funciona#readme","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"standard":{"env":["jest"]},"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"_npmVersion":"11.19.0","description":"Funciones de utilidad para uso general. [General usage utility functions.]","directories":{"doc":"docs"},"maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"resolutions":{},"_nodeVersion":"24.21.0","dependencies":{"core-js":"^3.50.0","regenerator-runtime":"^0.14.1"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","jsdoc":"^4.0.5","standard":"^17.1.2","js-build-tools":"^5.2.0","test-filesystem":"^1.5.1","collect-your-stuff":"^2.1.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/si-funciona_2.7.1_1790262601913_0.5602528520362962"}}},"time":{"created":"2023-03-09T15:40:14.422Z","modified":"2026-09-24T15:10:02.200Z","1.0.0":"2023-03-09T15:40:14.614Z","1.0.1":"2023-03-14T14:42:44.728Z","1.1.0":"2023-03-23T13:33:10.584Z","1.1.1":"2023-06-03T22:32:07.871Z","1.2.0":"2023-09-06T20:38:59.294Z","2.0.0":"2023-09-12T03:35:54.113Z","2.0.1":"2023-09-12T16:24:20.346Z","2.0.2":"2023-09-12T16:29:15.948Z","2.0.3":"2023-10-03T02:45:24.220Z","2.0.4":"2023-10-14T23:50:19.717Z","2.1.0":"2023-11-15T20:11:08.122Z","2.2.0":"2023-12-11T21:35:52.328Z","2.2.2":"2024-01-02T18:13:08.789Z","2.2.3":"2024-01-04T20:50:44.537Z","2.2.4":"2024-02-12T18:17:04.808Z","2.2.5":"2024-02-13T18:55:58.994Z","2.2.6":"2024-03-01T23:37:42.096Z","2.2.7":"2024-03-18T18:17:05.394Z","2.2.8":"2024-04-04T17:18:45.515Z","2.2.9":"2024-06-03T20:38:26.567Z","2.2.10":"2024-06-12T03:17:01.639Z","2.2.11":"2024-08-09T02:35:45.702Z","2.2.12":"2024-10-25T20:52:13.361Z","2.2.13":"2025-09-07T00:27:14.279Z","2.2.14":"2026-06-29T19:56:26.358Z","2.2.15":"2026-07-11T03:30:44.321Z","2.2.16":"2026-07-17T16:27:41.030Z","2.3.0":"2026-07-21T03:32:42.333Z","2.3.1":"2026-07-21T19:27:40.805Z","2.3.2":"2026-08-18T04:02:53.522Z","2.3.3":"2026-09-18T21:00:33.872Z","2.3.4":"2026-09-18T21:25:20.068Z","2.4.0":"2026-09-21T14:11:06.729Z","2.4.1":"2026-09-21T16:00:20.024Z","2.5.0":"2026-09-21T16:25:43.040Z","2.6.0":"2026-09-22T00:03:56.220Z","2.6.1":"2026-09-22T00:46:08.968Z","2.6.2":"2026-09-24T00:05:40.560Z","2.7.0":"2026-09-24T02:36:25.301Z","2.7.1":"2026-09-24T15:10:02.004Z"},"bugs":{"url":"https://github.com/jheagle/si-funciona/issues"},"author":{"url":"https://joshuaheagle.com","name":"Joshua Heagle","email":"joshuaheagle@gmail.com"},"license":"GPL-3.0-or-later","homepage":"https://github.com/jheagle/si-funciona#readme","keywords":["functional","helpers","utility","funcional","ayudas","utilidades","general","typescript"],"repository":{"url":"git+https://github.com/jheagle/si-funciona.git","type":"git"},"description":"Funciones de utilidad para uso general. [General usage utility functions.]","maintainers":[{"name":"jheagle","email":"joshuaheagle@gmail.com"}],"readme":"# [Sí, funciona](https://www.npmjs.com/package/si-funciona)\r\n\r\n## Funciones de utilidad para uso general. [General usage utility functions.]\r\n\r\n## Modules\r\n\r\n<dl>\r\n<dt><a href=\"#module_siFunciona\">siFunciona</a></dt>\r\n<dd><p>All the siFunciona system functions for stringing together functions and simplifying logic.</p>\r\n</dd>\r\n<dt><a href=\"#module_stringHelpers\">stringHelpers</a></dt>\r\n<dd><p>Manage how strings are manipulated with these utilities.</p>\r\n</dd>\r\n<dt><a href=\"#module_objectHelpers\">objectHelpers</a></dt>\r\n<dd><p>Simplify working with object by providing array-like parsing. Also, provides cloning and merging along with accessors that always have a return value for optimal nesting.</p>\r\n</dd>\r\n<dt><a href=\"#module_numberHelpers\">numberHelpers</a></dt>\r\n<dd><p>Some number comparators and random number generators.</p>\r\n</dd>\r\n<dt><a href=\"#module_functionHelpers\">functionHelpers</a></dt>\r\n<dd><p>Manage how functions are called with these utilities.</p>\r\n</dd>\r\n<dt><a href=\"#module_objectDescriptors\">objectDescriptors</a></dt>\r\n<dd><p>A &quot;descriptor&quot; is a flat, serializable snapshot of an object or array&#39;s shape: for each property, its type(s),\r\nwhether it&#39;s nullable, and - if the property&#39;s own value is itself an object/array - a reference to that nested\r\nvalue&#39;s own descriptor elsewhere in the same list, rather than nesting descriptors inside descriptors. This flat,\r\nreference-based structure is what lets these utilities walk deeply nested and even circular object graphs (an\r\nobject that contains itself, directly or indirectly) without infinite recursion, since a value that&#39;s already\r\nbeen described is simply pointed to again instead of re-described.</p>\r\n<p>Start with <a href=\"#module_objectDescriptors.describeObjectMap\">describeObjectMap</a>, which takes any real object or array and produces\r\nthis flat list of descriptors for you - the other functions here (comparing, merging, cloning descriptors) are\r\nbuilding blocks used internally, or useful once you already have descriptors to work with directly.</p>\r\n<p>The concrete use this module has earned its keep on: describing two objects and comparing the results tells\r\nyou whether they&#39;re the same shape and values even when they&#39;re different references entirely (see\r\n<a href=\"#module_objectDescriptors.sameDescriptor\">sameDescriptor</a>/<a href=\"#module_objectDescriptors.compareDescriptor\">compareDescriptor</a>) - useful\r\nanywhere you need to check that two objects genuinely match without caring whether they&#39;re literally the same\r\ninstance. A descriptor also doubles as a flat, structured summary of an object&#39;s shape, which can be handy for\r\ndiscussion or assessment purposes (e.g. describing what an object looks like without dumping the whole thing).</p>\r\n</dd>\r\n<dt><a href=\"#module_arrayHelpers\">arrayHelpers</a></dt>\r\n<dd><p>Utilities for building, merging, deduplicating and comparing arrays, plus a basic FIFO queue (BasicQueue) for\r\nuse with functionHelpers&#39; queueManager/queueTimeout.</p>\r\n</dd>\r\n</dl>\r\n\r\n<a name=\"module_siFunciona\"></a>\r\n\r\n## siFunciona\r\nAll the siFunciona system functions for stringing together functions and simplifying logic.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n<a name=\"module_stringHelpers\"></a>\r\n\r\n## stringHelpers\r\nManage how strings are manipulated with these utilities.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [stringHelpers](#module_stringHelpers)\r\n    * [.words(str)](#module_stringHelpers.words) ⇒ <code>Array.&lt;string&gt;</code>\r\n    * [.ucFirst(str)](#module_stringHelpers.ucFirst) ⇒ <code>string</code>\r\n    * [.titleCase(str)](#module_stringHelpers.titleCase) ⇒ <code>string</code>\r\n    * [.strBeforeLast(str, search)](#module_stringHelpers.strBeforeLast) ⇒ <code>string</code>\r\n    * [.strBefore(str, search)](#module_stringHelpers.strBefore) ⇒ <code>string</code>\r\n    * [.strAfterLast(str, search)](#module_stringHelpers.strAfterLast) ⇒ <code>string</code>\r\n    * [.strAfter(str, search)](#module_stringHelpers.strAfter) ⇒ <code>string</code>\r\n    * [.snakeCase(str)](#module_stringHelpers.snakeCase) ⇒ <code>string</code>\r\n    * [.regexEscape(str)](#module_stringHelpers.regexEscape) ⇒ <code>string</code>\r\n    * [.makeRelativePath(fromFile, toFile)](#module_stringHelpers.makeRelativePath) ⇒ <code>string</code>\r\n    * [.makeFilepath(root, [append])](#module_stringHelpers.makeFilepath) ⇒ <code>string</code>\r\n    * [.kabobCase(str)](#module_stringHelpers.kabobCase) ⇒ <code>string</code>\r\n    * [.camelCase(str)](#module_stringHelpers.camelCase) ⇒ <code>string</code>\r\n\r\n<a name=\"module_stringHelpers.words\"></a>\r\n\r\n### stringHelpers.words(str) ⇒ <code>Array.&lt;string&gt;</code>\r\nSplit a string into sets of numbers or letters - the shared tokenizer behind camelCase/kabobCase/snakeCase/\r\ntitleCase, so each can rebuild the string in its own casing style.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to split. |\r\n\r\n<a name=\"module_stringHelpers.ucFirst\"></a>\r\n\r\n### stringHelpers.ucFirst(str) ⇒ <code>string</code>\r\nGiven a string, make the first character uppercase and the rest lowercase.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to convert. |\r\n\r\n<a name=\"module_stringHelpers.titleCase\"></a>\r\n\r\n### stringHelpers.titleCase(str) ⇒ <code>string</code>\r\nGiven a string in kebab-case, snake_case, camelCase or 'Sentence case', convert to 'Title Case'.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to convert. |\r\n\r\n<a name=\"module_stringHelpers.strBeforeLast\"></a>\r\n\r\n### stringHelpers.strBeforeLast(str, search) ⇒ <code>string</code>\r\nRetrieve the string part before the last search match.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n**Returns**: <code>string</code> - The portion of `str` before the last occurrence of `search`, or `''` if not found.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to search within. |\r\n| search | <code>string</code> | The substring to search for. |\r\n\r\n<a name=\"module_stringHelpers.strBefore\"></a>\r\n\r\n### stringHelpers.strBefore(str, search) ⇒ <code>string</code>\r\nRetrieve the string part before the search match.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n**Returns**: <code>string</code> - The portion of `str` before the first occurrence of `search`, or `''` if not found.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to search within. |\r\n| search | <code>string</code> | The substring to search for. |\r\n\r\n<a name=\"module_stringHelpers.strAfterLast\"></a>\r\n\r\n### stringHelpers.strAfterLast(str, search) ⇒ <code>string</code>\r\nRetrieve the string part after the last search match.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n**Returns**: <code>string</code> - The portion of `str` after the last occurrence of `search`, or `''` if not found.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to search within. |\r\n| search | <code>string</code> | The substring to search for. |\r\n\r\n<a name=\"module_stringHelpers.strAfter\"></a>\r\n\r\n### stringHelpers.strAfter(str, search) ⇒ <code>string</code>\r\nRetrieve the string part after the search match.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n**Returns**: <code>string</code> - The portion of `str` after the first occurrence of `search`, or `''` if not found.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to search within. |\r\n| search | <code>string</code> | The substring to search for. |\r\n\r\n<a name=\"module_stringHelpers.snakeCase\"></a>\r\n\r\n### stringHelpers.snakeCase(str) ⇒ <code>string</code>\r\nGiven a string in kebab-case, camelCase or 'Sentence case', convert to snake_case.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to convert. |\r\n\r\n<a name=\"module_stringHelpers.regexEscape\"></a>\r\n\r\n### stringHelpers.regexEscape(str) ⇒ <code>string</code>\r\nTake a string and escape the regex characters.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to escape, so it can be used literally inside a `RegExp`. |\r\n\r\n<a name=\"module_stringHelpers.makeRelativePath\"></a>\r\n\r\n### stringHelpers.makeRelativePath(fromFile, toFile) ⇒ <code>string</code>\r\nCompare two file paths and simplify them to a relative path.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n**Returns**: <code>string</code> - `toFile` expressed relative to `fromFile`.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| fromFile | <code>string</code> | The path of the file the resulting relative path will be used from. |\r\n| toFile | <code>string</code> | The path of the file being referenced. |\r\n\r\n<a name=\"module_stringHelpers.makeFilepath\"></a>\r\n\r\n### stringHelpers.makeFilepath(root, [append]) ⇒ <code>string</code>\r\nFormat the given path so that it does not have trailing slashes and also correctly appends a path.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| root | <code>string</code> |  | The base path to start from. |\r\n| [append] | <code>string</code> | <code>&quot;&#x27;&#x27;&quot;</code> | A path to append to `root` - may itself use `./` or `../` segments. |\r\n\r\n<a name=\"module_stringHelpers.kabobCase\"></a>\r\n\r\n### stringHelpers.kabobCase(str) ⇒ <code>string</code>\r\nGiven a string in snake_case, camelCase or 'Sentence case', convert to kabob-case.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to convert. |\r\n\r\n<a name=\"module_stringHelpers.camelCase\"></a>\r\n\r\n### stringHelpers.camelCase(str) ⇒ <code>string</code>\r\nGiven a string in kebab-case, snake_case or 'Sentence case', convert to camelCase.\r\n\r\n**Kind**: static method of [<code>stringHelpers</code>](#module_stringHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| str | <code>string</code> | The string to convert. |\r\n\r\n<a name=\"module_objectHelpers\"></a>\r\n\r\n## objectHelpers\r\nSimplify working with object by providing array-like parsing. Also, provides cloning and merging along with accessors that always have a return value for optimal nesting.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [objectHelpers](#module_objectHelpers)\r\n    * _static_\r\n        * [.mergeObjectsMutable](#module_objectHelpers.mergeObjectsMutable) ⇒ <code>\\*</code>\r\n        * [.mergeObjects](#module_objectHelpers.mergeObjects) ⇒ <code>\\*</code>\r\n        * [.setValue(key, value, item)](#module_objectHelpers.setValue) ⇒ <code>Object</code> \\| <code>Array</code>\r\n        * [.setAndReturnValue(item, key, value)](#module_objectHelpers.setAndReturnValue) ⇒ <code>\\*</code>\r\n        * [.reduceObject(obj, fn, [initialValue])](#module_objectHelpers.reduceObject) ⇒ <code>\\*</code>\r\n        * [.objectValues(object, [includeInherited])](#module_objectHelpers.objectValues) ⇒ <code>Array</code>\r\n        * [.objectKeys(object, [includeInherited])](#module_objectHelpers.objectKeys) ⇒ <code>Array.&lt;(string\\|number)&gt;</code>\r\n        * [.mergeObjectsBase([options])](#module_objectHelpers.mergeObjectsBase) ⇒ <code>module:objectHelpers~mergeObjectsCallback</code> \\| <code>mergeObjectsCallback</code>\r\n        * [.mapObject(obj, fn, [thisArg])](#module_objectHelpers.mapObject) ⇒ <code>Object</code> \\| <code>Array</code>\r\n        * [.isObject(object)](#module_objectHelpers.isObject) ⇒ <code>boolean</code>\r\n        * [.isInstanceObject(object)](#module_objectHelpers.isInstanceObject) ⇒ <code>boolean</code>\r\n        * [.isEqual(first, second)](#module_objectHelpers.isEqual) ⇒ <code>boolean</code>\r\n        * [.isCloneable(value)](#module_objectHelpers.isCloneable) ⇒ <code>boolean</code>\r\n        * [.filterObject(obj, fn, [thisArg])](#module_objectHelpers.filterObject) ⇒ <code>Object</code> \\| <code>Array</code>\r\n        * [.emptyObject(item)](#module_objectHelpers.emptyObject) ⇒ <code>boolean</code>\r\n        * [.dotUnset(arrayObject, dotNotation)](#module_objectHelpers.dotUnset) ⇒ <code>Object</code>\r\n        * [.dotSet(arrayObject, dotNotation, value)](#module_objectHelpers.dotSet) ⇒ <code>Object</code>\r\n        * [.dotNotate(arrayObject, [retainObjects])](#module_objectHelpers.dotNotate) ⇒ <code>DotNotatedObject</code>\r\n        * [.dotGet(arrayObject, dotNotation, [defaultValue])](#module_objectHelpers.dotGet) ⇒ <code>\\*</code>\r\n        * [.cloneObject(object, [options])](#module_objectHelpers.cloneObject) ⇒ <code>Object</code>\r\n    * _inner_\r\n        * [~handleRetainObjects([retainObjects])](#module_objectHelpers..handleRetainObjects) ⇒ <code>function</code>\r\n        * [~performDotNotate(arrayObject, didRetain, [prepend], [results])](#module_objectHelpers..performDotNotate) ⇒ <code>DotNotatedObject</code>\r\n\r\n<a name=\"module_objectHelpers.mergeObjectsMutable\"></a>\r\n\r\n### objectHelpers.mergeObjectsMutable ⇒ <code>\\*</code>\r\nUses mergeObjectsBase deep merge objects and arrays, merge by reference.\r\n\r\n**Kind**: static constant of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**See**: [module:objectHelpers~mergeObjectsCallback](module:objectHelpers~mergeObjectsCallback)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| ...objects | <code>Object</code> | Provide a list of objects which will be merged starting from the end up into the first |\r\n\r\n<a name=\"module_objectHelpers.mergeObjects\"></a>\r\n\r\n### objectHelpers.mergeObjects ⇒ <code>\\*</code>\r\nUses mergeObjectsBase deep merge objects and arrays, merge by value.\r\n\r\n**Kind**: static constant of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**See**: [module:objectHelpers~mergeObjectsCallback](module:objectHelpers~mergeObjectsCallback)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| ...objects | <code>Object</code> | Provide a list of objects which will be merged starting from the end up into the first |\r\n\r\n<a name=\"module_objectHelpers.setValue\"></a>\r\n\r\n### objectHelpers.setValue(key, value, item) ⇒ <code>Object</code> \\| <code>Array</code>\r\nSet a value on an item, then return the item.\r\nNOTE: Argument order designed for usage with pipe\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| key | <code>string</code> \\| <code>number</code> | The key on the item which will have its value set |\r\n| value | <code>\\*</code> | Any value to be applied to the key |\r\n| item | <code>Object</code> \\| <code>Array</code> | An object or array to be updated |\r\n\r\n<a name=\"module_objectHelpers.setAndReturnValue\"></a>\r\n\r\n### objectHelpers.setAndReturnValue(item, key, value) ⇒ <code>\\*</code>\r\nSet a value on an item, then return the value\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| item | <code>Object</code> \\| <code>Array</code> | An object or array to be updated |\r\n| key | <code>string</code> \\| <code>number</code> | The key on the item which will have its value set |\r\n| value | <code>\\*</code> | Any value to be applied to the key |\r\n\r\n<a name=\"module_objectHelpers.reduceObject\"></a>\r\n\r\n### objectHelpers.reduceObject(obj, fn, [initialValue]) ⇒ <code>\\*</code>\r\nThis function is intended to replicate behaviour of the Array.reduce() function but for Objects.\r\nIf an array is passed in instead then it will perform standard reduce(). It is recommended to\r\nalways use the standard reduce() function when it is known that the object is actually an array.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| obj | <code>Object</code> \\| <code>Array</code> | The Object (or Array) to be filtered |\r\n| fn | <code>module:objectHelpers~reduceCallback</code> \\| <code>function</code> \\| <code>reduceCallback</code> | The function to be processed for each filtered property |\r\n| [initialValue] | <code>Object</code> \\| <code>Array</code> | Optional. Value to use as the first argument to the first call of the callback. If no initial value is supplied, the first element in the array will be used. Calling reduce on an empty array without an initial value is an error. |\r\n\r\n<a name=\"module_objectHelpers.objectValues\"></a>\r\n\r\n### objectHelpers.objectValues(object, [includeInherited]) ⇒ <code>Array</code>\r\nGet an array of values from any object or array. Will return empty array when invalid or there are no values.\r\nOptional flag will include the inherited values from prototype chain when set.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Default |\r\n| --- | --- | --- |\r\n| object | <code>Object</code> \\| <code>Array</code> |  | \r\n| [includeInherited] | <code>boolean</code> | <code>false</code> | \r\n\r\n<a name=\"module_objectHelpers.objectKeys\"></a>\r\n\r\n### objectHelpers.objectKeys(object, [includeInherited]) ⇒ <code>Array.&lt;(string\\|number)&gt;</code>\r\nGet an array of keys from any object or array. Will return empty array when invalid or there are no keys.\r\nOptional flag will include the inherited keys from prototype chain when set.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Default |\r\n| --- | --- | --- |\r\n| object | <code>Object</code> \\| <code>Array</code> |  | \r\n| [includeInherited] | <code>boolean</code> | <code>false</code> | \r\n\r\n<a name=\"module_objectHelpers.mergeObjectsBase\"></a>\r\n\r\n### objectHelpers.mergeObjectsBase([options]) ⇒ <code>module:objectHelpers~mergeObjectsCallback</code> \\| <code>mergeObjectsCallback</code>\r\nPerform a deep merge of objects. This will return a function that will combine all objects and sub-objects.\r\nObjects having the same attributes will overwrite from last object to first.\r\nEvery call of the returned function keeps its own record of the objects it has already visited (so circular\r\nreferences are followed only once, and an object which is referenced in several places is merged once), and nothing\r\nis remembered between calls: the results of separate calls never share state or go stale.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| [options] | <code>Object</code> | <code>{}</code> |  |\r\n| [options.mapLimit] | <code>number</code> | <code>100</code> | Deprecated and ignored: the record of visited objects is now scoped to a single call, so it does not need trimming. |\r\n| [options.depthLimit] | <code>number</code> | <code>-1</code> | Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited. |\r\n| [options.relevancyRange] | <code>number</code> | <code>1000</code> | Deprecated and ignored: see mapLimit. |\r\n| [options.map] | <code>Iterable</code> \\| <code>array</code> | <code>[]</code> | A predetermined list of references (source and the object it should resolve to) which every call starts from. It is only read, never added to. |\r\n| [options.useClone] | <code>boolean</code> | <code>false</code> |  |\r\n\r\n<a name=\"module_objectHelpers.mapObject\"></a>\r\n\r\n### objectHelpers.mapObject(obj, fn, [thisArg]) ⇒ <code>Object</code> \\| <code>Array</code>\r\nThis function is intended to replicate behaviour of the Array.map() function but for Objects.\r\nIf an array is passed in instead then it will perform standard map(). It is recommended to\r\nalways use the standard map() function when it is known that the object is actually an array.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| obj | <code>Object</code> \\| <code>Array</code> | The Object (or Array) to be mapped |\r\n| fn | <code>module:objectHelpers~mapCallback</code> \\| <code>function</code> | The function to be processed for each mapped property |\r\n| [thisArg] | <code>Object</code> \\| <code>Array</code> | Optional. Value to use as this when executing callback. |\r\n\r\n<a name=\"module_objectHelpers.isObject\"></a>\r\n\r\n### objectHelpers.isObject(object) ⇒ <code>boolean</code>\r\nCheck if the provided thing is an object / array.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| object | <code>\\*</code> | \r\n\r\n<a name=\"module_objectHelpers.isInstanceObject\"></a>\r\n\r\n### objectHelpers.isInstanceObject(object) ⇒ <code>boolean</code>\r\nCheck if the current object has inherited properties.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| object | <code>Object</code> \\| <code>Array</code> | \r\n\r\n<a name=\"module_objectHelpers.isEqual\"></a>\r\n\r\n### objectHelpers.isEqual(first, second) ⇒ <code>boolean</code>\r\nCheck whether two values are equal by value, however they are stored: two separately made arrays or objects with the\r\nsame contents are equal, while two references only need to be the same when the value is a function.\r\n- Primitives are equal when they are the same value (and NaN equals NaN)\r\n- Arrays are equal when they have the same elements in the same order\r\n- Objects are equal when they have the same prototype (the same kind of object) and the same own properties with\r\nequal values, the order of the properties does not matter\r\n- Dates, regular expressions, Maps and Sets are compared by what they hold\r\n- Circular references are handled: a pair of objects which is already being compared is taken to be equal\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>boolean</code> - True when the values are equal.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| first | <code>\\*</code> | The first value. |\r\n| second | <code>\\*</code> | The second value. |\r\n\r\n<a name=\"module_objectHelpers.isCloneable\"></a>\r\n\r\n### objectHelpers.isCloneable(value) ⇒ <code>boolean</code>\r\nDetermine if the value is a reference instance\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| value | <code>Array</code> \\| <code>Object</code> \\| <code>\\*</code> | \r\n\r\n<a name=\"module_objectHelpers.filterObject\"></a>\r\n\r\n### objectHelpers.filterObject(obj, fn, [thisArg]) ⇒ <code>Object</code> \\| <code>Array</code>\r\nThis function is intended to replicate behaviour of the Array.filter() function but for Objects.\r\nIf an array is passed in instead then it will perform standard filter(). It is recommended to\r\nalways use the standard filter() function when it is known that the object is actually an array.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| obj | <code>Object</code> \\| <code>Array</code> | The Object (or Array) to be filtered |\r\n| fn | <code>module:objectHelpers~filterCallback</code> \\| <code>function</code> | The function to be processed for each filtered property |\r\n| [thisArg] | <code>Object</code> \\| <code>Array</code> | Optional. Value to use as this when executing callback. |\r\n\r\n<a name=\"module_objectHelpers.emptyObject\"></a>\r\n\r\n### objectHelpers.emptyObject(item) ⇒ <code>boolean</code>\r\nHelper function for testing if the item is an Object or Array that does not have any properties\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| item | <code>Object</code> \\| <code>Array</code> | Object or Array to test |\r\n\r\n<a name=\"module_objectHelpers.dotUnset\"></a>\r\n\r\n### objectHelpers.dotUnset(arrayObject, dotNotation) ⇒ <code>Object</code>\r\nUnset a nested property value an object.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>Object</code> - The modified object  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| arrayObject | <code>Object</code> | The array or object to set the property on |\r\n| dotNotation | <code>string</code> | The path for the property |\r\n\r\n<a name=\"module_objectHelpers.dotSet\"></a>\r\n\r\n### objectHelpers.dotSet(arrayObject, dotNotation, value) ⇒ <code>Object</code>\r\nSet a nested property value an object.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>Object</code> - The modified object  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| arrayObject | <code>Object</code> |  | The array or object to set the property on |\r\n| dotNotation | <code>string</code> |  | The path for the property |\r\n| value | <code>\\*</code> | <code></code> | The default value to return if the property is not found |\r\n\r\n<a name=\"module_objectHelpers.dotNotate\"></a>\r\n\r\n### objectHelpers.dotNotate(arrayObject, [retainObjects]) ⇒ <code>DotNotatedObject</code>\r\nConvert an array or object to a single dimensional associative array with dot notation.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>DotNotatedObject</code> - The dot-notated object  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| arrayObject | <code>Object</code> |  | The array or object to dot-notate |\r\n| [retainObjects] | <code>Array.&lt;DotNotationString&gt;</code> | <code>[]</code> | An array of keys to retain as objects |\r\n\r\n<a name=\"module_objectHelpers.dotGet\"></a>\r\n\r\n### objectHelpers.dotGet(arrayObject, dotNotation, [defaultValue]) ⇒ <code>\\*</code>\r\nGet a nested property value from an object.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>\\*</code> - The value of the property  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| arrayObject | <code>Object</code> |  | The array or object to get the property from |\r\n| dotNotation | <code>string</code> |  | The path to the property |\r\n| [defaultValue] | <code>string</code> \\| <code>null</code> | <code>null</code> | The default value to return if the property is not found |\r\n\r\n<a name=\"module_objectHelpers.cloneObject\"></a>\r\n\r\n### objectHelpers.cloneObject(object, [options]) ⇒ <code>Object</code>\r\nClone objects for manipulation without data corruption, returns a copy of the provided object.\r\n\r\n**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| object | <code>Object</code> |  | The original object that is being cloned |\r\n| [options] | <code>Object</code> | <code>{}</code> |  |\r\n| [options.mapLimit] | <code>number</code> | <code>100</code> | Deprecated and ignored (circular references are handled without trimming). |\r\n| [options.depthLimit] | <code>number</code> | <code>-1</code> | Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited. |\r\n| [options.relevancyRange] | <code>number</code> | <code>1000</code> | Deprecated and ignored: see mapLimit. |\r\n\r\n<a name=\"module_objectHelpers..handleRetainObjects\"></a>\r\n\r\n### objectHelpers~handleRetainObjects([retainObjects]) ⇒ <code>function</code>\r\nConvert an array of keys into a regex, return a function to test if incoming keys match.\r\n\r\n**Kind**: inner method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>function</code> - The dot-notated array  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| [retainObjects] | <code>Array.&lt;DotNotationString&gt;</code> | <code>[]</code> | An array of keys to retain as objects |\r\n\r\n<a name=\"module_objectHelpers..performDotNotate\"></a>\r\n\r\n### objectHelpers~performDotNotate(arrayObject, didRetain, [prepend], [results]) ⇒ <code>DotNotatedObject</code>\r\nThe underlying logic function for converting arrays to dot-notation.\r\n\r\n**Kind**: inner method of [<code>objectHelpers</code>](#module_objectHelpers)  \r\n**Returns**: <code>DotNotatedObject</code> - The dot-notated object  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| arrayObject | <code>Object</code> |  | The array or object to dot-notate |\r\n| didRetain | <code>function</code> |  | The test function to see if a key should be retained |\r\n| [prepend] | <code>DotNotationString</code> | <code>&#x27;&#x27;</code> | The path for the property being processed |\r\n| [results] | <code>DotNotatedObject</code> | <code>{}</code> | The final array to return |\r\n\r\n<a name=\"module_numberHelpers\"></a>\r\n\r\n## numberHelpers\r\nSome number comparators and random number generators.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [numberHelpers](#module_numberHelpers)\r\n    * [.simplestRatio(...numbers)](#module_numberHelpers.simplestRatio) ⇒ <code>Array.&lt;number&gt;</code>\r\n    * [.randomNumber(range, [offset], [interval])](#module_numberHelpers.randomNumber) ⇒ <code>number</code>\r\n    * [.randomInteger(range, [offset], [interval])](#module_numberHelpers.randomInteger) ⇒ <code>number</code>\r\n    * [.lowestCommonDenominator(...numbers)](#module_numberHelpers.lowestCommonDenominator) ⇒ <code>number</code>\r\n    * [.leastCommonMultiple(num1, num2)](#module_numberHelpers.leastCommonMultiple) ⇒ <code>number</code>\r\n    * [.greatestCommonDivisor(num1, num2)](#module_numberHelpers.greatestCommonDivisor) ⇒ <code>number</code>\r\n    * [.compare(val1, val2)](#module_numberHelpers.compare) ⇒ <code>number</code>\r\n    * [.absoluteMin(num1, num2)](#module_numberHelpers.absoluteMin) ⇒ <code>number</code>\r\n    * [.absoluteMax(num1, num2)](#module_numberHelpers.absoluteMax) ⇒ <code>number</code>\r\n\r\n<a name=\"module_numberHelpers.simplestRatio\"></a>\r\n\r\n### numberHelpers.simplestRatio(...numbers) ⇒ <code>Array.&lt;number&gt;</code>\r\nReduce several numbers to their simplest form / ratio\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| ...numbers | <code>number</code> | Array of numbers to simplify |\r\n\r\n<a name=\"module_numberHelpers.randomNumber\"></a>\r\n\r\n### numberHelpers.randomNumber(range, [offset], [interval]) ⇒ <code>number</code>\r\nCreate a single random number from offset up to (but never including) offset + range. With optional offset,\r\nthe distance between the result numbers can be adjusted with interval. Matches randomInteger, which gives the\r\nwhole numbers of the same span.\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| range | <code>number</code> |  | Choose the breadth of the random number (0 up to, but not including, 100 would be 100 for range) |\r\n| [offset] | <code>number</code> | <code>0</code> | Choose the starting number (1 up to, but not including, 10 would be 1 for offset, 9 for range) |\r\n| [interval] | <code>number</code> | <code>1</code> | Choose the multiplier applied to the result (~5, ~10, ~15 would be 5 for interval, 1 for offset, 2 for range) |\r\n\r\n<a name=\"module_numberHelpers.randomInteger\"></a>\r\n\r\n### numberHelpers.randomInteger(range, [offset], [interval]) ⇒ <code>number</code>\r\nCreate a single random integer from a set of `range` possible values, starting at the optional offset.\r\nWith no offset the result is 0 to range - 1 (so range is the number of possible values, the same as an array length\r\nwhen choosing an index). The distance between the result numbers can be adjusted with interval.\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| range | <code>number</code> |  | The number of possible values (0-99 would be 100 for range) |\r\n| [offset] | <code>number</code> | <code>0</code> | Choose the starting number (1-10 would be 1 for offset, 10 for range) |\r\n| [interval] | <code>number</code> | <code>1</code> | Choose the distance between numbers (5, 10, 15 would be 5 for interval, 1 for offset, 3 for range) |\r\n\r\n**Example**  \r\n```js\r\nrandomInteger(1) // always 0 (one possible value)\r\nrandomInteger(2) // 0 or 1\r\nrandomInteger(3, 1, 5) // 5, 10 or 15\r\nitems[randomInteger(items.length)] // a random valid index\r\n```\r\n<a name=\"module_numberHelpers.lowestCommonDenominator\"></a>\r\n\r\n### numberHelpers.lowestCommonDenominator(...numbers) ⇒ <code>number</code>\r\nFind the smallest number that all the given numbers divide into evenly, by reducing them pairwise with\r\nleastCommonMultiple.\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| ...numbers | <code>number</code> | Two or more numbers to find the lowest common denominator of. |\r\n\r\n<a name=\"module_numberHelpers.leastCommonMultiple\"></a>\r\n\r\n### numberHelpers.leastCommonMultiple(num1, num2) ⇒ <code>number</code>\r\nHelper for calculating the multiplier that would make each number relative to each other.\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| num1 | <code>number</code> | A number to compare |\r\n| num2 | <code>number</code> | Another number to be compared against |\r\n\r\n<a name=\"module_numberHelpers.greatestCommonDivisor\"></a>\r\n\r\n### numberHelpers.greatestCommonDivisor(num1, num2) ⇒ <code>number</code>\r\nReturn the highest number that can be divided into both numbers.\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| num1 | <code>number</code> | First number to assess |\r\n| num2 | <code>number</code> | Second number to compare for common divisor |\r\n\r\n<a name=\"module_numberHelpers.compare\"></a>\r\n\r\n### numberHelpers.compare(val1, val2) ⇒ <code>number</code>\r\nCompare two numbers and return:\r\n-1 to indicate val1 is less than val2\r\n0 to indicate both values are the equal\r\n1 to indicate val1 is greater than val2\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| val1 | <code>number</code> | The first number to compare |\r\n| val2 | <code>number</code> | The second number to compare |\r\n\r\n<a name=\"module_numberHelpers.absoluteMin\"></a>\r\n\r\n### numberHelpers.absoluteMin(num1, num2) ⇒ <code>number</code>\r\nHelper for returning the absolute min value\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| num1 | <code>number</code> | A number to compare |\r\n| num2 | <code>number</code> | Another number to be compared against |\r\n\r\n<a name=\"module_numberHelpers.absoluteMax\"></a>\r\n\r\n### numberHelpers.absoluteMax(num1, num2) ⇒ <code>number</code>\r\nHelper for returning the absolute max value\r\n\r\n**Kind**: static method of [<code>numberHelpers</code>](#module_numberHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| num1 | <code>number</code> | A number to compare |\r\n| num2 | <code>number</code> | Another number to be compared against |\r\n\r\n<a name=\"module_functionHelpers\"></a>\r\n\r\n## functionHelpers\r\nManage how functions are called with these utilities.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [functionHelpers](#module_functionHelpers)\r\n    * [.trace(label, [useClone])](#module_functionHelpers.trace) ⇒ <code>function</code>\r\n    * [.relevancyFilter(map, [options])](#module_functionHelpers.relevancyFilter) ⇒ <code>relevanceMap</code>\r\n    * [.queueTimeout([queueManagerHandle])](#module_functionHelpers.queueTimeout) ⇒ <code>module:functionHelpers~queueTimeoutHandle</code>\r\n    * [.queueManager([queue])](#module_functionHelpers.queueManager) ⇒ <code>module:functionHelpers~queueManagerHandle</code>\r\n        * [~makeQueuedRunnable(resolve, reject, fn, ...args)](#module_functionHelpers.queueManager..makeQueuedRunnable) ⇒ <code>queuedRunnable</code>\r\n        * [~postRun(result)](#module_functionHelpers.queueManager..postRun) ⇒ <code>\\*</code>\r\n        * [~postFailedRun(error)](#module_functionHelpers.queueManager..postFailedRun)\r\n        * [~runNextItem()](#module_functionHelpers.queueManager..runNextItem) ⇒ <code>IteratorYieldResult</code> \\| <code>null</code>\r\n        * [~pushAnother(fn, ...args)](#module_functionHelpers.queueManager..pushAnother) ⇒\r\n    * [.preloadParams(fn, params, [unassignedParam])](#module_functionHelpers.preloadParams) ⇒ <code>module:functionHelpers~callWithMissing</code>\r\n    * [.pipe(...fns)](#module_functionHelpers.pipe) ⇒ <code>\\*</code>\r\n    * [.onBodyLoad(callback, [reset])](#module_functionHelpers.onBodyLoad) ⇒ <code>Array.&lt;function()&gt;</code>\r\n    * [.makeBasicQueue([initialQueue])](#module_functionHelpers.makeBasicQueue) ⇒ <code>IsQueue</code>\r\n    * [.delay(time)](#module_functionHelpers.delay) ⇒ <code>module:functionHelpers~delayHandler</code>\r\n    * [.curry(fn)](#module_functionHelpers.curry) ⇒ <code>function</code> \\| <code>\\*</code>\r\n    * [.callWithParams(fn, params, [minimum])](#module_functionHelpers.callWithParams) ⇒ <code>\\*</code>\r\n\r\n<a name=\"module_functionHelpers.trace\"></a>\r\n\r\n### functionHelpers.trace(label, [useClone]) ⇒ <code>function</code>\r\nOutput the value with label to the console and return the value to not interrupt the code - useful for\r\ninspecting a value mid-pipe/mid-chain without altering the result.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| label | <code>string</code> |  | Pass an identifying label of the value being output. |\r\n| [useClone] | <code>boolean</code> | <code>true</code> | Determines if the logged data should be a clone of the original to preserve its state at the time of logging (rather than a live reference that may show later mutations). |\r\n\r\n<a name=\"module_functionHelpers.relevancyFilter\"></a>\r\n\r\n### functionHelpers.relevancyFilter(map, [options]) ⇒ <code>relevanceMap</code>\r\nRemove elements out of relevance range and update the max relevance.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| map | <code>relevanceMap</code> |  |  |\r\n| [options] | <code>Object</code> | <code>{}</code> |  |\r\n| [options.mapLimit] | <code>number</code> | <code>1000</code> | Only filter once the map exceeds this many entries. |\r\n| [options.relevancyRange] | <code>number</code> | <code>100</code> | How many of the most-recent relevance values to keep. |\r\n\r\n<a name=\"module_functionHelpers.queueTimeout\"></a>\r\n\r\n### functionHelpers.queueTimeout([queueManagerHandle]) ⇒ <code>module:functionHelpers~queueTimeoutHandle</code>\r\nManage functions to run sequentially with delays.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default |\r\n| --- | --- | --- |\r\n| [queueManagerHandle] | <code>module:functionHelpers~queueManagerHandle</code> | <code></code> | \r\n\r\n<a name=\"module_functionHelpers.queueManager\"></a>\r\n\r\n### functionHelpers.queueManager([queue]) ⇒ <code>module:functionHelpers~queueManagerHandle</code>\r\nManage functions to run sequentially.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| [queue] | <code>IsQueue</code> \\| <code>Array</code> | <code></code> | The queue to manage. Pass a plain array to have it converted into a [BasicQueue](#module_arrayHelpers.BasicQueue) automatically, or a custom queue implementing `IsQueue`; omit it (or pass `null`) to have one created for you. |\r\n\r\n\r\n* [.queueManager([queue])](#module_functionHelpers.queueManager) ⇒ <code>module:functionHelpers~queueManagerHandle</code>\r\n    * [~makeQueuedRunnable(resolve, reject, fn, ...args)](#module_functionHelpers.queueManager..makeQueuedRunnable) ⇒ <code>queuedRunnable</code>\r\n    * [~postRun(result)](#module_functionHelpers.queueManager..postRun) ⇒ <code>\\*</code>\r\n    * [~postFailedRun(error)](#module_functionHelpers.queueManager..postFailedRun)\r\n    * [~runNextItem()](#module_functionHelpers.queueManager..runNextItem) ⇒ <code>IteratorYieldResult</code> \\| <code>null</code>\r\n    * [~pushAnother(fn, ...args)](#module_functionHelpers.queueManager..pushAnother) ⇒\r\n\r\n<a name=\"module_functionHelpers.queueManager..makeQueuedRunnable\"></a>\r\n\r\n#### queueManager~makeQueuedRunnable(resolve, reject, fn, ...args) ⇒ <code>queuedRunnable</code>\r\nConvert a function to a queueable object.\r\n\r\n**Kind**: inner method of [<code>queueManager</code>](#module_functionHelpers.queueManager)  \r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| resolve | <code>Promise.resolve</code> | \r\n| reject | <code>Promise.reject</code> | \r\n| fn | <code>function</code> | \r\n| ...args | <code>\\*</code> | \r\n\r\n<a name=\"module_functionHelpers.queueManager..postRun\"></a>\r\n\r\n#### queueManager~postRun(result) ⇒ <code>\\*</code>\r\nAfter an item is run, THEN run this function to reset isRunning\r\n\r\n**Kind**: inner method of [<code>queueManager</code>](#module_functionHelpers.queueManager)  \r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| result | <code>\\*</code> | \r\n\r\n<a name=\"module_functionHelpers.queueManager..postFailedRun\"></a>\r\n\r\n#### queueManager~postFailedRun(error)\r\nWhen a queued function throws (or returns a promise which rejects), carry on with the rest of the queue and pass the\r\nerror on to whoever queued it - otherwise the queue would stay marked as running and never start another function.\r\n\r\n**Kind**: inner method of [<code>queueManager</code>](#module_functionHelpers.queueManager)  \r\n**Throws**:\r\n\r\n- <code>\\*</code> The same error\r\n\r\n\r\n| Param | Type |\r\n| --- | --- |\r\n| error | <code>\\*</code> | \r\n\r\n<a name=\"module_functionHelpers.queueManager..runNextItem\"></a>\r\n\r\n#### queueManager~runNextItem() ⇒ <code>IteratorYieldResult</code> \\| <code>null</code>\r\nWhen ready, runs the next queued runnable generator.\r\n\r\n**Kind**: inner method of [<code>queueManager</code>](#module_functionHelpers.queueManager)  \r\n<a name=\"module_functionHelpers.queueManager..pushAnother\"></a>\r\n\r\n#### queueManager~pushAnother(fn, ...args) ⇒\r\nAdd a function into the queue to be run when ready.\r\n\r\n**Kind**: inner method of [<code>queueManager</code>](#module_functionHelpers.queueManager)  \r\n**Returns**: Promise  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| fn | <code>function</code> | The function to run when ready |\r\n| ...args | <code>\\*</code> | Optional arguments to apply when the function is ready to be run |\r\n\r\n<a name=\"module_functionHelpers.preloadParams\"></a>\r\n\r\n### functionHelpers.preloadParams(fn, params, [unassignedParam]) ⇒ <code>module:functionHelpers~callWithMissing</code>\r\nProvide an array of parameters to be used with a function, allow the function to be called later\r\nwith the missing parameter.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| fn | <code>function</code> |  | The function to be called |\r\n| params | <code>Array</code> |  | The parameters to preload |\r\n| [unassignedParam] | <code>number</code> | <code>0</code> | Position of missing parameter (zero indexed) |\r\n\r\n<a name=\"module_functionHelpers.pipe\"></a>\r\n\r\n### functionHelpers.pipe(...fns) ⇒ <code>\\*</code>\r\nTake one or more function with a single parameter and return value.\r\nPass a parameter and the value will be transformed by each function then returned.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| ...fns | <code>function</code> | Takes a series of functions having the same parameter |\r\n\r\n<a name=\"module_functionHelpers.onBodyLoad\"></a>\r\n\r\n### functionHelpers.onBodyLoad(callback, [reset]) ⇒ <code>Array.&lt;function()&gt;</code>\r\nPrepare functions to be called once the body is available.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default |\r\n| --- | --- | --- |\r\n| callback | <code>function</code> |  | \r\n| [reset] | <code>boolean</code> | <code>false</code> | \r\n\r\n<a name=\"module_functionHelpers.makeBasicQueue\"></a>\r\n\r\n### functionHelpers.makeBasicQueue([initialQueue]) ⇒ <code>IsQueue</code>\r\nCreate an instance of a basic queue.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| [initialQueue] | <code>Array</code> | <code>[]</code> | Items to pre-populate the queue with, in order. |\r\n\r\n<a name=\"module_functionHelpers.delay\"></a>\r\n\r\n### functionHelpers.delay(time) ⇒ <code>module:functionHelpers~delayHandler</code>\r\nProvide a timeout which returns a promise.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| time | <code>number</code> | <code>0</code> | Delay in milliseconds |\r\n\r\n<a name=\"module_functionHelpers.curry\"></a>\r\n\r\n### functionHelpers.curry(fn) ⇒ <code>function</code> \\| <code>\\*</code>\r\nReturn a curried version of the passed function.\r\nThe returned function expects the same number of arguments minus the ones provided.\r\nfn is the name of the function being curried.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| fn | <code>function</code> | Receives a function to be curried |\r\n\r\n<a name=\"module_functionHelpers.callWithParams\"></a>\r\n\r\n### functionHelpers.callWithParams(fn, params, [minimum]) ⇒ <code>\\*</code>\r\nGiven a function, call with the correct number of parameters from an array of possible parameters.\r\n\r\n**Kind**: static method of [<code>functionHelpers</code>](#module_functionHelpers)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| fn | <code>function</code> |  | The function to be called |\r\n| params | <code>Array</code> |  | Array of possible function parameters |\r\n| [minimum] | <code>number</code> | <code>2</code> | Minimum number of parameters to use in the function |\r\n\r\n<a name=\"module_objectDescriptors\"></a>\r\n\r\n## objectDescriptors\r\nA \"descriptor\" is a flat, serializable snapshot of an object or array's shape: for each property, its type(s),\r\nwhether it's nullable, and - if the property's own value is itself an object/array - a reference to that nested\r\nvalue's own descriptor elsewhere in the same list, rather than nesting descriptors inside descriptors. This flat,\r\nreference-based structure is what lets these utilities walk deeply nested and even circular object graphs (an\r\nobject that contains itself, directly or indirectly) without infinite recursion, since a value that's already\r\nbeen described is simply pointed to again instead of re-described.\r\n\r\nStart with [describeObjectMap](#module_objectDescriptors.describeObjectMap), which takes any real object or array and produces\r\nthis flat list of descriptors for you - the other functions here (comparing, merging, cloning descriptors) are\r\nbuilding blocks used internally, or useful once you already have descriptors to work with directly.\r\n\r\nThe concrete use this module has earned its keep on: describing two objects and comparing the results tells\r\nyou whether they're the same shape and values even when they're different references entirely (see\r\n[sameDescriptor](#module_objectDescriptors.sameDescriptor)/[compareDescriptor](#module_objectDescriptors.compareDescriptor)) - useful\r\nanywhere you need to check that two objects genuinely match without caring whether they're literally the same\r\ninstance. A descriptor also doubles as a flat, structured summary of an object's shape, which can be handy for\r\ndiscussion or assessment purposes (e.g. describing what an object looks like without dumping the whole thing).\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [objectDescriptors](#module_objectDescriptors)\r\n    * [.mappedDescriptorMap](#module_objectDescriptors.mappedDescriptorMap) : <code>module:objectDescriptors~descriptorMap</code>\r\n    * [.descriptorMapSample](#module_objectDescriptors.descriptorMapSample) : <code>module:objectDescriptors~descriptorMap</code>\r\n    * [.descriptorDetailSample](#module_objectDescriptors.descriptorDetailSample) : <code>module:objectDescriptors~descriptorDetail</code>\r\n    * [.descriptorSample](#module_objectDescriptors.descriptorSample) : <code>module:objectDescriptors~descriptor</code>\r\n    * [.sameDescriptor(descriptor1, descriptor2)](#module_objectDescriptors.sameDescriptor) ⇒ <code>boolean</code>\r\n    * [.nextReference(descriptor, currentReference)](#module_objectDescriptors.nextReference) ⇒ <code>number</code> \\| <code>undefined</code>\r\n    * [.describeObjectMap(object, [options])](#module_objectDescriptors.describeObjectMap) ⇒ <code>module:objectDescriptors~descriptorMap</code>\r\n    * [.describeObjectDetail(value, [key], [index])](#module_objectDescriptors.describeObjectDetail) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\n    * [.describeObject(object)](#module_objectDescriptors.describeObject) ⇒ <code>module:objectDescriptors~descriptor</code>\r\n    * [.compareDescriptor(descriptor1, descriptor2)](#module_objectDescriptors.compareDescriptor) ⇒ <code>boolean</code>\r\n    * [.cloneDescriptorDetail(originalDetail)](#module_objectDescriptors.cloneDescriptorDetail) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\n    * [.cloneDescriptor(originalMap)](#module_objectDescriptors.cloneDescriptor) ⇒ <code>module:objectDescriptors~descriptor</code>\r\n    * [.checkDescriptorComplete(descriptor)](#module_objectDescriptors.checkDescriptorComplete) ⇒ <code>module:objectDescriptors~descriptor</code>\r\n    * [.checkClearValues(descriptor, [keepValues])](#module_objectDescriptors.checkClearValues) ⇒ <code>module:objectDescriptors~descriptor</code>\r\n    * [.assignDescriptorDetail(originalDetail, ...details)](#module_objectDescriptors.assignDescriptorDetail) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\n    * [.assignDescriptor(originalMap, ...descriptors)](#module_objectDescriptors.assignDescriptor) ⇒ <code>module:objectDescriptors~descriptor</code>\r\n\r\n<a name=\"module_objectDescriptors.mappedDescriptorMap\"></a>\r\n\r\n### objectDescriptors.mappedDescriptorMap : <code>module:objectDescriptors~descriptorMap</code>\r\nA worked example descriptorMap, produced by describing a `descriptor` value itself (i.e. describing the shape of\r\na descriptor) - useful as a realistic fixture showing what a multi-entry descriptorMap with actual references\r\nlooks like, since `descriptorSample`/`descriptorMapSample` alone only demonstrate a trivial single-entry case.\r\n\r\n**Kind**: static constant of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n<a name=\"module_objectDescriptors.descriptorMapSample\"></a>\r\n\r\n### objectDescriptors.descriptorMapSample : <code>module:objectDescriptors~descriptorMap</code>\r\n**Kind**: static constant of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n<a name=\"module_objectDescriptors.descriptorDetailSample\"></a>\r\n\r\n### objectDescriptors.descriptorDetailSample : <code>module:objectDescriptors~descriptorDetail</code>\r\n**Kind**: static constant of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n<a name=\"module_objectDescriptors.descriptorSample\"></a>\r\n\r\n### objectDescriptors.descriptorSample : <code>module:objectDescriptors~descriptor</code>\r\n**Kind**: static constant of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n<a name=\"module_objectDescriptors.sameDescriptor\"></a>\r\n\r\n### objectDescriptors.sameDescriptor(descriptor1, descriptor2) ⇒ <code>boolean</code>\r\nCheck if two descriptors describe the exact same underlying values (not just compatible types, like\r\n[compareDescriptor](#module_objectDescriptors.compareDescriptor) does) - used to detect genuine circular references, where a\r\nnested value's descriptor turns out to be identical to one of its own ancestors.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>boolean</code> - True if every detail's values match at the same position.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| descriptor1 | <code>module:objectDescriptors~descriptor</code> | The first descriptor to compare. |\r\n| descriptor2 | <code>module:objectDescriptors~descriptor</code> | The second descriptor to compare. |\r\n\r\n<a name=\"module_objectDescriptors.nextReference\"></a>\r\n\r\n### objectDescriptors.nextReference(descriptor, currentReference) ⇒ <code>number</code> \\| <code>undefined</code>\r\nFind the index (within `descriptor.details`) of the next referenced property - after `currentReference` - whose\r\nown nested object/array still needs its descriptor built. Used to walk through a descriptor's references one at\r\na time while building out a descriptorMap.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>number</code> \\| <code>undefined</code> - The next detail index to process, or `undefined` if none remain.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| descriptor | <code>module:objectDescriptors~descriptor</code> | The descriptor whose references to search. |\r\n| currentReference | <code>number</code> | The `details` index already processed - search continues after this one. |\r\n\r\n<a name=\"module_objectDescriptors.describeObjectMap\"></a>\r\n\r\n### objectDescriptors.describeObjectMap(object, [options]) ⇒ <code>module:objectDescriptors~descriptorMap</code>\r\nTrace out the entire object including nested objects, producing a flat descriptorMap - see the\r\n[objectDescriptors](#module_objectDescriptors) module description for what a descriptor represents and why it's flat. This is\r\nthe main entry point into this module: start here to describe a real object/array before comparing, merging, or\r\ninspecting its structure with the other functions in this module.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| object | <code>Object</code> \\| <code>Array</code> |  | The real object or array to describe. |\r\n| [options] | <code>Object</code> | <code>{}</code> |  |\r\n| [options.mapLimit] | <code>number</code> | <code>1000000000</code> | Stop describing further nested references once the map reaches this many descriptors - a safety limit for extremely large or deeply-referenced structures. |\r\n| [options.depthLimit] | <code>number</code> | <code>-1</code> | How many levels of nested objects/arrays to describe; `-1` means no limit, `0` describes only the top level, etc. |\r\n| [options.keepValues] | <code>boolean</code> | <code>false</code> | By default, each detail's actual values are cleared once its descriptor is complete (to save memory) - set true to keep them. |\r\n\r\n**Example**  \r\n```js\r\ndescribeObjectMap({ name: 'example', tags: ['a', 'b'] })\r\n// [\r\n//   { index: 0, details: [...], length: 2, keys: ['name', 'tags'], references: [1], isArray: false, complete: true },\r\n//   { index: 1, details: [...], length: 2, keys: [0], references: [], isArray: true, complete: true }\r\n// ]\r\n// descriptorMap[0] describes the top-level object; its 'tags' property is a reference (references: [1]) to\r\n// descriptorMap[1], which separately describes that nested array. descriptorMap[1]'s own `length` (2) reflects\r\n// the array's actual length, but `keys` has only one entry (0) since both elements share the same type\r\n// ('string') and are described together by a single, representative descriptorDetail.\r\n```\r\n<a name=\"module_objectDescriptors.describeObjectDetail\"></a>\r\n\r\n### objectDescriptors.describeObjectDetail(value, [key], [index]) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\nTrace a single property's value and produce the descriptorDetail describing it (type, nullability, whether it\r\nreferences a nested object/array, etc.) - the per-property building block used by\r\n[describeObject](#module_objectDescriptors.describeObject).\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| value | <code>\\*</code> |  | The property's value to describe. |\r\n| [key] | <code>string</code> \\| <code>number</code> | <code>0</code> | The property name (or array index) this value belongs to. |\r\n| [index] | <code>number</code> | <code>0</code> | This detail's intended position within its parent descriptor's `details` array. |\r\n\r\n<a name=\"module_objectDescriptors.describeObject\"></a>\r\n\r\n### objectDescriptors.describeObject(object) ⇒ <code>module:objectDescriptors~descriptor</code>\r\nTrace a single object or array (not its nested objects/arrays - see\r\n[describeObjectMap](#module_objectDescriptors.describeObjectMap) for that) and return the descriptor which defines its own\r\nstructure and attributes.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| object | <code>Object</code> \\| <code>Array</code> | The object or array to describe. |\r\n\r\n<a name=\"module_objectDescriptors.compareDescriptor\"></a>\r\n\r\n### objectDescriptors.compareDescriptor(descriptor1, descriptor2) ⇒ <code>boolean</code>\r\nCheck if two descriptors are the same or similar, in that the smaller one's keys are all present in the larger\r\none and their types line up - used to detect when a newly-described value actually matches a descriptor already\r\nin the map, so it can be pointed at instead of creating a duplicate.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>boolean</code> - True if the descriptors describe a compatible shape.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| descriptor1 | <code>module:objectDescriptors~descriptor</code> | The first descriptor to compare. |\r\n| descriptor2 | <code>module:objectDescriptors~descriptor</code> | The second descriptor to compare. |\r\n\r\n<a name=\"module_objectDescriptors.cloneDescriptorDetail\"></a>\r\n\r\n### objectDescriptors.cloneDescriptorDetail(originalDetail) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\nGet a new copy of an existing descriptor detail so that the original will not be mutated.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptorDetail</code> - A new, independent copy.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| originalDetail | <code>module:objectDescriptors~descriptorDetail</code> | The detail to copy. |\r\n\r\n<a name=\"module_objectDescriptors.cloneDescriptor\"></a>\r\n\r\n### objectDescriptors.cloneDescriptor(originalMap) ⇒ <code>module:objectDescriptors~descriptor</code>\r\nMake a copy of an object descriptor so that the original will not be mutated.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptor</code> - A new, independent copy.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| originalMap | <code>module:objectDescriptors~descriptor</code> | The descriptor to copy. |\r\n\r\n<a name=\"module_objectDescriptors.checkDescriptorComplete\"></a>\r\n\r\n### objectDescriptors.checkDescriptorComplete(descriptor) ⇒ <code>module:objectDescriptors~descriptor</code>\r\nCheck if every property this descriptor references (i.e. every nested object/array it points to) has actually\r\nhad its own descriptor built yet, and set the descriptor's `complete` flag to true if so.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptor</code> - The same descriptor, with `complete` updated.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| descriptor | <code>module:objectDescriptors~descriptor</code> | The descriptor to check. |\r\n\r\n<a name=\"module_objectDescriptors.checkClearValues\"></a>\r\n\r\n### objectDescriptors.checkClearValues(descriptor, [keepValues]) ⇒ <code>module:objectDescriptors~descriptor</code>\r\nOnce a descriptor is complete (all its references have been resolved), its details' actual `value` arrays are no\r\nlonger needed to build the descriptor further - clear them to save memory, unless `keepValues` says otherwise.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptor</code> - The same descriptor, with `details[].value` cleared if applicable.  \r\n\r\n| Param | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| descriptor | <code>module:objectDescriptors~descriptor</code> |  | The descriptor to check. |\r\n| [keepValues] | <code>boolean</code> | <code>false</code> | Set true to keep the values even once the descriptor is complete. |\r\n\r\n<a name=\"module_objectDescriptors.assignDescriptorDetail\"></a>\r\n\r\n### objectDescriptors.assignDescriptorDetail(originalDetail, ...details) ⇒ <code>module:objectDescriptors~descriptorDetail</code>\r\nAssign properties from other details onto an existing detail, widening it (e.g. combining `type`/`value` arrays,\r\nOR-ing boolean flags like `nullable`/`optional`) rather than overwriting it - the per-property counterpart to\r\n[assignDescriptor](#module_objectDescriptors.assignDescriptor).\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptorDetail</code> - A new detail representing the merge of all of the above.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| originalDetail | <code>module:objectDescriptors~descriptorDetail</code> | The base detail to merge onto (not mutated - a clone is merged and returned). |\r\n| ...details | <code>module:objectDescriptors~descriptorDetail</code> | One or more further details to merge in. |\r\n\r\n<a name=\"module_objectDescriptors.assignDescriptor\"></a>\r\n\r\n### objectDescriptors.assignDescriptor(originalMap, ...descriptors) ⇒ <code>module:objectDescriptors~descriptor</code>\r\nApply one or more descriptors to an existing descriptor so that they represent a merged version of the descriptors.\r\nUsed to widen a descriptor as more differently-shaped objects are described into it (e.g. array elements of\r\ndifferent types), rather than replacing it outright.\r\n\r\n**Kind**: static method of [<code>objectDescriptors</code>](#module_objectDescriptors)  \r\n**Returns**: <code>module:objectDescriptors~descriptor</code> - A new descriptor representing the merge of all of the above.  \r\n\r\n| Param | Type | Description |\r\n| --- | --- | --- |\r\n| originalMap | <code>module:objectDescriptors~descriptor</code> | The base descriptor to merge onto (not mutated - a clone is merged and returned). |\r\n| ...descriptors | <code>module:objectDescriptors~descriptor</code> | One or more further descriptors to merge in. |\r\n\r\n<a name=\"module_arrayHelpers\"></a>\r\n\r\n## arrayHelpers\r\nUtilities for building, merging, deduplicating and comparing arrays, plus a basic FIFO queue (BasicQueue) for\r\nuse with functionHelpers' queueManager/queueTimeout.\r\n\r\n**Version**: 1.0.0  \r\n**Author**: Joshua Heagle <joshuaheagle@gmail.com>  \r\n\r\n* [arrayHelpers](#module_arrayHelpers)\r\n    * [.BasicQueue](#module_arrayHelpers.BasicQueue)\r\n        * [new BasicQueue([innerList])](#new_module_arrayHelpers.BasicQueue_new)\r\n        * [.dequeue()](#module_arrayHelpers.BasicQueue+dequeue) ⇒ <code>queuedItem</code> \\| <code>\\*</code>\r\n        * [.empty()](#module_arrayHelpers.BasicQueue+empty) ⇒ <code>boolean</code>\r\n        * [.enqueue(data)](#module_arrayHelpers.BasicQueue+enqueue) ⇒ <code>BasicQueue</code>\r\n        * [.peek()](#module_arrayHelpers.BasicQueue+peek) ⇒ <code>queuedItem</code> \\| <code>\\*</code>\r\n        * [.size()](#module_arrayHelpers.BasicQueue+size) ⇒ <code>number</code>\r\n    * [.uniqueArray(array)](#module_arrayHelpers.uniqueArray) ⇒ <code>Array</code>\r\n    * [.mergeArrays(...arrays)](#module_arrayHelpers.mergeArrays) ⇒ <code>Array</code>\r\n    * [.compareArrays(...arrays)](#module_arrayHelpers.compareArrays) ⇒ <code>Array.&lt;module:arrayHelpers~compareArrayResult&gt;</code>\r\n    * [.buildArrayOfReferences(item, length)](#module_arrayHelpers.buildArrayOfReferences) ⇒ <code>Array.&lt;\\*&gt;</code>\r\n    * [.buildArray(item, length)](#module_arrayHelpers.buildArray) ⇒ <code>Array.&lt;\\*&gt;</code>\r\n    * [.addUniqueToArray(item, array)](#module_arrayHelpers.","readmeFilename":"README.md"}