{"_id":"hoast","_rev":"38-80e8b3c16ac2e6c4aa779134a19d2dbb","name":"hoast","dist-tags":{"latest":"1.1.6","next":"1.1.7-beta.1"},"versions":{"0.0.0":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.0","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://github.com/hoast/hoast#readme","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.0","dist":{"shasum":"5202d272933a020edd5ee3e867ba8188ea0a90eb","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.0.tgz","integrity":"sha512-ZT5+3wIqUmmb9Q9T2JzmwbPHeIH3Jr2lgZcBGgYNUTtgt9gG92zlS5u+T3T5wZ7y+pt9A1kmHUNWMGcfkyef0g==","fileCount":11,"unpackedSize":30427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZXjnCRA9TVsSAnZWagAAyfkP/3M8Hn9TtoMjBH7Dhhzg\nVNeXdl1CdWcDolr3thdli7D+bsJdEzgAdEJiwJp//0QAUs81859C+FDsMV6M\nCvOfwff+1/iXngLgtHo/uA1U43fa//bkPiFsziSBEI3GfjIJ0ho+lF9B9vc0\nTMePNLwe+TBg3buLLO/wjATIlELI4xHdw6F3WxjpDmuF1l/G01bDolfjX9i1\n3esiNF5Viyk0bvNSyi4Hkm+UYS+YDAOjXorJYq9Fz2qhi3tX3nAsO7VG17Xw\nwyMqMmRl5hwepydw/WySLRT/EbAE+YeBbiec/kAo1YRgKGI6EKc15K2xd69C\ncM9JqbGCoLZYaeYyX+RHHTS7Fr7XZRILSWE3Vkvxd2+NjIz3WUI1OAOc9cKX\nPhapWCzU8/a4860QOe4DsSgLal97v+i7YLu6aJzek00grd6sE8nt+KR510yv\nzaUOCat3EFuICpoIM91mIkWLDBLld1pn37IthAir6XQKIqZMppG3UYThuy//\n4MTaLXsxMbEGd4jbPvBvrmS+kb2VcmqLefOmoqqH0/RixOk0q3ZRIZCnfkA/\nU+oDUXHKZSrQyXFbgvePtP72eKjPOsoahovercya2VBra0gxW1xMZXmKF5zL\noUXG1l5rthWPsZ9ujLscsBbMoqgY5QwcK/r+vkFbKap6aQclsC2BhRihqU80\nwVFh\r\n=b+CV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAotcO6TpKycEKBw0P1GvPLtYTQ9yODOFlK/JfSy1pLdAiEAh8IGp5BwzSsP4CZ+/ZqiMWPVRovqf9HRNp8uluVGvKM="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.0_1533376742584_0.272070347004836"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.1":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.1","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://github.com/hoast/hoast#readme","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.1","dist":{"shasum":"f3e41c53a5583c2f9cfeef733dff70765e32cffb","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.1.tgz","integrity":"sha512-WEMVe+mKUtBLnwFQ52nvOxIEMSnqL3KyNHNsCSGCnu6ZzI8pdLTh5o9jd9tCcOP4Ahmr09aLSHARb/ILxyIHIw==","fileCount":11,"unpackedSize":30774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZYOTCRA9TVsSAnZWagAAuk8P/2XYQg98QI3IU9uKVlK0\n66MMwV/WpDuyE4UaXgAgSFSae7giBvT05xxo+gVaWHeci5tLlqk0hR1tbtDO\nXbZPB2HnvLfqNOeejk1Rtde8QQwlFTYao+UJerKb5WmPilrfR2m54MlJ2Qjc\nbhBthvL3Vp9Swamzx1ANeS2QDDfcTYdTSMELTg3fH7Ql7ygTDUpJetbbQ2xG\nZeM2fpCPOQQkIvja5hTKqCioiX3iUpdFta9n81++LQwErSlMN1cbaRnUpDWc\nEGJOT517ySkfWxDQGwi6q1c89gtTyXl737ssX188clAeRu10kdt1v7OmXoHN\nqdOLm1fQO3Lwtp0uHJ/5/owDeMlobEfv+5/6FUuncI8B6umhVaAbZVxZ9g2v\nybEaH6aiNFb6h036MeAAepGOM5MCq7fxM6AjcYEI7cG6Mlo3q/OnjT+k5g1L\naDQVzOlpaqwfN4mgUspzbY+nZNkTv7l4kY1+hY7Ke9yNtPNvgD6h36AJkOqa\nOO6wYwYnZOmuyrvQYW/JhlYPGVlnQYo1bC53PEguwggJE/riDkdsFC2EUOdb\ndQqeLY3P3DudxTJodnYOhTz3nPj22Qna7SqhclMmX7AAXXgh97DMWF7kN++q\nJWdQT3s6UyWKmsYImUpDHUk/CIoy99zHWP0lPMoBXXSEaP/sKqxN20zLq93e\nHzgt\r\n=oZUL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/9okXDoASdk+zYXthyIQV4lwQAtf+leGHQQKIJ/63cAiAAxu7jzRhmDPD2AovgxfECgPSn6ioQKVZMRIaztqtePQ=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.1_1533379474322_0.7399928864186094"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.2":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.2","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.2","dist":{"shasum":"6f8a741ca63602acc3148ffff1613efbe3a29be0","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.2.tgz","integrity":"sha512-PL6xkrco7rRCXVmngCzXxMTG5oCasra87sGQO4xYnC3rJ0+zvWiF3lTnRZjTaYwJF//+u7RkyhERJN7xL8vFvg==","fileCount":11,"unpackedSize":30533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaHEwCRA9TVsSAnZWagAAm7MP/3LoFRkrJJzCUJOrX77D\nB2ZbSBpBoxWZLO4ougXFZGUtsa3Lp2u7aQ4f4hb6EnY+JhnQr4GG7c2PQyXT\nybKV8dmcUjlxcElyIGBQJ95WM3FRiEAyDcQlalng2U23dOiGOs8RS7jRCDpL\nYx442VvoNtCr4YGFj8toSxuUGE9yliFzeAGFX+8kxa0Pl1/UqFr1yjnLA1/u\n0s+dRlYaVG1ONGx5CtuSYuzJrT0ZqcCljoiN09x9nLowvkKVwVIluRTkr752\niaas5X0HLRkUfKm7uSFpOW2XR/Xq5w8ICnnsPzXBb7mHAyH9DVlimUWcvGb3\nLp1NAo8Du0dS3z2a0Ns2DQ50es7/kyHiC2O/Ik/CmMyJ0FwP0Zby2KGT01N0\n2MnJbCIzFM7z69rqn+Paaioph1cHA3wg3S/J0ogJdq0jqaL+ccPoULpFMZJX\nKT5QT7n9RI5mE2uowQthlZb+xnNFe3Xaz24QK7NVbgAFYlnSYVxJ3M57VWU3\nCE03Y+4YLXAjjgYQuNmnWI5sOwbw62dFUBauqmkHNv8jW4lcjNIAgP7XiTic\nQoIHDdTZvnGS9yO1H7gepYXDNx7uh8o1LDLRvVts2ysNh9y1SrPRzD05VHkN\nOCme7joZf6FyUGu5Q6PUBxrCx1IyIkgdd0A+vXFttIvJBEFioOOOqGh+OpgL\nyZ1U\r\n=CUgD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICas3TQcsJl5PyXlh9yqtcX8gyOFQH8rNBjOB4tqwiV5AiEAj5e5WlciAR3ZfB4Q5b6cTBMf6FtRWovVU6l1J297i2o="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.2_1533571367990_0.5926470294676212"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.3":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.3","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.3","dist":{"shasum":"7e34439a37fce2bfe0a6280bb6e3bb61d9bb7a94","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.3.tgz","integrity":"sha512-D7Yvp4vL8EV0ZDKaw70YzTsW/ATDmbRRl93vsCyyAYcvwiF+Z9kUw1/Ve+i4P9g8NHs304ZGKPdCa/cjcPOolg==","fileCount":11,"unpackedSize":30972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaae8CRA9TVsSAnZWagAAVc8QAJzgDJlGwrBs6ix0pkfO\nZ2MuokUm/gT7dNGmv+rF3NZI68XLlREayNOEXR8oFooQJvNxvUbMNk2rWyxi\njrt5fvdpSDmIqPWepFyiPt0uzPmO1G1V2tLZJnayXoQ/2G/lOanK88enFRh3\n89DVidMu2NcQaowjNif005KuBSJ1aFFW/8B8s0ePF+kTqtkxwSf5lz+1SwU6\n2tUD0++ew63xdRGwZRH3ZGKkp7/FvRSxCSTQXDjgMoR7GoLcYiCeSiI4pjlS\naTjHu6GrEobK7KHXWN3rVSkS1E5Xa0vNEe2pwroOAEtKST24zhbgk6i3dLYE\nnnx37aPorZf9gW9CvK9a7bo2y1/nYuxZrmDYegcTa3QW50kvTSRXmuTPOuA6\nAU3iM4EotYuEboAt+OTLp2Zb7tgF8UORTdJWgyGHVr/4Fpvr1RJ2H3PlycO2\nDouaI40DntLuJrFA7T+ygPEiAqLjhHzwGVBiidJpUYS3zX6snks/Cismlyl/\njPccjuKbcZHe501GE9E7F5Zw5S6oKC3LsEP7/AyTGrwNayO84BK8h+wIO2iW\nrVBHo5dCVF7Qiuk2KG/XU1F/qTcspHNar6dHOzebJdFSaavrNTwiFh2ELLQd\npsCqDVr1zr57fDhpO3Jb2dapCKxKvQtlParBECiTy8hSx8oXv0G79Z/GA5TU\nRLdi\r\n=axAO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZ6pPC/1RLY77nGK9XPBXgxoSffi97yHdj/3pgC6AgIAiAS0Lpuw49Ab5qJdECzrNWRtlcrhql3cw0BoCBRLJ+0Cg=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.3_1533650852037_0.4938639416227606"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.4":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.4","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.4","dist":{"shasum":"ccf069f05dbd60182bf9e0196c335b217a637a94","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.4.tgz","integrity":"sha512-nw/ZIyiYhw2MfCxGJE7LHcWYQ0U9k7QzQuwhqXIFLoML67/vkGrGbouS3DOGZR/CuPbpOrzxDsqWWW2S075wQw==","fileCount":11,"unpackedSize":30880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaa2WCRA9TVsSAnZWagAAPUoQAKItrmD9kCg5+U5c1jFj\nXdmjiwRXWOio5YHr2OovOzzG0eOA9uAwA84+sZJb0iimM5NnV+8hW0AbVaaM\nqc4n3r33Ww/cwj/2TKhsQ2IVMxKRLiZfv2rWDnTADEE53IUdioNr3fQTIy01\n3Cox6pne/tub/RhYp9I5Fb+qEtQTH+Ifa0aNmuLHdbqpJubsrsWtHqLN2TYO\nr4lZBDMCIlLoRXKbQg/GymFRUdrq62y1rN4DkX/WSIs9n7nnRRHa5xoTOgJe\neXxmSToxGMwjiFAyS/oEv1OPNRMyva7F7zxBMQC2x4e4fdh2a9jYj+io+mse\n0Bz0nbfgMGV+i/c0h5cyeG4iZ/jQx6oSfaX9NH8iRi6cuoeQoPW+nO5Q5YjK\nA4+FKv9S2EGryfpQunJAUv2kB1bFuhYO0iEvO5hv4tUPCOzgImY1BHzUbtPf\nsr0F6VyxJHLtgVazekYRRXaUcVKE5pSoWnS51LE35frTAOLAJO8iIAnFWClp\nQLgn9Q6bpyPiNLpEmosKonGX19injO2GNSr7rJNdIyErOqct8hR36vRv6/O6\nJBK+G/Rxvx+hha0yg5Zk7ixfpYsu6F/6K99QV8bawdyq7V7po7s68e1k0Obc\noBJraZPrfVS45B+LDtXoeaHKC0CuqCiTMJR4CEzjMZKSax0aGQY/qKExe66A\nLFpX\r\n=CSXz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGjSPumz7EJBI0RK801CteypdBud942Nx01Z7oqLXq4QAiB32vkRFVlZsrEE2ill1S/Z5A5vu1f90v31wsaWsLrQbA=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.4_1533652360086_0.5829393525614242"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.5":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.5","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.5","dist":{"shasum":"582899d4e9f2e0d81ca54025e74aae3a73c72b5b","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.5.tgz","integrity":"sha512-hWqeBqvn0OHj1b8Nl1tvsFxU3H2Ob9kMpcMwP7qAYyTWIAOU062gn1zzEQ/rQG+ymaZ3LWzQG0suNlLKKzLAsg==","fileCount":11,"unpackedSize":30972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaa7nCRA9TVsSAnZWagAAGLAP/jjdSaJDKxe7w3XLHZGl\nBqVLl8IFQtIzVYDi0qeNeMdmNa9lsrjd2/xi88uF4XC4JYhoCHtcnjEAdHtC\nXVriCBkd2HBQlAZql82pR9YzSgdtssJVBhaDnk8ojaLxq1+x7y36LLJkx3Ln\nOghGFvrKerwlKJwtgsqg8l8WOJ4zS06BKgylVPB5fb2K0zowASAdTUFgSdcz\nR/NN4E3yx1rCoOr+XHdWsyClp8Bn85NazAzG+Ckl+olh864ZOWzJlka9nJww\nEiE6/67QjP+t2TvdGGsmwVvYP3Jq6iaoBrGV7fOsdrtcHWQ99gCqXrMBkK6g\nsp6DdklXc2bVIYIin/6xrnDsEnnHpr/dKoe6Jpf8W2he8ULgY1VJrqTo1hkm\nUTQopD7Rw41i4tF0/r7m9maaNFaq8figyjMGnoPEGoBoqJr99hrFgqDN9yxj\nxdYKDsRLsWT6/xn2e+M8P7a74Vsr7VU6TSXDlF/2EKFlqSW8D5GBwig61IKh\n/TE2h6GkwEDX35NOJ0mG5uMhd6WNQH3cgBHbMkHLmMybqBYEo5LG/1/9VTQf\nsk0AM5ZsxGY7H8ZtvkYtRvNb3FJCxTDhiIOO+tUrpMPbdJct7Mxdub7K0iwJ\n1CQKw/p2nM5qzpDNE/F6y5Ld4LCCVHGCdOYp4MVt22ZOSsiYZX6rILg04S/N\nS0E/\r\n=DsyR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFLkzbv3dEnQpfrfdKV8sdOFcG2RoSPYzIbqFosxMYNtAiAUBzszK25STtV8GbdC3XmMsU2RRweTD9CH3gFJKSzurg=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.5_1533652697720_0.2503115423404887"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.6":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.6","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.6","dist":{"shasum":"dcb09b2603e0dfe88486fa793084d4fef4594211","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.6.tgz","integrity":"sha512-+YvPcCqSNnV5OqXx6sERyEbyZy/ftgIMH4cobsuF2TtIvVK15whyxr/BjWYJtFCpvsXuOyMUGKFLbPBMBXS55w==","fileCount":11,"unpackedSize":30971,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbabYOCRA9TVsSAnZWagAA2xUP/j4cUk+6alzhb/BtD3jQ\nkr1UoiI3PGyhbaacPg0d7IIDIuj1wbYuFpPiHHk/jAkUxmAj7KK0grGW3e58\nTASCJ2Fg8aeiRNBgZlbfOCu6U0EUOIo3tkfkL9mZK5b9mSa/9F2q2oVVekQB\nNADaIvozRFhds+aO4UWRXlKAPMF8A30X4UQrUO7Zg05vThqEPH/3RhAoRD/4\n5xg1Tl9ut7cmB+BmZHhYGfryTCNPDmOEGCm62Sw4Xn9DcDOYa0jX55iX1ZKK\nU7U0MijiGfwHWJjVVv3KatynFYmakToDwhT1lLvhZPtZtIulk9s3yYb+SYru\nBH3FrzRSs7FaspGMFE5QsKEffoytgoI36/64YODQwooaRTfEElpEojpAiqmq\nbAG9KLYvxHT39mC7kmOVwnGhGsj9eXpYXRy/hDh4oC6tyKxKZ7Fw2twrOEbr\nFGMKMlzXE+2bW5DopKIQMBtUGJsl5gYAt+2HtAjkrRn2AVDdui9CRQb+Bsvd\n01MW1cdQ5rwCdHFOd5vQV2bC0XOj94iIZlzVq3wQRXOM6rQLPASYkzHxLdCK\neem1//cLKdS8LIGoKR/sCfQpm+o2x83RsyXkSAjNoy/PNmbEg4UTMLP82LMa\nh84lMqGVbLrlQWdPBP5GNopG2fw+mrzN4hGap+RYMXabUg+VC98tN13jMVe6\niFsD\r\n=tPZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1EGGDSQxBZCH68JurX0m5yS13WA0QdTWFJJNrFUpyiAiA0FHonqn1v4rm1sMiYTTpdqZ2PWXR+MuBa+YC7l2gqYg=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.6_1533654533441_0.4736169702071187"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.7":{"author":{"name":"Ron Dekker"},"name":"hoast","version":"0.0.7","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"homepage":"https://hoast.github.io/","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"debug":"^3.1.0"},"licenseText":"ISC License\n\nCopyright (c) 2018 Ron Dekker <https://rondekker.nl>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","_id":"hoast@0.0.7","dist":{"shasum":"889dd82159f3ea572c67ec8f242ad819afe66473","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.7.tgz","integrity":"sha512-Kygb1yOF8qBi+Aj7HoPgkUaSKk5zGPiwuDVJtuyedv5EdrAD3xztmooK0GwlnqF4zelrQD/BPyEjc4+FyIn9zA==","fileCount":11,"unpackedSize":32162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbawhpCRA9TVsSAnZWagAAqh8P/RkJiE6Bb4uw0pu3xqJB\nLvHyfqLIz8tr8i3cdNhvCqiDUGrNFkm64iikTulOEXCqfBtnj+wVK3LiEiSE\nMhNLBQ2msLk3WBpRWNJUD7QKNhWaiL+OFFpbVpVyIiaQBGLj9z6B3gxikLLE\nBdguiwvEHQsqo7qRYaWdjobJJiTfD28qkuaktNBJnq0S8CuIvZO31LA4jWoz\ncd7hBKjLWPsLuMoIbzZu5QwN/QIfIhG1UhXbCmybDHKLAzsl1lNLnZ10F5IF\ntzAXKRLiE/+Ab0VKQbNnYKxM7AJO1wjYLgATg0ce9P5ruXJjOIcCeOsxr21x\nznmo/EvI/d3bvkWHMJ7KYk85K5wQaWAAM8BgrDtSXoXMgmU6SAAA8z4zgOeA\np/ZC+xPdzIe5oSclQbLPn/m7k5WFErtMjwKFcFMkBNwVQd+d02mj53el0JWJ\n/kvtCPBcViXugxAMpbkLDpxxQRt30UhBek0nIOZ8F93LgQLAQLaCYtUhmcCM\nOI0vpT5Zlqrd4bW0BP0n+KBHJedb+a2fxdhtKk+ZFrzzzHL9tfsT0EtviEoD\nJIb75U3yVeu08+AwWkymwFKhCl7UskCXsZd34S46/lw0hU1fTCWBh877shhe\niI68wqovHO3q6kU3BQ7zRHdzNL9y2OiUxUpfRdmadTIFFdFLxqJhy2OVEIcK\ntEBd\r\n=BBFx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBo2YtJG21SSUR0niY1J2nT6znT/FGt98b2sygEaaBz/AiAn30tqqPmwpgqBV0/g35DSpFnteLo4/HxJFvyOad8UDA=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.7_1533741161553_0.9571286331134352"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.0.8":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"0.0.8","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"scripts":{"pretest":"eslint libraries/*.js index.js cli.js test.js","test":"ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","debug":"^3.1.0","eslint":"^5.3.0"},"gitHead":"fe23dac80b8b78350c3e5a5dab1723fd70a997a1","_id":"hoast@0.0.8","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-F6i51kqJSXFXoWGHWqfReXZDgCzVELyZFNLe+jMwz8MzTjeSr2TzarWzwEJnvBkXv+k1eAfpj1naQhJn6kABuQ==","shasum":"4053aef70e74e227d17f6e507b7314f2457ba95f","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.0.8.tgz","fileCount":9,"unpackedSize":32154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcAIRCRA9TVsSAnZWagAAAMAP/1rjgf7A4Zly4Qi0R+jy\nRnIuLSYmphMxEOPszgurAAYzHnpYR5ZAtrhPFH0LLnuEcVClM3lN3CbZ31vf\nl5SUJFTRAY9WLDrcQW/HF1GtLeSDPkYJ6FYJ0hjSEOvnKIrj9gq0LAzLzWyT\n3TxWypf85oxzF2iF0h0fEr7XFjF+2Wn9efKWSeRWiWzDh/TFj7oLV6Kk/P/z\nZVmooG5YA23p6onapGDJwmQvrDfuT+kogb8xsveWUiAeme4k20oV0+eb3YgZ\n9kM1YEXDi/LWjlTeW5iUe3e0vJoX93Ulo0CHJ5VlkViEH1fM/ns66UvlMGTZ\n3e8UTrVk/hcVBaaF78/RAT15q9fAMSz8DDTTC3pfqrIQCNNv/JnMzMtRANHq\nguf+8qHPw/9V4SZKFGbckEV0cbKKy/5+0B5rl2ca3jM10zOz1nfhh3uXVS05\ngeMKrxqpqquUF8JJh/Kwfisawh3ksP07au0pnp8Xufuj3sP8U/gK7/tfpMy4\n4lnRjJjhAD8yEteEgIFACYWn/Jle+lq4m20MlYYOyLz93xi1k2VJzL/ARNXV\nNqDKdGJS4X3Lh7apJujvZOTa3jYhEQfVBMvqYwHlmvUoEosteeAkj4VS5hwi\nAnJh4PFUxEAs+3WnXnde6d+KW32ZvfWTkrayqfVwAv4WZ4CoulteahQHt9eu\n56mr\r\n=KKlJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHhIv9Ei6nIGZeaYmcnb3bHaVgys0nN0JVHAllfmtxY4AiEAlpt7H51QqV18rafY2Ku6vBYkw8BE2nDfAmGr0Bv8MrQ="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.0.8_1534067217081_0.008721599963702698"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.1.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"0.1.0","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"scripts":{"pretest":"eslint libraries/*.js index.js cli.js test.js","test":"ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","debug":"^3.1.0","eslint":"^5.3.0"},"gitHead":"13d35203527ad9084443897bffff6af382aece0a","_id":"hoast@0.1.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-SJYd2VL4M0W7qvGSKIRg5z9HYCPC4Svunih8MfFvcrcYoQosvHuzMUon0ngBs0gFSZN2DDQznSFflWa7TDm04g==","shasum":"c8fbd11b4802fd6515bf77bcf21836389f9477d2","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.1.0.tgz","fileCount":9,"unpackedSize":33414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfFSRCRA9TVsSAnZWagAAZwkP/3AnQT31RrgRgHuC75a4\nXBCR7xtcW8F/R7aLu9adcwUbzQhEyTEZj+soJ2kXPNZ7QpKfuOwE5KnAbOLb\nKNBZP9l00Xaf2bjw8UEp/NziqG79ROnpdoKpFtla3oCn5a2vEm4hqnyKBwz0\nJj2dvHpGDND37xSnqxHiz8W6bVcBcqVkVBln2UC8SGfnzSj5MTiTgkHvkvIO\njTZXM7x773TJxg9dzeV0g/nYqeLpdOvpIDabPr595fYJg4V//9MdhhknUmPD\nslbBzDBszJ9lu7gMGxrO0J/Riw7niLycHhK9c3f98edMhT0u0xgwKMB30C60\nHpCwI4NRUz7bqCZI9Nwfnt/QZbpo6mMPS7wbftg8zzvW99lY5EIP5qfcTepF\nLSV9aLPmu92gzTS3mpLBuUA3vsVE7L7YpKvopXlBEy8hJ4Pc5L5LeVacFhdR\nbLdavsu3RQ//psMxDSO1gSvOrw+wSIVxpjU57+gxU1WPq+XAXv9UHI0nlB7U\ngBrd+LYaqpaFID1NVAncpw+fRN4P71FE+eZ1xeXvSEarPRr8UUZdijjKav5R\n9K7V3StcA+OCUoGgtNeb6VkiCNOvCwvJBrgLtW1UMnH/U3VVEz3o18x6Qt18\n3zri+gya2V32bT30qkNqOFupFRk4zoZ5DDMKCB60CM0aFGErPFRkvrWwmRck\n7k8g\r\n=k0Xm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCD/u5kfu2Eg5QNvcevy3uvzVD34unnsDEEI957wkOkAAIhAP8wwg6HcXaV0zjTDWmMRV0hbX4iOk6otVAf0TFaZ7AZ"}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.1.0_1534874768812_0.23977627127966095"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"0.2.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"0.2.0","description":"A modular file processor foccused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"index.js","bin":{"hoast":"cli.js"},"scripts":{"pretest":"eslint libraries/*.js index.js cli.js test.js","test":"ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","debug":"^3.1.0","eslint":"^5.3.0"},"gitHead":"391a9470e0cbaa10b5447a94fdff1e7f40ecb2cd","_id":"hoast@0.2.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-hxHd+QMNG1QkPwcvYmpkI+ADOjKvbbVMKvDVKWFn3DSUOb7LCJVLCbWckhRP02+l2IaHv6In/syyyZEWxaZOkA==","shasum":"3324a2590340825e06acf3512d8f119799a2d092","tarball":"https://registry.npmjs.org/hoast/-/hoast-0.2.0.tgz","fileCount":11,"unpackedSize":33953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmAUnCRA9TVsSAnZWagAASuQP/jCWB9uTfliuUZdbRnEG\n5hTR8Cfyllyiig7YUaYxy2F3cIkhDwr/6xlNW2r1ydkmnn2bwLvQ9+wtx78j\nY16+IoW/c49J4rgTBmpnK5NgmmNl13sFx6o9qg4nDCwYDRMp+I06ZKvVFizm\nzxYGEIiVD24AyMSDa2I2Sau2DEnbA3M0ltCrn1UfpZgtCSbFu2wpSbogJ+GA\n25iZRXhFxN/BLXkizd8lIzpjYibmDyNeUcQQFEBSEm/tEpl2FYLLwhyC5k+o\ns2rqI1Ymn0p2TJBZMPtxwNAflqwA1Vmn8ft7cCqnFqxjVAe5xI5+XP4icPox\nCwdnDTqFbM95qdDROMmJdrsGCkIFPbj85vMd2NbuVoknt31t7q7RFmCE7HZ8\nWlm/rLnc/VuNeqKGnW8m9nPjVHqZJYdpQiwI9I+BbO3ebys7JzlNVlJrAmwQ\nMh1jVVi9zqA4GfgSLJDtw00GTVG6lgBQ1+cESmskux5Upze2W15e1JwYxffa\nWh3MOn8wnW1k5uta75r1Ykx1RKQWDVMZU06OXymaTgzGhL4tcTqthVZtabp0\nmIepzu26oXPBsSJ0KFJuVwVfFBr267qgMyk5txLL2rmesdIWPkJ1o0ecbr/d\nEQ02nLmHmlKWmKchIfLbXz8BVZ3g2NLsHpY59E4Nc4fAuf+xNyvVYTIWFkRr\nQZpL\r\n=s9c7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2TnNTi+i7zqqNMhTKHFlqYaopX2a5pVz3uxP6gvsjUQIgMIjTV7nQZnhzPKpzlNBhrQ/zVEu2Pz3TWZjQClGXugE="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_0.2.0_1536689446281_0.5012006833654297"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.0.0-beta.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.0-beta.0","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"pretest":"eslint library/**/*.js bin/**/*.js test.js","test":"ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","debug":"^3.1.0","eslint":"^5.3.0"},"readme":"<div style=\"text-align: center;\">\n  <a title=\"Version npm package\" href=\"https://npmjs.com/package/hoast\" target=\"_blank\" style=\"color:#0000;\">\n    <img src=\"https://img.shields.io/npm/v/hoast.svg?label=npm&style=flat-square\"/>\n  </a>\n  <a title=\"Version GitHub master branch\" href=\"https://github.com/hoast/hoast#readme\" target=\"_blank\" style=\"color:#0000;\">\n    <img src=\"https://img.shields.io/github/package-json/v/hoast/hoast.svg?label=github&style=flat-square\"/>\n  </a>\n  <a title=\"License agreement\" href=\"https://github.com/hoast/hoast/blob/master/LICENSE\" target=\"_blank\" style=\"color:#0000;\">\n    <img src=\"https://img.shields.io/github/license/hoast/hoast.svg?style=flat-square\"/>\n  </a>\n  <a title=\"Travis-ci build status\" href=\"https://travis-ci.org/hoast/hoast\" target=\"_blank\" style=\"color:#0000;\">\n    <img src=\"https://img.shields.io/travis-ci/hoast/hoast.svg?label=travis&branch=master&style=flat-square\"/>\n  </span>\n  <a title=\"Open issues on GitHub\" href=\"https://github.com/hoast/hoast/issues\" target=\"_blank\" style=\"color:#0000;\">\n    <img src=\"https://img.shields.io/github/issues/hoast/hoast.svg?style=flat-square\"/>\n  </a>\n</div>\n\n# hoast\n\nA modular file processor focused on creating a simple ecosystem.\n\n## Elevator pitch\n\nCreating a static page generator can be incredibly easy as is show below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`),\n      frontmatter = require(`hoast-frontmatter`),\n      layout = require(`hoast-layout`),\n      transform = require(`hoast-transform`);\n\nHoast(__dirname)\n  // Exclude layouts.\n  .use(filter({\n    invert: true,\n    pattern: `layouts/**`\n  }))\n  // Read file content.\n  .use(read())\n  // Extract frontmatter.\n  .use(frontmatter())\n  // Transform markdown.\n  .use(transform({\n    patterns: `**/*.md`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Layout files.\n  .use(layout({\n    directory: `layouts`,\n    layout: `page.hbs`,\n    patterns: `**/*.html`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Process.\n  .process();\n```\n\n> See the [static page generator example](https://github.com/hoast/hoast/blob/master/examples/static-page-generator) for the full example with in depth comments including dependencies and source directory.\n\n## Table of contents\n\n* [Introduction](#introduction)\n* [Installation](#intallation)\n* [Usage](#usage)\n  * [Command line interface](#command-line-interface)\n  * [Script](#script)\n    * [API](#api)\n    * [Asynchronously](#asynchronously)\n  * [Debugging](#debugging)\n* [Modules](#modules)\n  * [Build-in](#build-in)\n  * [Usage](#usage)\n  * [Making](#making)\n  * [Browsing](#browsing)\n* [Planned](#planned)\n  * [Modules](#modules)\n* [Known issues](#known-issues)\n\n## Introduction\n\nHoast is a modular file processor focused on creating a simple ecosystem. The original objective was to generate webpages using a minimal system, but in addition to static page generation it can also be used for a range of different applications.\n\nThe system has been written with several goals it mind, to be small in size as well as easy to use and improve. The result is a modular approach some of the advantages are:\n1. An incredibly small base system, at just a few hundred lines of code and only two dependencies.\n2. Highly customizable as modules are task specific therefore you only include the modules you want. This ensures you have a deeper understanding of the build process.\n3. Modules are quick to create and allow a large portion of people to contribute.\n4. Maintenance is easier as the code base is sectioned up and simpler to follow along to.\n\n> Another key advantage is the environment the system has been developed in, Node.js, which utilizes JavaScript the language most commonly known by web developers who this project targets with static page generation.\n\nThe order in which hoast works can be broken down into three main steps.\n1. From the source directory all files are scanned.\n2. Each module manipulates the information presented.\n3. The results are written to the destination directory.\n\n> This tool has been inspired by [Metalsmith](https://github.com/segmentio/metalsmith#readme), the goal was to eliminate most of the dependencies and further modularise the system as well as improve readability of the code.\n\n## Installation\n\nInstall [hoast](https://npmjs.com/package/hoast) using [npm](https://npmjs.com) either locally to use the script version or globally to use the CLI tool.\n\n```\n$ npm install hoast\n```\n\n```\n$ npm install -g hoast\n```\n\n## Usage\n\n### Command line interface\n\nIf you are more used to using a CLI you can do the following.\n\nInstall the global command:\n\n```\n$ npm install -g hoast\n```\n\nCreate a JSON configuration file with the options and modules.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": {\n    \"read\": {},\n    \"hoast-transform\": {\n      \"patterns\": \"**/*.md\",\n      \"patternOptions\": {\n        \"globstar\": true\n      }\n    }\n  }\n}\n```\n\nIf you want to re-use the same module multiple times you can wrap each module in their object and change the modules property in an array as seen below.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": [\n    {\n      \"read\": {},\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"A/*.md\"\n      }\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"B/*.md\"\n      }\n    }\n  ]\n}\n```\n\n> Do not forget to install the modules as well.\n\nThen run the help command for more information about running the CLI:\n\n```\n$ hoast -h\n```\n\n### Script\n\n```JavaScript\n// Include library.\nconst Hoast = require(`hoast`);\n// Get build-in module.\nconst read = Hoast.read;\n\n// Initialize Hoast.\nHoast(__dirname)\n  // Add module.\n  .use(read())\n  // Start process.\n  .process();\n```\n\n**constructor(directory, options)**\n\nAs with any constructor it initializes the object.\n\nReturns the `hoast` instance.\n\n* `directory`: The working directory, most often `__dirname`.\n  * Type: `String`\n  * Required: `Yes`\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**use(module)**\n\nAdds the module to the modules stack.\n\nReturns the `hoast` instance.\n\n* `module`: See [using modules](#using) and [making modules](#making) for more detail about the parameter.\n  * Type: `Function`\n  * Required: `Yes`\n\n**process(options)**\n\nAn asynchronous function which goes through the three steps mentioned in the introduction. It scans the files in the source directory, cycles through each module, and writes the result to the destination directory.\n\nReturns the `hoast` instance.\n\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**options**\n\nThe options object which can be given using the `constructor` or `process` functions.\n\n* `source` The directory to process files from.\n  * Type: `String`\n\t* Default: `source`\n* `destination`: The directory to write the processed files to.\n  * Type: `String`\n\t* Default: `destination`\n* `remove`: Whether to remove all files in the destination directory before processing.\n  * Type: `String`\n  * Default: `false`\n* `concurrency`: Maximum number of files to process at once.\n  * Type: `Number`\n\t* Default: `Infinity`\n* `metadata`: Metadata that can be used by modules.\n  * Type: `Object`\n\t* Default: `{}`\n\n> The defaults are only applied when the constructor is called, the process` options parameter overrides what is set earlier.\n\n### Asynchronously\n\nHoast can be used asynchronously via script, two examples are given below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  .use(read())\n  .process()\n  // On end.\n  .then(function(hoast) {\n    console.log(`Processing successfully finished!`);\n  })\n  // On error.\n  .catch(function(error) {\n    console.error(error);\n  });\n```\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nconst build = async function() {\n  let hoast = Hoast(__dirname);\n  try {\n    await hoast\n      .use(read())\n      .process();\n  }\n  // On error.\n  catch(error) {\n    console.error(error);\n  }\n  // On end.\n  console.log(`Processing successfully finished!`);\n};\n\nbuild();\n```\n\n> As you can see in both examples the hoast object is still available for further usage.\n\n### Debugging\n\nWhen making a hoast module I highly recommend activating the debug logs by setting up the environment variables as well as the [debug](https://github.com/visionmedia/debug#readme) module.\n\nOn Windows the environment variable is set using the `set` command.\n\n```\nset DEBUG=*,-not_this\n```\n\nNote that PowerShell uses different syntax to set environment variables.\n\n```\n$env:DEBUG = \"*,-not_this\"\n```\n\n## Modules\n\nAs mentioned before the modules handle the logic that transforms the file information into the desired result. They are chained one after another and fed the results of the module that came before it. At the start the only information available is provided by the scanner function which performs a recursive search of the source directory and returns an array with objects of which an example can be seen below.\n\n```JavaScript\n{\n  path: `mark\\\\down.md`,\n  \n  stats: {\n    dev: 2114,\n    ino: 48064969,\n    mode: 33188,\n    nlink: 1,\n    uid: 85,\n    gid: 100,\n    rdev: 0,\n    size: 527,\n    blksize: 4096,\n    blocks: 8,\n    atimeMs: 1318289051000,\n    mtimeMs: 1318289051000,\n    ctimeMs: 1318289051000,\n    birthtimeMs: 1532801006990\n  }\n}\n```\n\n> For more detail about [stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) see the node documentation. The functions as well as the atime, mtime, ctime, and birthtime are not included.\n\n### Build-in\n\nThere is a single build-in module which reads the content of the files. It adds a `content` property as either a string or buffer depending if it is utf-8 encoded.\n\n```JavaScript\n{\n  content: {\n    type: `string`,\n    data: `Hello there.`\n  }\n}\n```\n\n```JavaScript\n{\n  content: {\n    type: `Buffer`,\n    data: [ 71, 101, 110, 101, 114, 97, 108, 32, 75, 101, 110, 111, 98, 105, 46 ]\n  }\n}\n```\n\n> This module has to be called before the process function or any module that expects the content property to be set.\n\n### Usage\n\nThe following example copies only the markdown files from the `source` directory to the `destination` directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter to only include .md files.\n  .use(filter({\n    patterns: `**/*.md`\n  }))\n  .use(read())\n  .process()\n```\n\n> In this example you can see why the read function is not done automatically beforehand. Since you can now eliminate items from being further processed using the [filter](https://github.com/hoast/hoast-filter#readme) module before the read call is made.\n\nYou can re-use the modules after you have called process as seen below. The following script will copy all files from the `sourceA` and `sourceB` directories into the default destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  // Read file content.\n  .use(read())\n  .process({\n    source: `sourceA`\n  })\n  .then(function(hoast) {\n    return hoast.process({\n      source: `sourceB`\n    });// Read will automatically be used again.\n  });\n```\n\nIf you want to start with a fresh set of modules all you have to do is remove out `hoast.modules` property. The following script first copies all markdown files from the default source directory to the destination directory, and then copies all text files from the same source directory to the destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter out everything but markdown files.\n  .use(filter({\n    patterns: `**/*.md`\n  })) // Only .md files available afterwards.\n  .use(read())\n  .process()\n  .then(function(hoast) {\n    // Removing out modules array.\n    hoast.modules = [];\n    return hoast\n      // Filter out everything but text files.\n      .use(filter({\n        patterns: `**/*.txt`\n      })) // Only .txt files available afterwards.\n      .use(read())\n      .process();\n  });\n```\n\n> See the [examples](https://github.com/hoast/hoast/tree/master/examples) directory for more in depth usage.\n\n### Making\n\nIn the simplest form the script below is a hoast module. The first time it will be called as a function and arguments can be passed on so properties can be initialized or validated. The return of the function is another function which will be called every time files need to be processed. Hoast is the hoast instance and has the options property assigned during via the constructor or process call. The files argument is an array files scanned and ready to me transformed.\n\n```JavaScript\nmodule.exports = function(options) {\n  // Prepare anything.\n  \n  // Return module.\n  return function(hoast, files) {\n    // Perform logic.\n  };\n};\n```\n\n> For future proving and compatibility with the command-line tool use a single options parameter in the exported function.\n\n> See the [remove module](https://github.com/hoast/hoast-remove#readme) for an example.\n\nThe modules can also be asynchronously by either adding the [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) keyword or using a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  // Return asynchronous module.\n  return async function(hoast, files) {\n    // Perform asynchronous logic.\n  };\n};\n```\n\nYou can also return a new files array if you need to overwrite the existing one, however it is recommended to iterate over the files using the forEach function instead of map or filter. Use this power carefully!\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  return function(hoast, files) {\n    \n    // Override files.\n    return files;\n  };\n};\n```\n\n> See the [filter module](https://github.com/hoast/hoast-filter#readme) for an example.\n\nSome modules might require to be perform logic after all options are initialized or after all files are written to storage. To accommodate this you can add a `before` and `after` function to your main method. These functions can also be asynchronously and are called in the order the modules were added.\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  const method = function(hoast, files) {\n    // Perform logic across files.\n  };\n  \n  method.before = function(hoast) {\n    // Called before the files are scanned from storage.\n  };\n  \n  method.after = function(hoast) {\n    // Called after the files are written to storage.\n  };\n  \n  // Return functions.\n  return method.\n};\n```\n\n> See the [changed module](https://github.com/hoast/hoast-changed#readme) for an example.\n\n### Browsing\n\n* [Changed](https://github.com/hoast/hoast-changed#readme) - Filter out files which have not been changed since the last build.\n* [Convert](https://github.com/hoast/hoast-convert#readme) - Convert the content of files using a specified function.\n* [Filter](https://github.com/hoast/hoast-filter#readme) - Filter out files from further processing.\n* [Frontmatter](https://github.com/hoast/hoast-frontmatter#readme) - Extracts frontmatter from files.\n* [Layout](https://github.com/hoast/hoast-layout#readme) - Transform the content of files using layouts.\n* [Rename](https://github.com/hoast/hoast-rename#readme) - Rename the path of files using a specified function.\n* [Transform](https://github.com/hoast/hoast-transform#readme) - Transform the content of files based on the extension.\n\n> Feel free to add modules yourself by making a [pull request to the repository](https://github.com/hoast/hoast/pulls).\n\n## Planned\n\n1. Expand tests of `hoast` and other modules.\n\n### Modules\n\n1. `publish`, control publishing mode of a file using the frontmatter.\n2. `livereload`, allow for live reloading.\n\n## Known issues\n\n* Access modes of directories and files are not transferred.","readmeFilename":"README.md","gitHead":"04d4f398cd529f40d6845e92df92935e2c850ab9","_id":"hoast@1.0.0-beta.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-xSJOOQqkqNrXUWDLtetD3HycOKg54ry2ntZuEman61wtzHxYep7nMsv4QZs5TTrIB7fGalhkpsnQL6Uj4eArhQ==","shasum":"210f56bca5bfceb9fad6d1a99bfc898a9ff584dd","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.0-beta.0.tgz","fileCount":11,"unpackedSize":35234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboj9ICRA9TVsSAnZWagAAZBMP/37CICA6OYxQemX6iNMX\nZ84dbcBj+lQt9Iiyk9S8JE7vUXy6mhVjloPUJ19F86u27+RuvFi4/F2D5a7m\nWd3ksXzu+6ZLaV1crYUU8kXiA5GCZXf+9Pa4LJteHgZ3UYkq9pfX21QC8fxU\nBZY6x0avngBdEDchbOpahtqqo5dsAG/bWn+wrleq5BD2k2HoJvfkjJAH4ETx\ny/dR1waFbbzSoQVcCMK4EdYmXnmzHbxwuqAQKfs3uoaegEsU5//aRbshgf2N\nAsCBW7J6bxraybwCQ7DJ0tSeHcmeiMh0ztf4T0s5Tlshpadj70eHcNuzcKMN\nXsWE4EnxxwtJxYKEg3n4QVt+nd7v8iq41XT/AlMu/KSPW4tpiC5e5gc5Tiuy\nnKj51WUXGS/YftxVHrl3G4TrI4kuZ2Co76IG2jqp7mwLVnCiVZ/BX5eXOhx9\n2fflAFOhRzS5wt6yJRXAmDJZs/70MrQ8gMZNVihoLvLZml0PvbdnCNuLYWRm\nMKevi55+/VsNh3RvZNvTBAHcLN5fwIiq8mck8E1va1F933jZMx03haF1dej2\ngRxteMDqYw79LrYncsD+E3L3sR2P2ZycvE44ClfkyYzW1sU1MEtahAOY35AY\nL/pLDlHPNAY8/l1sMKEVtgFu3/8a5safIgEnh0umplnW1hiQ09OSKyRicnRl\ne2wJ\r\n=62/Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcbR3sZyWiB/HHYDP9sBrKANpc/wOBNbmSeP7e+++Y0AiAfBSQsL93N6Om3J3JhIpAELrlVqxsjcC71dQV60rlHjw=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.0-beta.0_1537359688195_0.025288967208196178"},"_hasShrinkwrap":false},"1.0.0-beta.1":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.0-beta.1","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"3018841866c822ad933c94768a6d73d2e5cb24f9","readme":"<div align=\"center\">\n  \n  [![npm package @latest](https://img.shields.io/npm/v/hoast.svg?label=npm@latest&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast)\n  [![npm package @next](https://img.shields.io/npm/v/hoast/next.svg?label=npm@next&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast/v/next)\n  \n  [![Travis-ci status](https://img.shields.io/travis-ci/hoast/hoast.svg?branch=master&label=test%20status&style=flat-square&maxAge=3600)](https://travis-ci.org/hoast/hoast)\n  [![CodeCov coverage](https://img.shields.io/codecov/c/github/hoast/hoast/master.svg?label=test%20coverage&style=flat-square&maxAge=3600)](https://codecov.io/gh/hoast/hoast)\n  \n  [![License agreement](https://img.shields.io/github/license/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/blob/master/LICENSE)\n  [![Open issues on GitHub](https://img.shields.io/github/issues/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/issues)\n  \n</div>\n\n# hoast\n\nA modular file processor focused on creating a simple ecosystem.\n\n## Elevator pitch\n\nCreating a static page generator can be incredibly easy as is show below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`),\n      frontmatter = require(`hoast-frontmatter`),\n      layout = require(`hoast-layout`),\n      transform = require(`hoast-transform`);\n\nHoast(__dirname)\n  // Exclude layouts.\n  .use(filter({\n    invert: true,\n    pattern: `layouts/**`\n  }))\n  // Read file content.\n  .use(read())\n  // Extract frontmatter.\n  .use(frontmatter())\n  // Transform markdown.\n  .use(transform({\n    patterns: `**/*.md`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Layout files.\n  .use(layout({\n    directory: `layouts`,\n    layout: `page.hbs`,\n    patterns: `**/*.html`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Process.\n  .process();\n```\n\n> See the [static page generator example](https://github.com/hoast/hoast/blob/master/examples/static-page-generator) for the full example with in depth comments including dependencies and source directory.\n\n## Table of contents\n\n* [Introduction](#introduction)\n* [Installation](#intallation)\n* [Usage](#usage)\n  * [Command line interface](#command-line-interface)\n  * [Script](#script)\n    * [API](#api)\n    * [Asynchronously](#asynchronously)\n  * [Debugging](#debugging)\n* [Modules](#modules)\n  * [Build-in](#build-in)\n  * [Usage](#usage)\n  * [Making](#making)\n  * [Browsing](#browsing)\n* [Planned](#planned)\n  * [Modules](#modules)\n* [Known issues](#known-issues)\n\n## Introduction\n\nHoast is a modular file processor focused on creating a simple ecosystem. The original objective was to generate webpages using a minimal system, but in addition to static page generation it can also be used for a range of different applications.\n\nThe system has been written with several goals it mind, to be small in size as well as easy to use and improve. The result is a modular approach some of the advantages are:\n1. An incredibly small base system, at just a few hundred lines of code and only two dependencies.\n2. Highly customizable as modules are task specific therefore you only include the modules you want. This ensures you have a deeper understanding of the build process.\n3. Modules are quick to create and allow a large portion of people to contribute.\n4. Maintenance is easier as the code base is sectioned up and simpler to follow along to.\n\n> Another key advantage is the environment the system has been developed in, Node.js, which utilizes JavaScript the language most commonly known by web developers who this project targets with static page generation.\n\nThe order in which hoast works can be broken down into three main steps.\n1. From the source directory all files are scanned.\n2. Each module manipulates the information presented.\n3. The results are written to the destination directory.\n\n> This tool has been inspired by [Metalsmith](https://github.com/segmentio/metalsmith#readme), the goal was to eliminate most of the dependencies and further modularise the system as well as improve readability of the code.\n\n## Installation\n\nInstall [hoast](https://npmjs.com/package/hoast) using [npm](https://npmjs.com) either locally to use the script version or globally to use the CLI tool.\n\n```\n$ npm install hoast\n```\n\n```\n$ npm install -g hoast\n```\n\n## Usage\n\n### Command line interface\n\nIf you are more used to using a CLI you can do the following.\n\nInstall the global command:\n\n```\n$ npm install -g hoast\n```\n\nCreate a JSON configuration file with the options and modules.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": {\n    \"read\": {},\n    \"hoast-transform\": {\n      \"patterns\": \"**/*.md\",\n      \"patternOptions\": {\n        \"globstar\": true\n      }\n    }\n  }\n}\n```\n\nIf you want to re-use the same module multiple times you can wrap each module in their object and change the modules property in an array as seen below.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": [\n    {\n      \"read\": {},\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"A/*.md\"\n      }\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"B/*.md\"\n      }\n    }\n  ]\n}\n```\n\n> Do not forget to install the modules as well.\n\nThen run the help command for more information about running the CLI:\n\n```\n$ hoast -h\n```\n\n### Script\n\n```JavaScript\n// Include library.\nconst Hoast = require(`hoast`);\n// Get build-in module.\nconst read = Hoast.read;\n\n// Initialize Hoast.\nHoast(__dirname)\n  // Add module.\n  .use(read())\n  // Start process.\n  .process();\n```\n\n**constructor(directory, options)**\n\nAs with any constructor it initializes the object.\n\nReturns the `hoast` instance.\n\n* `directory`: The working directory, most often `__dirname`.\n  * Type: `String`\n  * Required: `Yes`\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**use(module)**\n\nAdds the module to the modules stack.\n\nReturns the `hoast` instance.\n\n* `module`: See [using modules](#using) and [making modules](#making) for more detail about the parameter.\n  * Type: `Function`\n  * Required: `Yes`\n\n**process(options)**\n\nAn asynchronous function which goes through the three steps mentioned in the introduction. It scans the files in the source directory, cycles through each module, and writes the result to the destination directory.\n\nReturns the `hoast` instance.\n\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**options**\n\nThe options object which can be given using the `constructor` or `process` functions.\n\n* `source` The directory to process files from.\n  * Type: `String`\n  * Default: `source`\n* `destination`: The directory to write the processed files to.\n  * Type: `String`\n  * Default: `destination`\n* `remove`: Whether to remove all files in the destination directory before processing.\n  * Type: `String`\n  * Default: `false`\n* `concurrency`: Maximum number of files to process at once.\n  * Type: `Number`\n  * Default: `Infinity`\n* `metadata`: Metadata that can be used by modules.\n  * Type: `Object`\n  * Default: `{}`\n\n> The defaults are only applied when the constructor is called, the process` options parameter overrides what is set earlier.\n\n### Asynchronously\n\nHoast can be used asynchronously via script, two examples are given below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  .use(read())\n  .process()\n  // On end.\n  .then(function(hoast) {\n    console.log(`Processing successfully finished!`);\n  })\n  // On error.\n  .catch(function(error) {\n    console.error(error);\n  });\n```\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nconst build = async function() {\n  let hoast = Hoast(__dirname);\n  try {\n    await hoast\n      .use(read())\n      .process();\n  }\n  // On error.\n  catch(error) {\n    console.error(error);\n  }\n  // On end.\n  console.log(`Processing successfully finished!`);\n};\n\nbuild();\n```\n\n> As you can see in both examples the hoast object is still available for further usage.\n\n### Debugging\n\nWhen making a hoast module I highly recommend activating the debug logs by setting up the environment variables as well as the [debug](https://github.com/visionmedia/debug#readme) module.\n\nOn Windows the environment variable is set using the `set` command.\n\n```\nset DEBUG=*,-not_this\n```\n\nNote that PowerShell uses different syntax to set environment variables.\n\n```\n$env:DEBUG = \"*,-not_this\"\n```\n\n## Modules\n\nAs mentioned before the modules handle the logic that transforms the file information into the desired result. They are chained one after another and fed the results of the module that came before it. At the start the only information available is provided by the scanner function which performs a recursive search of the source directory and returns an array with objects of which an example can be seen below.\n\n```JavaScript\n{\n  path: `mark\\\\down.md`,\n  \n  stats: {\n    dev: 2114,\n    ino: 48064969,\n    mode: 33188,\n    nlink: 1,\n    uid: 85,\n    gid: 100,\n    rdev: 0,\n    size: 527,\n    blksize: 4096,\n    blocks: 8,\n    atimeMs: 1318289051000,\n    mtimeMs: 1318289051000,\n    ctimeMs: 1318289051000,\n    birthtimeMs: 1532801006990\n  }\n}\n```\n\n> For more detail about [stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) see the node documentation. The functions as well as the atime, mtime, ctime, and birthtime are not included.\n\n### Build-in\n\nThere is a single build-in module which reads the content of the files. It adds a `content` property as either a string or buffer depending if it is utf-8 encoded.\n\n```JavaScript\n{\n  content: {\n    type: `string`,\n    data: `Hello there.`\n  }\n}\n```\n\n```JavaScript\n{\n  content: {\n    type: `Buffer`,\n    data: [ 71, 101, 110, 101, 114, 97, 108, 32, 75, 101, 110, 111, 98, 105, 46 ]\n  }\n}\n```\n\n> This module has to be called before the process function or any module that expects the content property to be set.\n\n### Usage\n\nThe following example copies only the markdown files from the `source` directory to the `destination` directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter to only include .md files.\n  .use(filter({\n    patterns: `**/*.md`\n  }))\n  .use(read())\n  .process()\n```\n\n> In this example you can see why the read function is not done automatically beforehand. Since you can now eliminate items from being further processed using the [filter](https://github.com/hoast/hoast-filter#readme) module before the read call is made.\n\nYou can re-use the modules after you have called process as seen below. The following script will copy all files from the `sourceA` and `sourceB` directories into the default destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  // Read file content.\n  .use(read())\n  .process({\n    source: `sourceA`\n  })\n  .then(function(hoast) {\n    return hoast.process({\n      source: `sourceB`\n    });// Read will automatically be used again.\n  });\n```\n\nIf you want to start with a fresh set of modules all you have to do is remove out `hoast.modules` property. The following script first copies all markdown files from the default source directory to the destination directory, and then copies all text files from the same source directory to the destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter out everything but markdown files.\n  .use(filter({\n    patterns: `**/*.md`\n  })) // Only .md files available afterwards.\n  .use(read())\n  .process()\n  .then(function(hoast) {\n    // Removing out modules array.\n    hoast.modules = [];\n    return hoast\n      // Filter out everything but text files.\n      .use(filter({\n        patterns: `**/*.txt`\n      })) // Only .txt files available afterwards.\n      .use(read())\n      .process();\n  });\n```\n\n> See the [examples](https://github.com/hoast/hoast/tree/master/examples) directory for more in depth usage.\n\n### Making\n\nIn the simplest form the script below is a hoast module. The first time it will be called as a function and arguments can be passed on so properties can be initialized or validated. The return of the function is another function which will be called every time files need to be processed. Hoast is the hoast instance and has the options property assigned during via the constructor or process call. The files argument is an array files scanned and ready to me transformed.\n\n```JavaScript\nmodule.exports = function(options) {\n  // Prepare anything.\n  \n  // Return module.\n  return function(hoast, files) {\n    // Perform logic.\n  };\n};\n```\n\n> For future proving and compatibility with the command-line tool use a single options parameter in the exported function.\n\n> See the [remove module](https://github.com/hoast/hoast-remove#readme) for an example.\n\nThe modules can also be asynchronously by either adding the [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) keyword or using a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  // Return asynchronous module.\n  return async function(hoast, files) {\n    // Perform asynchronous logic.\n  };\n};\n```\n\nYou can also return a new files array if you need to overwrite the existing one, however it is recommended to iterate over the files using the forEach function instead of map or filter. Use this power carefully!\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  return function(hoast, files) {\n    \n    // Override files.\n    return files;\n  };\n};\n```\n\n> See the [filter module](https://github.com/hoast/hoast-filter#readme) for an example.\n\nSome modules might require to be perform logic after all options are initialized or after all files are written to storage. To accommodate this you can add a `before` and `after` function to your main method. These functions can also be asynchronously and are called in the order the modules were added.\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  const method = function(hoast, files) {\n    // Perform logic across files.\n  };\n  \n  method.before = function(hoast) {\n    // Called before the files are scanned from storage.\n  };\n  \n  method.after = function(hoast) {\n    // Called after the files are written to storage.\n  };\n  \n  // Return functions.\n  return method.\n};\n```\n\n> See the [changed module](https://github.com/hoast/hoast-changed#readme) for an example.\n\n### Browsing\n\n* [Changed](https://github.com/hoast/hoast-changed#readme) - Filter out files which have not been changed since the last build.\n* [Convert](https://github.com/hoast/hoast-convert#readme) - Convert the content of files using a specified function.\n* [Filter](https://github.com/hoast/hoast-filter#readme) - Filter out files from further processing.\n* [Frontmatter](https://github.com/hoast/hoast-frontmatter#readme) - Extracts frontmatter from files.\n* [Layout](https://github.com/hoast/hoast-layout#readme) - Transform the content of files using layouts.\n* [Rename](https://github.com/hoast/hoast-rename#readme) - Rename the path of files using a specified function.\n* [Transform](https://github.com/hoast/hoast-transform#readme) - Transform the content of files based on the extension.\n\n> Feel free to add modules yourself by making a [pull request to the repository](https://github.com/hoast/hoast/pulls).\n\n## Planned\n\n1. Expand tests of `hoast` and other modules.\n\n### Modules\n\n1. `publish`, control publishing mode of a file using the frontmatter.\n2. `livereload`, allow for live reloading.\n\n## Known issues\n\n* Access modes of directories and files are not transferred.","readmeFilename":"README.md","_id":"hoast@1.0.0-beta.1","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-cbrXXIB9skchiUKPsFIoICZ8oKUa0OxW8AiakxAJUAwJ8Y3wzVOtQdMMw5qNIP3qOUofR9WN45TvYFCbJh3DUg==","shasum":"e88576b5735fa3c96baf76e8fc3d6c78281cb29f","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.0-beta.1.tgz","fileCount":11,"unpackedSize":35415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq0qpCRA9TVsSAnZWagAAzokQAI3GH39szOg7OPbRMd5q\nVM7PBljqgbS0MPdTkNs/a+6BMB5ejol6jkLhej/yAuqXab5Rm3wyNC1mei7N\n1NGXvfBrI7ReZencRbb85vGvkaoSellkWyAZaHyEJTCvKnFdBX03AmY4e/Kp\nANytRYHmlc58G8h+SKLDjaR4B5BNcMyQ3KdvLC7mRxQe8ld74FSfoEC/XQ2m\nY/rwspDMkvR0wrHGcQ6LGzMj6cNR7z1NbtOZbicyTlFrajkyCpxnNSk6Vxgc\nw7xH0XK0ddSpy4I914dZhe5tktN6Ieun1bfQiztkzqs+hFSIut5dmFdJjo7n\nASGZTV/sAHeITEVVAIQ0v9htkBzrSqO6SvqYb1sLrQlcADjjZaZAanAsIblB\nrHwlP3wcpqH3StrTWoDEAFU/vFBp3cHjJ+hxdmNCHjlD4wUVQWpw+a5aJQtC\nMvpoJAwqaBgr0WBxvpHNjm69Utxm71i9V/B5e5NTBotY6GVxA4OLzsZYpwpO\nR6R2q+TbFRncHKej+ST3APJfzBjuJ6eFy/e9Y/H3SSg/5kTVv0QZiBjCK5Er\n3qJFmUpmtakom70zQR6RpOGPVXt+cSr4FCh51UXTZVmputLlaJM2WT/wk+xE\nmuLZYO0DYJoD5kJ3Xq+OHvM47Vgv1laNOIUIul7m9bdkAd7Dysa0elK/GsNy\n6kb1\r\n=0Rw2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTL1IODyQYbJMXk76LyAchC5rfoX62r8FB5BpyXNKQyAIgEPrcJPB+dy5K0gOWCqPg9xRuMF2BtW05HfRHIQhxhSo="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.0-beta.1_1537952424583_0.3940503143953342"},"_hasShrinkwrap":false},"1.0.0-beta.2":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.0-beta.2","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"91f33b5bd937912bb5c2863ff106e2346b0b73b2","readme":"<div align=\"center\">\n  \n  [![npm package @latest](https://img.shields.io/npm/v/hoast.svg?label=npm@latest&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast)\n  [![npm package @next](https://img.shields.io/npm/v/hoast/next.svg?label=npm@next&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast/v/next)\n  \n  [![Travis-ci status](https://img.shields.io/travis-ci/hoast/hoast.svg?branch=master&label=test%20status&style=flat-square&maxAge=3600)](https://travis-ci.org/hoast/hoast)\n  [![CodeCov coverage](https://img.shields.io/codecov/c/github/hoast/hoast/master.svg?label=test%20coverage&style=flat-square&maxAge=3600)](https://codecov.io/gh/hoast/hoast)\n  \n  [![License agreement](https://img.shields.io/github/license/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/blob/master/LICENSE)\n  [![Open issues on GitHub](https://img.shields.io/github/issues/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/issues)\n  \n</div>\n\n# hoast\n\nA modular file processor focused on creating a simple ecosystem.\n\n## Elevator pitch\n\nCreating a static page generator can be incredibly easy as is show below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`),\n      frontmatter = require(`hoast-frontmatter`),\n      layout = require(`hoast-layout`),\n      transform = require(`hoast-transform`);\n\nHoast(__dirname)\n  // Exclude layouts.\n  .use(filter({\n    invert: true,\n    pattern: `layouts/**`\n  }))\n  // Read file content.\n  .use(read())\n  // Extract frontmatter.\n  .use(frontmatter())\n  // Transform markdown.\n  .use(transform({\n    patterns: `**/*.md`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Layout files.\n  .use(layout({\n    directory: `layouts`,\n    layout: `page.hbs`,\n    patterns: `**/*.html`,\n    patternOptions: {\n      globstar: true\n    }\n  }))\n  // Process.\n  .process();\n```\n\n> See the [static page generator example](https://github.com/hoast/hoast/blob/master/examples/static-page-generator) for the full example with in depth comments including dependencies and source directory.\n\n## Table of contents\n\n* [Introduction](#introduction)\n* [Installation](#intallation)\n* [Usage](#usage)\n  * [Command line interface](#command-line-interface)\n  * [Script](#script)\n    * [API](#api)\n    * [Asynchronously](#asynchronously)\n  * [Debugging](#debugging)\n* [Modules](#modules)\n  * [Build-in](#build-in)\n  * [Usage](#usage)\n  * [Making](#making)\n  * [Browsing](#browsing)\n* [Planned](#planned)\n  * [Modules](#modules)\n* [Known issues](#known-issues)\n\n## Introduction\n\nHoast is a modular file processor focused on creating a simple ecosystem. The original objective was to generate webpages using a minimal system, but in addition to static page generation it can also be used for a range of different applications.\n\nThe system has been written with several goals it mind, to be small in size as well as easy to use and improve. The result is a modular approach some of the advantages are:\n1. An incredibly small base system, at just a few hundred lines of code and only two dependencies.\n2. Highly customizable as modules are task specific therefore you only include the modules you want. This ensures you have a deeper understanding of the build process.\n3. Modules are quick to create and allow a large portion of people to contribute.\n4. Maintenance is easier as the code base is sectioned up and simpler to follow along to.\n\n> Another key advantage is the environment the system has been developed in, Node.js, which utilizes JavaScript the language most commonly known by web developers who this project targets with static page generation.\n\nThe order in which hoast works can be broken down into three main steps.\n1. From the source directory all files are scanned.\n2. Each module manipulates the information presented.\n3. The results are written to the destination directory.\n\n> This tool has been inspired by [Metalsmith](https://github.com/segmentio/metalsmith#readme), the goal was to eliminate most of the dependencies and further modularise the system as well as improve readability of the code.\n\n## Installation\n\nInstall [hoast](https://npmjs.com/package/hoast) using [npm](https://npmjs.com) either locally to use the script version or globally to use the CLI tool.\n\n```\n$ npm install hoast\n```\n\n```\n$ npm install -g hoast\n```\n\n## Usage\n\n### Command line interface\n\nIf you are more used to using a CLI you can do the following.\n\nInstall the global command:\n\n```\n$ npm install -g hoast\n```\n\nCreate a JSON configuration file with the options and modules.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": {\n    \"read\": {},\n    \"hoast-transform\": {\n      \"patterns\": \"**/*.md\",\n      \"patternOptions\": {\n        \"globstar\": true\n      }\n    }\n  }\n}\n```\n\nIf you want to re-use the same module multiple times you can wrap each module in their object and change the modules property in an array as seen below.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": [\n    {\n      \"read\": {},\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"A/*.md\"\n      }\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"B/*.md\"\n      }\n    }\n  ]\n}\n```\n\n> Do not forget to install the modules as well.\n\nThen run the help command for more information about running the CLI:\n\n```\n$ hoast -h\n```\n\n### Script\n\n```JavaScript\n// Include library.\nconst Hoast = require(`hoast`);\n// Get build-in module.\nconst read = Hoast.read;\n\n// Initialize Hoast.\nHoast(__dirname)\n  // Add module.\n  .use(read())\n  // Start process.\n  .process();\n```\n\n**constructor(directory, options)**\n\nAs with any constructor it initializes the object.\n\nReturns the `hoast` instance.\n\n* `directory`: The working directory, most often `__dirname`.\n  * Type: `String`\n  * Required: `Yes`\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**use(module)**\n\nAdds the module to the modules stack.\n\nReturns the `hoast` instance.\n\n* `module`: See [using modules](#using) and [making modules](#making) for more detail about the parameter.\n  * Type: `Function`\n  * Required: `Yes`\n\n**process(options)**\n\nAn asynchronous function which goes through the three steps mentioned in the introduction. It scans the files in the source directory, cycles through each module, and writes the result to the destination directory.\n\nReturns the `hoast` instance.\n\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**options**\n\nThe options object which can be given using the `constructor` or `process` functions.\n\n* `source` The directory to process files from.\n  * Type: `String`\n  * Default: `source`\n* `destination`: The directory to write the processed files to.\n  * Type: `String`\n  * Default: `destination`\n* `remove`: Whether to remove all files in the destination directory before processing.\n  * Type: `String`\n  * Default: `false`\n* `concurrency`: Maximum number of files to process at once.\n  * Type: `Number`\n  * Default: `Infinity`\n* `metadata`: Metadata that can be used by modules.\n  * Type: `Object`\n  * Default: `{}`\n\n> The defaults are only applied when the constructor is called, the process` options parameter overrides what is set earlier.\n\n### Asynchronously\n\nHoast can be used asynchronously via script, two examples are given below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  .use(read())\n  .process()\n  // On end.\n  .then(function(hoast) {\n    console.log(`Processing successfully finished!`);\n  })\n  // On error.\n  .catch(function(error) {\n    console.error(error);\n  });\n```\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nconst build = async function() {\n  let hoast = Hoast(__dirname);\n  try {\n    await hoast\n      .use(read())\n      .process();\n  }\n  // On error.\n  catch(error) {\n    console.error(error);\n  }\n  // On end.\n  console.log(`Processing successfully finished!`);\n};\n\nbuild();\n```\n\n> As you can see in both examples the hoast object is still available for further usage.\n\n### Debugging\n\nWhen making a hoast module I highly recommend activating the debug logs by setting up the environment variables as well as the [debug](https://github.com/visionmedia/debug#readme) module.\n\nOn Windows the environment variable is set using the `set` command.\n\n```\nset DEBUG=*,-not_this\n```\n\nNote that PowerShell uses different syntax to set environment variables.\n\n```\n$env:DEBUG = \"*,-not_this\"\n```\n\n## Modules\n\nAs mentioned before the modules handle the logic that transforms the file information into the desired result. They are chained one after another and fed the results of the module that came before it. At the start the only information available is provided by the scanner function which performs a recursive search of the source directory and returns an array with objects of which an example can be seen below.\n\n```JavaScript\n{\n  path: `mark\\\\down.md`,\n  \n  stats: {\n    dev: 2114,\n    ino: 48064969,\n    mode: 33188,\n    nlink: 1,\n    uid: 85,\n    gid: 100,\n    rdev: 0,\n    size: 527,\n    blksize: 4096,\n    blocks: 8,\n    atimeMs: 1318289051000,\n    mtimeMs: 1318289051000,\n    ctimeMs: 1318289051000,\n    birthtimeMs: 1532801006990\n  }\n}\n```\n\n> For more detail about [stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) see the node documentation. The functions as well as the atime, mtime, ctime, and birthtime are not included.\n\n### Build-in\n\nThere is a single build-in module which reads the content of the files. It adds a `content` property as either a string or buffer depending if it is utf-8 encoded.\n\n```JavaScript\n{\n  content: {\n    type: `string`,\n    data: `Hello there.`\n  }\n}\n```\n\n```JavaScript\n{\n  content: {\n    type: `Buffer`,\n    data: [ 71, 101, 110, 101, 114, 97, 108, 32, 75, 101, 110, 111, 98, 105, 46 ]\n  }\n}\n```\n\n> This module has to be called before the process function or any module that expects the content property to be set.\n\n### Usage\n\nThe following example copies only the markdown files from the `source` directory to the `destination` directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter to only include .md files.\n  .use(filter({\n    patterns: `**/*.md`\n  }))\n  .use(read())\n  .process()\n```\n\n> In this example you can see why the read function is not done automatically beforehand. Since you can now eliminate items from being further processed using the [filter](https://github.com/hoast/hoast-filter#readme) module before the read call is made.\n\nYou can re-use the modules after you have called process as seen below. The following script will copy all files from the `sourceA` and `sourceB` directories into the default destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  // Read file content.\n  .use(read())\n  .process({\n    source: `sourceA`\n  })\n  .then(function(hoast) {\n    return hoast.process({\n      source: `sourceB`\n    });// Read will automatically be used again.\n  });\n```\n\nIf you want to start with a fresh set of modules all you have to do is remove out `hoast.modules` property. The following script first copies all markdown files from the default source directory to the destination directory, and then copies all text files from the same source directory to the destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter out everything but markdown files.\n  .use(filter({\n    patterns: `**/*.md`\n  })) // Only .md files available afterwards.\n  .use(read())\n  .process()\n  .then(function(hoast) {\n    // Removing out modules array.\n    hoast.modules = [];\n    return hoast\n      // Filter out everything but text files.\n      .use(filter({\n        patterns: `**/*.txt`\n      })) // Only .txt files available afterwards.\n      .use(read())\n      .process();\n  });\n```\n\n> See the [examples](https://github.com/hoast/hoast/tree/master/examples) directory for more in depth usage.\n\n### Making\n\nIn the simplest form the script below is a hoast module. The first time it will be called as a function and arguments can be passed on so properties can be initialized or validated. The return of the function is another function which will be called every time files need to be processed. Hoast is the hoast instance and has the options property assigned during via the constructor or process call. The files argument is an array files scanned and ready to me transformed.\n\n```JavaScript\nmodule.exports = function(options) {\n  // Prepare anything.\n  \n  // Return module.\n  return function(hoast, files) {\n    // Perform logic.\n  };\n};\n```\n\n> For future proving and compatibility with the command-line tool use a single options parameter in the exported function.\n\n> See the [remove module](https://github.com/hoast/hoast-remove#readme) for an example.\n\nThe modules can also be asynchronously by either adding the [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) keyword or using a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  // Return asynchronous module.\n  return async function(hoast, files) {\n    // Perform asynchronous logic.\n  };\n};\n```\n\nYou can also return a new files array if you need to overwrite the existing one, however it is recommended to iterate over the files using the forEach function instead of map or filter. Use this power carefully!\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  return function(hoast, files) {\n    \n    // Override files.\n    return files;\n  };\n};\n```\n\n> See the [filter module](https://github.com/hoast/hoast-filter#readme) for an example.\n\nSome modules might require to be perform logic after all options are initialized or after all files are written to storage. To accommodate this you can add a `before` and `after` function to your main method. These functions can also be asynchronously and are called in the order the modules were added.\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  const method = function(hoast, files) {\n    // Perform logic across files.\n  };\n  \n  method.before = function(hoast) {\n    // Called before the files are scanned from storage.\n  };\n  \n  method.after = function(hoast) {\n    // Called after the files are written to storage.\n  };\n  \n  // Return functions.\n  return method.\n};\n```\n\n> See the [changed module](https://github.com/hoast/hoast-changed#readme) for an example.\n\n### Browsing\n\n* [Changed](https://github.com/hoast/hoast-changed#readme) - Filter out files which have not been changed since the last build.\n* [Convert](https://github.com/hoast/hoast-convert#readme) - Convert the content of files using a specified function.\n* [Filter](https://github.com/hoast/hoast-filter#readme) - Filter out files from further processing.\n* [Frontmatter](https://github.com/hoast/hoast-frontmatter#readme) - Extracts frontmatter from files.\n* [Layout](https://github.com/hoast/hoast-layout#readme) - Transform the content of files using layouts.\n* [Rename](https://github.com/hoast/hoast-rename#readme) - Rename the path of files using a specified function.\n* [Transform](https://github.com/hoast/hoast-transform#readme) - Transform the content of files based on the extension.\n\n> Feel free to add modules yourself by making a [pull request to the repository](https://github.com/hoast/hoast/pulls).\n\n## Planned\n\n1. Expand tests of `hoast` and other modules.\n\n### Modules\n\n1. `publish`, control publishing mode of a file using the frontmatter.\n2. `livereload`, allow for live reloading.\n\n## Known issues\n\n* Access modes of directories and files are not transferred.","readmeFilename":"README.md","_id":"hoast@1.0.0-beta.2","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-r8N/OF0cChjCwawZ/Pw8HNb/ubOjtrxIMmrwMWz4+M4Yh0uXSKUEE2zOQ6jeGjs8qmpyQPnfBXZsQzHZpaUSkw==","shasum":"9a841a4da67751b22a6ff99eb4ceabdfd789285b","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.0-beta.2.tgz","fileCount":11,"unpackedSize":35272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq2JuCRA9TVsSAnZWagAANY0P/3/tKp1RLT81zxtyKpj8\nAQi/BbF3lqSXTK6TAkkFaYCCNXJdCFDUVtuzy4gWNb2FOQ8ndDhMOPnvSQeE\nqawhCoA8SnMi2O3eNSEDjrm/W03/LcvegSAuDPOhDnqxrlKjs79OYZ7P0sza\nNsRvUXi5XHtBxvQA0HX+pURgSjEn2Je4SKeXxpvvwJzGZptAjxlbw7qvwdse\nnvsN0VY0No7OdvtKTcPPgr6RNO2KGFUdoM4iT5Ef9FNUt4TzQv2pyCO/r8Zj\nwjwS5UfSjvJ2zx3ihVYabP77acgV2fi2R9UwX6zB2FskMLd1ieieKjWJy6So\nEb3SSb9Kv4x1HHBlefMjknKpuYeTOkJaFTDb0W/mBTyZv3NvvnchOQuqaAuh\nxlggkmPHQkfbSOAyMBByOww2VqQyeYlvWfEk57v1hovArkpU7Wgxc1wCUDoH\nTzpLoPQ9YUHvUHNs+A+uDRmqQKL37bAWK/qgiIxtJsaDj+sVCrYcScg2Navq\nmX+t37pfOZktQqAOJ1Hetbj3onyqo9OVLj6wBzZ9Rh/EpeWzbsltVQVQsEq2\nVF138EssoXSkGwr3uJLlNh4UUj/793Cg5ukgaiHwd/PnxC9o53PQ5Fl7X+P4\naDICtf4OZ7kCbr6vwlfJK5Qc/zrFSHHczrVFPyRaZ7shu+nmounCBz5EwrZz\ndoht\r\n=DAj/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF05BUAquSCVd+3uPGHFWwwXFbaoQPGvJL1IuG45uSSKAiEA8hQyZa5cXV80usr7nwWrtXZLL+CO2t+lMUSZQO78JuE="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.0-beta.2_1537958510179_0.60362810667364"},"_hasShrinkwrap":false},"1.0.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.0","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"452f43cc803e3eab54a4942a4f539c5dcb1d3f99","_id":"hoast@1.0.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-9MzuqqZMK+ePZKHB7uBb7QCGZ9M3ikOYymlqaB08aNwinKPZJhhFlRXPfU6B9TPUHmKJDsllr51Vm1lTWW6Qkw==","shasum":"3f4be1c5a1b54f46421b12ce82668b40d2b73592","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.0.tgz","fileCount":11,"unpackedSize":35265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq5dLCRA9TVsSAnZWagAAbacP/2zspfPwnA6YBiGZ2YpH\niYjGcrnk1bRtMXeEoy3V1lgckFULQ4t+xQc1GjKNUm5+ZJkc7zjV2k42FyVt\n3VKob0BgFwQ6VWCZXOlzjp/xgOnBwsaowKtDk+uhbBFPoHNORb57uwXJnNJm\n5yF2uqJCorbSZLUvZfwwiTbkBE0+A/QoDmUXyOcjwDHMYypqcAlHhMDY6mbK\nOLGYGyuDIu1c2KQ4+Fw1eKn6AvZ78nTBnzcrIH46sIs9/d4/WSrHNU9gr40Z\nc0zsBGAS4dknuLgDJOfGImQ2chFq3d+aeiCf0plAyYojhNiwScIreW264byw\nPOdu6LTTBcZzkLoiiUH2O12i6+AeEt0o2m2P0FCj4M5w+CbcCVuyHGMIRryV\nspm46KEOCId9FROAbcCDQo7a5zWZod+Tlx4t+yfmkOdAW2H3VSW/M5aX7aLa\nn7/nyjl+o++RXmRIcDR34k5U/0pT9hcfB3uuvX07TfRCSEH7w5+4ORqUK/a5\nV04pLK0IUBM3aNwusWr0CGi2i/CnVGb2cty7US+sEFWiBHikqv3Ud3M0mZEO\nOVMWrfm43fhh9amriV+RY2HeRRdVlNEFVfIo1X0weBMJqnicHKMpuRNfNNn4\n8Zvye0ic5+FF/ZyOHUGr0mIyNkI55DdEYK09ynSPj3cDefy2uGAFE5oeL2lC\np99P\r\n=n+yh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwkUOotwRT8HO5+DAmokWcHxzzJWvBpk+zQGMaYCfX+AIgWI/CUK+ZoCSkv8hu4fEPPMTavu76wmF4t0NNgVZUy7E="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.0_1537972042126_0.6412873470291234"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.0.1":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.1","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","web","website","webpage","static","page","generator"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"411a4a81ba631b31de4633e5426e054ef96526f4","_id":"hoast@1.0.1","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-CgB6ubY+yIyWHgDpgjSEHCxBWOT7fJ1RGln42b8AwP14bPyygydUQ1YctECkjSCwId/AmJzPRdQ5EW9OSTJCug==","shasum":"5abc6d138c3089cb763824551f9f0df44f77daee","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.1.tgz","fileCount":11,"unpackedSize":35753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrjMNCRA9TVsSAnZWagAAsVAP/A4wPTiGyswskmSYCVXW\nYfb7dPMvRayY9XTFedq1WDDDdiq3pl6iCCJafFolmz+KY+8n/Nhmf86pxX7V\nXq9rcZSvJcfCZuREtsKZm/1uYPqa7GXi31iOdvY8fBlOdM52638kGL+LXJrF\nRTXP6F6YsOzvALh0XpA+05W/bio2vXKHd8Dwr1D0bQ+5LxKDf4lb9ywOWECr\nIv45adKVoVObZUgew0d2EGmq57oTLEy3FmDW04OBRSSh7cELLPtBBs07hxHn\n23ffgrj2z3tlRj7Cy+bCGJi4WAsGQhD2Oz/orkCrSVAg40rbtRjbOzsPr6k3\nVsi2b9j1r3I6TTaLV6utDS57RfkQgBFWvy7XgEcVGwCJGrJjvuMGanLfAM6a\nbusaZE9yCio8r5h+qz3q0D1KxWs27+BGedWTWWsgIG28+na3jwi4TgqamIyZ\nAidaHybVuwK6DFFHWvMlBat0D0rAvXicVCMsdziCno2RX12ZYUwwofQzfH0F\ngTDZ6lIbhGI/5hqdS686wH3rGZm2XoQS3zsm7ta/GGg9kl+TEGKZeznil+Zd\nzyibXUCKm6zP+cTsIcxao8QdJqsCRnOetfAHtDMxdVmXtqFwYqDU1ERiIeCY\nKXvYMlK3u9NIcwHyc0x+GYRYc0NMxyYBx+fRnBkxlnMsD/w7BvCVK0lk8aTj\nvFOz\r\n=9TsB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvO3IZ/9EhBDOY6I5LuXhJssYbZ1zuakaphI+xXMqdLwIhAK2nSYKA7mPZFjVLzk63QVlHM1n6cATgFdi40COShzPY"}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.1_1538142988482_0.01614303816632301"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.0.2":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.0.2","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"de27a32d9d7b73c32ce226f7182732128dd1e31f","_id":"hoast@1.0.2","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-b3YzC1fGKZU5DPVLjxscOZx+4ZFUG0JNXGDlxpS+Sna9RbQ7RJokLgh6d35SREcIrcBeBlQ/2TyJJdCqf59O8w==","shasum":"bfb918ba9c909d45697007fd71e5338b8e9d5c5d","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.0.2.tgz","fileCount":11,"unpackedSize":34274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbvixhCRA9TVsSAnZWagAA8s0P/1Dt/6TeS8mJ/4aW0ISP\nJnIYkGO5SC+hCdk5N0v+AIRNSlYZq9iJshy5u27NWDge/xlOh8ZDAjSYJurJ\nPOQEIVITZ9hJSG1GjA7kT7oVeoQlv0AwH6dwb4Djhy60pcPSoTdjiVOof9Bh\n0YDggKxi70pVSJW4edE2Wp+y+sUbp90mvzAEI55S4GbBRK3vEMI4xKolwOaU\n62UM4axJiv8mLYhJV02rd6nv5Nyu9swd4udBTs7W/+TOiW04+7Bty+maBfGy\nKF1ZWquFbHd7aDpUQwVG2Z3xbZDBLVBtdQ84xQYRIp8qpIXz4qoZKXpcwJjy\nwMFFKISj1cPTLuCvVvsks4bikLUOZm46OeY/kqiYhqVabGuKnc1yftUbOl2t\ngjTTG6DV1/MCf80p15VOELdpK14Rb+Anco4zvlgzpMYv0ekgNZYmtZr7u/vv\nEGznzvHos5rQ7yNlYaTgKzt8/q3lgGc9k3d3YWg2ZM1f28IFF3x38syvEgAd\nIHdzwo86YTnswOQPYF6D1V9VtIYwvqFtZruo4rKbSRArNtXJT3fYJseYVp81\nKsDLD1bQoWoZng1gx9DKgXrr+vDrWx3sEkT9WdyF/PafBM6l0Jiv8pRgyj/R\n289ZJaiJ6i89ww8garASs7FkyOMy2Y5+KUyngeSk1zxzvZtHXXeRT8QIvMKg\nO+oI\r\n=eh7a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrJfEMC2A1bpYB9HduWM8gkhwdBUoOnZBiWDueKiMi9QIhAMq1WNEcodHnsrVGaSiEQ8NHhWhcMtsa80iQ9R5HjzZP"}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.0.2_1539189855956_0.5860186957079265"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.0-beta.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.0-beta.0","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2","planckmatch":"^0.1.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"859d8e68a8ca0ce7865803aa8ce4126ea14a2891","_id":"hoast@1.1.0-beta.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-BB75xg4xzdfg9iqFW8Kut4cWxPiMNy6U2/n4qjE2VaX++V06pszZxXFX5FsltfwLTsNb7Fl9kn06gnhKR1FINQ==","shasum":"086a6c30d4ba2da71847722d5d113f6cccf38ab8","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.0-beta.0.tgz","fileCount":12,"unpackedSize":36718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxz2kCRA9TVsSAnZWagAAc0cQAKH5Ii+rZrUGTBoJgU2y\nB4rl8++lt5hE6f2vqbssOChlkyKdp6vNx5edp3ucQv1tPTqd8JOtYgr7rexe\n37qwEiOxE+PrdFMGrR0T7zLJw/zsLgFvXHcqSHeNx7rGUwRyP9/KYNR6nCMu\npd3VCRAIIqf8fN2oGzGgsAJGdrIsRbYXSgnvvy7hhmSMRcfz9g670G3YxDWY\nJo9Q01grPJ387RGKRr9j4Vq+izNU4uPMQPQW+YMPNebyxF8YOrhKBmkdl4sI\nBswvdp4J0pJFgWcr2B8XjSZSpb3xeMcsMp1id+54ZnBADYL+ib8MWRiIVFw9\n0x+nio4HJZ96hjawoX8YeN4gVoz3h0IPu/A851C5SP19pb0hB0HHNztplm/w\ntiplNTp5gKQm/UvoJjmija/NMk0wMLvBYLlQP7L8bOYC3naQDAqv5n5Dk70o\nrUrCuTJdUKMJ3LPrfQUKChoupc0kz0iJoFWbWXDA5P1BgRP1FeBxajl7N4jc\nbyNRGyJSDXDdq8DZfHCqKGuPf4A2C+Cyrf6XotMwrp+ddIwAj6mqb5HPoGK6\ngAdtauUmcjPrwlJsnTTr4If4VKVWU14wuVwXT67EwDym6lzTJ0yfWuKkJCVr\nwQidtGa+pOh05vDO4XzvKDvdqlfW7Zi3yLeiKr9DfYpmUy9G/IQ6zqT7glQW\nVj8N\r\n=PlX9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUuAMfFVdFuY0d8j2ahScgTZlzP5JKP3emvIcxg54XtAiEAkl6oIMfB/Nu6NA/MOOqVQdsDvXCkE4Y3d3Lxj9d12kE="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.0-beta.0_1539784099565_0.5723375693186972"},"_hasShrinkwrap":false},"1.1.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.0","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test.js","test":"nyc --reporter=text ava test.js --verbose"},"dependencies":{"commander":"^2.16.0","isutf8":"^2.0.2","planckmatch":"^0.1.2"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^3.1.0","eslint":"^5.3.0","nyc":"^13.0.1"},"gitHead":"53f356f861e1b2ec260d94f9c6eae729b7f091e6","_id":"hoast@1.1.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.1","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-eNeLOpS5nq8nKhoYwdqjH5Lc60JyFN3p2R2tTmeaER6CsEpsGlBmOyrM1M75DlpHtKNQQiABihKsI0deucHfBA==","shasum":"060e29008429ba12a74e60dc3b1a55bb05ee8523","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.0.tgz","fileCount":12,"unpackedSize":36711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxz++CRA9TVsSAnZWagAA+AkP/jWK8tSzcHMLsjPkS+77\nkHUtgNdrinvKocu5ZFQVdit9AlNps0I6UojWrqz91/0tJyUs7BZiluGrO3PI\nrLPEBeDq7yFJqYsm3DM03ZFFBWgH1QSqNuuP7Qv8Xez1uXGtWy8AdMBvgnlf\nTf/ZpjzDdABKwOA9NNEb9AMLSeeFpjLPZuNneYKJAPVmWa1P5m8jRqoBxBOQ\nzoIyFVfHgd/tRGo0m+s6cxjskAutxpnCnar5h9+d4ZNo5AKxgBgDg2kURqDO\n8RQW4sO7LXsyUbJKY2INXGbRzuVvCTJ9bQktSNJLKuMq2lEIO/GijLjA20A+\nmP5T5b8XoqPXCFQGtaTiG7Lfo6GqmTjmzPLHBkWoU2ZEWC6nUtBsPz6IjTlY\nATwCvTOSHtj83+hF6/sp8z6N1U/CAfCrLsIGpj/lzUjm4RgoYna+HyzNfjj0\nSjnZs9oo7KD7MPiUrp5YuzhmyUmVfnEdEpiUvh3JmcDD5p6SWXYB17q3aiWn\n8tWPTcNzqKEa2XH4zGutiTzOtsgNeKXQK6q0q7ws/TZq1cNKaQMF1z8C++K9\nliuHP0rxb+8Hpi8xboZNrGRfb4ZVyUJKXiZczJPnFzz7fOZpm+/1nE/Hh9E/\npN6IXqJXHoi1gUqtQ6rZ+80PhoPb0a1rwI8rh3EynszSWRkQQhKv6MVTB7bM\ndswK\r\n=HrXW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDq5DenL4Ew0jW/JBJ5bgBCxW/mTTdIpVt3hBQzJMWPYgIhAL8uOqUm6QNiThm0q6HaytEargd36rNOYZ6xfKidEDA5"}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.0_1539784637917_0.5167471615908568"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.1":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.1","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test/**.js","test":"nyc --reporter=text ava test/**.js --verbose"},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.2","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^4.1.0","eslint":"^5.7.0","nyc":"^13.1.0"},"gitHead":"ac5e92b70a7df154decc2e3d8eb71af9af9cfc98","_id":"hoast@1.1.1","_npmVersion":"5.7.1","_nodeVersion":"8.12.0","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-t/3IrhyZcY1efEaK6lvE8Bv4fSadEnlSg56buny5JakNanRibevBoaLMUj2V6CODInATECNKiNTTDwbNEJ3VWQ==","shasum":"dc9028cd9b78f1c01c6ba0bca0d1d9fb9d56f20b","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.1.tgz","fileCount":13,"unpackedSize":40583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0D+nCRA9TVsSAnZWagAAoWgP/i7JbZWl7Rn/L+CTjBfb\nYoaNFwoyoH+DaOrVS5tDY1hVm/FCYg2uuT813/lBjW7iBgCABRkCz2cKPqsy\nKsx0gWkCDVrr44o594S23PE1wwna4UPflCzRTFiQ0IXYIwvxkp2e3rPN9mAZ\n1Aud+UNDIvsXKQfNjgw+tSff2iJm6sxjwGW6gzI6S0gTT+D54bHVIaebU6ME\n76IbDXv32PMiwfI3olOWQKI0HtZ0MYC381fZjNTnnXVfeIkrh+atvRoEbNaj\nW2iAWWErVNxrB8l+1cKHRrPjp96W/ltktehDmTlHBzyK7jns9px3eSWrEDb8\nxzTz2QdBqkjNzBqLzr94peopjTRHOVy6yT1c42ua+3rn9FQabCt0RqFXvgMI\nvCw6v+HuSvqQAykI7QPlqJojJlq19HMumOF8RRXfh6SbKQimI5H/1RtC12tR\nMDLwsBtGTo88b6CBn2tjyCaqvEkgMULFjuA9jUQDCoduTuaDI8W1P5VS+ecg\nRpIIcwDnBOcoBbjtLNitEYytkRkSfY3b03eI5a5tULFxF9JNgZRtDr+biRWJ\nmKM1JTlcr/KdQAml5aaypjT9espzRC6NUA7B3mKvXIpgj7UJ9MkDGwBd7wCO\nyR+NTmJwggAPGDlKGtFnzQ+PttJmPaF7QdR5E5BmchtE07KKbs5Yk5Df1pTI\nTjxs\r\n=d44u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEdXf/jNpZFuXH3871eGEKkKfRq45m8UhyJRcavPSq/pAiAVABvo3RmCbE0AKZOawL9COBAWAoBoMUDxTtC8uVt7JA=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.1_1540374438243_0.3450065988687281"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.2":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.2","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**.js bin/**.js test/**.js","test":"nyc --reporter=text ava test/**.js --verbose"},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.2","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^4.1.0","eslint":"^5.7.0","nyc":"^13.1.0"},"gitHead":"ac5e92b70a7df154decc2e3d8eb71af9af9cfc98","_id":"hoast@1.1.2","_npmVersion":"5.7.1","_nodeVersion":"8.12.0","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-fSyQ28PESkFsOY3+vaz0lZNraklI/dstsIsav20Z7dC2X8L6E00e//ZGK9xb8IGBSOhX5qV9xlybsoUE4xQEBQ==","shasum":"d1ee8e02c408193e021897fafbcd22a7ba7bae27","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.2.tgz","fileCount":13,"unpackedSize":40589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0KP3CRA9TVsSAnZWagAAKlgP/0/vD6/Kq921IK26zhPw\n4kWEMmgrQNpUCcFXfx9g68E6JhOqP4zWQmAxxMkjhs7P+52Eg3EZTotiYPAL\nSiBNBN7hn/HNIWblOtoQDPr4/TS+ClZFf2uunrNXHcUehnfWUQpUlx0hOWzC\ne13gZdzcOeQZcVPIU5YheZYaJ9MkbF1ki2njpVHuzWjbRveLzFjYwHiZkKo/\ng3NGvg/bRfDkPTqYxUPAIc8D7xZ1IE2ydydUoDPpbyNUB9pxnXQMD+XPVwmD\ns8mlYjUNvbfONNDK66MKXirEe73NohRGGCnlPQdFB1SsOHuHzxdONqsKrjFX\n7xMT+/AyluuUaTtRtnwdISYmFy6bvfFz0a9DCQOuaTFmJCxa9ckQDgr1wKyP\nSWYMTREDxPKlPyBPJ2bubZogmOr1yZGvQGewdHvoyAQZ7GUosCCKu/532XT7\nDVLU8UqikymqiJwPA3hc5HFGg4jOlc7fDeuzZt5ytIuYeQk6rICjzSRS6fgq\ndkqjA7viRamviYLTRa/QFCwt4eKNKzgvqIvnEUp/DBI7/xrCR8/LzYQbDG/R\n9+eYe7Fu0CKxtBUhtDBQDaFrSgE1yyQCZVyoGRtVPMLuwzGg6X9zYJ4yT6Z4\nFD/9dVQQnSwhp4uyFaC00QNLBfxyBeeKGdnnObb0uGuNv0p2x1by6fg1H6q1\nP4DV\r\n=p0uT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBYVEAI1CVu92cW1esCqX29QgndxvJ9gLVq7gQpccplxAiEA4mJ0G+4DUBl2RNSBFiUzEplStCb0xt05OcLYQfl5CV4="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.2_1540400118100_0.6005350423033948"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.3":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.3","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\" --verbose"},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.2","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^4.1.0","eslint":"^5.7.0","nyc":"^13.1.0"},"gitHead":"050e70fb916449d5379c2b0b671101ecc5d7d1fd","_id":"hoast@1.1.3","_npmVersion":"5.7.1","_nodeVersion":"8.12.0","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-HXMT3wPjDYIuXH1+TL4xHk3YoXL8LPhDvd/QV+Uhky/OMJOQuq0onZMHv8whwY6il7IlEy0D1/ahidhaltEL5A==","shasum":"77b321edb40e1962dbce4cf40da40de6c1dc171f","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.3.tgz","fileCount":14,"unpackedSize":42184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1eMqCRA9TVsSAnZWagAAP2AQAI6bhfSFDFvHFw56G1w8\noGeYYsHfbVp2eNNuHMZcl1v41U6t5ww0kVSDeiPAQqisPCDrJb3/c6phAFm5\nt8JYqwgyLs9Q8Lr0gdxXI0nBvKIKVrvVYyMBLMwsFVjJSMqtj+Vr34KILcrb\nbMt8/MKHbT7pLQBwGC+goc3BYp3DOwn7O3mHeV/9X19kOdghBw+HZj0MZvWx\nMYHrvhIxmVbtwkUsO7vbWbufOsueUHDHQz4uR+qbeT4/S0WS5wQ53jQGJndp\nNwmc0/zfRwxlPG8AIKL09WejcZj/w2fuTrnZ+Q1W5XjGeJZ1wxw5lkWrYHVC\n6podnWKKGjb7Lc8Jpdt1jXKh43Gsd/m8G/EAj1btMsPt3biAvejfu9ktpCH0\nZcJBOJHAB0tgx+Zg8QdVx4p08bhVlAP4ghW6gQ/Su0ZWECxvGGxpru9u1ipG\nhWIYqk1/EsZso9paavzsS/zBnYF/OQOYMbbJArPZW1trXgLo9QwSUDd4jHmb\nCcoBlrY/I+2Lhg3Cl1FWKvXHEOy3MILy86CzfcMkbySOyHVwvQFE7uK+8P/M\nVtY5ATmzKkO5iK0xHaAI9U0klU3It4B8onI+ft+bWeb79wXdwPOP11qRET1/\n3v30LQDtbyDUOE32EiQa9eCHg6otOTrj7LqKhPZ4hnb9hr1ciOF86poPcvu7\nYVTm\r\n=9+/3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtoYsAX/X1zB6OsqmcQuPl/xifNTAb26pJ85PPfNbGIwIgNGFgWGGbGHYI4VNGbl6pNSoha9ac0LLhn/bWS3hz4z0="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.3_1540743977556_0.5682330950728527"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.4":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.4","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\" --verbose"},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.2","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^4.1.0","eslint":"^5.7.0","nyc":"^13.1.0"},"gitHead":"050e70fb916449d5379c2b0b671101ecc5d7d1fd","_id":"hoast@1.1.4","_npmVersion":"5.7.1","_nodeVersion":"8.12.0","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-8lntA35AtJ4CfUYaYC1rs9cHLfHhJLXbWA70tLiG5v1yXczIp1DoxJ3VRoGcWA33fNYwvh08nCW1JbmaBNlntw==","shasum":"6644a6200fb1ecb519e430d2124ce0c9543828d8","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.4.tgz","fileCount":14,"unpackedSize":42184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1eOfCRA9TVsSAnZWagAAXt4P/jkS+UBW3HMr50ffPFJo\nKzAeRFi6BCQc1GwAqjf1SbbWIskc8znZ9Ett63neleW3Rpil55p87ZD6+5Ne\nrm2oqmGnQT8xdPPVg72Q3u8cFkx31uj9bFv7usT7TpTkqBgtCq8kTzkj6ZOl\nLahpI3wTpUDOIvviRPvyMMeMl9MkeYOkhPM7d9NtRMTKddjP1oL7H1IAb7sp\n3r2skGjlfj+yN8gQESI8Hg3jRpYmxNC9GFuntClggO1JGKHQLhBdXv9eG4sc\ndf3XOXQ6gBiHKEnLqAmnFCshUyblftjXWLiwmyqSwC3z9UZAPeRTxKOchWbY\nLpstNxfmXRqabFyOmuHWsRTG5ROc86quOP72TfpCQ8Wc1MIQnaLYw/bW6DU3\norNHGDlYcoXm4xhoqlALLCZxjBPtZY0pZeMsjb8U7+tM6cfRimTlFh6skVXV\n7nIwTdLwgt+SYgVY5W/iJBre6DeGdZ71LVZMk4JwlMYSnE7t1ye26PMkRKK1\n1+F23xJvf5bzHk+sTp35wn959PFsUOR+JZ/OJ6eHXurrzr07s67ogNGLGbw7\n7kPdti9CHwII6xCGAiMY3nuG31hMYHCsPmzd1qmO/I37QZMn/F7xbfPkZAWV\nCu0PyFUk/QVW/8YI+KMu9mpOFu3UHkhw/ZHMRwL0NBu7lLJ2nJS6JyGbiUL/\nucHC\r\n=GLlr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDu51a1ITjAPvjc9zLbBJSomHJ/Ne/Nd3dJlYghH2bkDwIgZ1XyuwuGrh/j9OpPR4EgP6VPy/ASNldGrGi+vPv3kXc="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.4_1540744094558_0.7879740870715923"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.5":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.5","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor"],"homepage":"https://hoast.github.io/hoast","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"main":"library/index.js","bin":{"hoast":"bin/hoast.js"},"scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\" --verbose","next":"npm publish --tag next"},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.2","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^0.25.0","codecov":"^3.1.0","debug":"^4.1.0","eslint":"^5.10.0","nyc":"^13.1.0"},"gitHead":"e33bb93fdc14bdca26c7051d1a34c8dfb3980d3f","_id":"hoast@1.1.5","_npmVersion":"6.5.0","_nodeVersion":"10.14.2","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-Cwwwo/gi/KntgxHESLLhNN7tgnpKh6xK0tHfpIsNEnHIUElGHkzSC9UAhzpqAzTwm/ghUoGzOT7HTtYbPJJaYw==","shasum":"9439be6195ca04a1e11f3a6425d276d5b599cb9d","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.5.tgz","fileCount":14,"unpackedSize":42229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEUCLCRA9TVsSAnZWagAADusP/RbRIKaYL3QH9optbkuQ\n5JirOO4ZnQp8iDUNIM2xlxG23t46cwSzjs03D3b6Yoj0N9zKiIfLzWnW5Y4H\nhz9GqWnhmgD+UGXwfBkEkfD/kv72YGpd4M2ZTktwQ92ebP73lfwtmElyXfva\nN0SLKCLtD9ByM99dMGCzxOl65/gkkeIK7YxfsTfIMHSqxGDxtZep6pYHj21h\nbA0B9D+hNf6KzYML7QVfa0OM2LFkYLxhP1I+qOpC4NNKp50MST59AcmupFUW\nUsfUcY2RIYY2cpj/hDnhPjiqvKU7JuO4/7W0yvihpjNRmCtz5nubh9Cdgdsi\nU3FI7TyyaQI7sEibBIH1C4NYzRjt0697oZwYHY0iZjKl82Vf18l/0ly0lkq3\nLUnHEpFMVzDd2rpradRH5ehpE9PjqH8hOnt3LZ6Vrj5+RaxDYJEXT353LFXg\nMSB4TidfvFmf3X9MICXeNLfScrKJjqdUOL+A27TxokpaZLPWqf8uEixHXdZ4\nZ1DWtOIcc+L75Y907aNwpRDYxePLntB6vSy6DWMBTBPbSr/K57pm+uW4SqTS\nc5rDcj3DAEW2VgnRHzhS4ZcUNH6VrpsxPIrpCc0EPtP17vhXwuah/V0RJpvx\n7WYm7khJmqx341fXkjXXShUukwL0nGYg9cRCdEj0k493X1uowb5EDy5aRyUw\n2tk3\r\n=CYmt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGqR1ojwoY+mqsyiycCPSYM43M/1crK77gov+hGZL1DAAiB61ILAkmBpTvp6NhTS3POH5x6PX6/0iWoqHJ5lYXu7fA=="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.5_1544634506661_0.560296195237002"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.6":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.6","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","task","automation"],"homepage":"https://github.com/hoast/hoast#readme","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"bin":{"hoast":"bin/hoast.js"},"main":"library/index.js","scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","posttest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\""},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.3","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^1.1.0","codecov":"^3.1.0","debug":"^4.1.1","eslint":"^5.12.0","nyc":"^13.1.0"},"gitHead":"26ddd6b10417ec8681bc2854deeca1757f7392d1","_id":"hoast@1.1.6","_npmVersion":"6.5.0","_nodeVersion":"10.14.2","_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"dist":{"integrity":"sha512-e6h5Q3+ysx1/qulDUNvggDdcurMFZIzvrVVl0aOf2vEHh4scXB2xZnmlqlhhZTMvOulKKrEfDlYds2LW0vqtkg==","shasum":"795e671486dac54645551a6996e5da57702467f6","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.6.tgz","fileCount":14,"unpackedSize":43363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSdkHCRA9TVsSAnZWagAAoccP/2iE6u6H9UgVbmH5+ozo\nGyZp3AyIALKwrLDlnPMMmceI+wUZk32u8REPlEVjLFJrLO9Bq1Wu92nTDDeh\nbTAgPm7dbI/qqzG9OriXFCa+KW1uS4S3EZc3Y68tyKY5/GBjEiv7IrfUzvpd\nbm2kxQCzCU3HwTz4ZtOvmPsWgegPZbaK4mlWwuL/ZYSSI8aK5VznMowoi8Lg\n9vWJAtxQ41E63/l34CNPX+Vlash6WRFQqiNI3pWvcFl1GHqSvdHD1TVlQS7h\nMeU0sQDUMRAA8A3sdFfd2k18Yh4/Z4/8jN+pPWrPvh0ijxPhd3HrT+y35M1L\n/tgdF90LOkOjCvtLRLnhP1WNdsbthE7S1hx3vOD7zqpTPdvNTR9fZpaIiUuZ\ndmCZz9gdSxKj6SvlGZp6pmuJFJ/apLaU7MxG7flw+f786KuPdraNNYsNcLod\nqkfea8+F0X+5EOGtJwKZ9EMYFBFBUj8HWZavLqh+w7V43yOol4ZnnAJvquLj\ntUOtzNWvn2KnSdDAjddpHVaD7WgPtCgdoKFTP3HmNX1lilaXxAIk1kmQEhoG\ngwWX70bAO/sENyP4n4jj1UrNL9d9vqJathx9fIXkhYN9Yt288fYsDJm/K+BL\nXi70dHREEKCmtOprqk/Rl5QbbReZOwGy7gWfV0oLUpP8SbZ/nrH+cKY+UVPG\nnDt+\r\n=A84d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvn878h83bLIa4y/xIx4lvw1GMjouTHRV1x+CKWUosHAiEA3CsNY62jDx/sPgriNJor76U4Ig3GFoap9SJFvTimScQ="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.6_1548343558843_0.8300160882535774"},"_hasShrinkwrap":false,"deprecated":"Moved to @hoast/hoast."},"1.1.7-beta.0":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.7-beta.0","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","task","automation"],"homepage":"https://github.com/hoast/hoast#readme","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"bin":{"hoast":"bin/hoast.js"},"main":"library/index.js","scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\""},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.3","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^1.3.1","codecov":"^3.2.0","debug":"^4.1.1","eslint":"^5.15.1","nyc":"^13.3.0"},"gitHead":"065d244599b13fe0d13f05eaf004d5991e89c355","readme":"<div align=\"center\">\n  \n  [![](icons/128.png)](https://hoast.js.org)\n  \n  [![npm package @latest](https://img.shields.io/npm/v/hoast.svg?label=npm@latest&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast)\n  [![npm package @next](https://img.shields.io/npm/v/hoast/next.svg?label=npm@next&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast/v/next)\n  \n  [![Travis-ci status](https://img.shields.io/travis-ci/hoast/hoast.svg?branch=master&label=test%20status&style=flat-square&maxAge=3600)](https://travis-ci.org/hoast/hoast)\n  [![CodeCov coverage](https://img.shields.io/codecov/c/github/hoast/hoast/master.svg?label=test%20coverage&style=flat-square&maxAge=3600)](https://codecov.io/gh/hoast/hoast)\n  \n  [![License agreement](https://img.shields.io/github/license/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/blob/master/LICENSE)\n  [![Open issues on GitHub](https://img.shields.io/github/issues/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/issues)\n  \n</div>\n\n# hoast\n\nA modular file processor focused on creating a simple ecosystem for task automation.\n\n## Table of contents\n\n* [Elevator pitch](#elevator-pitch)\n* [Introduction](#introduction)\n* [Installation and usage](#installation-and-usage)\n  * [Command line interface](#command-line-interface)\n  * [Script](#script)\n  * [Options](#options)\n  * [Debugging](#debugging)\n* [Modules](#modules)\n  * [Build-in](#build-in)\n  * [Usage](#usage)\n  * [Making](#making)\n* [Known issues](#known-issues)\n\n## Elevator pitch\n\nCreating a static page generator can be incredibly easy as is show below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      frontmatter = require(`hoast-frontmatter`),\n      layout = require(`hoast-layout`),\n      transform = require(`hoast-transform`);\n\nHoast(__dirname, {\n  patterns: [\n    `*`,\n    `!(layouts)`\n  ],\n  patternOptions: {\n    all: true,\n    extended: true\n  }\n})\n  // Read file content.\n  .use(read())\n  // Extract front matter.\n  .use(frontmatter())\n  // Transform markdown.\n  .use(transform({\n    patterns: `*.md`\n  }))\n  // Layout files.\n  .use(layout({\n    directory: `layouts`,\n    layouts: `page.hbs`,\n    patterns: `*.html`\n  }))\n  // Process.\n  .process();\n```\n\n> See the [static page generator example](https://github.com/hoast/hoast/blob/master/examples/static-page-generator) for the full example with in depth comments including dependencies and source directory.\n\n## Introduction\n\n`hoast` is a modular file processor focused on creating a simple ecosystem for task automation. The original objective was to generate webpages using a minimal system, but in addition to static page generation it can also be used for a range of different applications.\n\nThe system has been written with several goals it mind, to be small in size as well as easy to use and improve. The result is a modular approach some of the advantages are:\n1. An incredibly small base system, at just a few hundred lines of code and only three dependencies.\n2. Highly customizable as modules are task specific therefore you only include the modules you want. This ensures you have a deeper understanding of the build process.\n3. Modules are quick to create and allow a large portion of people to contribute.\n4. Maintenance is easier as the code base is sectioned up and simpler to follow along to.\n\n> Another key advantage is the environment the system has been developed in, Node.js, which utilizes JavaScript the language most commonly known by web developers who this project targets with static page generation.\n\nThe order in which hoast works can be broken down into three main steps.\n1. From the source directory all files are scanned.\n2. Each module manipulates the information presented.\n3. The results are written to the destination directory.\n\n## Installation and usage\n\nInstall [hoast](https://npmjs.com/package/hoast) using [npm](https://npmjs.com) after you have your project initialized.\n\n```\n$ npm install hoast\n```\n\n### Command line interface\n\nTo learn about to hoast command run `$ hoast -h`.\n\nCreate a JSON configuration file with the options and modules.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": {\n    \"read\": {},\n    \"hoast-transform\": {\n      \"patterns\": \"*.md\"\n    }\n  }\n}\n```\n\n> See [options](#options) for more detail about the property.\n\nThe modules property ...\n\nIf you want to re-use the same module multiple times you can wrap each module in their object and change the modules property in an array as seen below.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": [\n    {\n      \"read\": {},\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"A/*.md\"\n      }\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"B/*.md\"\n      }\n    }\n  ]\n}\n```\n\n> Do not forget to install the modules as well.\n\n### Script\n\n```JavaScript\n// Include library.\nconst Hoast = require(`hoast`);\n// Get build-in module.\nconst read = Hoast.read;\n\n// Initialize hoast.\nHoast(__dirname)\n  // Add module.\n  .use(read())\n  // Start process.\n  .process();\n```\n\n**constructor(directory, options)**\n\nAs with any constructor it initializes the object.\n\nReturns the `hoast` instance.\n\n* `directory`: The working directory, most often `__dirname`.\n  * Type: `String`\n  * Required: `Yes`\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**use(module)**\n\nAdds the module to the modules stack.\n\nReturns the `hoast` instance.\n\n* `module`: See [using modules](#using) and [making modules](#making) for more detail about the parameter.\n  * Type: `Function`\n  * Required: `Yes`\n\n**process(options)**\n\nAn asynchronous function which goes through the three steps mentioned in the introduction. It scans the files in the source directory, cycles through each module, and writes the result to the destination directory.\n\nReturns the `hoast` instance.\n\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**Asynchronously**\n\nhoast can be used asynchronously via script, two examples are given below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  .use(read())\n  .process()\n  // On end.\n  .then(function(hoast) {\n    console.log(`Processing successfully finished!`);\n  })\n  // On error.\n  .catch(function(error) {\n    console.error(error);\n  });\n```\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nconst build = async function() {\n  let hoast = Hoast(__dirname);\n  try {\n    await hoast\n      .use(read())\n      .process();\n  }\n  // On error.\n  catch(error) {\n    console.error(error);\n  }\n  // On end.\n  console.log(`Processing successfully finished!`);\n};\n\nbuild();\n```\n\n> As you can see in both examples the hoast object is still available for further usage.\n\n### options\n\nThe options object which can be given using the `constructor` or `process` functions.\n\n* `source` The directory to process files from, either absolute or relative to the directory parameter.\n  * Type: `String`\n  * Default: `source`\n* `destination`: The directory to write the processed files to, either absolute or relative to the directory parameter.\n  * Type: `String`\n  * Default: `destination`\n* `remove`: Whether to remove all files in the destination directory before processing.\n  * Type: `String`\n  * Default: `false`\n* `patterns`: Glob patterns to match directory and file paths with. If a directory or file path does not match during scanning of the source it will not be further explored.\n  * Type: `String` or `Array of strings`\n\t* Default: `[]`\n* `patternOptions`: Options for the glob pattern matching. See [planckmatch options](https://github.com/redkenrok/node-planckmatch#options) for more details on the pattern options.\n  * Type: `Object`\n  * Default: `{}`\n* `patternOptions.all`: This options is added to `patternOptions`, and determines whether all patterns need to match instead of only one.\n  * Type: `Boolean`\n  * Default: `false`\n* `concurrency`: Maximum number of files to process at once.\n  * Type: `Number`\n  * Default: `Infinity`\n* `metadata`: Metadata that can be used by modules.\n  * Type: `Object`\n  * Default: `{}`\n\n> The defaults are only applied when the constructor is called, the process' options parameter overrides what is set earlier.\n\n### Debugging\n\nWhen making a hoast module I highly recommend activating the debug logs by setting up the environment variables as well as the [debug](https://github.com/visionmedia/debug#readme) module.\n\nOn Windows the environment variable is set using the `set` command.\n\n```\nset DEBUG=*,-not_this\n```\n\nNote that PowerShell uses different syntax to set environment variables.\n\n```\n$env:DEBUG = \"*,-not_this\"\n```\n\n## Modules\n\nAs mentioned before the modules handle the logic that transforms the file information into the desired result. They are chained one after another and fed the results of the module that came before it. At the start the only information available is provided by the scanner function which performs a recursive search of the source directory and returns an array with objects of which an example can be seen below.\n\n```JavaScript\n{\n  path: `mark/down.md`,\n  stats: {\n    dev: 2114,\n    ino: 48064969,\n    mode: 33188,\n    nlink: 1,\n    uid: 85,\n    gid: 100,\n    rdev: 0,\n    size: 527,\n    blksize: 4096,\n    blocks: 8,\n    atimeMs: 1318289051000,\n    mtimeMs: 1318289051000,\n    ctimeMs: 1318289051000,\n    birthtimeMs: 1532801006990\n  }\n}\n```\n\n> For more detail about [stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) see the node documentation. The functions as well as the atime, mtime, ctime, and birthtime are not included.\n\n### Build-in\n\nThere is a single build-in module which reads the content of the files. It adds a `content` property as either a string or buffer depending if it is utf-8 encoded.\n\n```JavaScript\n{\n  content: {\n    type: `string`,\n    data: `Hello there.`\n  }\n}\n```\n\n```JavaScript\n{\n  content: {\n    type: `Buffer`,\n    data: [ 71, 101, 110, 101, 114, 97, 108, 32, 75, 101, 110, 111, 98, 105, 46 ]\n  }\n}\n```\n\n> This module has to be called before the process function or any module that expects the content property to be set.\n\n### Usage\n\nThe following example copies only the markdown files from the `source` directory to the `destination` directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter to only include .md files.\n  .use(filter({\n    patterns: `*.md`\n  }))\n  .use(read())\n  .process()\n```\n\n> In this example you can see why the read function is not done automatically beforehand. Since you can now eliminate items from being further processed using the [filter](https://github.com/hoast/hoast-filter#readme) module before the read call is made.\n\nYou can re-use the modules after you have called process as seen below. The following script will copy all files from the `sourceA` and `sourceB` directories into the default destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  // Read file content.\n  .use(read())\n  .process({\n    source: `sourceA`\n  })\n  .then(function(hoast) {\n    return hoast.process({\n      source: `sourceB`\n    });// Read will automatically be used again.\n  });\n```\n\nIf you want to start with a fresh set of modules all you have to do is remove out `hoast.modules` property. The following script first copies all markdown files from the default source directory to the destination directory, and then copies all text files from the same source directory to the destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter out everything but markdown files.\n  .use(filter({\n    patterns: `*.md`\n  })) // Only .md files available afterwards.\n  .use(read())\n  .process()\n  .then(function(hoast) {\n    // Removing out modules array.\n    hoast.modules = [];\n    return hoast\n      // Filter out everything but text files.\n      .use(filter({\n        patterns: `*.txt`\n      })) // Only .txt files available afterwards.\n      .use(read())\n      .process();\n  });\n```\n\n> See the [examples](https://github.com/hoast/hoast/tree/master/examples) directory for more in depth usage.\n\n### Making\n\nIn the simplest form the script below is a hoast module. The first time it will be called as a function and arguments can be passed on so properties can be initialized or validated. The return of the function is another function which will be called every time files need to be processed. `hoast` is the hoast instance and has the options property assigned via the constructor or process call. The `files` argument is an array files scanned and ready to me transformed.\n\n```JavaScript\nmodule.exports = function(options) {\n  // Prepare anything.\n  \n  // Return module.\n  return function(hoast, files) {\n    // Perform logic.\n  };\n};\n```\n\n> For future proving and compatibility with the command-line tool use a single options parameter in the exported function.\n\n> See the [remove module](https://github.com/hoast/hoast-remove#readme) for an example.\n\n**Asynchronous**\n\nThe modules can also be asynchronously by either adding the [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) keyword or using a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  // Return asynchronous module.\n  return async function(hoast, files) {\n    // Perform asynchronous logic.\n  };\n};\n```\n\n**Overriding files**\n\nYou can also return a new files array if you need to overwrite the existing one, however it is recommended to iterate over the files using the forEach function instead of map or filter. Use this power carefully!\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  return function(hoast, files) {\n    \n    // Override files.\n    return files;\n  };\n};\n```\n\n> See the [filter module](https://github.com/hoast/hoast-filter#readme) for an example.\n\n**hoast helpers**\n\nThe `hoast` instance includes several helpers which can be used to perform task common across modules. These helpers can be accessed via the `helper` property of the `hoast` instance. See the list below for available functions.\n\n* `createDirectory(directory)`: Create a directory at the given path.\n  * `directory`: The path to the desired directory.\n    * Type: `string`\n    * Required: `Yes`\n* `deepAssign(target, ...sources)`: Deeply assign two or more objects together.\n  * `target`: Object to assign to.\n    * Type: `Object`\n    * Required: `Yes`\n  * `sources`: Objects to read properties from.\n    * Type: `Object`\n    * Required: `No`\n* `matchExpressions(value, expressions, all)`: Match a value to regular expressions.\n  * `value`: Value to match to.\n    * Type: `String`\n    * Required: `Yes`\n  * `expressions`: Regular expressions to match with.\n    * Type: `String` or `Array of strings`\n    * Required: `Yes`\n  * `all`: Whether all or any patterns need to match in order to return a positive result.\n    * Type: `Boolean`\n    * Default: `false`\n* `parsePatterns(patterns, options, path)`: Parse glob patterns into regular expressions.\n  * `patterns`: Glob patterns.\n    * Type: `String` or `Array of strings`\n    * Required: `Yes`\n  * `options`: Parse options, see [planckmatch](https://github.com/RedKenrok/node-planckmatch#options)'s parse options for more detail.\n    * Type: `Object`\n    * Required: `No`\n* `removeFiles(files)`: Remove directories and/or files from storage.\n  * `files`: Paths of directories and/or files.\n    * Type: `Array of strings`\n    * Required: `Yes`\n* `removeFiles.single(files)`: Remove a directory or file from storage.\n  * `file`: Path of directory or file.\n    * Type: `String`\n    * Required: `Yes`\n* `scanDirectory(directory, expressions, all)`: Retrieve stats of files within a given directory.\n  * `directory`: Path to directory.\n    * Type: `String`\n    * Required: `Yes`\n  * `expressions`: Regular expressions to match with.\n    * Type: `String` or `Array of strings`\n    * Required: `No`\n  * `all`: Whether all or any expressions need to match.\n    * Type: `Boolean`\n    * Default: `false`\n* `writeFiles(directory, files)`: Write files to storage.\n  * `directory`: Path to directory where files are to be written to.\n    * Type: `String`\n    * Required: `Yes`\n  * `files`: List of files with `path` property with the relative path to the given directory and a `content` property with the files content.\n    * Type: `Array of objects`\n    * Required: `Yes`\n* `writeFiles.single(directory, file)`: Write file to storage.\n  * `directory`: Path to directory where file is to be written to.\n    * Type: `String`\n    * Required: `Yes`\n  * `file`: Object with `path` property with the relative path to the given directory and a `content` property with the file's content.\n    * Type: `Object`\n    * Required: `Yes`\n\n**Before and after**\n\nSome modules might require to be perform logic after all options are initialized or after all files are written to storage. To accommodate this you can add a `before` and `after` function to your main method. These functions can also be asynchronously and are called in the order the modules were added.\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  const method = function(hoast, files) {\n    // Perform logic across files.\n  };\n  \n  method.before = function(hoast) {\n    // Called before the files are scanned from storage.\n  };\n  \n  method.after = function(hoast) {\n    // Called after the files are written to storage.\n  };\n  \n  // Return functions.\n  return method.\n};\n```\n\n> See the [changed module](https://github.com/hoast/hoast-changed#readme) for an example.\n\n## Known issues\n\n* Access modes of directories and files are not transferred.","readmeFilename":"README.md","_id":"hoast@1.1.7-beta.0","_nodeVersion":"10.14.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-8KqG0oMSA0DNC9LU6D9fgRv3rxo3h3QyvjCoLXfKJI+uuxc53oygjcEg18jJgIq+ii54gGxZjEB4TupB/Zgi8Q==","shasum":"a440ee4e08928d505d731b140ee94bc7d3a38f70","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.7-beta.0.tgz","fileCount":14,"unpackedSize":43637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci7QOCRA9TVsSAnZWagAAsBgQAIFtqHVlesPqlCndvzId\nqGUGRL/zHcEbbFV099W1T3hU7EKf6F5t0E04CIiXoeXQJfSTV//axEAP9iTU\nklAfM6Vta6bwfpyEUwIDiM05JtrfSUO68TQo+fr4XsLew5bMtdPMO2oP0SOc\na9p7EERnsHVI9xGkf7SwtkDTYzZ0XvlgNISSoj8I2mPuahIYejmJiwC3fezM\nb6cJ/kqMvLUFZmWabqZ3l6j2TUfk6hDjeSxp+biFNPCvJX7Ebpc4WilT5Eqx\n2o27BFCYMz9UFM8ZRe48IxI6Vi3y9sszhU9oDnG2D8ZF0nFLmIIfW73tL7LL\nDKh6fscSFl6OWavx6E2nXa1wKE5LLhcZ48aqNjwFXLicZBGsDUCzd4namqK8\nE9lv/VwABvca+9dTu5Lb70/4cvOz9S9BLKALRx/2Cf/yDdQUCzEGBi09B1Es\nxfMj2LPexdXIPxeSSAlRtFL09DaeFcABgopEHABej5fS6OS16Fn1AOoyxqzj\nKsVHLEdo923D/oTJBTCxlNc+xY/7SofZrClLTtn3Je93WYsEUIwHWW5OWjpG\nRXgrroq850YWewcP1CBN9A3lpWMCYJrLMKvZA7Rp+0uKQ04Uspfd0yeXivff\naDpYH8u7uJWtK3OICZaxCoehhmbcoiS/TLzl+JcdDqRrnnkwrhmsu9CxwWNQ\nCB9h\r\n=lWlH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDY8Nd5GJBOO89l2Q0zUCI9UGuOJZ3+cg/IUyETljmpcAIhAOkf01q18pX8+Vi2gw+vVacQpQ07adugmTEupmstjag5"}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.7-beta.0_1552659469828_0.9657608149573982"},"_hasShrinkwrap":false},"1.1.7-beta.1":{"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"name":"hoast","version":"1.1.7-beta.1","description":"A modular file processor focused on creating a simple ecosystem for task automation.","license":"ISC","keywords":["modular","file","processor","task","automation"],"homepage":"https://github.com/hoast/hoast#readme","repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"engines":{"node":">=7.8.0"},"bin":{"hoast":"bin/hoast.js"},"main":"library/index.js","scripts":{"coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","pretest":"eslint library/**/*.js bin/**/*.js test/**/*.js","test":"nyc --reporter=text ava \"test/**/*.js\""},"dependencies":{"commander":"^2.19.0","isutf8":"^2.0.3","planckmatch":"^0.2.0"},"devDependencies":{"ava":"^1.3.1","codecov":"^3.2.0","debug":"^4.1.1","eslint":"^5.15.1","nyc":"^13.3.0"},"gitHead":"802acbff535aa6d74fe26d5ac1a0590f0c80b638","readme":"<div align=\"center\">\n  \n  [![](icons/128.png)](https://hoast.js.org)\n  \n  [![npm package @latest](https://img.shields.io/npm/v/hoast.svg?label=npm@latest&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast)\n  [![npm package @next](https://img.shields.io/npm/v/hoast/next.svg?label=npm@next&style=flat-square&maxAge=3600)](https://npmjs.com/package/hoast/v/next)\n  \n  [![Travis-ci status](https://img.shields.io/travis-ci/hoast/hoast.svg?branch=master&label=test%20status&style=flat-square&maxAge=3600)](https://travis-ci.org/hoast/hoast)\n  [![CodeCov coverage](https://img.shields.io/codecov/c/github/hoast/hoast/master.svg?label=test%20coverage&style=flat-square&maxAge=3600)](https://codecov.io/gh/hoast/hoast)\n  \n  [![License agreement](https://img.shields.io/github/license/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/blob/master/LICENSE)\n  [![Open issues on GitHub](https://img.shields.io/github/issues/hoast/hoast.svg?style=flat-square&maxAge=86400)](https://github.com/hoast/hoast/issues)\n  \n</div>\n\n# hoast\n\nA modular file processor focused on creating a simple ecosystem for task automation.\n\n## Table of contents\n\n* [Elevator pitch](#elevator-pitch)\n* [Introduction](#introduction)\n* [Installation and usage](#installation-and-usage)\n  * [Command line interface](#command-line-interface)\n  * [Script](#script)\n  * [Options](#options)\n  * [Debugging](#debugging)\n* [Modules](#modules)\n  * [Build-in](#build-in)\n  * [Usage](#usage)\n  * [Making](#making)\n* [Known issues](#known-issues)\n\n## Elevator pitch\n\nCreating a static page generator can be incredibly easy as is show below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      frontmatter = require(`hoast-frontmatter`),\n      layout = require(`hoast-layout`),\n      transform = require(`hoast-transform`);\n\nHoast(__dirname, {\n  patterns: [\n    `*`,\n    `!(layouts)`\n  ],\n  patternOptions: {\n    all: true,\n    extended: true\n  }\n})\n  // Read file content.\n  .use(read())\n  // Extract front matter.\n  .use(frontmatter())\n  // Transform markdown.\n  .use(transform({\n    patterns: `*.md`\n  }))\n  // Layout files.\n  .use(layout({\n    directory: `layouts`,\n    layouts: `page.hbs`,\n    patterns: `*.html`\n  }))\n  // Process.\n  .process();\n```\n\n> See the [static page generator example](https://github.com/hoast/hoast/blob/master/examples/static-page-generator) for the full example with in depth comments including dependencies and source directory.\n\n## Introduction\n\n`hoast` is a modular file processor focused on creating a simple ecosystem for task automation. The original objective was to generate webpages using a minimal system, but in addition to static page generation it can also be used for a range of different applications.\n\nThe system has been written with several goals it mind, to be small in size as well as easy to use and improve. The result is a modular approach some of the advantages are:\n1. An incredibly small base system, at just a few hundred lines of code and only three dependencies.\n2. Highly customizable as modules are task specific therefore you only include the modules you want. This ensures you have a deeper understanding of the build process.\n3. Modules are quick to create and allow a large portion of people to contribute.\n4. Maintenance is easier as the code base is sectioned up and simpler to follow along to.\n\n> Another key advantage is the environment the system has been developed in, Node.js, which utilizes JavaScript the language most commonly known by web developers who this project targets with static page generation.\n\nThe order in which hoast works can be broken down into three main steps.\n1. From the source directory all files are scanned.\n2. Each module manipulates the information presented.\n3. The results are written to the destination directory.\n\n## Installation and usage\n\nInstall [hoast](https://npmjs.com/package/hoast) using [npm](https://npmjs.com) after you have your project initialized.\n\n```\n$ npm install hoast\n```\n\n### Command line interface\n\nTo learn about to hoast command run `$ hoast -h`.\n\nCreate a JSON configuration file with the options and modules.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": {\n    \"read\": {},\n    \"hoast-transform\": {\n      \"patterns\": \"*.md\"\n    }\n  }\n}\n```\n\n> See [options](#options) for more detail about the property.\n\nThe modules property ...\n\nIf you want to re-use the same module multiple times you can wrap each module in their object and change the modules property in an array as seen below.\n\n```JSON\n{\n  \"options\": {},\n  \"modules\": [\n    {\n      \"read\": {},\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"A/*.md\"\n      }\n    }, {\n      \"hoast-transform\": {\n        \"patterns\": \"B/*.md\"\n      }\n    }\n  ]\n}\n```\n\n> Do not forget to install the modules as well.\n\n### Script\n\n```JavaScript\n// Include library.\nconst Hoast = require(`hoast`);\n// Get build-in module.\nconst read = Hoast.read;\n\n// Initialize hoast.\nHoast(__dirname)\n  // Add module.\n  .use(read())\n  // Start process.\n  .process();\n```\n\n**constructor(directory, options)**\n\nAs with any constructor it initializes the object.\n\nReturns the `hoast` instance.\n\n* `directory`: The working directory, most often `__dirname`.\n  * Type: `String`\n  * Required: `Yes`\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**use(module)**\n\nAdds the module to the modules stack.\n\nReturns the `hoast` instance.\n\n* `module`: See [using modules](#using) and [making modules](#making) for more detail about the parameter.\n  * Type: `Function`\n  * Required: `Yes`\n\n**process(options)**\n\nAn asynchronous function which goes through the three steps mentioned in the introduction. It scans the files in the source directory, cycles through each module, and writes the result to the destination directory.\n\nReturns the `hoast` instance.\n\n* `options`: See [options](#options) for more detail about the parameter.\n  * Type: `Object`\n  * Required: `No`\n\n**Asynchronously**\n\nhoast can be used asynchronously via script, two examples are given below.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  .use(read())\n  .process()\n  // On end.\n  .then(function(hoast) {\n    console.log(`Processing successfully finished!`);\n  })\n  // On error.\n  .catch(function(error) {\n    console.error(error);\n  });\n```\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nconst build = async function() {\n  let hoast = Hoast(__dirname);\n  try {\n    await hoast\n      .use(read())\n      .process();\n  }\n  // On error.\n  catch(error) {\n    console.error(error);\n  }\n  // On end.\n  console.log(`Processing successfully finished!`);\n};\n\nbuild();\n```\n\n> As you can see in both examples the hoast object is still available for further usage.\n\n### options\n\nThe options object which can be given using the `constructor` or `process` functions.\n\n* `source` The directory to process files from, either absolute or relative to the directory parameter.\n  * Type: `String`\n  * Default: `source`\n* `destination`: The directory to write the processed files to, either absolute or relative to the directory parameter.\n  * Type: `String`\n  * Default: `destination`\n* `remove`: Whether to remove all files in the destination directory before processing.\n  * Type: `String`\n  * Default: `false`\n* `patterns`: Glob patterns to match directory and file paths with. If a directory or file path does not match during scanning of the source it will not be further explored.\n  * Type: `String` or `Array of strings`\n\t* Default: `[]`\n* `patternOptions`: Options for the glob pattern matching. See [planckmatch options](https://github.com/redkenrok/node-planckmatch#options) for more details on the pattern options.\n  * Type: `Object`\n  * Default: `{}`\n* `patternOptions.all`: This options is added to `patternOptions`, and determines whether all patterns need to match instead of only one.\n  * Type: `Boolean`\n  * Default: `false`\n* `concurrency`: Maximum number of files to process at once.\n  * Type: `Number`\n  * Default: `Infinity`\n* `metadata`: Metadata that can be used by modules.\n  * Type: `Object`\n  * Default: `{}`\n\n> The defaults are only applied when the constructor is called, the process' options parameter overrides what is set earlier.\n\n### Debugging\n\nWhen making a hoast module I highly recommend activating the debug logs by setting up the environment variables as well as the [debug](https://github.com/visionmedia/debug#readme) module.\n\nOn Windows the environment variable is set using the `set` command.\n\n```\nset DEBUG=*,-not_this\n```\n\nNote that PowerShell uses different syntax to set environment variables.\n\n```\n$env:DEBUG = \"*,-not_this\"\n```\n\n## Modules\n\nAs mentioned before the modules handle the logic that transforms the file information into the desired result. They are chained one after another and fed the results of the module that came before it. At the start the only information available is provided by the scanner function which performs a recursive search of the source directory and returns an array with objects of which an example can be seen below.\n\n```JavaScript\n{\n  path: `mark/down.md`,\n  stats: {\n    dev: 2114,\n    ino: 48064969,\n    mode: 33188,\n    nlink: 1,\n    uid: 85,\n    gid: 100,\n    rdev: 0,\n    size: 527,\n    blksize: 4096,\n    blocks: 8,\n    atimeMs: 1318289051000,\n    mtimeMs: 1318289051000,\n    ctimeMs: 1318289051000,\n    birthtimeMs: 1532801006990\n  }\n}\n```\n\n> For more detail about [stats](https://nodejs.org/api/fs.html#fs_class_fs_stats) see the node documentation. The functions as well as the atime, mtime, ctime, and birthtime are not included.\n\n### Build-in\n\nThere is a single build-in module which reads the content of the files. It adds a `content` property as either a string or buffer depending if it is utf-8 encoded.\n\n```JavaScript\n{\n  content: {\n    type: `string`,\n    data: `Hello there.`\n  }\n}\n```\n\n```JavaScript\n{\n  content: {\n    type: `Buffer`,\n    data: [ 71, 101, 110, 101, 114, 97, 108, 32, 75, 101, 110, 111, 98, 105, 46 ]\n  }\n}\n```\n\n> This module has to be called before the process function or any module that expects the content property to be set.\n\n### Usage\n\nThe following example copies only the markdown files from the `source` directory to the `destination` directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter to only include .md files.\n  .use(filter({\n    patterns: `*.md`\n  }))\n  .use(read())\n  .process()\n```\n\n> In this example you can see why the read function is not done automatically beforehand. Since you can now eliminate items from being further processed using the [filter](https://github.com/hoast/hoast-filter#readme) module before the read call is made.\n\nYou can re-use the modules after you have called process as seen below. The following script will copy all files from the `sourceA` and `sourceB` directories into the default destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read;\n\nHoast(__dirname)\n  // Read file content.\n  .use(read())\n  .process({\n    source: `sourceA`\n  })\n  .then(function(hoast) {\n    return hoast.process({\n      source: `sourceB`\n    });// Read will automatically be used again.\n  });\n```\n\nIf you want to start with a fresh set of modules all you have to do is remove out `hoast.modules` property. The following script first copies all markdown files from the default source directory to the destination directory, and then copies all text files from the same source directory to the destination directory.\n\n```JavaScript\nconst Hoast = require(`hoast`);\nconst read = Hoast.read,\n      filter = require(`hoast-filter`);\n\nHoast(__dirname)\n  // Filter out everything but markdown files.\n  .use(filter({\n    patterns: `*.md`\n  })) // Only .md files available afterwards.\n  .use(read())\n  .process()\n  .then(function(hoast) {\n    // Removing out modules array.\n    hoast.modules = [];\n    return hoast\n      // Filter out everything but text files.\n      .use(filter({\n        patterns: `*.txt`\n      })) // Only .txt files available afterwards.\n      .use(read())\n      .process();\n  });\n```\n\n> See the [examples](https://github.com/hoast/hoast/tree/master/examples) directory for more in depth usage.\n\n### Making\n\nIn the simplest form the script below is a hoast module. The first time it will be called as a function and arguments can be passed on so properties can be initialized or validated. The return of the function is another function which will be called every time files need to be processed. `hoast` is the hoast instance and has the options property assigned via the constructor or process call. The `files` argument is an array files scanned and ready to me transformed.\n\n```JavaScript\nmodule.exports = function(options) {\n  // Prepare anything.\n  \n  // Return module.\n  return function(hoast, files) {\n    // Perform logic.\n  };\n};\n```\n\n> For future proving and compatibility with the command-line tool use a single options parameter in the exported function.\n\n> See the [remove module](https://github.com/hoast/hoast-remove#readme) for an example.\n\n**Asynchronous**\n\nThe modules can also be asynchronously by either adding the [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) keyword or using a [promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  // Return asynchronous module.\n  return async function(hoast, files) {\n    // Perform asynchronous logic.\n  };\n};\n```\n\n**Overriding files**\n\nYou can also return a new files array if you need to overwrite the existing one, however it is recommended to iterate over the files using the forEach function instead of map or filter. Use this power carefully!\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  return function(hoast, files) {\n    \n    // Override files.\n    return files;\n  };\n};\n```\n\n> See the [filter module](https://github.com/hoast/hoast-filter#readme) for an example.\n\n**hoast helpers**\n\nThe `hoast` instance includes several helpers which can be used to perform task common across modules. These helpers can be accessed via the `helper` property of the `hoast` instance. See the list below for available functions.\n\n* `createDirectory(directory)`: Create a directory at the given path.\n  * `directory`: The path to the desired directory.\n    * Type: `string`\n    * Required: `Yes`\n* `deepAssign(target, ...sources)`: Deeply assign two or more objects together.\n  * `target`: Object to assign to.\n    * Type: `Object`\n    * Required: `Yes`\n  * `sources`: Objects to read properties from.\n    * Type: `Object`\n    * Required: `No`\n* `matchExpressions(value, expressions, all)`: Match a value to regular expressions.\n  * `value`: Value to match to.\n    * Type: `String`\n    * Required: `Yes`\n  * `expressions`: Regular expressions to match with.\n    * Type: `String` or `Array of strings`\n    * Required: `Yes`\n  * `all`: Whether all or any patterns need to match in order to return a positive result.\n    * Type: `Boolean`\n    * Default: `false`\n* `parsePatterns(patterns, options, path)`: Parse glob patterns into regular expressions.\n  * `patterns`: Glob patterns.\n    * Type: `String` or `Array of strings`\n    * Required: `Yes`\n  * `options`: Parse options, see [planckmatch](https://github.com/RedKenrok/node-planckmatch#options)'s parse options for more detail.\n    * Type: `Object`\n    * Required: `No`\n* `removeFiles(files)`: Remove directories and/or files from storage.\n  * `files`: Paths of directories and/or files.\n    * Type: `Array of strings`\n    * Required: `Yes`\n* `removeFiles.single(files)`: Remove a directory or file from storage.\n  * `file`: Path of directory or file.\n    * Type: `String`\n    * Required: `Yes`\n* `scanDirectory(directory, expressions, all)`: Retrieve stats of files within a given directory.\n  * `directory`: Path to directory.\n    * Type: `String`\n    * Required: `Yes`\n  * `expressions`: Regular expressions to match with.\n    * Type: `String` or `Array of strings`\n    * Required: `No`\n  * `all`: Whether all or any expressions need to match.\n    * Type: `Boolean`\n    * Default: `false`\n* `writeFiles(directory, files)`: Write files to storage.\n  * `directory`: Path to directory where files are to be written to.\n    * Type: `String`\n    * Required: `Yes`\n  * `files`: List of files with `path` property with the relative path to the given directory and a `content` property with the files content.\n    * Type: `Array of objects`\n    * Required: `Yes`\n* `writeFiles.single(directory, file)`: Write file to storage.\n  * `directory`: Path to directory where file is to be written to.\n    * Type: `String`\n    * Required: `Yes`\n  * `file`: Object with `path` property with the relative path to the given directory and a `content` property with the file's content.\n    * Type: `Object`\n    * Required: `Yes`\n\n**Before and after**\n\nSome modules might require to be perform logic after all options are initialized or after all files are written to storage. To accommodate this you can add a `before` and `after` function to your main method. These functions can also be asynchronously and are called in the order the modules were added.\n\n```JavaScript\nmodule.exports = function(options) {\n  \n  const method = function(hoast, files) {\n    // Perform logic across files.\n  };\n  \n  method.before = function(hoast) {\n    // Called before the files are scanned from storage.\n  };\n  \n  method.after = function(hoast) {\n    // Called after the files are written to storage.\n  };\n  \n  // Return functions.\n  return method.\n};\n```\n\n> See the [changed module](https://github.com/hoast/hoast-changed#readme) for an example.\n\n## Known issues\n\n* Access modes of directories and files are not transferred.","readmeFilename":"README.md","_id":"hoast@1.1.7-beta.1","_nodeVersion":"10.14.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-IIzuDh3UBJKxdOks82s8Lz6imjQdkTn5sCgf/uaJWzHlSE5nH0ulm7xsmMnyNdkYuQ46aCKp48fcumLu+ptBNQ==","shasum":"f11fe0cd0d867cea8c9690bee529d93173dfcc15","tarball":"https://registry.npmjs.org/hoast/-/hoast-1.1.7-beta.1.tgz","fileCount":14,"unpackedSize":43937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci8MhCRA9TVsSAnZWagAAD74QAI9zL/bda77AXJuoNdEh\nlwlhdFrPLiv1frVazgbMZ2lLgmFRc7fZO+VkIT0Ox3HM0k/Mw4b7hR+rl9Cp\nltnxSTXaru4xBT0iHp138IuMVEpIDdyNKs3KYveGGZSHM0DgRBDk8VIwqNxZ\n+0/dWGpAYipfmWmDMbKMgu6ILf4wuauogIlRapCKQvTxjIg6S65ScaHdffQu\nWW0qyfzrrzHTZKC50yQh6Ff5A3iW6D8MpzpdbwIBvwK9dZ+uD6B+u8QSE8kr\n+ZuyJFfyGar99v9iku9wk7B1lYzobdTTbkvWaYeoyUxVcVhzpdCDYAU4K1ne\nGsR/VF4DXrBqjJ0GK91api2sOYP85bRTLHrz55OhRBYXHZ0cjkurXTU6gegh\n+3HGyNAzuCydCZoTl9WJJ/NWKRS0KY+/4UWmQiI0DjbONiM5dSA3YFKeCXgQ\nJSH2lQtLizY3xfzCnew1caCwwr8tIbX3DCjIRuTsd7xWc2lGfM4rg36LSv3G\n8rhgxJjk3iGJ0xEF6BgcpVIAxhwXo9sre16DP9fn5phw9v5HXDLhCUcTugOx\nkU6noYsHwjX60WSDVViCkLt5gEyZgvNOL1c0Vr7SXizPpfWcW8QrVY+875Wo\nOnXMTm7nBYUOX28Upo3u0kM5Bmi56pO8Es+h7aJrcoWZ+3SilugoTZunPREH\n/oHV\r\n=oCN5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBy3C4dLbSpbdvbbC2r0Zwh5miQSylHT+ZfrNzDq71FQAiEA4BBE8KjPw1s2oc2Sj2uPF/eMonAOqlKfR/9qDKEn71Q="}]},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"_npmUser":{"name":"redkenrok","email":"RedKenrok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hoast_1.1.7-beta.1_1552663328867_0.031331689618676384"},"_hasShrinkwrap":false}},"time":{"created":"2018-08-04T09:59:02.336Z","0.0.0":"2018-08-04T09:59:02.685Z","modified":"2022-05-05T02:11:27.218Z","0.0.1":"2018-08-04T10:44:34.513Z","0.0.2":"2018-08-06T16:02:48.221Z","0.0.3":"2018-08-07T14:07:43.211Z","0.0.4":"2018-08-07T14:32:43.700Z","0.0.5":"2018-08-07T14:38:19.482Z","0.0.6":"2018-08-07T15:08:54.132Z","0.0.7":"2018-08-08T15:12:41.667Z","0.0.8":"2018-08-12T09:46:57.192Z","0.1.0":"2018-08-21T18:06:08.935Z","0.2.0":"2018-09-11T18:10:46.493Z","1.0.0-beta.0":"2018-09-19T12:21:28.382Z","1.0.0-beta.1":"2018-09-26T09:00:24.758Z","1.0.0-beta.2":"2018-09-26T10:41:50.329Z","1.0.0":"2018-09-26T14:27:22.332Z","1.0.1":"2018-09-28T13:56:28.580Z","1.0.2":"2018-10-10T16:44:16.076Z","1.1.0-beta.0":"2018-10-17T13:48:19.884Z","1.1.0":"2018-10-17T13:57:18.071Z","1.1.1":"2018-10-24T09:47:18.440Z","1.1.2":"2018-10-24T16:55:18.285Z","1.1.3":"2018-10-28T16:26:17.704Z","1.1.4":"2018-10-28T16:28:14.737Z","1.1.5":"2018-12-12T17:08:26.778Z","1.1.6":"2019-01-24T15:25:58.963Z","1.1.7-beta.0":"2019-03-15T14:17:49.959Z","1.1.7-beta.1":"2019-03-15T15:22:09.021Z"},"maintainers":[{"name":"redkenrok","email":"RedKenrok@gmail.com"}],"description":"A modular file processor focused on creating a simple ecosystem for task automation.","homepage":"https://github.com/hoast/hoast#readme","keywords":["modular","file","processor","task","automation"],"repository":{"type":"git","url":"git+https://github.com/hoast/hoast.git"},"author":{"name":"Ron Dekker","url":"https://rondekker.nl"},"bugs":{"url":"https://github.com/hoast/hoast/issues"},"license":"ISC","readme":"","readmeFilename":""}