{"_id":"pequeno","_rev":"51-7cb3eca469fbf9487f986c4e5a38a5c7","name":"pequeno","dist-tags":{"latest":"0.2.1","beta":"0.1.0-beta.7"},"versions":{"0.0.2":{"name":"pequeno","version":"0.0.2","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"^3.7.2","browser-sync":"^2.26.14","cheerio":"^1.0.0-rc.9","chokidar":"^3.5.1","esbuild":"^0.12.8","esbuild-plugin-svgr":"^0.0.1","fast-glob":"^3.2.5","fisarmonica":"^1.3.5","fs-extra":"^9.1.0","lodash":"^4.17.21","minimist":"^1.2.5","node-cache":"^5.1.2","ora":"^5.4.0","react":"^17.0.2","react-dom":"^17.0.2","styled-components":"^5.3.0","winston":"^3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"224391e342ebf606e237d6b592ecca540b9fd48e","_id":"pequeno@0.0.2","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-KtqyMUxU6sTX4w5gToXFZrwcWNNNiEJ0zQ2sAMc5JEz+3+ldZIb6EsLpagGk+GxJqfTEuJnTpNZqVbsg6HYYgg==","shasum":"fbce3e3044e9e9bf3cbdf90facc83afa847a6932","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.2.tgz","fileCount":60,"unpackedSize":190459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwjHwCRA9TVsSAnZWagAA0O8QAI2hGxxa1iqAKbp7ooi5\nXYq1rcTnK+m8YfMBRNKGj1vGwHLppn9E2um6wJavuFbOZspr29s/uMSvU+/U\nCdtltLzvkhaQ+YFumHsgwRZYjTJ434erC0u0MUViFG/D+eecSsVU2XB12xJ/\nedi9Gct9RCJdCVZICzLIARv5Nth/jXojEy8bnd3hab4RDaeT0py6l7rGERcy\n6/n56D4QmAKAIRdiS2jWPqoyU/EcgRU5v2cWIIyZA/Aj9sRIKU/Azh3BzvYx\nejcFFNhZlrBRwcCYlR/s0BEoqSyRuIS2bG6j2zfchfxv4aNhd3kTp7zQtRaN\n1zJCtdPCUqFqtdTJRmse9UMHLw1bqt1/ANl51HREhRApHU3EXQ1e0+6LUZCf\nSHQGDOAdhA49yGrA+Xxurzbfp3AGUbt3qYhGSZ9c/TzObq8gk8pfQR/UzcE9\nsk9gkU7dP+UgHpr2jYLyALrE2/gc8YVgiahDI0phfwd3mTf2RNIVUJq+WKyk\nZAtNw8ZZCVpp40qWf1e/ilsdbhLHzd3V4+VZt8VSEU/+QeUEeCki/lwGS7yr\ngruDmNb+KR60Q6fdC70cAbvajUl3LsHElse5BlTGqsqXU5B4df/d6qq7mpME\nBIj+kf9z0Vcb2QKGipIlWzHhR1T0M5oIcJ4ssI+/FQTCfuzHRgd5E/9T/vIC\nH4ae\r\n=oS8P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGjcVHQ4SnrYAC5Qi/fHwKtNihpYe8lAtyCLBI96blkLAiEA4goBZb7whECsue07SwV/D6V2XZhuKneHIBJ67uNyPbc="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.2_1623339504150_0.2232652355246838"},"_hasShrinkwrap":false},"0.0.3":{"name":"pequeno","version":"0.0.3","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"^3.7.2","browser-sync":"^2.26.14","cheerio":"^1.0.0-rc.9","chokidar":"^3.5.1","esbuild":"^0.12.8","esbuild-plugin-alias":"^0.1.2","esbuild-plugin-svgr":"^0.0.1","fast-glob":"^3.2.5","fisarmonica":"^1.3.5","fs-extra":"^9.1.0","lodash":"^4.17.21","minimist":"^1.2.5","node-cache":"^5.1.2","ora":"^5.4.0","react":"^17.0.2","react-dom":"^17.0.2","styled-components":"^5.3.0","winston":"^3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"80b748ab3d40bbafb92cb270941737945a40dc8a","_id":"pequeno@0.0.3","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-ZNsusLQ028a/fvwlNuC8LTNomugPG+dnL7oVAIxVvUvFwjPdwRDXxHS3omK5S7gpgX7JHXXTuj70oW9pElZ11A==","shasum":"5dd09fac5a2a415c5378b3a54fd545d8b36821ac","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.3.tgz","fileCount":60,"unpackedSize":190621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwjmbCRA9TVsSAnZWagAAXLoP/1zVh5CibxQJauFOLH2u\nAAYLGTCrZIw6Q9rAT8+zTfgqg3SH6j8IUXpBvxjqGbnvt6RKqrP7jY5CP9+w\ngmoGhil1g+7m29OogWUZPN/zpaPsIDwDx4AjLxzL77+K6XHshzfMfmntkTX7\nLAuoXqu+kMEa9MZmG9zCNQ52D18O4vLNq4tUkAV1P4qfth0BZUDOH1zdKfnt\n+wrdA9ZZ5K5HXw03SfVxexROIgEJTz20wploWpq5V3Zzt47qiKgTqkJy+NUn\n3VdIMJMxMvhcKLmAkH53HOIh3DfYeypvuOXTYKvZG1cvyG9Xc9cxOKsx1h24\nXup/SXEgqPj1lBDMGaYtOHgfWWyGY3TJkdvS9XF7cp2aJ8jwF9dCGoTsSvx3\ns6lyWTws8BCg019lvWD+K3mj3zlTeWAmkXlC7FwTrWI52SUhCguDh/w0IYh0\nkWi1siDiccXx3ew0ntZ+juf2KBaFkdqyVE2hEtAPki0x81A+66uZTSFnh+C3\nHWRYRhaM18Gp9WyhBSjdmybKsJdyn6lb7AsYn6sppa91Xnj84eWhXD+Ww00f\niaDt1EvYiQAGMi1lWVAL1DPo6Yn7PLF0cxFItvkfOk4zbfimw1OquCa5uISc\nlXsaBVRsc/776O9b7oEntCHEb/UYKGgJAHsek9XUY1pUWUqTy3mdIAjlxtps\nQDwJ\r\n=MKjh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGsF3IU83v4AVOvKEbWOvSdd/Am2rVmRI26icV/XZu4AIgKuuFxkI2w//lptSi+Q2PNnZ1lHbnUrKhUxQSoIKmxRg="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.3_1623341467173_0.06232866825703143"},"_hasShrinkwrap":false},"0.0.4":{"name":"pequeno","version":"0.0.4","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"^3.7.2","browser-sync":"^2.26.14","cheerio":"^1.0.0-rc.9","chokidar":"^3.5.1","esbuild":"^0.12.8","esbuild-plugin-alias":"^0.1.2","esbuild-plugin-svgr":"^0.0.1","fast-glob":"^3.2.5","fisarmonica":"^1.3.5","fs-extra":"^9.1.0","lodash":"^4.17.21","minimist":"^1.2.5","node-cache":"^5.1.2","ora":"^5.4.0","react":"^17.0.2","react-dom":"^17.0.2","styled-components":"^5.3.0","winston":"^3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"bb3cd6f5bfb4ac8dec752d7f43b9f15a15b85e42","_id":"pequeno@0.0.4","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-T78de7087IX0ya9wKQdmbURciwudAngjKaxfUH6EaR/9R9nhSzIQ6YMGBbdgzgSnDC3qLw85yB8t1a/UEaWrMg==","shasum":"d833ba135d8225edb75c4476d84f746a9fb93024","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.4.tgz","fileCount":60,"unpackedSize":190566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwjqhCRA9TVsSAnZWagAAIykP/RB+6d1ecMaaRRrzsbVc\nR4NpYCPKLDPI/H4ted06UPqb6Lf+rq4Jow5OLKgfkdCtF61vqX28Oill4Cll\nApCrw4uVX8WpAji7wSYBMyhHqqrj3Wxwekq4KtvJTUqYrDcqlMPWhB0zfvsD\nfPm3HMFXwCLjzVRYFfAzrI6ABRg3FnGYGK2iHl5fRECzAcb4sqaete5EK4lN\nF/kDjyEja0eGLHlfioF1bhJn4lcSfYHrKR3qeZ3DczrhW5wIVyA1Oz9WqiVo\nH9H1/HqFmiq+fqJM8kUDfbfCmBYHcN432yPkAI4+QMyhPClhIHg29kJ5+dUl\nXed/c1zBdA+2VGKzhccK/ikEa4jhzo7Nhi0WmmXxL96Sung1FrZfE9LjKCvT\nfzjApd9njz6Fo0MhA+M/i6KgXNlpoXV4miM0OYnv1EIFKy6BLzoxiQa32dXP\nKW86YJNU3QXyD+NV15kq/pqp+wrrb0bEXNk+WwISgSJevl/4OpUE2B0OuJ4w\nE9VmOMQtBxY1HUiDucgcKGou+BssnwrmOSJj4RzEvbtefWbdgtUeJEfUsLUW\nQkgZ6O+oSDemtnqGJSnXucqlTc4UZo7oxH7jpDupdVP3bk9cJcuLZBemeD0L\neMNvz4/HbjhUWzDdXnUtb/EfWHFq8qx1lqIx6Z9h6vY34nuXvsrU4vG/sHth\nuH4h\r\n=LudZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8GT3aN1l1yv6Dbwny3RJkXl90LECrSgDWc9C1TXmdvAiBaE5np3C633xI/LYy0L+sJyZRxHIRiVc7fOTcNYBDnTQ=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.4_1623341729440_0.6790901748719367"},"_hasShrinkwrap":false},"0.0.5":{"name":"pequeno","version":"0.0.5","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fisarmonica":"1.3.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"4.4.1","winston":"^3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"645b2e63b39a31d34e29a04af1b2aa7d9abb8cc8","_id":"pequeno@0.0.5","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-H3SsQheo7Fp+z1pMCyz0s9H0Yc9DsNlqM5FTnhSa8y82UxogDLe67glBaNbq1VXlsYodeO+Fnrl0Vq09oaLQ9A==","shasum":"c9fea15b07360f6ff8ecf4dc9196be82e39be64f","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.5.tgz","fileCount":60,"unpackedSize":190298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwkUeCRA9TVsSAnZWagAAFnAP/j4Sai+caejsne19kmoL\nkttXgd+jofOfrSWkbPCOOgQoyvbTB5VL6tU2Axf9nXFPJNymALjah1TQtOuK\nkypkatyPnhe6f3FDFl3bFYMFx8CLrroZdy1QTOmNZui/GdkkgPZ2DkhbxCbt\ntUNs74neN4kkdzhBjU59/+v73bkMTVBa03EjSCE6IDzHTXolj9kz10LFNh4V\n6HAqdWBT+eMQUTVBIoEFl4u+NtowLKZqE/6wQ1Xk4dDnHJuFoaq8qZp69K9M\nIJKHyuFGIgjrHfsPl/Z9DxZ/nPj7zuv6PA/GGTnCa4thZAovZVLHWd/txQWH\n7nugE5cekwcSupxMmqI6knTEC9LS5A8D/G5mnS4qnFedH1f2OYsl4oRCTYxi\nXzTE9NLR9ToQ4FE79BynFA9C+0SKidRdVlhN8X/dyPj1CXC25p0Al70Kzcfi\n1wEVdEBXX0SzplQ+o73KSifegVWSFdm/debIs05r2NllXDQE+Yr0JM4Fd6CI\nxJPUftLoyhidZ7AcKLpTAWqjRGULDDBQK1caytLpqT69728I/a2azjSriqU0\nMnMvj/Rv1a72jZEy09UPiwsN/Typvn3RerpZRPfdrJNl1EZPDW/Rtuwsp7j4\nGLpHiq9LMnxER1QR+JUjpmV6zVw+fQer/kU6S0ujLAYhmVbjFa2g9qWNCKkQ\nzDEz\r\n=0vfx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJzoEomFga+apilirlPB/CHj8yxGzMG/tDJE4fw1aF9QIgL8+SeVZIKPQSJQ9kJcreKTCToy7zWfwKmAWoYQXBrrs="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.5_1623344414077_0.9121091442683453"},"_hasShrinkwrap":false},"0.0.6":{"name":"pequeno","version":"0.0.6","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fisarmonica":"1.3.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"4.4.1","winston":"^3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"a1dc34f0c593a2f76a2814ed2e10a98fda643619","_id":"pequeno@0.0.6","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-EcP8GwHuEuMbhHGx5ehRTveRMScitktfzZ+pfPGXjiYaIDxORBqcQlilYAZsod6Hl1D8mIAw7OqfEtDS1H1p9A==","shasum":"c6154b62bb2d3eeddb5e28744d98015a4e1d2b6e","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.6.tgz","fileCount":61,"unpackedSize":190722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwlGSCRA9TVsSAnZWagAAQ6MQAI6EPi4qGAy0zEc1HcOZ\nw9pvjgSWlo69PPdvrp425OjYKwVCwC1HeOnOU68AXMZMDVsjtMucQm6NHFuT\nSf5dU2+egn2M/CTIbDRQ3YZmP533lyLItoYFc05NEKXhO30bNI8D7hRz2s4Y\nIc0p9ieT+TU71LAH+GfvmgfTM1HEbSTzanlNj08rPVEa+WWuTYGmkkXnH1fi\nkifly1P1bvH35SRNOFM2lQM4DVdgIKXqKl6yDZUo1oWigyZIntGPLxPc4PeI\nxDQyNl/a1Rk8GhyNMOLz6Qd3bh9goHhPVKABlXK/a1uwP5gwXzKir5AFG0ii\nb1J7+eztsVbrjEcPyRfbkL9sXStKrxiVyLeZfiUeXPayDM2lFuV1MPaWi1sz\nK54b0TBdZ1el1I3P+/xWBkJKPv+7o8kWCwAs121mqr/0hJzp82ECZoOJVdYU\nv4A2G4pHfZzVnG4H0kB6LpJVf/4PYmQ6vjHZvx2T8znpR1POfyRzQ7SleWQ/\nRaokAO7QSgfGTHcacR0KAHux/2QsDNQzywxNySWmydRgFXzYl3tbkToiS9cL\nxNbeyo9K+v3hMR2WEXA/8GPqmiigXdgedFcssT1919yijRStyWzqDKK1hn+p\nooSjVEKaPXolmkZOMIlojFtJgWxXGtzYblwwxOnGFq81kQY8bJBn7l+ZIexu\noIKm\r\n=waui\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHW5IDWTisKPrtu66G2r16eAHMhdMavfrqKWC8hWhueKAiAGeQJW4ox5Npu4/OzyHH8FB23qJBsZdnpdkxD0cIL/hg=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.6_1623347602293_0.633052933747335"},"_hasShrinkwrap":false},"0.0.7":{"name":"pequeno","version":"0.0.7","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example","build":"node lib/cmd.js --verbose --example"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fisarmonica":"1.3.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.0.0","winston":"3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"aa0dc58c8dbc910acba9470b8d99be23bad05736","_id":"pequeno@0.0.7","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-hV6QsvYrdomcPLdHK24OIaNptO9ik+gShtjZCpRxaVbVsLTVFiJv1+qKov+hGLv1qScP5arLQssxZRv605V1Jw==","shasum":"c514965aa2e9e7b905b7f5d10f0fbf32ca111e52","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.7.tgz","fileCount":61,"unpackedSize":190773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwv8ACRA9TVsSAnZWagAAsN4P/R0fRy8zXsQBTahlzKCX\nB6Aaka4cjGmgCzpgcuR0nPG6EaoLCCe/Jp+/0dq/w4RGEzo14TOnY/2najms\nOopNkhpyoxIniQC00Dklf19KjuySqxHEwSVN6YCTpaFcWeCPUeHRvzJRuaJt\n3AERue3W4iCWn5ZrGjQjgZcAZdvOyXSe3pxxuuVfHfqfUPPabuHGqStY3a5E\ntMGDDk1DcZK90NxxZgE/mCY6ejeJRR8oNuUb1TTkWfq0WBfsZqnBPFujAQfJ\nDKznA0aVELSnJKVKJsCaAoL/hIfF4ZIWD91FvKylq1RF5Y519YcHmwnWcL7r\nL2qjWX0ljkqdYuM0Zb3V+4WwIC1riELhhXhFOCvmhGaL0asZCfLIzI7rvWKE\nZbiqCzjUOEnrxHLB5czGJ+XG+ZnNS8Pc3WU0uHp0kXpxYJ40mTZLXAz/RavC\nijxxtzjDAaSH8d9VIy+ihpPh4uyz5bIFSoSB3WrVyQDAB6++ulrbNoFrw2t3\nym+408dDtPmIzRPaZSjoPkA1aoaSJwg7SI0WtQ7v82WkI4ZHLr4Zd+u6P9gc\nF1o7A7Rj0KaZSOwSXdG52ERSon6xMK5SNQcFApKfpamWma60dS1bX1VKY4PC\nw0SZeMl7IKkcDnN3YhykYbyRt2LTo9fR5PVHtjax0/iTuUTusIy8w5cXSXb2\nJM+Z\r\n=3qXW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJLkEpkPHqw+i8Jo/7jLW+Mogr2uCtmoA36kFLMplMzgIgTbHmAShcrTSWYHW6QbnCMP86NNfbtU0VhGMLPlY6sUk="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.7_1623392000782_0.9020865663795226"},"_hasShrinkwrap":false},"0.0.8":{"name":"pequeno","version":"0.0.8","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example","build":"node lib/cmd.js --verbose --example"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fisarmonica":"1.3.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"release-it":"^14.8.0"},"gitHead":"cd2961bcab98d84c4087b97435b89fdf37676bb8","_id":"pequeno@0.0.8","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-1UhqAroaKZbC2dtPznlLmH/ahe3iDibwS0Kjkrw8zFbEK4LNC1okCS27l7ZdiFQJsWEH86fSVNpCszy2hrweQA==","shasum":"94ed4cb36edb9a58c1cd8d02cabde51666beed47","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.8.tgz","fileCount":61,"unpackedSize":190773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwwGsCRA9TVsSAnZWagAAG6QP/jjNAznAHNwY/0LnYMJB\nMNtJIycSVAgBKUE5TRS/GwiWSAVZhDDUHiuVVs6jGfUatDkXCvHXdwEgWptj\n9dxGEPDA/9xfGsMVh6+hGKyGIFzzbJSJ+FYBMWnMoPPHYa57pjRWw9/JR7Z6\nsABYWbobbOXoJIcU3liufGlFB8Wc2/dGn+cmI02NtCd+GnQ7Kjrz5pWtuCQu\nkQ2zaZW6Vm+mJP9WiFV2d2l/bJ26by9rn09FJ65aadQu+uNB3KKDkoZsV9zp\n4Mp4euvadK7p2kiyY/b2kHyaD8+QQX91aaXTmezyWuDiXM2e8DcyLBtynGTe\nuwDwzJ3TyFhlKzeYpDuynfXZQsX5uF+Q4xLB9QlN2qd3HHePPq2sEIVp9nhm\nZGfH/q0Q/9BJ1H8TlQPLPrDGSPjtH1KRchNE3S4bV4dPjb8UVMH/jF48Mxum\nzfQyvWbuDBvV45i/QJY2b+vUAeavQ2dTZdu459SMBKVMISQNOqyVH2AwojxG\nnypYHX4qU/H56UeK2mI5DebmGm/ZfcP4Uw8o1hVIbkuOi9Pbx1Ytpm+5LhnZ\nNgZg552MY7PxhMO8qTnXtWwVf+pymioUjFm/5TaiPr0ge7t90pYw5MhwBdHz\ncSDy+dAjSdSvCDw7PznYsDwNHLCn8RFs00wKdTg+JiLOLAbcZ/bjsJY+pyqv\n9/85\r\n=sg7b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBDvEtOVcIcGSdvAYD4Sy72+uD+GwBtcVegu8QJYRliwIgN9xScXjk8el2bd3Fe+HtKUV4W4qAh1IabQS19Q+O1HM="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.8_1623392684073_0.7578788158396639"},"_hasShrinkwrap":false},"0.0.9":{"name":"pequeno","version":"0.0.9","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"90c79210dd97fddfec129cbca2f7853590ebf90c","_id":"pequeno@0.0.9","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-YKsmKjeFJJpEzgy/chSkbu7YSn8LDq3D++wDlBiuZyALe95/2WoDlQs82YUJS6ynsTKA8d/Cg4Uqftr7TjJphA==","shasum":"2f8bb0470a22ee058775594c0e44ceeb9488fd88","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.9.tgz","fileCount":69,"unpackedSize":210503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgw3fxCRA9TVsSAnZWagAADtsQAJ0ecpwbMVTNUoGtP/Uq\nZ1JDBep6U0/l7SkiZSK23m3puKXVkOEVEiUpFqHWdOIBxgplXD5qe2Gv+G2b\nnMtLEWwtTMFJRF7C5Fd1rx1H5AaPoZ+pjre3OHZY4HQLNiqDxqIzgSPX5DHG\nzqI0zNkPEvuAahJVi2Fq4yMPLoqGhdMykGfwsJ43B8wu/Jap1XixPZlwi8Jl\nhLSa/uYxy8hoH+wMh85x4Ea9U5jjO8tqYSjKSAXh3cnfy0IIWgev+GYPdK5N\nLZXpGoA1L7tGZkl270aGmI2+NUL4VhTjkG57FpMcaIWybz55Sk/w2F0MdYXy\nmAHrpZPAgFS2dcaI1M3ztN0M7lOdPMmEvYbTfAnodG0TpgiIdHwn09abpHhd\nGGRxe4uehE8USLskpaoiQOtBFFAC8oAGJIYQprLCf6aWi/UPFlR3Xhpt6W/E\neZs4Y+xtGVd0AK2QTLdkS6t2I8hBlZqkKzltg4kUYqM6pkbZ6ERrsOOExQeN\n4G4pCNT4CveWle3h7lIZVG9LGiwzeua1JAMd3RtmvvU2wJgxn0JPVvGPErTg\nm1QSpTTvGRfq/TjbN1494roAc7hyOG/JtHojyB5oCm2imJouHk4j7du0e3/d\n0+M7dip2gMLkT7LTVqqtfuINJwNBvqiYwW+wUqu4DAJlZ9vECPtG6eO9MTR6\nd8+l\r\n=H8ok\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVXHo2uP5nm5iapk5INoR29n+R+gKaF0AX7S6ki9YeIwIhAIs1CqDriapHJJ0xpg2BY6grBcDlHfQ4aI9Yfnxdu0vw"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.9_1623422961423_0.4296499787265122"},"_hasShrinkwrap":false},"0.0.10":{"name":"pequeno","version":"0.0.10","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"6095a79d5d75fbb7cfd7ce05310f247276ec3778","_id":"pequeno@0.0.10","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-ae+aO0AOLqufvvbA8+XzR+vUd8C6JQgX5msydJVT1aGOAN2jwW4ufHR0IWT4UrFvlI9cKKxgYPWJqlQ3Lpnlaw==","shasum":"3b228cae4d26d4dd480a2f868dcd56f3361f59eb","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.10.tgz","fileCount":69,"unpackedSize":210607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgw4FYCRA9TVsSAnZWagAAUvIP/jXuOE1Ifhza1bppgGfb\nbs8iz3NOvRErhWjmz/L6NDdlAN/6hx2bFIXhD495DTFKYHF4bGxuWJlvaDpq\nxJ+bK+uwCf/0O+txVNamexPXfmD1OH3lz+uFQWZcVoH9SKF7YNI2b0O9HZWu\nhoXaXDT/GBoTZlrKSXipKeswWHXRIxCGnrOgzTa8MVWmvF1wmiwIDsrAoIeM\nv5VG31cavCyCIPZJrkIoUxqCSBqg5aeSU7hoVWcnWbgViqW8JKQHts7GWgZB\nho+fiFBKbg9zqywK8WLDxEcmcOBnB6chOVqkkhf6munqvcRMknLlKE33iLVt\nfmnrl15MhDKZCpv9bqZokY8mB1ta8EGStzgJh6ME+BMpp5Geeu+iFJFyIdbm\nScABwVswHoAIAJ/mZPUFiKuKzlojgj/Cog0NbeSz3ZAt4MtZOWmtrCy2nmFp\nA7ih18m1i5cXkZFcBJ+704pfCBAUP56TfsHpk8vWxiTcFSOE8h96wIePCUxK\ngRkk+O7BCt92YEzfNy4O1tFlbQap3e/Xsk9kSqG8Q6xopt3TnJ88whJc0Pkf\n3R76LPIe6YMLv2jVwRouiEFgwoROgz8mnknzG3Zz5sCbBx9fTZVKDztVUxGn\ncI0rXpgTuew/CZw36bQYv8O1O3YlNqxSmh2w416ban+Lqc4OUXX55Zf3W6Vz\nB8bs\r\n=/EPg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCY0OEEQXmN+kdL0PYrdp6fLyunVOr3TzNJr9jnNAjKSwIhAK3mXLt/AZPGbNo1YhEnobm8X14I1HR8wq8C/m65TgtH"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.10_1623425368596_0.7319901539123508"},"_hasShrinkwrap":false},"0.0.11":{"name":"pequeno","version":"0.0.11","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"62e264b912c134a72f26cad9e6cffa29017f7d3e","_id":"pequeno@0.0.11","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-Th3bY87gQIfkaCXyGeq+HazFyd2GAem6oNlTOyyaNjmd/kH8f7puWxyyb0nFn4G4nerEBzMUXgruPbyBigYVXQ==","shasum":"63588d87167b5abddf4b9cf0df62bf4d953c9cfb","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.11.tgz","fileCount":69,"unpackedSize":209903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgx2PRCRA9TVsSAnZWagAANQ8P/3ZF0eXptmeBvqBezrlv\ns5KhLIPtqR9e4Glt2/XaHmQ9t3CnFTREGyWYeTdO7u+bxwovsyeiBmRa2rFj\nPVD3BufZhv1bZsjTSv8wII8kXyKrIP5Tei44NYVGUuphBUbss06Pef0m6cLd\nyUgLMBIaLLLpNa+Na7TvN/CKmHQrF8bZHve3QnnU4TOcTHGOpSz8a+nF2Ipg\nGRjglkDKWVVhSmiZmGEtyvhPM63R6xb39EVdA/6MLjLkTcEPNfBzW6Xyn7g2\nDFbHQe6dB/MoNpV25ghcKFu1lLPvt2tKUrBALXfUPEMFmxp8vbEQVexQ4HKa\nFUm8PPvP7KCtcr/ePWxhZRN2fycJb/trolQ0LVezou2LWskFU9KuBr6wi5z8\nKla6FdFOlqeZ9bxbJcGVVFk7tnWWH76tuj1TKGJHh+oozLh1ttQ20mUga/RO\nieQpeGmtwafFgPsB+nAQgvzxhlqfk+T375MuJp1+Z/5rzseKQaaHi0pgtihR\ni8ODUzSxUFBy2WMRq9bsm4kLS1Bpy7/O+bHUsTBN4cHRFjEXUEqegGaZBjNQ\n0CZaiu+/nsSvjmBY7idH/zO1x/N19titHahX5OW8qgGcIFpB6mHgfc2uqgG2\nIb/O4cXc65yYUF9VQfRZ53noqA+BEO1MzrPC2W9hxkp+vSjL5QbcCuQNv++4\nNz5B\r\n=gA/O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWv3cbyGRmJmDo1CBuA2Ze0KeEyfB0eZfVWTFbk2XLiQIgbFOMoL09KOWCtPAfN7p/y8zmN6Jjla4wl6DzC0ofoR4="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.11_1623679953141_0.8476166537393481"},"_hasShrinkwrap":false},"0.0.12":{"name":"pequeno","version":"0.0.12","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"50a68942f68074414e3a0463680a55a3a8042dfd","_id":"pequeno@0.0.12","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-pqY+n90/LVGrEUmPIpQdD94JZMbLyfIJGekqcB6y3rPk8MWYN2NA7hgnBYSARj40YLvLFxYT4XvNWzTp7QwOSw==","shasum":"b16ece140ef3e558137d80cd3610ae620d6eb0ca","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.12.tgz","fileCount":69,"unpackedSize":211849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgx2oqCRA9TVsSAnZWagAA4wwP/0howR72JR8G+4CfoRWT\n/Pm2OE81mh444TYkrpEedg6vE6H1aZafKKsP0pJBHR1UF9dRkJ0soNEq7VwY\n5ic/fBM4zi1RL0iRaWXK+eAKxDUowkBwLdyMKoT9QpaPM+5tKGcHkkw3wdEW\nZ9JMShM3etUsgW/zcO/G0aMnEakdBG5L1akKyTHjsEzrtlTQxBy1q2u6ZE2o\nzpRBkw76aJaL7K1FJazZLhcoxzX6wXkdnfNeWFFATeuFQCWXb1waTLC5Kas7\n5EmS2YrrZk0KAaR8In215woEZjiRDaENgU8e+bO4FBOklsmNw7jS2VYKsxpF\nJqeINMEqhOZ5ntrkkaQPKV/W7KKt3faZZXx1keSjqQxvYfgN4Tvj1j0JiHiQ\n8OlAnQHK8DQnxlHuOWjKxlcnmzDNumxuJP00MPXihOO3J0M65O8z3U1HI2z6\n28BJfMJWbvLejLsNGI9nbG1Q354SEuzD+dEuQtGIRVXuVFj2+EyWcjk4Jdnq\n4oVBxR6+uK271K/cLRSzH3wOID+coXZshvNVhugS6HCFI1I+liSFxHGJ7O2J\nPOqrEyMm+0HWsrpmXKkX5yxUHqc9jVTWnr59vkGDA2QgPq9pSBJs2FlcDBZm\nNhowRnuBSjPPpUIG9JpfMeS1qHha/yT8hVmpjn12yI9iVUV21i9FdnaYbGJB\neImo\r\n=EdNM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCZwk7vJdY9RkPzEKoXeVzepEcJ9f40NBUF9sqtC8emRwIgSLJ9ZxanuHDpW7fK/2X7kh5S+cXDtwNgo9FCc03TOFA="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.12_1623681577827_0.8580540664754412"},"_hasShrinkwrap":false},"0.0.13":{"name":"pequeno","version":"0.0.13","description":"A simple react static site generator","scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","author":"","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"85bdda4cb0a75853831af35bf3dba922e3aea34a","_id":"pequeno@0.0.13","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-el8U9mmgAZpeee9olBD1hXg3ELnrW5Wikcd6/XXynPusqOmvASzsBvuPLjMc5dSny+I5aXBbbR8kpzLiB5QwJQ==","shasum":"2c21dc212bf8df2074b677b0e59c11943b0eb203","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.13.tgz","fileCount":69,"unpackedSize":211821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1NNlCRA9TVsSAnZWagAATaMP/i8YG+cEaoIHQUB2EcS+\naFpM58Vwsf352HM38YquNtfe18C+QXZ7iq5mrSZsLQMHnT+GOyXOpS7vF8FT\nu+yum2GsmVcYQ6ZMgYlDbq5NmpV2YjgCOIub6jfglSAM+K1auqaf2aIuXcja\nl9b1x1gQzY18iuBMsNruFPzzqbMeYi1OPIA0rTA+6cjlGFjr1d3PDdgSMW7t\n/JxQOII3bTorq4qRbeg7u9FsPKheVozlI2pH5Q7m0C3aU3Q8UleJY8MdjgIQ\nOVoY6lSb7s/169yXv81fyhSwAk2bdTmOnkk8XsABqy6/K0qRAzfdsCSYqiB+\ny/1eXB91RHuYviL+Ha/bstrXkF/kmsiovoYr/YxLGbd4Y1wkrQrpTBkjuWM5\nCoFg48FpcGGM2t03IbE/6uXTTCsivKaJfkb9a7idyQP4NtKhAyAvucalOOdM\nPbVakImdO0azlZRQyED4BfGEFTq+3SEkdD+nNJhxSMUbCEgKq/NWZ89a3+Yd\n2O1Qh9bhBmJeHabwcgwCDb9s/UhFBy+U1UaZqseooYWG1HlHbQvlgHMql9Aq\nHU7VyQtKGMXZl7+igx5aR0GtB+9L/WZDmIW2A0oEjrnFbhMYNr8t43KKUowj\n+74WJUCOQNfdQXF/JQYtg9g4pNhgCV9iy6LRV7gg5a8dugLsAiszbByxOB26\nsmqp\r\n=mc7t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcDolHFFW2oeUO+uwNUozE9fiiEFIEzjmhWvkpmaTeagIgK7Gomg0RQoYIggki5ECc8oeUXUFELK7D3PlJclQeTdo="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.13_1624560484876_0.1008537339611486"},"_hasShrinkwrap":false},"0.0.14":{"name":"pequeno","version":"0.0.14","description":"A simple react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"1753d42764b76c82224f9afae56b5468d208b519","_id":"pequeno@0.0.14","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-R86oXYPmJty7FIZKCc/QfDf/S1BoMIuomjh0tozFKKCTMvNSUSDFV5Mi2c73mIm9LvnAsuibW2KOzz5BHqSH2A==","shasum":"68b547637b0ca5042ef2753b55867b08a72fcc18","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.14.tgz","fileCount":69,"unpackedSize":212035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3ZSJCRA9TVsSAnZWagAAN38P/1LOD5CrDV7fvMLiyBQO\nTimQYsEKluFIIZo593ooh1p5HCVgUjPCi/jy4TgCNLnCdBCHRIKBXJcZmVko\nzGW2EIcqhHBEWb057rWv2zuUjpMo8sniT5bJ3YCFjv4j93EErBJGhdpchLNk\n5rChLOxxGUcVxJyxq9zARxRB3/DuLL3MtLJb1GalisD3ZFMX+L05pcnxfltk\nDtlMI3gw4LML0InYgo8bea5K+LBZr3ftQH/J/QlSDh1jyiNGJouol9ON03n6\nqV5at979/bHdw9VVTuFXyIFo9xXpimzgl9GuWiqqYjbzUxR7e9IAPw/PSaIx\nbRbc/6skAEwfPC0iCBppza8oii/EDTwUQB7Bwzp1lOX3Ut8yyMPqweb9tF/c\nlNVk24LrnCPPbaYgyqEe8vC/x64exfxnY4vc3pp3xQ47OvlWvvlEIPbV+5by\nP1vBuStySSgqZynHxYd3yPk3O+Ai8xZOEUo4ishujTK4wjEzQfqvlf7UkUBC\n75b/xVMbfE8N/7VLAywXZNK9goZG2N1eu4JffL6b3GeqaryMXXfKd3Xxkgeu\nrskOyEWyfh8ibcbLZiWurhmoEm04J6HCcjbsfv/wwjY6SY5Ukj5s4JB5dXu3\nadWduh1lQWQ3rtlsnN39NbM98G8fe8kRVAFq5kbmoMYHMXGCLi/jhdy2dc2Y\nbmjB\r\n=FDpU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdVWuzyBdpfEzfXjHJD8ElFWXMg8aHYBAUq3HRAAQUMgIhAIXk5TjHrQMbAfLu7r96wXeNGJbu5TFf4TZz622Jpzdu"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.14_1625134216576_0.2920105083936073"},"_hasShrinkwrap":false},"0.0.15":{"name":"pequeno","version":"0.0.15","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"908450c9991c6ff865ac3ccbd5e52099b3ba26b3","_id":"pequeno@0.0.15","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-IugDFkmSaHWQ2Vjd5cgrI2hjez/n+kOUsfsDVdDdBsNYMN0ETayphXbSCiBwDrC0Q4CnWO47LIe21/5Q/pquSw==","shasum":"a1817f52df8a34eb7fd63bcc44787b6d127588f2","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.15.tgz","fileCount":69,"unpackedSize":212036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3ap7CRA9TVsSAnZWagAANscQAIaSLrk6/jjEg5KmjEHF\nTKUg+xzUh7TmDKM9RVcAOUdjY5BHrYdU4E2cHNXwqy5m8w542Lz9A3tY8RBY\n+qw/deUkjOBNJve27wbdKl7ZeFDvmeE5eTq92apbNZzm9htmMs/oblcLXqqr\nHcN3dHwEVUndtoQu6HxAMantZ/ImNZmFS573notiv2JuJvPd9S5smKcfL9ws\ne1EJm2xNk8BfUBXHPVs5wzxZFGAFOkHKKH2MhL/lc52rdTx1KlfNdSqwvtOB\npRnILGPKzy8SXmg7pnPnfuDo5hvcw9J6/BUI0BYWPanVKusWm77312v+4BXC\n0X1XjEnF2Jomlr4a+98Qo3jHjpR4x9BK3l+w6fKcphXPhHD+YcNfLnw/Fj7I\ndEtEmwOyUa2wFwLTS45TE54udGsJtnUefVVR+0ADbGJci1HFufVY+lVwulQX\nUgghVzvi9LA5lHYJEal2GsHnvDCbOO4JufyoBugDtJGa6zgICitNzkwaR7Uv\n6TPwR26E9S7esOwqW7vS3yLnSTMUp7FJjvRB9Nnzg4E+A+ztB63Ofb0p23c1\nYRL/X+ZzMc8wAThlW8xCPXcQXqCTPVCS5pGz919aGV3nAuLvRotkMYFOGOgZ\nZtZg1X8y57Omt760g8V5+u8SvGid4qjt/H9Z5GUsYqhhQOkb0PpU4P0cqD43\ncFtj\r\n=kL1t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7bh/vGYnm9FEKyrLRV7oydsEE0POQPn1t75jZgJtq8AiEAqGQdkT6WWwy4Bmss+YSGxXjbC8zrqP/ar43MtSG1kRw="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.15_1625139835344_0.3083594251327699"},"_hasShrinkwrap":false},"0.0.16":{"name":"pequeno","version":"0.0.16","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"35eee2ffef752d8ebb8220949da446eb6fb36564","_id":"pequeno@0.0.16","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-AaGkKUGLTqdzv9L+A5wQXwy+NicmZf+cd/ZwSTzPMIcRZE/FRmD5TTx/aIBPsgsMVObD0LDcTLecTx6kww+4Lg==","shasum":"ced9d94e44423c6c5efdef0155778e26aa413ee8","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.16.tgz","fileCount":72,"unpackedSize":213448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7bn8CRA9TVsSAnZWagAARqMP/RJirTPCdL9Tj6r1Mp8K\nyh8PwMiPQO9Bvv2j3CYReKbPTPV9Who4zYtN55QpiuuQQCrjQaiR3EFK5AFX\nk+7rF5ADPtNP0+zCzekzP6QwL18ubFGBWPzaDGO3LcsLKFbKoHzDyOCAPYaz\nxfLZbQPqye+oR22RKeNVvA48Knn/d9HsHzJCJypxsR/L01kvR2ev2cHP+og6\nNN7nC+qV8nlD1cZRAkKv1o0JyRrUIh8v11STRo6nwJP1yxTFtlQasDrhMTGD\nZf1ZSake4GP+lAqtBtnU84Hjc3/Vo5gn6CR3CkIocQu1pKSZzHgkSaFIVMJd\nYk35B3zD1/pXTvbJH18L80NG33CqWu10OttxLHHN1UVblOZyvPisv+4Ve2Cp\nHzyqn7YMAZJFQU95NPJpUjpz6eiUzZYQ8YQ9NYywX1E42izHMr5qd0202uQv\nZaPQ0MLeN354rXicjMyjYPIo825JU3g/Xwcu7C6QwtNbhiTzuwt/lNHvCqSi\nJ9gGLcIE2rShlhsZyfSsNJhIVZwGiDRd0RyQDGAlc+WwtDZBppxJFxD/3AjT\n5DIrLvW4Qzjt+6j1lCGNc43vf/Z2JFNeGCaX922XuYrROsRF6fpbmveLAOSR\nBq10XgntJjQN+WoYm+x9YbKT0yDPGKChOHI7A+y2clKlscTYBYRqB47jq9ZB\ny4u5\r\n=MneR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvsfxMo58+fVBre9/vDWnKN+7Cu036xoPh+/GlXk/B2gIhAJSdCWAd0l9+iivOuhPeDClOZb8luYiPIvaHyHeE5gHU"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.16_1626192379697_0.14095395399482702"},"_hasShrinkwrap":false},"0.0.17":{"name":"pequeno","version":"0.0.17","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"1d87ceb545a0439b748b7f011a36c9a9f10ece80","_id":"pequeno@0.0.17","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-hitdGtwPrtK8n2RPia66/jWmsm5DZgeAvVmReZ2zZlRA4qcRoYGGb3hN/eZIbDQfn1fZlDc+5QnrkMlxSKJ2aA==","shasum":"83ecbb1d2cf870c61ea9775e552af204268197d9","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.17.tgz","fileCount":72,"unpackedSize":213482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7brlCRA9TVsSAnZWagAAnz8P/jJ9MguYONQOSdYps2Xl\nSoTm59AAlJ3t7WaHks5AldZuw6HDOeuHixFGTfejmg+tgDKWEeMGirLUMe8e\nE/h1TaO3Iq9YfT5C9UFSgIM23QJLwqHXYhQ3VMG9ZoCDAkjRWnAPROU+cEWj\nCgNmku4HBt8Yi02iY+6y374lnP/4ng8QwIUots7XqRg2c4ie9zej6LrU3ca0\ngvaeHxb/fawKRi5QkBOr2A3730fQPuivFMrYOlffpVEYB7QId0ehpRSlBsLT\ntw5uLfKWhmLWgxhv3Ew3Af7cwVKzxtcsxE65CCN6grB6jtquvo7tV88FGU8n\nBk+fJfUL80tkhq93HxiwPLdUtWXKw5a/25R+bCqsG5agToadxnK1yhaXLLKD\nTTvJKhz0D/+wYivu7FIPjTlEy9rbgqAV31DoCPFsCsTwcmzgUXo3giZaezym\nnuBgbq0l1voFnZvuIVo7LkpjVYMPqjF22o/elDA9JVbOpnv5T6FOpKS/oupY\nzWrbLjUkPbnSQMCz8XcSyRI+3oAzh2MaRkmlEwUhtFK+txTN+E6mXhsmYA1/\nFplDwvVcrzR9aNWKRojaLBh9/Faht3QR8FvzbByWPQ53tfk5iIPGPNzn8hBe\nkhgETZt3WxibscEBgwCA+kf15R3JMWL6ZTNHyZOdYFxFkhHT9Y5tK52N2Nw1\navAf\r\n=6Wzd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEoS5U57q6yUwFj2Z279UCjXq4YbATw56qSwr3jryNXgIgQKrxvMOe8bd0tvgtCvCy75TIdleQsfkyhe6vlUF/ss0="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.17_1626192613212_0.9278313171874537"},"_hasShrinkwrap":false},"0.0.18":{"name":"pequeno","version":"0.0.18","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.26.14","cheerio":"1.0.0-rc.9","chokidar":"3.5.1","esbuild":"0.12.8","esbuild-plugin-svgr":"0.0.1","fast-glob":"3.2.5","fs-extra":"9.1.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.0","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"331c577048f499dd1bab58c841855a384a620ef5","_id":"pequeno@0.0.18","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-BAKxUL8iDltFSaQeSEY1SeAi3Jf3hFnybL8A6x7gEWwTsSHtv/ukWZJec7qKXjInPUqShVMKF+CXvgIDyFH+Og==","shasum":"ac3b8b38382974bd896d846277650a94dc4ac063","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.18.tgz","fileCount":72,"unpackedSize":213301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+SDGCRA9TVsSAnZWagAANB0QAJEI8CqywW5fn7qfNA8n\nGo69E60H0geTsYIDc/dqz9FlvbMSaVab2RzAC9ICI3P+pJ//BZFK/6ClYTCP\no8rA2Pd9j4djbvK/ATuk/9wsO/tWEKkZ7vs6c9XbN5FO4qNVrCCywHNg/bFA\n8GmP8ZJaAoXr54yaNVSi2EzhSKfP0akgqBkQvZUxT4bTgEp42mEpKokLGwYY\n2HlpB4ibdW9ofgGGp6E8/DDZjqY+C4c0ayva9/3grNNqqdNptlADxvnHuvmH\n9jilIW10NFPJF1gW/Cw0+ycWEEdlwwBDvC1nDvB3WypZuCcFXjiswGGPh5Kr\nWEUr5kCBIwM092uWf0Ys+FOVH1BOsw6NmhEnS0VVSplHw90Z+WivbBh3vuSn\npmliU8LdPG8fIx6enyfffjzhtGwx3HUD9AR5iXpKx5pFYrR2/klN8uohzERq\nNUS5gvm0vB3/VmQ1+lUoJsBQpsGfYpb7D4tJU//Ztfv0KGLDuySU0E+QA1Hx\nifOfuck/GCHyZDHoW2CXcFO/2cluzVscOTDjTL8MJ9ex5hgYVTA6h+TzRGyH\n4dpIg3SQHg0M04VKE2GNDwiRj0D/aLebzzH2BTaxeU8xoy9D7jtUxnS9wtkg\nn58OqO/fkgKzhdzREfoKVFp2ZM7/X2OG23ezIgTzNe4y4kC/KKmYPCEmG2Nc\n5Km9\r\n=WFCv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpqtZ1XYtcSSgyT7UfWka8JmZMHbikLpufMG8Fx2kkLgIgT5I6tXDoEYruTIoUmrPLT+2VdTjelo1mYLJiHnU2pss="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.18_1626939590727_0.562922976836238"},"_hasShrinkwrap":false},"0.0.19":{"name":"pequeno","version":"0.0.19","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.27.4","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.16","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"17.0.2","react-dom":"17.0.2","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"af18ce52828c0c130b4aa40b7497e28bce2a8bba","_id":"pequeno@0.0.19","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-j+umIakur/IHduxAYUuFgYrxxuJ6mlq7jRHFa+aXe69qKtqP1R33m7RdZZaTosOc58YNwP6azwRI0j22Wn6vqQ==","shasum":"219bbffd1d0c98d5e28f6a0715337ebcb5d59b38","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.19.tgz","fileCount":72,"unpackedSize":214557,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/xPrCRA9TVsSAnZWagAA0aIP/irzysRDcwTX6Bl0CATn\nAcmjBggBMyEJjSdeJw8npB0grh8H2WYPnNEpY4n4dDPASltwifAotphueAwy\n5tekwPtcCWeuMixUduWwKWRNvc95yqP+lKVoc8qrlwxmlSfh9MQj56o2y8TO\nhlA5fYuU3h3EXb+p6kuushqmjLxfLCLkXLtvJXK22i3qk4XiLkZ+7CUa9zx0\nkwSVdZqMwb8mTvG3F2/aRx43UaDjNdHt2aCJwgeyJYnEte3kFxQGLsI9OUsg\nULjC/Tdyjyydx95h+4bf8bjA7ts/3EsiRWZbJFs6NKFyaGUyJF6pQNNHri6S\now6EVMurVwDdfDvCiwUT1q8Hux9QVHQWM6pbfE9ghjHqaVu9zWPClhBRdf9m\nmQtNLip4S12m0t9TWnDLvRcKj7C2eQ4x1/p/BQSpIgTu+r+u0/vTarz/ZC0k\nwsYChtxlseqxdpnuNw8k6FjACP1/QxBQ0eJCMANS0Cv3mtDBgZDrsFVeTkQx\nW2jr6UbovJ08ZHvsCt13sbTsVXtwxiyeFA94oUb9p1H/pBwiJmAcK+TbCWMD\nSoIbM3+GZls2XNwczDZCC6dOuehjXxUHSZCJcdkH7zpSy59CDNZKfhDUCx7C\nEeHixegTY3L86S0s/0t7iODlhfMwqkAs5wxnZq1903v+KEEMNWZfO3Eda29a\nfu6I\r\n=u2HO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBARqgz2Evt9giECgpD2bt2P8jNJaP5oah9Z4vmpVCCDAiAMcXxP6OKMVBjsY9vpxQ1iglezlRAE1LlsZbY5FKD9hg=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.19_1627329515465_0.7902200153322736"},"_hasShrinkwrap":false},"0.0.20":{"name":"pequeno","version":"0.0.20","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.27.4","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.16","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"e65bc1787490e03f8457b5480b0eb0679199a6a7","_id":"pequeno@0.0.20","_nodeVersion":"15.12.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-4Gfmjpx2m0G5FNzeW2/WBLZT/WMyQz1MWhAJENfg9ShaeakEPA4yKF/8mmq7PvAlmdcoBIDnSetImNeiC9tdoA==","shasum":"c97267edb70fc8359819220c7f851689dfbeab8d","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.20.tgz","fileCount":72,"unpackedSize":214559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/xaICRA9TVsSAnZWagAACdoP/iDBt0Z6e5tZ/mDeHvIp\n6xjLyAOrmt7TmkxM76LZytei8ORiZ83Cb2e7UBBbaUi+CJecFh8TPQExUJFy\n7ZDIXqCtwWwxV1NnNks+o6eAC26BTK5z3SmTtFSy2AxlSMZNfVjVK3B6tsHz\nhsvuVAe/YTiVf91q3xTOWAczJRFbtfe9Yi2Ib5o5fwkWgIfEeCABpmL1ffA3\nK2wmJyBLDTl6Qfq53c3A3YG2e+QqqbiR0sI6VTcdv25jjQpNc2lKxee3jsEe\njpb8bihu7PjScouNl+K/QKr7ViPtwpkiqcOsKEG2QCm3QGSwJXulZfBo9fK6\naIKm3DUyZ8N3MsKZXkUBoxI5dwDdXGgFIBdrhgRqnBa07TIPnp+Yro14K4v5\ndFczy2Als4NwWoBRxBDGnkoJfMtfCkW2fLLzOTIc3D68lvP0mlwkxMP1DS+K\nfmGQjrDkhP6sYFJlo6ucvUBBTWlOKhX2seCNN8ILGcxMP2u4sImc+cboQU4F\nB89JKBNwxztYkbw27BKZglEstAbJHBOo/6+FeCJjAxeitbL0tUasPNoHBOiG\nwB+XTrQ7xVZ8bzS4NocaW2Kl+lfIzWQFBxWaa8pLbH6a1FLaNOGLqq7tYxRc\ntg5/Kf1iPUhl5gLdbUkyDNjpLxfwMYL/QIBcO8WnRNV/shkEGbfoWriDF3cV\n4UJT\r\n=WzZj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKtEU51qozPWsuiiRyxNXiTfc5ePRsrjXsl9LEfb6cDAIgGqHQU2PKs0xQ3cleD/hgC4qLOv2OfckPPkjhH8C58YE="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.20_1627330184388_0.8647010362281322"},"_hasShrinkwrap":false},"0.0.21":{"name":"pequeno","version":"0.0.21","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.27.4","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.16","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"adf39322ed2a3c1bd75ff2784a0b7f721473fba0","_id":"pequeno@0.0.21","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-oSraJZpctnDyCDDf9l6GMYkYbmWiANBoydeX+nLq1PsVnkz7zo0akHWsxExEuKHRgGyFP0Jyrdg03Ye/oAI0GQ==","shasum":"026af7a04df347a9f5aa8d0a195d27ab91f2d29f","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.21.tgz","fileCount":72,"unpackedSize":214795,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGBk4dtGgls50G9JqQcxHY0YznvwLkC+8mBV105i2sivAiAqpsSuWidlyYTM52iBl3GYw7VsLxBr0SuAH+v+5XZ5dg=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.21_1631957868920_0.010988414494056853"},"_hasShrinkwrap":false},"0.0.22":{"name":"pequeno","version":"0.0.22","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.27.4","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.16","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","react-is":"^17.0.2","styled-components":"5.3.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"aa240bfbe0dbcbe536e46e7bb72e02c9a4ecb285","_id":"pequeno@0.0.22","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-DYSHRjXexH73u4PPI2nHq6NmUDQEqUj/maq+tE7AD0JNS/e274Z45Ty4Td/GAfacvNT1hZA2wQtZepUkr4hLmg==","shasum":"c2db707da139ce4c3cecf94b54d9d730c59755ca","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.22.tgz","fileCount":72,"unpackedSize":214822,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICz1U2CmewTT2Zv7RfRYEQpBEVJsY/xuRp+YxB78UqF/AiEA2vuyn/gCY2jcBTo51XpmpPpFe5QbzuNEmiVcTWvTsao="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.22_1631958566829_0.5133009450633559"},"_hasShrinkwrap":false},"0.0.23":{"name":"pequeno","version":"0.0.23","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"bluebird":"3.7.2","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"9387d0b02d0372ee189a95f0550579ac37cfc6a3","_id":"pequeno@0.0.23","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-/sW3X7464U1Fmwb6TDYYiFL6Y+Sv2UKS0SacRUdyWYaHt9eDH/Bz0TqSoSB+aEFWg6Oa+sPyCUIssij6kvjkGQ==","shasum":"9228cc15f46d4233d3d9e457a3a9a8fff4e3457a","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.23.tgz","fileCount":72,"unpackedSize":214795,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEat6YCa9tflfH5/6GGhuLhiZ/R7fNXMEg3bZ5rK/xDpAiEAlAKkVrLRydZ166cOhjzb5XN4JjAdvchvQLActdjr9pw="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.23_1631985175632_0.8562033254244725"},"_hasShrinkwrap":false},"0.0.24":{"name":"pequeno","version":"0.0.24","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"34e5be23593db003a93fdd58aba624f35db88998","_id":"pequeno@0.0.24","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-priOqfd5IySypDLFmxAhGaxM9oWv4L26qG0PAnbOiKo8oPCsnBBr/JmuH1PwYVRETo68+pxdJFfNZcvHxQTpyw==","shasum":"32a38f7ad926cf6c168d7ffa40a0a8e39b98b403","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.24.tgz","fileCount":76,"unpackedSize":222948,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNDFNrCUpgNghVH9USGRswaJuKf/ATEIpWpctuijJ/UAiBfQk/fXrhMQrca4jH1fyNwX4ACg2Vs7wQs/+PRjISbsQ=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.24_1633277827811_0.34770719279660645"},"_hasShrinkwrap":false},"0.0.25":{"name":"pequeno","version":"0.0.25","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.8.0","vanilla-lazyload":"^17.4.0"},"gitHead":"8f351d22a34eb772c9d1aa9d1df205a9ec40b87d","_id":"pequeno@0.0.25","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-Jwl/y2PqXw05gqfDlVDAcojbE4iKpC+6IEWzwMdDfRkgzDftefAa7/QqbPHdpnvu5uJJoLPCQEWL6STpumKt5Q==","shasum":"d9c5a6a258ce9fc93f9e06fd26e103d30891c340","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.25.tgz","fileCount":78,"unpackedSize":223583,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDW0s4n0wFT9UKIW4KocepLJodHX1sa0W0qDM6AT/GqXQIhAKfJpyu2+lcQ+Mz8Q69AdWY/bZvI52IFolcKV05KhecZ"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.25_1633368665265_0.9520981281800236"},"_hasShrinkwrap":false},"0.0.26":{"name":"pequeno","version":"0.0.26","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"0a6d5c73d4c90a3346d4e2ac2c9c06f8d435020e","_id":"pequeno@0.0.26","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-AOU3qa0/BIFKH6SQnIMUS5mIvYU3xBnpKISEQogOAD0ckql+Z00DUMnv+nvLIMUdVPeeFpk2QxvYzG4p3nNaZw==","shasum":"15b9195a319ee793173a7cc06ad541d6e98557cd","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.26.tgz","fileCount":80,"unpackedSize":223642,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDzZMi6Cp7rZDtSlPVsNqUTU+xtNNdyqIH02wpZfYIO6AiEArTR+1xy7WAbWXwZVPKr27YihEeRT1G/LQsVPD1YLI+Q="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.26_1633676434771_0.4465552871124894"},"_hasShrinkwrap":false},"0.1.0-beta.0":{"name":"pequeno","version":"0.1.0-beta.0","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-page":"node lib/cmd.js --example --clean --page=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","object-hash":"^2.2.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","throng":"^5.0.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--page` builds only the specified page (--page=/news/index.html).\n-   `--example` builds the example site.\n\nPage option is usefull during development to speed up page refresh or during build if you want to write only a specified page.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"6f2e0769dbc57e773a44fc9fb839870d542a8f62","_id":"pequeno@0.1.0-beta.0","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-zQ6tHQX4uB+IZEIji17nPMmqHouH7TYn2r8hG8bOPKUQa5dIgwKu+2e5mbQBw4QUJigWePusNFGaJCB8PfkcZQ==","shasum":"6551613c7dd738f0fbb0833a028badd73acf8666","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.0.tgz","fileCount":79,"unpackedSize":224112,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEnkkb/wWRbZisUsHE5eRKLX8OZSou7H+7mLvpw1d9FAAiAFwF6GeXSOWlI4NMzha5QTonylCBNsW8eZ8q01xyravQ=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.0_1634548024688_0.6197358964735695"},"_hasShrinkwrap":false},"0.1.0-beta.1":{"name":"pequeno","version":"0.1.0-beta.1","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-path":"node lib/cmd.js --example --clean --path=/news/news-1-slug/index.html","build-page-path":"node lib/cmd.js --example --clean --page=news-item.jsx --path=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","object-hash":"^2.2.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","throng":"^5.0.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--page` builds only the specified page (--page=/news/index.html).\n-   `--example` builds the example site.\n\nPage option is usefull during development to speed up page refresh or during build if you want to write only a specified page.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild config prop** you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap and move the service worker file\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"5d898e46c29d7c11407bed2dba8628a06b00f6b7","_id":"pequeno@0.1.0-beta.1","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-+9J5xZRuqd8aMhSRnzG4Q7vfMu54rrSyBk90pKHbRG9vGUOb5xXqIVqvDn5hmGSJ2NlNE+wagRJ1EN0BqteuaQ==","shasum":"7cd41dcad51bfe3d95df26875f0988bbe9f48588","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.1.tgz","fileCount":80,"unpackedSize":227520,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIHonbbDDQiswxGmGHwIoEdUTqVqusG9v9TjeloXfyOUQAh9GQMDPAFxaUEz88GJvCJIRV1HWLGNIMfG1xaH2DxoI"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.1_1634838781865_0.7239302541554617"},"_hasShrinkwrap":false},"0.1.0-beta.2":{"name":"pequeno","version":"0.1.0-beta.2","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-path":"node lib/cmd.js --example --clean --path=/news/news-1-slug/index.html","build-page-path":"node lib/cmd.js --example --clean --page=news-item.jsx --path=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","object-hash":"^2.2.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","throng":"^5.0.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--path` builds only the specified path (--page=/news/index.html).\n-   `--page` builds only the specified page (--page=news-item.jsx).\n-   `--noAfterBuild` prevents the afterBuild function to run\n-   `--example` builds the example site.\n\nPage and path options are usefull during development to speed up page refresh or during build if you want to write only a specified page or path.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild config prop** you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap and move the service worker file\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"e2ff48491f47f8aa9b058361f88a004c090dbb8a","_id":"pequeno@0.1.0-beta.2","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-KUEIwhDwrxAJjUQ3XCJu/XSDNFiGpI3gwAsharhJ3hCG40NldwxYvdBg8Zk/O4dBzYRo0engTvzGeIG4uyDCTw==","shasum":"9d6aeda45c7cd665f9226ca9c59862e342453324","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.2.tgz","fileCount":80,"unpackedSize":227668,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzkBbxxzlWi+M+agbr7T3CFQjtrPf9melLbKSN2vS7yQIgC/XUgb1YW670hJYYagIc8I9190ZB/GPqivY1I7Vqj/Y="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.2_1634839258474_0.5262788040358335"},"_hasShrinkwrap":false},"0.1.0-beta.3":{"name":"pequeno","version":"0.1.0-beta.3","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html --noAfterBuild --noProcessHtml","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-path":"node lib/cmd.js --example --clean --path=/news/news-1-slug/index.html","build-page-path":"node lib/cmd.js --example --clean --page=news-item.jsx --path=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","object-hash":"^2.2.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","throng":"^5.0.0","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--path` builds only the specified path (--page=/news/index.html).\n-   `--page` builds only the specified page (--page=news-item.jsx).\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--example` builds the example site.\n\nPage and path options are usefull during development to speed up page refresh or during build if you want to write only a specified page or path.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance and the page data. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"4a65d34e6e65a76ddd0c3f1ac3f2b125565ae012","_id":"pequeno@0.1.0-beta.3","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-psuDg64nWEkYfz7tLovHZFowzNFBPjNVtyEpxEPuhuPAwml9o3dlWhUGApRl7EZ2AR1vwHivkNisbwOk0EqNFg==","shasum":"bdab998322a5b9c5469d6a0ee26cd1a889ac5add","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.3.tgz","fileCount":79,"unpackedSize":228997,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCm1bBk3DtmaSAEzIvs0V4x7204lCOntSiN8i9umb1CTQIhANcN7cMD7F7JWOONiRiZtzViwWP8JOpqs9amPpPn+XAs"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.3_1634918970011_0.36509061561318235"},"_hasShrinkwrap":false},"0.0.27":{"name":"pequeno","version":"0.0.27","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"3e282de9c98bc5b35ef97d6368eb505bfc06b9da","_id":"pequeno@0.0.27","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-x3wZppdgQOyPKGRmwbb2pk8rwuam2fHLh0M+oFtRSzyUSJEIFooR2OIRF/10oVyjZvyF8r+2bOQI+IlVprDC3Q==","shasum":"5d6241f71983e198b3dabc3f4ddcefc73033c9da","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.27.tgz","fileCount":80,"unpackedSize":223944,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGhDB5gBRf/Vw4HoKWeTqmgznJS3iNmMFwRrXe51HGizAiEA6+NyDMV5xjgYZZ/0WM2floX1etVNSznNvzFAa0wj/74="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.27_1635266081296_0.9090982100437777"},"_hasShrinkwrap":false},"0.0.28":{"name":"pequeno","version":"0.0.28","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"9eda56dc70161970f86439c9735de2f368009ca5","_id":"pequeno@0.0.28","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-3XjDe0vQNtfGYUsOyW7vvKMAwzzgfQiL5fNphYVDFuYUxB95KxHSqCCEvKSnpgHAyylcMp3VpT8ohOmB2mjJXw==","shasum":"2cfac438866dc32b866f9b4eeac67964b1db082e","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.28.tgz","fileCount":80,"unpackedSize":223949,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzSNXfDHw9QfqHaB/x314JAZsNBwAAoWvlIR5Opx/C8gIhAMgGRLW0yhCX5cHBV655CRAm9xHG/4oUGii9C20ct+pu"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.28_1635266204955_0.4013721146653477"},"_hasShrinkwrap":false},"0.1.0-beta.4":{"name":"pequeno","version":"0.1.0-beta.4","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html --noAfterBuild --noProcessHtml","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-path":"node lib/cmd.js --example --clean --path=/news/news-1-slug/index.html","build-page-path":"node lib/cmd.js --example --clean --page=news-item.jsx --path=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--path` builds only the specified path (--page=/news/index.html).\n-   `--page` builds only the specified page (--page=news-item.jsx).\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--example` builds the example site.\n\nPage and path options are usefull during development to speed up page refresh or during build if you want to write only a specified page or path.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance and the page data. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"10c490fc1fa627f7da2b4c6bf019aa3dd6998ba8","_id":"pequeno@0.1.0-beta.4","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-DZI9dItAJi0EZAs861jsODct5r3U4F2pEsCeeOCiFStWqoVfWWImYbn62SYyiNPsXQnelbxcziGkDkWoDsV+ug==","shasum":"e64281dcdba29bb34310065d4cf351c41552402c","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.4.tgz","fileCount":79,"unpackedSize":228944,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8xAP3qzJL9Bp6nxBApBkZ4K7UZlHE6GK4Nup9dO0GmQIhALSUlbWURnk5Xgh32dcmi9rUXdEU6wmY8wTF1Hyuh975"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.4_1635312917421_0.4661418736369718"},"_hasShrinkwrap":false},"0.0.29":{"name":"pequeno","version":"0.0.29","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.6","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"b93031d3f8b4db34e83a1b61aeb26b4eefffbfb5","_id":"pequeno@0.0.29","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-Kr06qrdki0n8cpHNR2F3SlHMR5NBQnwcTcl3sz7WmcNWoXk0g3wZlIa2aFcZP6cPzrLpKxx5KFmxybWBhwTUrw==","shasum":"8183f9987531dde5688db9f769ced834b33635fa","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.29.tgz","fileCount":80,"unpackedSize":223949,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/ALJ+2jHSyWG00KXh/96LP9et6WwV+Qt0loLVMgha0QIgaNz/Nx84AMhqvRPGktA8KdmvoCNm/2/Wu/gf+6EqLEw="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.29_1635313062554_0.03626527866497309"},"_hasShrinkwrap":false},"0.0.30":{"name":"pequeno","version":"0.0.30","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.6","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"274296baa5a190945a6c76a62ac6babcec36895d","_id":"pequeno@0.0.30","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-+f2+2tpEg2gUsfN6pd9KqpQFr1nYhDy1SvjgJqx/dNUN4WKQdh2J9kpPKRJhOzBus+9UMwl2Hp8COiiXMVCW2A==","shasum":"c217eac3993eb18995c429b56e8755e5fa3f5683","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.30.tgz","fileCount":80,"unpackedSize":223949,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKoHr8Wo3MFTxcAlDzs62AJIWusrVisCSD9T8EZyMuqwIgI3gdknuGZQGgGfVgBaR7jZkX0nFbsVysTtMH4ynf3LY="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.30_1635313222936_0.8388407693560549"},"_hasShrinkwrap":false},"0.0.31":{"name":"pequeno","version":"0.0.31","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.6","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","vanilla-lazyload":"^17.4.0"},"gitHead":"1054cb2a22f24a2d62f9d0758c96ccffa96da47e","_id":"pequeno@0.0.31","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-Y3pplxJUnNMm//idgqbhcMBkMEcauIr/EgRJUWVtzSej0qCUf7oXxVeNf/zF2iXYHRa7Yh9xIqlrL1JPshGODw==","shasum":"0fbd35edaafc5d401bf2243ca2d71f9d94dffa99","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.31.tgz","fileCount":80,"unpackedSize":224415,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwcAi9/+9HvsWArd/UkYnP7zWfZoKo2Shk5vIdvPtlGgIgbtbWMxacCVUsjwnCSi2lgbtbTrc9RTKx70AY8ziaWIY="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.31_1635348244896_0.01909746152725278"},"_hasShrinkwrap":false},"0.1.0-beta.5":{"name":"pequeno","version":"0.1.0-beta.5","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=/news/news-1-slug/index.html --noAfterBuild --noProcessHtml","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean","build-path":"node lib/cmd.js --example --clean --path=/news/news-1-slug/index.html","build-page-path":"node lib/cmd.js --example --clean --page=news-item.jsx --path=/news/news-1-slug/index.html"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes.\n-   `--path` builds only the specified path (--page=/news/index.html).\n-   `--page` builds only the specified page (--page=news-item.jsx).\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--example` builds the example site.\n\nPage and path options are usefull during development to speed up page refresh or during build if you want to write only a specified page or path.\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you cana ccess the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance and the page data. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"4b1d3ea97328c401ff19035133eedf945a9a0728","_id":"pequeno@0.1.0-beta.5","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-hRPBnHWOb3A9DEpYWheyUNFFK9MnzJciWkYSxS8bA6tGlLtylV+DWCBGHKAnqn2hEbUs52EjuciwmWe5/ZE85w==","shasum":"7b82a4d4df1907a60d73fe894999767d26f2e8ef","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.5.tgz","fileCount":79,"unpackedSize":229410,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQZp4nlszfj9LADh9xPDEG6xflxt4hyIZzb0K/VIn7ugIhAMG1VTlNJiTm4PvpUJy11e1FSJ+GsaTlnsE4U5qFMSL+"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.5_1635348478021_0.7794362875503911"},"_hasShrinkwrap":false},"0.1.0-beta.6":{"name":"pequeno","version":"0.1.0-beta.6","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.5","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes\n-   `--path` builds only the specified path (--page=/news/index.html)\n-   `--page` builds only the specified page (--page=news-item)\n-   `--data` fetches only the specified data file (--data=news)\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--noData` skips the data fetch step\n-   `--example` builds the example site.\n\nPage and path options (together with --data) are usefull during development to speed up page refresh or during build if you want to write only a specified page or path.\n\nFor example if you want to **develop the a specific news page** you can run\n\n`npx pequeno --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml --serve`\n\nOr if you want to develop a **single page** that doesn’t need any data you can be quicker with\n\n`npx pequeno --page=test --noData --noAfterBuild --noProcessHtml --serve`\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you can access the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generates list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). you can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance and the page data. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"454303587594dd99e643fa01d7428f4583a81d60","_id":"pequeno@0.1.0-beta.6","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-FVe/SkewqvdBGTTaaBM/mjW9HgQF+ueRGCgcIZMegubMipYM7YjxoNPSE8Dh6sz1tvf04Yg9wtDHLdnC9Hu9CQ==","shasum":"4f06db527e7b382f9a1dd8746e05907c399fc4eb","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.6.tgz","fileCount":79,"unpackedSize":230201,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICM2vN64UrYjHEud5AiqIKFB42uke+vDMxP2z7D42j6ZAiEA4FDM/Ntbrosw8G/Q2YR+FB2ym+v+HBisQQbYwvJGk1I="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.6_1636549885791_0.34307254832992506"},"_hasShrinkwrap":false},"0.1.0-beta.7":{"name":"pequeno","version":"0.1.0-beta.7","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.7","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.13.13","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fs-extra":"10.0.0","lodash":"4.17.21","minimist":"1.2.5","node-cache":"5.1.2","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","winston":"3.3.3"},"devDependencies":{"fisarmonica":"^1.3.5","micromodal":"^0.4.6","release-it":"^14.11.6","sitemap":"^7.0.0","vanilla-lazyload":"^17.4.0"},"readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, since it gives a great **developer experience** together with **styled components.**\nFramework like [Gatsby](https://www.gatsbyjs.com/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/empty.html';\n\nexport default function EmptyPage() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes\n-   `--path` builds only the specified path (--page=/news/index.html)\n-   `--page` builds only the specified page (--page=news-item)\n-   `--data` fetches only the specified data file (--data=news)\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--noData` skips the data fetch step\n-   `--noCopy` skips the copy defined in the config object\n-   `--noPublicCopy` skips the copy of publicDir\n-   `--example` builds the example site.\n\nPage and path options (together with --data) are useful during development to speed up page refresh or during build if you want to write only a specified page or path.\n\nFor example if you want to **develop the a specific news page** you can run\n\n`npx pequeno --page=news-item --path=/news/news-1-slug/index.html --data=news --serve`\n\nOr if you want to develop a **single page** that doesn’t need any data/libs/files you can be quicker with\n\n`npx pequeno --page=test --noData --noCopy --noPublicCopy --serve`\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/vanilla-lazyload/dist/lazyload.js':\n            'libs/vanilla-lazyload/lazyload.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you can access the pequeno instance. So, for example, you can get the config object.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generate list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). You can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance and the page data. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nsee the `/example` folder for a complete website\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","gitHead":"e8e2e13cb8bad2dc69d0d24723d35d31d5258b16","_id":"pequeno@0.1.0-beta.7","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-m/HkPcBPwDVW6ez37M5DtIEd+FmcSoMCAUvBu2ekU9pVMmmnwGTGPJbfiGBvMRTwTKjoCmbNbl/1xIFRMjYuKA==","shasum":"9cc6a93665e6872af655dad9bf734d7308d23dad","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0-beta.7.tgz","fileCount":79,"unpackedSize":230645,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCedRJUIyv6I0vl+9iF4rnSoUWaIhbSVGHhY+3ELUO/5wIhAJLkF5EXnuN65VyylkfBoce2qasJI3g2Ykt2LBMQDXcr"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0-beta.7_1636617014584_0.4984145465458514"},"_hasShrinkwrap":false},"0.0.32":{"name":"pequeno","version":"0.0.32","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --clean","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean","build-verbose":"node lib/cmd.js --verbose --example --clean","build":"node lib/cmd.js --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.6","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.12.28","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fisarmonica":"^1.3.5","fs-extra":"10.0.0","lodash":"4.17.21","micromodal":"^0.4.10","minimist":"1.2.5","node-cache":"5.1.2","normalize-path":"^3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.1","vanilla-lazyload":"^17.5.0","winston":"3.3.3"},"devDependencies":{"release-it":"^14.11.6"},"gitHead":"72ee5158a8d6d9f6595e58cb2f2b642585cf2dd4","_id":"pequeno@0.0.32","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-2WquNFlrs/KGQ3zLkYCpbgDXg66ITCFM7xVNCwG2VYsXIoTqa80vTNC3UdanqILMmIo1bIsmBcEcRv1PuDSbkw==","shasum":"bf7d76adeffed5d69f791276a44e37840158a87c","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.0.32.tgz","fileCount":80,"unpackedSize":224774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwtnpCRA9TVsSAnZWagAAEVoP/11TG3KLtxBsuHfCblZu\nNn9TCxJzZtetSqI2Akc3Ttsxn6A5h30UBCHHbzdgduF8DOpyTaMne2WWt80y\nrOZVVHnquHoYpKV9X9zx01YF4928o8X81XIDbwaTWetM2Pl5FdibEgxLszo9\nU7PYXy8w0wbhQe2Myvjqmi5wzFgh5o4GWs0aHzjbFcx2tLCt+iIfQdPl+nTl\nScRhrwckOCnD0KxzBBRtW3Lqq4F6QirCM3mOqlDOEe8EC/l2jWmfzCKrEGyV\nFt6Ndt6oWjLe9beLWlzt+nzjPvOT+E3nTvPRYV/UBQ/3fO07QZat/84q4WYh\ncOF+NNPQsh0hu1MDKiRzIQRc0ZiuaUtWk+RpT8t71Cidv2F6n6sbDVX1cJPu\ns+VfoKuzFv6cJZwgEK1EMwsoUyrJlvU/AJUbC/G6zTDw762SfJKg/damg6BX\nz7z0sf8nONGUzgqFU33Uc6uwQJHgPCEDyMVw8smZ0mVi6nKxh2vdXDhGtU/D\nceYhw69c/txf/YWHYYtoZAtj9rS10kUPN6aTMqD1wgIPidi9i0h2Cp0HXeIb\nv/PR9aradcdgSV4wa1WvHygwx26OL0pSjI38H2vu9vWIgCMrGVQJqUB5DkND\ncLPG0BGxbXilda8AiROa4P/AlBrts6GyvnZNO4QkOTo180jxrmMX29hJXuJS\nFye9\r\n=QzcP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvNF60KnzfISW59xrQv74CRv0PhUSltmvN/y4JsPITQQIhAOhYGSwvZWVBGuLYt9J1JX9r4HhUglOS5es/W7BN7ITS"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.0.32_1640159721502_0.6607502799036593"},"_hasShrinkwrap":false},"0.1.0":{"name":"pequeno","version":"0.1.0","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.1","browser-sync":"2.27.7","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.13.13","esbuild-plugin-svgr":"0.0.3","fast-glob":"3.2.7","fisarmonica":"^1.3.5","fs-extra":"10.0.0","lodash":"4.17.21","micromodal":"^0.4.10","minimist":"1.2.5","node-cache":"5.1.2","normalize-path":"^3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"^7.0.0","styled-components":"5.3.1","vanilla-lazyload":"^17.5.0","winston":"3.3.3"},"devDependencies":{"release-it":"^14.11.6"},"gitHead":"28010f722bb96b40e153debf41fa751afc3adc1d","_id":"pequeno@0.1.0","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-BuyvDELqmLUtK7esWB/DYhM0sqEncxzEacSM0nBbN9qcY13FSCzQa+TSg1EK4bk6j5g1/gsa8UhKA1XOg6xiXA==","shasum":"4b38003a1d85d1d2fbafad0445dcd53fa287fb09","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.0.tgz","fileCount":80,"unpackedSize":234682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxLSxCRA9TVsSAnZWagAAok4P/3aeLglwIArqj2KqbLHp\nbZK4alyO3g/ubC5f1lcHxfvxfZ6mzvkAjnDa+xRpem6cAO7pgUEVoXqz1gVq\nbRZh7hNxybsNsdLvn1yhcPF/aHwxTPlxfE5wzY3N65dLDphNo4+NoSMDVX94\nZDBGSPNLGWNO2CbGV4NrjTmjoEZ70gTe9o2IszPIGudWIjmHxGOvbXVeFndH\nb9jLT/xcGxRsN1wd5E9dz33Y+oLmA4w2q1pX8j8rz6kkHbA/Gg37oKp0XFBW\nFwEl+cIrgwzhOZyAgzB2vV7QsClRQvObDMG5QPM7N2IwSuzdQRyH/Mrk4/Ge\n0LSK/XspyseBuP+rRrjhs8LZFE8FAS/8Wvckb+K0/JVbU8+S8782CMzP6pxI\nNWktN5FnM05CA7Qy/jVQ0cqKH3dEcxdd18vGtzYkq23V1gVO3CkU+hwi0wOt\nRmmG0MNZCmYFw5bz1N191U+ICiZbPpZFDZ8TKit3kyGL79m+KpVi12AjNq2o\nvMkjOhPVQWawWMdwBaUsXVbOcYGEPfm25jyrcYeQgs86nsQ576pSSrqy35wi\n3AsV3MxQMDlnQvW+olRrdwz1sz2n+4Qxr2DpIpQHSmgIoCCivuN2/htVAa87\nfp7bf0fzG9GNJxfF5/zD9cmPh8yfFEmobvmYsfMUTraukJkDdpivRBO/ZkAf\nB2r3\r\n=7eGu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdWw6aItl9diWNjn/n1PfId9teoIc4IRxPg34NAjn4cAIgFNwKf9TzeA5OTcNwoQ7hC+G58fQ5ioNuJlMSGSmvYzY="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.0_1640281265255_0.6964879443432623"},"_hasShrinkwrap":false},"0.1.1":{"name":"pequeno","version":"0.1.1","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.2","browser-sync":"2.27.7","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.14.8","esbuild-plugin-svgr":"1.0.0","fast-glob":"3.2.7","fisarmonica":"^1.3.5","fs-extra":"10.0.0","lodash":"4.17.21","micromodal":"^0.4.10","minimist":"1.2.5","node-cache":"5.1.2","normalize-path":"^3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"^7.0.0","styled-components":"5.3.3","vanilla-lazyload":"^17.5.0","winston":"3.3.3"},"devDependencies":{"release-it":"14.11.8"},"gitHead":"8f29b5a635fcd142df97f1ac60cbc0f05bf1de44","_id":"pequeno@0.1.1","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-lb7KDvfCiSOo8pqFVH9thlt3DNigu62VuSA2bm2m+xLeMBpR7XfvpKUw2+0b5y6E6OEwsTLdgvzQLuUlOYKANg==","shasum":"f1a74a64e9742a542f78e28d99a083ef9c8632ce","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.1.tgz","fileCount":80,"unpackedSize":234705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxLd5CRA9TVsSAnZWagAANewP/A30v/is5WT+Q6teFsJz\nCFek1KiUggQFTb19OHvGSNyqFFfYnxs3Jht3C7lEA8EA5SRNDBCRTKWH0U4s\n/Ts1wiZfJou/XXM/9FDa/aJh5RIIafgchficcsVivai2UUpmG4kf5TBUwR3U\nNZxqTr/uIYxdjOF1SKTgS99Hql+GVBoHwtPpok/DBYlC+IF1ZyTNnXWNEiiA\n6cavbl604Z1wAZEOepUB7zIrh0KyGP0rz2mYLUzjtQr/c8ekIAQKi7ZOJ9CV\na+iWyeXGjC/+iGPzALDdIqlddjRDoB2rM1XW1RJwQ9RqqGzXRtAzV4rUjkSx\nTcEoKoPro+2otIiKZ5Tx+rVMWKYHXh4y88fKTQma2StDIAz/8bSP7mcaMJiu\nqBd9UojHXDQYYss5hhVI4PGEYeIOEY7Sid2qYz/pxo80IbHx0PcuxixO5xAX\nAv6Rq1NDaeaK5raIkajOFpFzHaHG7ynQOF5gRLR29og96vvcFJGsykx6uoWR\nWfPaglEMsrEL1zgWkgJQDnPrJCYBTdO/vTmAn8Ae57N1aaVbYqpESsweiGcr\nDT1NwtM/Qe2AWkKJW4LF9GA/5n9e6pMdsh6vbSH4rNu5mqvV7QZ0YKGkNutr\nx+OqbQv5wchTpB69Yg2kal21KlNfpgAPQbhd6TFZnHn/9IL1peMPGGv8xBBU\nkIUG\r\n=1U49\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUqbWsL/pvbvPgz/3tOdplYgpY+aAho8EifqklcVjh6wIgXrCRFgpAeB6J6LvLjBd06DPQKir5ro4RwZyc4fxLr5c="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.1_1640281977607_0.5373247993632106"},"_hasShrinkwrap":false},"0.1.2":{"name":"pequeno","version":"0.1.2","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.2","browser-sync":"2.27.7","cheerio":"1.0.0-rc.10","chokidar":"3.5.2","esbuild":"0.14.8","esbuild-plugin-svgr":"1.0.0","fast-glob":"3.2.7","fisarmonica":"^1.3.5","fs-extra":"10.0.0","lodash":"4.17.21","micromodal":"^0.4.10","minimist":"1.2.5","node-cache":"5.1.2","normalize-path":"^3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"^7.0.0","styled-components":"5.3.3","vanilla-lazyload":"^17.5.0","winston":"3.3.3"},"devDependencies":{"release-it":"14.11.8"},"gitHead":"341175d7df85f9f14ef3caf914b104fa7d716715","_id":"pequeno@0.1.2","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-ivxtCUpx3+/3/2UHsaepZ8LmHYyqPIowJKsifbPkb+kzeoPCULOgEXQwbDfSQiLO391bVNW5nlhRVmHl9AgllQ==","shasum":"50f6647e9a1b381ed25766222ef2f57c74d8e53e","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.2.tgz","fileCount":80,"unpackedSize":234703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+PNFCRA9TVsSAnZWagAAch0P/ieQWkSNLjBmMvfwCRz9\n3U8aQdAwp7DVj01bIW6vaZZgj9QeB6DNt+GmpopT9ky58L7qtCiEYjc5yATQ\nmUkkjVxg+JfA1uAg7h4BKqM5yDb28yYYuvOcEqlm55Z9xSmxYXLHm7ARp9Jt\nhYvVICNQsYRSAHCa6UH0E3/EBrZg5T9urjxLxYS/7UTXVXrUnY5Q+Cb7mm/a\ngAtPCJrHQSmLYZFGD4jwlJqF4QI4+WLX+Lt0h0AV7c9G3o2LqkXd78HzTRjt\nkA+maBj129YQlqPtcy7xSQ+Lqmw90u6rBD3tILv2w5SNdmCE64jXyDtDzMfm\nYX/mqlQ+rp171ZFFxJkryrIK0/JiHRERoQS9LXnYq5yEj0Jg3o7pWgJoAAdu\nVyy0bp3DkGGRisK9jIGLEWWxbwP6tQDz96CjELDNre17KeTDrI/sordDye9A\nbauMX1ABBourcuwHo2354plZiJ3DdY1t0zcr+KCyVfapbJ6IYrqdj4e0JYhJ\nfKQ1dF62xLVxzLRjyw9Bal6C93EOrplHCnhrnDtQQrAtnXSfX56NixnyLQKk\n2CPlnrSfu67gtd112ZIcR/PSe2rsNSvSu+uGiTiPk92C9gei/9dK6BhDaS6/\nLzdMH/9KI2zy8d6pgWPPANBGOM0Hp9DVt2TgfMk+eNCEBClnQzSDJPFmN4hP\nNDxP\r\n=Ai5K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHs/wG+L8VrTd0Sc5fqLtw1dPpkdg+pILqDjakA5i+6YAiBo6byEYVrXyjF04m5gjPujBIUTtJKW0fYPd4J4NK6pIw=="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.2_1643705156858_0.6857844693641437"},"_hasShrinkwrap":false},"0.1.3":{"name":"pequeno","version":"0.1.3","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.3","browser-sync":"2.27.9","cheerio":"1.0.0-rc.10","chokidar":"3.5.3","esbuild":"0.14.31","esbuild-plugin-svgr":"1.0.0","fast-glob":"3.2.11","fisarmonica":"1.3.5","fs-extra":"10.0.1","lodash":"4.17.21","micromodal":"^0.4.10","minimist":"^1.2.6","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"7.1.1","styled-components":"5.3.5","vanilla-lazyload":"17.6.1","winston":"3.7.2"},"devDependencies":{"release-it":"14.14.0"},"gitHead":"f81660afb5bcd7fd4e4c300fe9808f096c5a175a","_id":"pequeno@0.1.3","_nodeVersion":"16.13.2","_npmVersion":"8.4.1","dist":{"integrity":"sha512-0DfJpJOysILjNiWHPCH+MCJNEuXz+cQlTeWyVAW3Cj54ePzm/2dLQ+nSAVXAGeV+41XnfUeBjHMbY+k2sEik5w==","shasum":"778c0594b66530b6af0074958c24824bb113705e","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.3.tgz","fileCount":81,"unpackedSize":240657,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrntGCO0PDxCGevSYdhChB5Iaf12/aLmrIRKB6n1HRogIgK84dbN+jof/gNOkL0xjiVhBXsAmaLX5I/iU7d6CyyeA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTARmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqaGw//XDfo+i936HW/pk/vLGXZUgLO0NsmiKe7YgGNTBQtQj1PZgGW\r\nQTOi3QnbpZHHHy+ZdZX9cnIlGYdcoYYnRjVhbv0cn3xCa41ILsph/AwgCfZq\r\nAH7lBX4joGwh64mjR2zUeo3Obirv18Tg0Qte10Dc6+uKYwwfTIcZreWcSabc\r\nEyOqW2/mTyqUYmvAL7x96mWjv7NFwr+YJNfGo/zNpEDrx2iFBGcvBmfGWnvR\r\nY9Eb/h7IISE7vYAzQMoqUO0tk4/ETJ7pMzwUrlJ/2tQCrCUeVnCLas9ckNdA\r\nPSYoj8l2nnlB9Zg6I2QSjhoPKPE9CvSAYv7jYcelNjw0TmqYwVmRZ7DbayAO\r\nC8WqsCTSGQcnvq3G3q3tB7fFTpMAL4ovTS88ZVGVsZ6Hti017YlYxwrEa1Dp\r\nUtV7G3JqTyvRldoi9HYijBKt3Lm+YBHPAQZ8Eg2/N9ceVc6lUwP2Aawq3sll\r\nbm8NcgUddzqugAzvfgSAUOZzlwoyPDOt/z0a9gHuJBz5PN5ky0XmgIQzd96J\r\nvo3qs+Ik8ZPt92XNg3P/qIfRH2oCAnh84xOty8eLs63Zw9R3bsv8+3CiyjZq\r\na1sb5vWFquGWb/ngZ3KEIfM661AKONmQHFaRtYP/SyoDKxGo7sYkP02Hd68C\r\noE8ZtlnT7lqxylshsXdDPSpt5e2yL1Eyw58=\r\n=KI95\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.3_1649149030203_0.7843489276210736"},"_hasShrinkwrap":false},"0.1.4":{"name":"pequeno","version":"0.1.4","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.3","browser-sync":"2.27.9","cheerio":"1.0.0-rc.10","chokidar":"3.5.3","esbuild":"0.14.38","esbuild-plugin-svgr":"1.0.0","fast-glob":"3.2.11","fisarmonica":"1.3.5","fs-extra":"10.0.1","lodash":"4.17.21","micromodal":"0.4.10","minimist":"1.2.6","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"7.1.1","styled-components":"5.3.5","vanilla-lazyload":"17.6.1","winston":"3.7.2"},"devDependencies":{"release-it":"14.14.0"},"gitHead":"c7501c88761e743873d80a02a48d2f18b80cb464","_id":"pequeno@0.1.4","_nodeVersion":"16.13.2","_npmVersion":"8.4.1","dist":{"integrity":"sha512-rEzAaKTX9rMIyEsQD47Y6xwab9HpkccPRYeCx2lIQMRgmglO+2rVcYAAlJcx0a7NS/k6ax828lTO7qDJfmsITQ==","shasum":"933507d1d409f77258c5e01af5c2ff1061f0f34d","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.4.tgz","fileCount":81,"unpackedSize":240655,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfMUcaNXtC4kD4oWreV3Z+6Lu4+1R8SXieiULOz+iBgAIhANk93Ht3RiFn/aA1XvEOS+7DIjOcQc2SIQqqnzzRrPv1"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiam5YACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq81A/+OL4t7FK0vv0ifKmruYUhmjlZF1yw0PIig9ZjEVMuSCembSJa\r\nuJZb0F5fwuAsIf4jCs1Em1mnQ8pk++ThkkAw5uVk7KRC8X+OH2ajXQH7y/Ys\r\nZ/Xe4/RINg0ZQaXipo45bCt6fK8mpdPZLm5ovz7+SJPbpOm9crcz3Hg5wCRN\r\nJsJT4MOp/j4Z4mYNU2ci9A8iLnHtvr5ynNLije0/1q7SalRlmxmSdfeIyGyb\r\n9ZGoIn10Ag4Jxr6uHiJMUCJ8t13pNEcRSe+zVmEioRVXWgpyC+x7HzNUrz99\r\n01nLjWvrsKx6ouQH85yLarClth+ZOM/btf/BRe3BExe8FL5nnc09He6T/ZuG\r\nQ2ebPKXkA0lbL0skN5PsEWsbpsQ3MvBFRj60QUAWR2TKVzjDSwRWFTyawnoH\r\nPgoUTOf/l08UIaap5KnuMVbft5vBbrUTE39Fx79SNymH340Dy/LJFks+yLOz\r\nGVqd4vqiqq9/Kc6oH9QbcCUsWh4NlZDsK52qIKDyy8kImrTTX/JhBdbb1W9l\r\nNPo2VX/yOKKswIqu4OC2LCCb9Sb7MH9gR/x7AgMwKYfuRFUKjF7aqPvNTwXh\r\n0PazFO1AcL4UhiKsKHd8CPe48CcRKxMkWB7w/G9JWN+z9DuZnTRQrm23/qe3\r\npkP9zyeGSm2xmMyP1H+7Goc9QJU13X7P2m8=\r\n=SocX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.4_1651142231896_0.9832901101054299"},"_hasShrinkwrap":false},"0.1.5":{"name":"pequeno","version":"0.1.5","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.3","browser-sync":"2.27.9","cheerio":"1.0.0-rc.10","chokidar":"3.5.3","esbuild":"0.14.38","esbuild-plugin-svgr":"1.0.0","fast-glob":"3.2.11","fisarmonica":"1.3.5","fs-extra":"10.0.1","lodash":"4.17.21","micromodal":"0.4.10","minimist":"1.2.6","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","sitemap":"7.1.1","styled-components":"5.3.5","vanilla-lazyload":"17.6.1","winston":"3.7.2"},"devDependencies":{"release-it":"14.14.0"},"gitHead":"09344bcd8a567b0c3d2aa5e16255369f3a335f26","_id":"pequeno@0.1.5","_nodeVersion":"16.13.2","_npmVersion":"8.4.1","dist":{"integrity":"sha512-O0mdBdjFpoATwxYyCWTn0/lEPgCRdZI66GIWd8CJj+C0d65GPmDRTeG+I2/zVwosifr468AakiaW3sNUeEVBkQ==","shasum":"921ae8ec1e17996fdb481eff6697aa1566f4c508","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.5.tgz","fileCount":81,"unpackedSize":240728,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXqYnz3QoGxobHtwJaoZ9lJY2ZvhxN3GNKz+0M9xB/VQIhAJ3qB6rQbmNEQzqZlpa1A6+nEeg8bsuDPwMCt3pDXkbQ"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiemNtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpC+A//QXaHrJttUzLAR08b8oi4bPFX3D1z5oT6C/iffClUF7oRoeQu\r\ntJyhrcwykj/DOtoseCTPyc9Xr/dEp8SOu/ZHSF68zSXtS9/bKUiFAc+Z+5mq\r\nz3o5PRe4y9cn8nCCyb0tqU/ApBjjg+2Td7uVh2Aj/xclW2r9GGykmN4VeikD\r\n0uhm96+qaaIZNh0uvG7LQN/hpHcqjVtpeeG4kCBl+5Nr49FLnNTUInBUXwFf\r\n77XupAm0tWOEZmdxYri3WvD4Dj7yxWvNZlqEPswqD4wGv8nfQSucLXpEpqCF\r\nFw4Akp8FzkQgmrqIg+nrjNeiVL+3/Q4zYeNtajGzxOxZ8TGdSBwDE5fo0+W9\r\nY1TwV4rjdWF6OOyev7VrE7MSQPM07/tmMl+Q9tYkTFOM6rFD19gVg9r/csQV\r\nE1VblPmsubDXy03vCqZDmEka/DF0eFM6KpZ0Rt9DW5KovmN0QZ/w+eQjUk+Y\r\nKlPIlzG+gLuIHrWNkzNAL9twfHJBo1nPkKkMfloZFAdMeW44Tqjyi9v/PMyO\r\nTHFGgCVe6IorgiQIdtwf6DwC1t0w1gThmMuExXBcklvot2Xq7F0xsphr8xGa\r\nvvcjrVBOJSvsBtK+WrTg5AQCcB9rAgOWZXjg8tT+mHk3g1aKHIGGth4sJY2X\r\ncGJe31JFqmxuAF5PBV6sdMytMgDqQlYAwzQ=\r\n=pWcb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.5_1652188013528_0.8909064281855357"},"_hasShrinkwrap":false},"0.1.6":{"name":"pequeno","version":"0.1.6","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.4","browser-sync":"2.27.10","cheerio":"1.0.0-rc.10","chokidar":"3.5.3","esbuild":"0.14.49","esbuild-plugin-svgr":"1.0.1","fast-glob":"3.2.11","fisarmonica":"1.3.5","fs-extra":"10.1.0","lodash":"4.17.21","micromodal":"0.4.10","minimist":"1.2.6","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.5","winston":"3.8.1"},"devDependencies":{"release-it":"15.1.1","sitemap":"^7.1.1","vanilla-lazyload":"^17.8.2"},"gitHead":"1566bb389d96993c723975d7bda4099b18a7d362","_id":"pequeno@0.1.6","_nodeVersion":"16.13.2","_npmVersion":"8.4.1","dist":{"integrity":"sha512-iiyrgw1UJFMVhswqe1MqmTNhRWVSHcO8oHpmqbqtOXC1SCGxddFIlIDqOkXbMJFka7s2t2Fo/BbQMnJ+OmjpkQ==","shasum":"a384d7dc8d31ef69643f337a990dc928a3da425d","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.6.tgz","fileCount":81,"unpackedSize":240761,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEaHXgNxhRe4BfD3xgtkkDdrLcaNBMbbNhEqzqjVLnmtAiAzoOgMME0g8Xo2kRKG7uUlsifqam41jxmuYY71etRjLA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizmrpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrAQg/9EB2BitkKPoLtpSKTfgi8OVZ0HWT20wcPZMfp2w6ujWtH6PsO\r\nJ0gXbarqCHZSKIVytbYOJoECV4viFVo9H+VhiDFED8O0O4q/DABwJ8Euwe+O\r\nhPJjSl0RLxMdH2HqU8TeIRHc6KqiEYFHECF5rLRd7xLfyHOYy3BqRc4Wu7W8\r\n4EHXBYV9haHdr1UCYKMc4RA1g+81YGN+6J848PlLerv7HtgUHHFs/SBmhvkd\r\n7XnT/Gbb/eVQJyV9ZzEmkCwytXawpR1VHSaIM5oSApc7LIAAUdOKEifeMbn2\r\nP9Nee+JOc183k9r6ODubPaTiC/rRwEIdUn/hNDOUdkavN58Ymj/QQ/YAkPNg\r\n4qQqfpqJIU2FKpLpHQYhBkPpKyxidnavxAs6im2Db5zAa2IFvvyGyEgkcMVq\r\nw2zWtcXjtFdL3roczf4TJGRpQ5HKKJRLbDcPx3USkEbDbUEOZgkwn0SJ8xRG\r\nAOTajrpilb32zsILk7VLP9xRbyv48IDjNdPkrlMY6gVmFCPS1GdPX91bVjJl\r\nhpJ+48psGSVcfhyoAd6U+gg0T2iANfRT5AKPap99dOgSvVeuR7CTfnU64h0d\r\nWyblu4SCjPPaVIbuh+2vXJIgmy80f/LLHhM50LRD7YucDDnUKvfZV7IfbQNw\r\n6xG1Yd5jLHRyN5IeJKV/0M7L9+4JeDBAgWg=\r\n=xY58\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.6_1657694952921_0.3649346821596482"},"_hasShrinkwrap":false},"0.1.7":{"name":"pequeno","version":"0.1.7","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.4","browser-sync":"2.27.10","cheerio":"1.0.0-rc.10","chokidar":"3.5.3","esbuild":"0.15.12","esbuild-plugin-svgr":"1.0.1","fast-glob":"3.2.12","fisarmonica":"1.3.5","fs-extra":"10.1.0","lodash":"4.17.21","micromodal":"0.4.10","minimist":"1.2.7","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.6","winston":"3.8.2"},"devDependencies":{"release-it":"15.5.0","sitemap":"7.1.1","vanilla-lazyload":"17.8.3"},"gitHead":"452c51583ece11cc27a295cb42c7a35be5183126","_id":"pequeno@0.1.7","_nodeVersion":"16.13.2","_npmVersion":"8.4.1","dist":{"integrity":"sha512-QVtyxW8KT0ivmYKlRYSBT6JmX2B8hWChByON0UckAPamMJiMexYDqXJk4wgCy2omgCtUYC8dnq/LzJXDDlCJWA==","shasum":"7de1164cba75c74046d99ae2c1d9bef49aaa2847","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.7.tgz","fileCount":81,"unpackedSize":240759,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfFzC0EmXk9YitqWxy0e9RofevJ5gVq3bwUouIUDAvlgIgeEiIj/PWxGWUUJBkf+TdLcYhPPnW4xj49OLnD4dInQk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYqtvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoAlA/8D5l2gjJSE3pquv3OXavP0iKzc+F8QCo00xdT6p6b2YWoSXi0\r\nbfDSKpnjBxLEvM0bFb6YvD5YnqVROKgNs//vOfFcjZrtvR5AvLlcbCJjTl3x\r\n8SzYCBoVsmfrPvPd/1AYuhnG66LtZ+aa392XIkZjGSSNdaWusYv1Oae8ylsC\r\nTvPR25p8fWsagbKZWIStFm5vx86HLt9fIHEsji9/0vkKnlFNGsyVQX3h7Dis\r\nbYx+GAerZ/dp6/kSoW0bEyM2Z6NJTZmumJXDCdpvtA30uavl6kdQHasUe7j/\r\nYPqLyGwd1bfp53wgGzoGVTwuyAJmLMW7T6mLliZugD7EFwbOzhAvbpavy82P\r\nhi/yWnyg1sQpd9DPErPsNpobxQ/xCoIfbThZCWfyjeYChsnUCA1/OgbnjKZw\r\n+vdlaH309OgDMFsEXBXBqpmF+HNAbn9BDNhcBfgTEOEYrUmZpmqxQ3BQ59ES\r\nt92m18TdiQMHs4ibjYqEB1b3tWWEVNME7qZCDg8twXEIiZp0cVDpyi/355Tt\r\ni4xS/G4cmJhZ21K2gXTHbl4cCOs2phYC+z7r2mdMj5JBy83zM86YkXKCtSf9\r\nsuIJHCAJdoMKbVWE5jBTysOhjZapzX8jklZVndvPcK5jrjE6GO6rgmQ8TqIy\r\nQqpDblcJYyTPX9441VoiHkDc5QD/0TS36KU=\r\n=kXH5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.7_1667410799648_0.4324722408033126"},"_hasShrinkwrap":false},"0.1.8":{"name":"pequeno","version":"0.1.8","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"async":"3.2.4","browser-sync":"2.29.1","cheerio":"1.0.0-rc.12","chokidar":"3.5.3","esbuild":"0.17.15","esbuild-plugin-svgr":"1.1.0","fast-glob":"3.2.12","fisarmonica":"1.3.5","fs-extra":"11.1.1","lodash":"4.17.21","minimist":"1.2.8","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.9","winston":"3.8.2"},"devDependencies":{"release-it":"15.10.1","sitemap":"7.1.1","vanilla-lazyload":"17.8.3"},"gitHead":"64a67cd1116e74c18a7a799f4c51e3ac104caac4","_id":"pequeno@0.1.8","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-XAn4dyFDMqIzxJuMRlfYyBhU8b4qSHFJNtTZiuDo8ku5Bod9lruqpyFrZSsC47t8LVjzK6+auazBIi/xPScyTQ==","shasum":"9a402cbc602de1382a2eeecac009a7c9d34472c5","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.8.tgz","fileCount":78,"unpackedSize":299299,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHXkyBy+3LSNSztr8L3BQU3zZBQ82TvE6iquXyXyO9zHAiAxde1nZf9aJcMqUYdRSZR3PaUSRBl6yenfGG0s+y+jdQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLw1EACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrihQ/8DW1FPIwG9VfWkfGUD11+VR5lh7enZqb1/Txa1556HXeHajT7\r\nvfGEUpKgEsCMplmV7O2FRiqMYUBgCvyOJw4uoHj9it1NtPZB3QcWVULEpTUz\r\nkMSfKHkzi9Gdr/VVOyHfRiCtBFC+sx3aNGlCwTgzIK4kBAmAycV2IVfcyfBc\r\nJRjLg/pFYUF25AcBPBpjN8c4Okqj39IGkF4KrYcV52S0eDrH/N9WAoI3QVOl\r\nbSbdkohtb4cK5/ElqwWezXj4NaPehF46LNkMwihJth9aRm65ODqImN7Y4tC+\r\nUmXxCYjaxuIPnkrTqpOMA6Nnwz7s3Pn97LirONMS6yInn34A+P0pSbpzrQD5\r\nFM1EyGKpPLRgOaDjSRuIpOixKcfeJL1UWLi177vG0fWqh/q8y3S9FpWZIoWx\r\nNjZXmcM7P62bQHneupJL7Y/F3FIh4TDa5oe6qzn4WBDhVnXdj8eZhZnyvzA7\r\nIFu1t/AMexc44PUVOQr92CweTNyve9jgN+/o6xT+xpnaeZW1qsTMEJVrIE/X\r\n3KU81832stdVIH2rsC5SFafE9IL1JtdxtniSBc1tlfa2uXx7zsErOVkl3lk/\r\nDkotADdwBHAmZyfLu9GgKXJeMYe72SsfgcgJa9L8GQGgxxhnDNwoXQA74pLu\r\nh5RtCNuJ9BMNi1iZxM2WBiby/NcWnvsmz3c=\r\n=2K01\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.8_1680805188178_0.2549033058703829"},"_hasShrinkwrap":false},"0.1.9":{"name":"pequeno","version":"0.1.9","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"@babel/core":"^7.22.11","async":"3.2.4","babel-plugin-styled-components":"^2.1.4","browser-sync":"2.29.3","cheerio":"1.0.0-rc.12","chokidar":"3.5.3","esbuild":"0.19.2","esbuild-plugin-svgr":"2.1.0","fast-glob":"3.3.1","fisarmonica":"1.3.5","fs-extra":"11.1.1","lodash":"4.17.21","minimist":"1.2.8","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.11","winston":"3.10.0"},"devDependencies":{"release-it":"16.1.5","sitemap":"7.1.1"},"gitHead":"30e387a08490f5e2f73759e98490ed53f795c63c","_id":"pequeno@0.1.9","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-Geahbaued3GFqAhHaI76VyNZEakiFdeXAHnUTHzy5DZwrs/g/wKYm2WZBGLV3huSvKlFD9jsR7lCwmMSdU2YiQ==","shasum":"c382d669ed2397072536e8479fd5859c2e44c8b0","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.1.9.tgz","fileCount":76,"unpackedSize":296162,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtWCYovZyn4/2omU8OJuh8xbc8H2u0aQ+9kzI+XN1UnQIgCXYXLRoHaSKTljXJErh+jpO/6//QZvOduolX9RUfEWI="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.1.9_1692892157134_0.17901436668912796"},"_hasShrinkwrap":false},"0.2.0":{"name":"pequeno","version":"0.2.0","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item  --data=news --noAfterBuild --noProcessHtml","dev-one-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --dataParam=news-1-slug --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"@babel/core":"^7.22.11","async":"3.2.4","babel-plugin-styled-components":"^2.1.4","browser-sync":"2.29.3","cheerio":"1.0.0-rc.12","chokidar":"3.5.3","esbuild":"0.19.2","esbuild-plugin-svgr":"2.1.0","fast-glob":"3.3.1","fisarmonica":"1.3.5","fs-extra":"11.1.1","lodash":"4.17.21","minimist":"1.2.8","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.11","winston":"3.10.0"},"devDependencies":{"release-it":"16.1.5","sitemap":"7.1.1"},"gitHead":"2d63100b4722ca374cbca3222948d896ddbe3a49","_id":"pequeno@0.2.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-w0BLlfu5EzMtv/OTe+cDWBwnb4nOsVGhXJmobZelZBlsf0ka6qCHPrgoU4DOWKPbAZZ/QUKFohKrwnlg+StYBA==","shasum":"ab7626cc6650ed294180a9ed218e8454bcc0e9ff","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.2.0.tgz","fileCount":76,"unpackedSize":296736,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCq32KObAsgA/ek1FET4vyGK2FrUuYYjdBPXw2u2o7ROgIgThMaCks0Zq5L9tbGmd8hHV0tjV8h6UdfK5sZJ7AXkSU="}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.2.0_1692896141625_0.4979063481222703"},"_hasShrinkwrap":false},"0.2.1":{"name":"pequeno","version":"0.2.1","description":"A simpler react static site generator","homepage":"https://github.com/signalkuppe/pequeno","author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"},"keywords":["react","ssg","static","site","generator","vanilla","js"],"scripts":{"test":"echo \"Error: no test specified\" && exit 1","release":"release-it","dev":"node lib/cmd.js  --serve --example --noAfterBuild --noProcessHtml","dev-verbose":"node lib/cmd.js  --verbose --serve --example --clean --noAfterBuild --noProcessHtml","dev-news":"node lib/cmd.js --example --serve --page=news-item  --data=news --noAfterBuild --noProcessHtml","dev-one-news":"node lib/cmd.js --example --serve --page=news-item --path=/news/news-1-slug/index.html --data=news --dataParam=news-1-slug --noAfterBuild --noProcessHtml","dev-page":"node lib/cmd.js --example --serve --page=test --noAfterBuild --noProcessHtml --noData","dev-empty":"node lib/cmd.js --example --serve --page=empty --noAfterBuild --noProcessHtml --noData --noCopy --noPublicCopy","build":"node lib/cmd.js --example","build-verbose":"node lib/cmd.js --verbose --example --clean"},"bin":{"pequeno":"lib/cmd.js"},"main":"./lib/exports.js","license":"ISC","dependencies":{"@babel/core":"^7.22.11","async":"3.2.4","babel-plugin-styled-components":"^2.1.4","browser-sync":"2.29.3","cheerio":"1.0.0-rc.12","chokidar":"3.5.3","esbuild":"0.19.2","esbuild-plugin-svgr":"2.1.0","fast-glob":"3.3.1","fisarmonica":"1.3.5","fs-extra":"11.1.1","lodash":"4.17.21","minimist":"1.2.8","node-cache":"5.1.2","normalize-path":"3.0.0","ora":"5.4.1","react":"16.14.0","react-dom":"16.14.0","styled-components":"5.3.11","winston":"3.10.0"},"devDependencies":{"release-it":"16.1.5","sitemap":"7.1.1"},"gitHead":"11349cb1e0e9306d44652e91ed27e4fbfb7642f5","_id":"pequeno@0.2.1","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-seKWU/Pm4jh/a5sisAI8EcVZQ+WLDP1QwAGluG0/hV6/ckf8B/Ppx/a9KtUAZq14VFkk+VduYZ75+YYuEncOEg==","shasum":"c71645d34ef8c7ece56c1a0a6dbd564574c9eb9b","tarball":"https://registry.npmjs.org/pequeno/-/pequeno-0.2.1.tgz","fileCount":76,"unpackedSize":296782,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsr4DM87TLt1vAlp8Jdx3kzkb/Z8lG85jLqqWwtA2kAgIhAIIq2OrJpkjwEFk0RAkv/YueMK8yAr3n5D5eNCfv1zCF"}]},"_npmUser":{"name":"signalkuppe","email":"leoni.matteo@gmail.com"},"directories":{},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pequeno_0.2.1_1693139761423_0.07851989445996166"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-10T15:38:24.150Z","0.0.2":"2021-06-10T15:38:24.252Z","modified":"2023-08-27T12:36:01.893Z","0.0.3":"2021-06-10T16:11:07.512Z","0.0.4":"2021-06-10T16:15:29.549Z","0.0.5":"2021-06-10T17:00:14.279Z","0.0.6":"2021-06-10T17:53:22.798Z","0.0.7":"2021-06-11T06:13:20.957Z","0.0.8":"2021-06-11T06:24:44.242Z","0.0.9":"2021-06-11T14:49:21.627Z","0.0.10":"2021-06-11T15:29:28.790Z","0.0.11":"2021-06-14T14:12:33.331Z","0.0.12":"2021-06-14T14:39:38.026Z","0.0.13":"2021-06-24T18:48:05.043Z","0.0.14":"2021-07-01T10:10:16.765Z","0.0.15":"2021-07-01T11:43:55.517Z","0.0.16":"2021-07-13T16:06:19.879Z","0.0.17":"2021-07-13T16:10:13.392Z","0.0.18":"2021-07-22T07:39:50.898Z","0.0.19":"2021-07-26T19:58:35.664Z","0.0.20":"2021-07-26T20:09:44.913Z","0.0.21":"2021-09-18T09:37:49.078Z","0.0.22":"2021-09-18T09:49:27.000Z","0.0.23":"2021-09-18T17:12:55.816Z","0.0.24":"2021-10-03T16:17:08.026Z","0.0.25":"2021-10-04T17:31:05.525Z","0.0.26":"2021-10-08T07:00:34.982Z","0.1.0-beta.0":"2021-10-18T09:07:05.067Z","0.1.0-beta.1":"2021-10-21T17:53:02.076Z","0.1.0-beta.2":"2021-10-21T18:00:58.691Z","0.1.0-beta.3":"2021-10-22T16:09:30.275Z","0.0.27":"2021-10-26T16:34:41.518Z","0.0.28":"2021-10-26T16:36:45.187Z","0.1.0-beta.4":"2021-10-27T05:35:17.607Z","0.0.29":"2021-10-27T05:37:42.756Z","0.0.30":"2021-10-27T05:40:23.086Z","0.0.31":"2021-10-27T15:24:05.033Z","0.1.0-beta.5":"2021-10-27T15:27:58.247Z","0.1.0-beta.6":"2021-11-10T13:11:25.963Z","0.1.0-beta.7":"2021-11-11T07:50:14.770Z","0.0.32":"2021-12-22T07:55:21.686Z","0.1.0":"2021-12-23T17:41:05.731Z","0.1.1":"2021-12-23T17:52:57.837Z","0.1.2":"2022-02-01T08:45:57.088Z","0.1.3":"2022-04-05T08:57:10.405Z","0.1.4":"2022-04-28T10:37:12.124Z","0.1.5":"2022-05-10T13:06:53.787Z","0.1.6":"2022-07-13T06:49:13.133Z","0.1.7":"2022-11-02T17:39:59.859Z","0.1.8":"2023-04-06T18:19:48.476Z","0.1.9":"2023-08-24T15:49:17.344Z","0.2.0":"2023-08-24T16:55:41.927Z","0.2.1":"2023-08-27T12:36:01.662Z"},"maintainers":[{"name":"signalkuppe","email":"leoni.matteo@gmail.com"}],"description":"A simpler react static site generator","license":"ISC","readme":"# Pequeño\n\n> A simpler [React](https://reactjs.org/) static site generator.\n\n## Demo\n\n[https://priceless-euclid-d30b74.netlify.app/](https://priceless-euclid-d30b74.netlify.app/)\n\n## Why\n\n**Jsx** emerged as the leading template engine, due to its great **developer experience.**\n\nFramework like [Gatsby](https://www.gatsbyjs.com/), [Astro](https://astro.build/) or [NextJs](https://nextjs.org/) are great, but I wanted something lighter, dependency-free, using only vanilla js on the client. It's best suited for small blogs, if you want to build something more complex you'll probably need one of the above tools.\n\n## Installation\n\n```shell\nnpm install pequeno --save\n```\n\n## Quick start\n\n1. Create some pages in src/pages, giving them a permalink like this\n\n```js\nimport React from 'react';\n\nexport const permalink = '/index.html';\n\nexport default function Index() {\n    return <div>Empty page</div>;\n}\n```\n\n2. Run Pequeno\n\n```shell\nnpx pequeno\n```\n\n3. Open your browser\n\nand visit `http://localhost:8080`\n\nYou should see your basic index page\n\n## Cli options\n\nyou can run the pequeno command with these options\n\n-   `--verbose` for verbose output\n-   `--clean` cleans the destination folder\n-   `--serve` fires a server that watches for changes\n-   `--path` builds only the specified path (--page=/news/index.html)\n-   `--page` builds only the specified page (--page=news-item)\n-   `--data` fetches only the specified data file (--data=news)\n-   `--dataParam` pass an optional param to the data function (--dataParam=32)\n-   `--noAfterBuild` prevents the afterBuild function to run (see below)\n-   `--noProcessHtml` prevents the processHtml function to run (see below)\n-   `--noData` skips the data fetch step\n-   `--noCopy` skips the copy defined in the config object\n-   `--noPublicCopy` skips the copy of publicDir\n-   `--example` builds the example site.\n\nPage and path options (together with --data) are useful during development to **speed up page refresh** or during build if you want to **write only a specified page or path.**\n\nFor example if you want to **develop a specific news page** maybe fetching just a single item from an api, you can run\n\n`npx pequeno --page=news-item --path=/news/news-1-slug/index.html --data=news --dataParam=news-1-slug --noAfterBuild --noProcessHtml --serve`\n\nOr if you want to develop a **single page** that doesn’t need any data/libs/files you can be quicker with\n\n`npx pequeno --page=test --noData --noCopy --noPublicCopy --serve`\n\n## Configuration\n\nJust place a `.pequeno.js` file in the root of you project to override the default settings\n\n```js\nmodule.exports = {\n    // where to place bundled pages\n    cacheDir: '.cache',\n    // destination folder\n    outputDir: '.site',\n    // source folder\n    srcDir: 'src',\n    // where to search for data (relative to srcDir)\n    dataDir: 'data',\n    // public directory that will be copied to outputDir (relative to srcDir)\n    publicDir: 'public',\n    // where to look for pages (relative to srcDir)\n    pagesDir: 'pages',\n    // an object that tells what to copy (key) and where (value)\n    // useful to copy external libs to the destination folder\n    copy: {\n        'node_modules/node_lib/index.js': 'libs/node_lib/index.js',\n    },\n    // and async function to be run after the build (see below)\n    afterBuild: async function () {},\n};\n```\n\nNB: All files and folders in the **publicDir** folder will be copied to the destination folder\n\n## Data\n\nYou can provide data at build time by creating files into the `dataDir` folder.\nEach data file should export a promise.\n\nFor example:\n\n**data/news.js**\n\n```js\nmodule.exports = function () {\n    const { config } = pequeno;\n    return new Promise((resolve) => {\n        fetch('https://my.custom.endpoint')\n            .then((response) => response.json())\n            .then((data) => {\n                // eg: you can use the config object to output a file during data fetch\n                fs.outputJsonSync(\n                    path.join(\n                        process.cwd(),\n                        config.outputDir,\n                        '_data',\n                        'computed-json.json',\n                    ),\n                    data.map((item) => _.pick(item, ['category', 'title'])),\n                );\n                resolve(data);\n            });\n    });\n};\n```\n\nNow you have a `news` collection available in your templates. In Every data promise function you can access the pequeno instance. So, for example, you can get the config object.\n\n### Derived collections\n\nYou can **export different functions from the same data file** to create derived collections from the main one.\n\nFor example if you want to create a page for each photo in a news item you can export a photos function like this.\n\n```js\nmodule.exports.photos = function (news) {\n    return _.flatten(_.map(news, 'photos'));\n};\n```\n\nNon default exports receive the main collection as the **first argument**. Non default exports should be synchronous.\n\n## Pagination\n\nYou can paginate your data creating lists of content. Just export a **paginate object** giving the collection name in the data prop. For example you can create pages that lists chunks of 10 news in this way.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 10,\n};\n\nexport const permalink = function (data) {\n    const { page } = data.pagination;\n    if (page === 1) {\n        return `/news/index.html`;\n    } else {\n        return `/news/${page}/index.html`;\n    }\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items;\n    return (\n        <ul>\n            {news.map((n, i) => (\n                <li key={i}>\n                    <Link underline href={`/news/${n.slug}/`}>\n                        <h2>{n.title}</h2>\n                    </Link>\n                </li>\n            ))}\n        </ul>\n    );\n}\n```\n\nYou will get a pagination object with this data.\n\n```js\n{\n    page: 1,\n    total: 4,\n    items: [],\n    prev: null,\n    next: '/news/2/index.html'\n}\n```\n\n### Programmatically create pages from data.\n\nJust use a **size of 1** in the pagination export and you'll get a page for each news\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 1,\n};\n\nexport const permalink = function (data) {\n    const news = data.pagination.items[0];\n    return `/news/${news.slug}/index.html`;\n};\n\nexport default function News({ pagination, route }) {\n    const news = pagination.items[0];\n    return <h1>{news.title}</h1>;\n}\n```\n\nIn this case, the pagination object will contain also the prev and the next item payload\n\n```js\n{\n    prevItem: { ...props }, // an object containing the item payload\n    nextItem: { ...props }\n}\n```\n\n### Grouping items\n\nYou can generate list of grouped content by adding a **groupBy** prop to the pagination object.\nThe groupBy prop must match an existing prop of your item object.\n\n```js\nexport const paginate = {\n    data: 'news',\n    size: 8,\n    groupBy: 'category',\n};\n\nexport const CategoryNewsPageLink = function (page, group) {\n    group = group.toLowerCase();\n    if (page === 1) {\n        return `/news/${group}/index.html`;\n    } else {\n        return `/news/${group}/${page}/index.html`;\n    }\n};\n\nexport const permalink = function (data) {\n    const { page, group } = data.pagination;\n    return CategoryNewsPageLink(page, group);\n};\n```\n\nThe pagination object will contain the group prop.\n**Grouping is limited to string props.**\n\n## Styling\n\nPequeno integrates [Styled Components](https://styled-components.com/) for styling. but you can also use plain css if you want. If you are using styled components [babel-plugin-styled-components](https://styled-components.com/docs/tooling#babel-plugin) is included.\n\n**component usage**\n\n```js\nimport React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button`\n    background: ${props => props.primary ? var(--color-primary) : var(--color-secondary)}\n`;\n\nexport default function MyButton({ primary, ...props }) {\n    return <StyledButton primary={primary} {...props} />;\n}\n```\n\nSee styled components docs for detailed usage.\n\n## Dealing with client-side js\n\nYou can use a classic approach, or use the **built-in Script component** to add js in a more \"component way\" like this\n\n```js\nimport React from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function TestButton({ children }) {\n    return (\n        <>\n            <button className=\"js-test-button\">{children}</button>\n            <Script>{client}</Script>\n        </>\n    );\n}\n```\n\n**index.client.js**\n\n```js\ntestButton.addEventListener('click', function () {\n    alert('You clicked the test button');\n});\n```\n\nSay you have **a component that need some vanilla client-side js logic** and maybe an external library, like an [accordion](https://github.com/signalkuppe/fisarmonica) thats adds some css and js\nJust add the `<Script>` component in your code like this\n\n```js\nimport React, { Fragment } from 'react';\nimport { Script } from 'pequeno';\nimport client from './index.client.js';\n\nexport default function Accordion({ items, ...props }) {\n    return (\n        <>\n            <dl {...props}>\n                {items.map((item, i) => (\n                    <Fragment key={i}>\n                        <dt>\n                            <button>{item.title}</button>\n                        </dt>\n                        <dd>{item.description}</dd>\n                    </Fragment>\n                ))}\n            </dl>\n            <Script\n                libs={[\n                    {\n                        where: 'head',\n                        tag: '<script src=\"/libs/fisarmonica/fisarmonica.js\" />',\n                    },\n                    {\n                        where: 'head',\n                        tag: '<link rel=\"stylesheet\" href=\"/libs/fisarmonica/fisarmonica.css\" />',\n                    },\n                ]}\n                vars={[\n                    {\n                        name: 'accordion_selector',\n                        value: `.${props.className} `,\n                    },\n                ]}\n            >\n                {client}\n            </Script>\n        </>\n    );\n}\n```\n\nThe Script components has a `libs` prop where you can pass any external library you wish to use (proviously copied with the copy property in the config file). You can specify the tag and also where to append it (head/body)\n\nThen in **index.client.js**\n\n```js\nvar colorPrimary = getComputedStyle(document.documentElement).getPropertyValue(\n    '--color-primary',\n);\n\nvar fisarmonica = new Fisarmonica({\n    selector: accordion_selector,\n    theme: {\n        fisarmonicaBorderColor: colorPrimary,\n        fisarmonicaBorderColorFocus: colorPrimary,\n        fisarmonicaInnerBorderColorFocus: colorPrimary,\n        fisarmonicaButtonBackgroundFocus: colorPrimary,\n        fisarmonicaButtonColor: colorPrimary,\n        fisarmonicaButtonColorFocus: 'white',\n        fisarmonicaArrowColor: colorPrimary,\n        fisarmonicaArrowColorFocus: 'white',\n        fisarmonicaPanelBackground: 'white',\n    },\n});\n```\n\nAnd finally use it anywhere\n\n```js\n<Accordion items={accordionData} className=\"js-accordion\" />\n```\n\nNotice that we used `accordion_selector` variable, passed by our Script tag withe the `vars` props and made available to the DOM.\nAt build time, the builder will extract all the libs and code used and place them in the document (code will be inserted before the closing of the body tag).\n\nYou can also insert **inline scripts** with the inline prop like this\n\n```js\n<Script inline>{client}</Script>\n```\n\n## Html strings\n\nYou can use the **built-in Html component** to output html strings.\n\n```js\nimport React from 'react';\nimport { Html } from 'pequeno';\nimport { myHtmlString } from './example-data';\n\nexport default function TestHtml() {\n    return <Html>{myHtmlString}</Html>;\n}\n```\n\n## Svgs\n\nSvg imports are included, so you can do this\n\n```js\nimport TestSvg from '../public/img/TestSvg.svg';\nexport default function SvgTest() {\n    return <TestSvg width=\"20em\" />;\n}\n```\n\n## After build\n\nUsing the **afterBuild** config prop you can execute async code after the website has been built.\nThe afterBuild function receives the renderedPages argument, which contains all the pages created with all the data including the markup.\n\nFor example you can create a sitemap.\n\n```js\nafterBuild: async function (renderedPages) {\n    // create a sitemap\n    const sitemapLinks = renderedPages.map((page) => ({\n        url: page.data.route.href,\n        changefreq: 'daily',\n        priority: 0.3,\n    }));\n    const stream = new SitemapStream({\n        hostname: 'https://priceless-euclid-d30b74.netlify.app',\n    });\n    const data = await streamToPromise(\n        Readable.from(sitemapLinks).pipe(stream),\n    );\n    await fs.writeFile(\n        path.join(pequeno.config.outputDir, 'sitemap.xml'),\n        data.toString(),\n        'utf8',\n    );\n\n    // move service worker\n    await fs.copy(\n        path.join(pequeno.baseDir, 'service-worker.js'),\n        path.join(pequeno.config.outputDir, 'service-worker.js'),\n    );\n}\n```\n\nEach rendered page contains the following props\n\n```js\n{\n    markup: `<html>....</html>`, // the page markup\n    styles: `<style>...</style>`, // the extracted page styles (if using styled components)\n    data: {\n        route: {\n            name: 'news-item',\n            href: `/news/news-1-slug/index.html`,\n            pagination: {}\n        }\n    },\n}\n```\n\n## Process generated html\n\nUsing the **processHtml** config prop you can alter the generated html during the build process. The processHtml function receives the [cheerio](https://github.com/cheeriojs/cheerio) dom instance, the page data and the pequeno settings. For example you can inject a script in the head. You can use data to manipulate html only for some spacific pages. Be sure to return the **html()** method of the cheerio object. The processHtml function should be synchronous.\n\n```js\nprocessHtml: function ($, data, config) {\n    // data: { route: { name, ...}}\n    $('head').append(`\n    <script>\n        if ('serviceWorker' in navigator) {\n            window.addEventListener('load', () => {\n                navigator.serviceWorker.register('/service-worker.js');\n            });\n        }\n    </script>`);\n    return $.html();\n},\n```\n\n## Example site\n\nSee the `/example` folder for a complete website.\n[signalkuppe.com](https://www.signalkuppe.com/) is built with Pequeño.\n\n## Performance\n\nPequeno uses [Esbuild](https://esbuild.github.io/) for bundling, so it should be quite fast.\nHowever performance optimizations are still missing.\n","readmeFilename":"README.md","homepage":"https://github.com/signalkuppe/pequeno","keywords":["react","ssg","static","site","generator","vanilla","js"],"author":{"name":"Signalkuppe","url":"https://www.signalkuppe.com"}}