{"_id":"timpla","_rev":"83-ce57418ce033b48587f9ea0b55bcf495","name":"timpla","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.0":{"name":"timpla","version":"1.0.0","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.babel.js/index.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"blendid":"bin/blendid.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","gh-pages":"gulp gh-pages","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","browser-sync":"^2.24.4","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-gh-pages":"0.5.4","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-napkin":"0.1.0","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sizereport":"1.2.0","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gulp-watch":"5.0.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","require-dir":"1.0.0","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0"},"gitHead":"5d4057db7956f9c326040e01852e5e8d6d401e70","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-v4Nxm80dC+KImDTk/ofcZUJwtFg7P+dMS2FEER5FZsewEXAitNe5YNY8aNrSXCswQ6+IrI2lXzH36WlCU7xoEg==","shasum":"c465fdf4d78370ca6677e1277c4808567f43973f","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.0.0.tgz","fileCount":161,"unpackedSize":670475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFKlaCRA9TVsSAnZWagAAvQQQAKTX2UaDEQRv7OBE+0kb\nFbYKSm3nJQ7fKTWzzQceOoOslrFUROh+Yz1RKnXI2sIe+jNakBqQCkyO9BPC\nGSZOyO/BiCSkznrZu/Ixw/4PNXA9LasOYtsGvKtpW4IfkBVOT9RDcthDynVC\nQJ9kwZeTSJLLa0d/39DSUgIcJ5Umgk6A+JQ7ZNZxbvRPo52lFytbANWDke3a\nZkRwGRthjS7c8aN4KB+XNJnwG2or0BCgf1pfKUiRrWUmiJpW2NeLdj8JS9TT\nEgVTUMBiSrqzp6Uo31pRObYJU4ilB+C+vSxTQDt2FLutmtwjtDJ1RQmOSA5c\nxVjo7xG8bdgAWSPP7fQreEt/4DgfKrQCZnOPfrYkTkCPPgVPDbAAoizpdvEF\nrh8nLp3IVyM4BIISv0A/kS6rIFMwyTnfrXGiTqVUIVcJMtTLtGxB49CCtnZK\ns8nw3m7PRfZ6XOp2Oa4LTLZEbeBnHSy/8ro5wYqTGmtAkWef/wqQSrIW2C70\nrpo4UU7xQmS+OMsKptEFIgOkX7V52JrlPpon1cQjfp4OLHt7I0QvyBVAp54+\nt7p4V/PPgIAvLfHmdsT6Nwd/RugCeoorCOO5twCz4V8uqO5UttkJKd4XPO2b\nxgTTmY1/b743xNmULc1/gpEuyQ7O1+Dfsx/oSmsH0LE+pn3Si+wRkJ4QT7g6\nD4Zc\r\n=1U/m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaHR84g+Nl2Bw+GWLrIxaP0v0GBzoWjyPwkzAzv7eFbAiBnROzSps4ar8nhdjlDCoi9cT+BBsbtI/FHw2rGmSiVcw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.0.0_1528080729854_0.7182411208840656"},"_hasShrinkwrap":false},"1.0.1":{"name":"timpla","version":"1.0.1","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.babel.js/index.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"blendid":"bin/blendid.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","gh-pages":"gulp gh-pages","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","browser-sync":"^2.24.4","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-gh-pages":"0.5.4","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-napkin":"0.1.0","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sizereport":"1.2.0","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gulp-watch":"5.0.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","require-dir":"1.0.0","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0"},"gitHead":"5eb15ea021e40bb2ee39057a6e58bf62f9ba2e58","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-JQRuDfQmvY+wbmh9SdvpcERnG38W+MErOjA28euDrm8goEFp+LLavWgJ1XKR5djVO2azIns/1bKRa8vVBZQAIw==","shasum":"827e4f7dc611c313a1134e9688a6e5bdfdebda40","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.0.1.tgz","fileCount":140,"unpackedSize":642297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFQlmCRA9TVsSAnZWagAAPZwP/2m3SlkUuUocHkgeZMkW\ndmMs9HS/Y8CjuQDetFVGEFLRnwWafe454EQj/3X9igGNJXj5CzELubQ40my9\nnqpVcN1Z2HgWhlFSJldRUvZ8o8LUqf3Al7AD+UGSSfeNBSzvt2KUQDthGDMF\ncZf34+eM7CxiqPyAo+zyXVnZJbKuZn9eNPlTjF8s6hqZFwkKzrzkqk6xD3KN\nZIRvWdTqhtd0rgLNqSo+A6DuKDA4qRQ3izueYejK4vCGCXZZ8o1ZBJpjkhxU\naz5lrEnxojtt1XEjeMY/rS3NwIQIzU6ESEMgeaX0PHPbCk4Tiu/ZU+vCQrYb\n1Ho25dt+Smivo3ZAQZPI1IMIWD4sEebpLMI8Z3UC+9eGIcBG4RM+boAEK28X\nRX/i9Ke2sLFGu/1t+MlszlTlbe9GDiIF/lLEa+SivqzT8GcWWgTQw4vrWFzr\n7hnyTiKQe31QX8vX7VPVNW0K0GZneGIZ49UivUE7+ywGuxtEjAqZHB1uDzgd\nFyHi0unYtiScBj5MdqtxvyO5IJCeVoBut4bv9gCiEe+utymDqi2TNsk9yIFA\nttLdF35R/iECfLTK+FQVXzSypiF3710ns9hXO3xw/VXnYg9WbN4gaPu+m3ei\nuIRJzUePyZKFZjPwvKRqW6ZYf+ghC3SYPG42CMw0LiB5dUpyZg7iZSJEwgcS\n4nrW\r\n=iBej\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaWM2YydYU/ogTlE4nm4e5In7gqZyQ26SPPBORp4ckGAiAM96BHQm/HbX2PImpZIT3GWKcGpenO1ApizknWkW9fiw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.0.1_1528105318118_0.5572340802736029"},"_hasShrinkwrap":false},"1.0.3":{"name":"timpla","version":"1.0.3","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.babel.js/index.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","gh-pages":"gulp gh-pages","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","browser-sync":"^2.24.4","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-gh-pages":"0.5.4","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-napkin":"0.1.0","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sizereport":"1.2.0","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gulp-watch":"5.0.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","require-dir":"1.0.0","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0"},"gitHead":"77bb7f78ac5c65a99aa3df72619d76944f08314c","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.0.3","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-6oXA9Subg+rUC2bCeO7CLazapxQ/iQEWLj+Atry8EEueIUeuZ6Szvz0Pqv0y+ZXPl2BZOq6bJ211G8fKlNUV5w==","shasum":"b32ababa5ef9203dfb35f464efc3766abb9d9712","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.0.3.tgz","fileCount":134,"unpackedSize":327475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFQ0SCRA9TVsSAnZWagAAZCcQAJZtX6obA4MNVa1LvabZ\n6SoNzWK1PZXBZ+wIwBC/eOsSxNswynBU9LnruKl290n0CAXIqfrrRWU3/5WR\n1dd8Hh0FYQgO+9SX1wE30uDPNVBLBdql6DLWmzauow84xp7ox6tAPKx6Wp96\nCKrPkL3J6/7jwiCGK9HpjSUHWmPeLxd7Imppe7nx3uvIbNxmPojcPSXAKi23\nfguakam+LNQzmgrMwuXOq6RHs7sNqGuegxKoPsCob43w5KqePNoTPgyOVFcG\nR6ogBQoCuas6LTJtWCIEEJZHNuSyG6pcVCpULR9Z5Ai2b8oypqz7EEJ5s25W\nGb+EMYFr4twxUF0hjXjIi12QDQlG5IAlGf5G8ddNdTdGjUJUvz9Cy6WnYdD9\nWU49w7nCKW4qqAq5aMHr4fY3sADHOv7XbKfQfOPVj38zoS9Jb+DxxEJ4ij0F\nqki5D/M6a1FHN1+oh3ZOL9esjPnHhOtonqrEvdGcDTLkzk8oBULfJT9ftpPF\nLOUu2urdACkLR6k7jaayGU+sSi1onkekzDwUjWpDQksAI7K+pFMHgDtBG3I7\nW9X+r3BPxquLMB0xnNKCJPUxjfFasm+G7Z7ttidRCc+kOvWsi8gwn++0YD0i\nL6JbckhlsPY9djw0BeQbt+fsG/P+R/WKD5dOXw1bz3go0M+9jbGQUfCN8n8n\nEnwV\r\n=4Hhk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIERurTlBMEQ/4JbJLNRMsVJ6qXJAMg/ER050jEGYKsiqAiEA9wLI1EPYBzuKyIZTJK23rxgN5PSbhBlc75u4O6qX6hc="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.0.3_1528106257240_0.49948662871718597"},"_hasShrinkwrap":false},"1.0.4":{"name":"timpla","version":"1.0.4","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.babel.js/index.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","require-dir":"1.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0"},"gitHead":"39d389f854f02916ed55ef7eaaae610c6352355c","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.0.4","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-NoJ3nypWMhyA628Fz55lpWivlZhvcoenbcK91qNPTrVFmfeISfUv54VOT0/ec0XzP5sPgre/2FVblHWcoTtSLQ==","shasum":"a240e9b7141911681ca9b76b728686f1f00e6e71","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.0.4.tgz","fileCount":135,"unpackedSize":334482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFRRnCRA9TVsSAnZWagAAvb4P/2M15GFg6+JUxL+Bo7GD\nGsfUDgy5/Yfrs5slmzute9ZBdVtDiaYf2OjiRn7Cl7XEHutvUqPOXMbLhie5\nFL55d6gEyhpFaEOCk9w225ahCBzukJlw3pb6cc9Q+QvKDVL7qz8EbeznepWT\nWQZEoyw0vlhZ8dLZhvBd/7LIoPFpoqwBOBtyG7ynzcOTEniMnH7nX4UAB8kN\nVupIthzt1QlsEeRVVRgF/nXHuXENBR4Vd52a3l6SrC6B4D4jIbRUuniZn7O/\npHr7MNBUpPeYqPI+7hiGBMkqdWkTOr+67Kh5InK8HWU9lpfKuWpgVdqN3o6m\n3439UU87bJUJuwoxIHo4jDf1uvpo+N1bNDUri6+WM9vcCpVvElHqOcUcWvby\nVwDnMTT0+Obzyf7wqe6ZIZziFFy9TWOuYPvyoGDz5baeIA51rlnLeRFg354q\n6e40TrDSTrARUb4D7TptB/LSq1DuqRLL1WEPYhSPBIPMRTqmemMjzbuz8Gae\nc2ZLBQb7nFnXV+f6hU+1tSoROtnFgVQQXS1u6Kv8kczcWDuo1CtI27E1KLF3\n9y/lCW1d1O1vuMSMsGpSJCDrmPvJmnRTFHKlMiwvg4iCzRJ/5nw4542cGGz+\n5D4bGbSN9iPzq0j4lgfB1qAQhu7fa9qx4Bk7D/lROvA5++hWEkldJ2pj2uMT\nR6nr\r\n=oOjq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAm+SRuk/4ewZ+XFd9RYy6YetYGVMbgIS6KyeA6rQPiwAiEAjRYyIxru00zVV+w0u+J6vl4GpnoszIc/IgTXaQqgBb0="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.0.4_1528108134800_0.9690831470841035"},"_hasShrinkwrap":false},"1.1.0":{"name":"timpla","version":"1.1.0","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"38a472df927a6dc1f5e19a7382bea83a18cfae9f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.0","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-BcJefR+bHTRHWNFPg7H5uIwkmXQXSncNhZHUiuVgpZLdopDJ9LD8ynWfRncvgGdF458CcwtyikgyWXXfgrD7Iw==","shasum":"5a137f2d6755c44d5f9713bbabeaaf2ec1a9e5b5","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.0.tgz","fileCount":132,"unpackedSize":627396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFSBiCRA9TVsSAnZWagAA28MP/1Rw9Zp3kjdf7VLLrm+m\nAVwULeTHRtvVgZ8FoyEcWdTKf+jRpgbtwumyCyIO0L4+ZfbZYGEDOahbZJgF\nLJliIAKqqXhx+Y0a5+Ekg/jeFLFBpX4ct4ZmT8dZKC5AcJRaCb5GVyhcY4s+\naMHIUCixxX2+FgUDupe7s1V7G6txKH9yQKRQCN8lKZ7Sr1yVFpGlg43uVs+G\nbi3Ee8i6G2zO+u6dv8JmUy+Y7+u7D+J3iGM1eqXpGMnuTD9tejLLYTlcClzS\n6tiXWInF0PAirwKex72cnhEoZ1hCmWA5Pvg80yCrCqr4i2yOa1Pz37FJfdAY\nMdhsb9vtutA9AefbGe5LK++YZTtfYlHExlb4ZNxyP4l/QpYeXXDDMSc1irI7\n/OeXfjNiyKfJ9kevLgbGuHur+FcdWzr2BY6CugYyZhTJwZfDVWqKTY8cZWCP\nLdY9qr18fBR1/DcsrPYhANGJ+vHl4hPAR6duCYs+CC1kz1yVrOqJOn88iHrr\nSRoP5NOjGdTmt54acY48BSiwOWVYWJ2B7j2hArhcBby5BHHEAkUhE3xJrNSe\n7SLX8tp5wQHTkzlOEUwypqifLTATvwxFD5C8PKRqSiYqSGy/XtldWVMyzKIz\nijrMvMppbz8OS9dJnStQmnojUub/zgms2YJBL1yiad6g9bpS+BTFkviOU1nV\nAV8A\r\n=sJea\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXdRoBwYFqTFpj3xliJ4sl/52JlwujHrQXbp+O5w+XoAIgNNVoaY8QUxMa/4jUvEUeuP4UGlbteavhdLAokFqsn+8="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.0_1528111201782_0.24685864784932554"},"_hasShrinkwrap":false},"1.1.1":{"name":"timpla","version":"1.1.1","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"38a472df927a6dc1f5e19a7382bea83a18cfae9f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.1","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-xrTGQZZCON3jS5LtnOYFbL4P3cN+cj/849/JI3Umjm7hM+IzVgT07wldiEa4UHfYefeg5mgxKzxNb0yfBTMYEQ==","shasum":"056ba1e10440f492fd22ace66f0bda293942b25b","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.1.tgz","fileCount":91,"unpackedSize":582673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFSCJCRA9TVsSAnZWagAAmYkP/2yFVypNFBFXhuOC3bTh\nSl1BdzoVS3wdM9/3MBZ5bi/3Tmic5w9mN0sZXEQMiqUp+Md0w0b1kniIsYZt\n47utqHxepz2dJOPNUvtR4O49LTxUesHk5/tYweTLDJmJn/OOcq2j+1WQYMNe\nJKCzWipXdYKiZym+j+9+Q+EZ8kcErxgKr0UyCwqAtX3dxyKMw9tJb/lNJUeE\nihgo666WCxsDCSPd3sbCCUurVPKF3JoQXGxHmPpfbyVmNpnQhEaoKCQmWgsg\nrxgQ6EwF02IJ7reQSED7eWieFhdXEUJfmg/XlKUGVm+V3TNY79U38Dif/oRo\nod++G4S0TBRozBGD+Ftfwq0IUD9oFqF8YsUWGl1Qgm3XhZAfDRl6LKYACWMR\nrpRoiXoUgW4Q94/dSolPjvMzyHqxaPBCJDrSoeIATjaF8qwmRz6hGj+EQP5A\ns2tFOOh4EuCPtuX+WOIZ8csDlbRGZc3uGSyn9x3IcEUJYLDkg7g/AwlVcl1u\nXnQsZP7lsZo9zHiFRkdkHKqPce970Bg4bQF993jJ6XQOoLq/wwJS84Eh+KoL\nDvEODgGjxOy2NVl+V9I0BvrCjMeF6U49vQLx39rq7Ru7Jgbe1N7PFK/ALiTV\ng8JrM93hVuGVDILW0KYsew5i0DWT5wlMuTziKO+SDybOF6a/8AffEyUNV1px\n9ce1\r\n=MLvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOkeFN9fGM66iVyvuCnlyHL5a87QOzwUbgaod4DCecdwIhAO0yMpwQRZOUIs1HSCjEaRaD6oVpwLWJyZufJwBDx3IM"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.1_1528111241146_0.6557206890624494"},"_hasShrinkwrap":false},"1.1.2":{"name":"timpla","version":"1.1.2","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"38a472df927a6dc1f5e19a7382bea83a18cfae9f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.2","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-yFg/AGCJIxFKS9GRabt/W8qqCXyXUPzqd774Ed6XFwtt4i9epaSvHQ+ZE909bq6b1HlvOECsLjOU+uB+JA0sng==","shasum":"f807d2a1eaed50da0b75ba9c984546db65931fe1","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.2.tgz","fileCount":79,"unpackedSize":117522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFSGCCRA9TVsSAnZWagAADGsP/AwDVf4NMjnhCVbTQ+ig\nsJVVmSaOqrnTtdPnYYznQ/U3xw+hjw+oEUEViyTeokHYm+LG+uzvjjdGEW8V\ndxYKDHSkDQZ/8A6T8G8XIphsDE+JzUsFzKVeoc17TizucjahUCQrvhaweyj0\nr/JwW5jHfeAjGYnO9EoKVvB9Dk+upPYNmIldAB+pmbrIr5ztpKhUd2NT1IVL\n4uxyb4ptBs0MK/yn7ccokLJSamYNka9q8gPvun0GVJQbTnu3OHUGRx5d4AX9\nRY/f5V8hc1MVqaNGNP8rDWA1vP2QxGsuNgrIZs3rJ+X6dHoHpb43Cza3wz/f\nn42kMeh3R2ngUz3y/APL53O1iVP9KhiFqJ2tnlrZjca1KCFA9oNMtISaya7p\nzydcuyih8SudYmm+yoV++AxQhZvcoTU6cLUHeWL1/YHa0NaGa/xnv5/65lo8\nu7yAr75z5sFuTGBP65xHrdnuR63IWSKYFO8GcdkoaL1jZxqW6rVfV3AX5koj\nWLds1Yt8DFlBM6Owc1kEeiw7T4SDRXMcUMET5GlDXxRwfcPluVmnzakfzeEe\nAeH/AJOQCYUbv7YdIUM4bO9sPUXhn6qZF51jlwvwhEPQmARDbVHCxEpUO7zE\nq0lHhqwb6UN28sC3/EUmCLfPs23W+iBNmdbKwfIH6Ha3GNbsjYFCeG0K0m3d\nOAS9\r\n=Lgll\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqOHbYjJ5NmQNTbw8mec+fh4hwqi78fElMORudRXSDqAiBCFSP/M1Aphuninsb5/VGFALGruI0g3bDFsv55yo5oqQ=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.2_1528111490000_0.09343983291786695"},"_hasShrinkwrap":false},"1.1.3":{"name":"timpla","version":"1.1.3","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"5038dd68da8e6cc1f6f95a706b239ab201d20711","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.3","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-/5embk6BCctwPESwWb9Hbt9aVPcw2sFcizEblfw6MnHGapTfUPqDGEFbu+MEoiXQYNiHV7xMHEyWpJ2c07oFsw==","shasum":"2bff1da29cb229e164a2541d390f09a21b5c3a3f","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.3.tgz","fileCount":93,"unpackedSize":134895,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFSalCRA9TVsSAnZWagAA0rIQAJUWQ0K7HM6CmIjTS/h3\n5F7ItFQ3ptIlWOyUOBlsG4npWOLltDu+C9r9g6pi0+chRd+HqBeCu6mKhKae\nZmXnv9Ir6R3GxdwwTEKmwMa9zXVMF6HB2f51MQF5+CQlSnnYoSL30jVUJg4r\nnijbH6Itel3q8KM0AMsy+EpGq6VwCAPoJA4JDWtqGQgLZZBUdzOuSKsMXSPV\nI6SKi5zUjIVOX9rJIrGryVzVnky4Cxo6c1//rtCGAHvskOarX5EDVP38ofnD\ncdZVkic7a9G21E0ezeYcXfC99vjV8bAOGpw3H4BzJ+99Dhqg3mIEyY2UTIhK\n8QYwo1TDb7qWiDXU9JwcgdELXEtN0H3B3PZlRidsYRyGj/Awb+b+ibeiorYM\nSlQvT8umaY99QCVUJn/X0iKrx/v4HZi3voSO2LwtNkRd96AKxC4PoEVjUHC0\n/hN8QfbLvb29UoNTXkUUrb/+opvrx+dddbLEoe2Me6AUnS4dxLrFjkwCiu4c\npqMkI9vOv2XrkrnAFL0yTGu1P8G9VGPY5+9NLfWQ645pU/Vryr3r6HNhB7L9\nBSHl6n64CLyKkmocrtquVHOPxL3voxACxTqiyJtMipzbuTNSHBikMxucIEKc\naljImKOVSkCceK4An581vhBX2CtYh2NQPchz3M+rMYy6BzmDFPIXKx9XDvL0\nl5GF\r\n=t4Ji\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpEx4lJClVE5bisIkH1YWVT80zZr996rp+NduJM0w89AiAyKHALyFFGrjOCD6bTWMiPXDpS1Woddh3Wutgge4DDTg=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.3_1528112805540_0.6509841684833786"},"_hasShrinkwrap":false},"1.1.4":{"name":"timpla","version":"1.1.4","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"836a194d72d85e52802ee18cf1d4c75fcdb8ce84","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.4","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-0Ur7h+CiCuGzIVsU9EDRgDa0foyCPIhvEx0gYtnWDRQ8kz6FtdFIbRHGNcSagv4D1nBJVuLu4i2v77dsz4o2Vw==","shasum":"6248ba7c82d941fac11eb86e72bacd9724c778c5","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.4.tgz","fileCount":93,"unpackedSize":134958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFTYxCRA9TVsSAnZWagAAIfYQAIKw/6gLCLK7WnzE8jGD\nymcX3YpaVeFsik97raiC2eA8dQwn2NJX4JO+nTaqEPLqBNQQcXeNa61i45dI\n4dny4Q86TVcdMJ8RGRaVTECsXcNNVKxTDTyAv7L1SBoFg+tF5VggnAWuYSRl\nX3aoSbFjlcsT4x46mwwfx2Lrh6Euf6RQAMp/u8s4gzMOA1+geSheTQjKXGLV\nleG0jtKJD4s7C8N+KyyX0KuNJzXbeCO6vkNjfiXkuKdrBlymQMUcDcURLwVP\nd3CyvLq/KY5JN0YLUB0GvF+AEsUvxDbhtuiWaa2CbbCdvLf5y7XND20KRB/0\nSHKubb0aSDIwRLbS/birojj3Ps/JjzIZ8gGjBgtJgM0JR52O43rCWPELR2QI\nmWkCmy4M6JQ8D5YBqqZtlapH/kx2q1YhVkmuXhUK1EONo4X4NUoz3KSUg5O/\n0LbI/xLVSKbzLQxDPcUxRevBZfOVPuzy7q0+9LnTIE2nDpiz0OsYeC4NuP0x\nvOT6TkekRB4DyuTLSHE8ZJ8vkekx3SmpNM1yNc0iqljRAxW+vJVj+P0tEIzu\nTZyRLeIUMy5U6McvAg38li53z01vlQMw4lw4zObNSO0hYhd4uIdlH2Z6kmcF\nu7f39EcWhbfEgH49mqnY5PSyJzXkCFI8ikzBwsdfntfXg7fzi4la3mGJ4pKv\nBLvI\r\n=D8dI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPCT3BKu1lroqGSzA3m6w8JziIsAn5xshetln2M2LOpAIhAOb71nLJmqZcIykw+n9HSvqO8qB8SOFnto4xTPa7qZjl"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.4_1528116785091_0.6539241771866895"},"_hasShrinkwrap":false},"1.1.5":{"name":"timpla","version":"1.1.5","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"5854507b4ff148ca0b374f1777237457ab481bb9","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.1.5","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-wWTUuysmi/gau1RDaQVvlSGobbRGKnGcdhT7V7WLBp0YzRnQ2fZuyESfG5Pw7aBIywDwuiFCXUYKPrj+WjricA==","shasum":"6e22581995964a04ca30a4b3d9b0a0d3dc3caff7","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.1.5.tgz","fileCount":93,"unpackedSize":135548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFTfICRA9TVsSAnZWagAAjnIP/2sxSMsm2gd4wos4knAB\nQkmrlmPReROkVxURwgoHoRIFjlzg9gQJ8rh+JAt+E9apL9yp5XddfpyXL95I\ni+ABBLOkA+fCA85t8NTmaRDqJ0/TF8Ojol6jEGR4FKRqr28XJJCAsnI1wzwJ\n1agop1K+58F83li3HAsE1WETQi5xtgTRr2bBkodCaRrxOGAwydMuEevUwpyX\nWLWSjK6M15VgDg1087Mgd68CjjTWT3DTPY3cpGt/aKYxYxjNCx+SrdZ6LNmG\nKs9NRVsgmvAqMaIUFcSVJEHyN6Shaj9y8gPcUWksXIrEwrQGBvL/9J6Na0R5\niptxLUekiRCQ0qMMACnYEe55x9EpBNBLEPMIGlh/XU9slo8Ms2Np1YNlN55W\no+zxBS0v8EFWBc6CwNmMR0e+LfhXZ66Xv4Zz+N1h/kr4fpdm7wD2OtOErBYh\nWGMCWO+BuIwU+Carzux8YZwWfwSbKTuc+ReQd6P2H9ztx400ZNlsE3LDrpzU\nVbgIEqyM/KHKj54qMWXsqVYtf+SvcXtT+61vuBybg1FKzfE1x4D7GWJNV8cO\niSvKMUXBmQAxCczmS0In4/nFekoxDCwf8qQ3flhMkLZQtvngxaIm6EZnk+D7\ncc9huF8tNsDgnkTTWKsB+bl9Q7SewcWF8XvJSolyOZWiqTmEz8OXa3AD8Y2o\nUTNJ\r\n=S/RP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqZekPImpCijk55PrlrGBw/zrv2xX+9q+ZW5pw01yAqQIhAOE5ISkivbgh8GVfnYtcOxkDtvNtiD5RPLjRhsXGW7D3"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.1.5_1528117191606_0.13079839103311253"},"_hasShrinkwrap":false},"1.2.0":{"name":"timpla","version":"1.2.0","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49"},"gitHead":"7437e541a57f1bc518dad5a6cf5abea3fc43ab9c","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.0","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-dAW8oa5bYUYp6XcndZGcvR59CqI8Xg38GhZkse+080wG7DJTG2uTE1MPCP2+YGp+HrmmAbVxois+wn9ewZpPFg==","shasum":"2848c4d257d695540ee38a45567d08d1446d05e3","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.0.tgz","fileCount":93,"unpackedSize":135632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFTk+CRA9TVsSAnZWagAAIOEP/3IwUh3riHXMImPoK5F0\nxXTs9EVqN7B55/TQH5B6m74/h9lQXU2w5Fw8nvn4cGEXhZzQc+bHrHJDaN14\nemHLDoD8b1AONoKfGpmJcGHEVFCYVajMVwzKf70Tc9W8IPwknk2Hew4LLJMT\n8kEYsrfpD8P1L9IGlrJqOlO3lHhWdG8WTs96dycFFgu1N5PgGbGvM8CGqX7E\nGbH09d4sf8e+qpvtW91Vs7eySAdZ3qtoXl+liPwE8VcwN+grcLp9vy8/7bIP\nL7MYBZS2VNOcoZtQCZnBi6WwhA5+FexuokMy/vF7zAKKOyERVCR4P+w8IDtF\nExOQ1NX67RUD3xDf1L/yyNbYjRxQkd4zere0kz/RDzolqFzRGpjbbA0NSQxx\nMxOvg2WsJn+fbLULT05gIk5VFoX5miwGS42TLFZZGSqQ+s8Pn7x9ThsQMtn1\n223hYMyxmiNeJD75UfHxaQCOxGIjHrf/nDFunzDnDZTcgv+XDId568MeVfC3\nlM0LKgoMFggmd4kRtw9I/ghTTIC/2kRRkJRb2Eeq5/8GwN/xlAOuBmwW0+A1\nf3T/D4seL3VgTyKEks1dT8BWAskhbrlWrOUrrvQVL/LTYVtFUGbjct/bNJkP\nSGmVjEk5kt/5zabS2pRkNx/NhhW7vvHnaVQxuwKVcU+qw9wS8eHMloWcXiSE\ngcq8\r\n=Yd+C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkZgHQxxYxROKy0SG/Y2RtscBPuiJ8hjRk+XnMyAdpzQIgcFYWdFo1lnIIBGbsir3h6WiCp1KPWZL+5+D13lNqp+A="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.0_1528117566005_0.8880048963662308"},"_hasShrinkwrap":false},"1.2.1":{"name":"timpla","version":"1.2.1","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","webpack":"^4.10.2"},"gitHead":"5b7bb2c5783ed647eaed5351b7dceedb89e1abab","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.1","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-ZSRRdBwaG6LDWrijU6xLBZ3izLV4xtkxMIkMqtBo/Kclpu58UfnO+KUEn9uVetLip1Bkr+ulofP5taWNivMtQw==","shasum":"7933972900e3f2e4333f1830ef701a3dbc043322","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.1.tgz","fileCount":93,"unpackedSize":135671,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFT1RCRA9TVsSAnZWagAAQDYP/iVCfqO5CcgiNq0twlc2\nqRzMrUB9M3bJVGwfK6wsdH3Th5bj6FIkAnu3u48UWGCxDXcf1kGMn6MBjpAR\nodpGXGJ3vwInLhz0mGCsOzroxZsfbIDt27nU7jNsQLxsZwSeyv7l+BE3eKIz\nEBi+MOUzuwq7raVFRaBPfIyCrrEegoSYkxgkEea5YPPNii0uaqdhT3PBg8q4\nGDYS62B4cLd+y7ic0b+HD8eElnQEju4sA3p6rL2oquRVgCyUQZsz8d4/xpd0\nxkhkAN84xZmZpX+k5OR9DwIIF9hjKG20hSvSAZkIq4MjTK5my7lNnKKZ5E9u\nzm0GG/IpawSkwFC6uLyZxz154CR0ydH+6H7K8IhxTsZdSLp0j3wPzuj/z1pH\n7MDsEkJLV1DavOS3pyKAfLjRUAqNaRnGrC57T96WnaF8crgw0joYSqDRlDx7\nmyZmjO9eEkwdwGkd69ZTZmo+sjj/vSixZXt/AUE6n0VbK9hyPYOzp3Pz96Ig\nPaUn8hYyaM9MntwDSgY3hTP5EZfahmYJc2WkDiqSBrIZEmMve1OUvUQizPFL\naA4EEtTLypjLFFDuX+OrNLD+J5z0L8QVjJWV32KSwWlHa4WCyUNjuebNcWeu\n0RZD0GSi88OP6KFAHuH3aNwqcjhYU/Gn6cPg7BiFghPWZiTjteGEIfOMBZut\nFG1U\r\n=zNXH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSK4GJ3BPGCZ8zVd6lRTFlRSD/COc5jhH8TRQ+9uf1GAIhAKhyBDCw38YKtiv7lSlI1mFZUuXfN8U9w05mkr2Suj3t"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.1_1528118609542_0.521513182652348"},"_hasShrinkwrap":false},"1.2.2":{"name":"timpla","version":"1.2.2","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"2.1.3","gulp-data":"1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"1.2.3","gulp-replace":"^1.0.0","gulp-rev":"8.1.1","gulp-rev-replace":"0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","webpack":"^4.10.2"},"gitHead":"534cdedb0c9fcf8cd1ccb405e851c9892fb076f7","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.2","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-XyrNbEwShFXz7WbtPv05sSs2JdlDVkFhl41kPt8oMucs9tmhFW7odlv/HZVIGiqTWPipWHuAYJuYJbrfzzvoCQ==","shasum":"cbe48eddd58c32a2981e6179531d00ffbba979d3","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.2.tgz","fileCount":93,"unpackedSize":135755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFT+uCRA9TVsSAnZWagAAY4MQAKHSSUJmhK8U7vmNkRe2\nU3QP/uWmzEtwz4ATIEHl+Al398097drJl33l2Ld7Wd33qedyz4LoITizzecA\nzbrHyPjV9XdXK1GtCS0LxTZHn6JXXn7V3JnQO/Zr7TrGz+rS8ZfvMenYla3E\nimC6AqCwBSz9aflxBe6HIaqId+zjD24Jlc8cArfAFpT85VB8qrdpyqQUMFOc\n631N9gf/k82vxsDBKyVWa+UTJTGQ79Ib27ueSlEaIAni4BhtJgsc0DGqKJrG\nv9i2NbPYiYnLju+QCk7Ug8tHPVxax6Zs4j8p2wuaHJH94iAIE9IIl7oM1zjI\nqp244Wry7SfxWYvNdtmorXU5iXzTOtWSQMOQ2Nra359c7w+5e/6QtELZbvb4\nAH80rrWuVZkSjAn429fEYyQN/6dth22vEIby5LE5Vnhm2PcNQcSn/+jXKvDL\nfO6WHjS1unV/kBpUZ/rTTWpQ6iUMMFrCDAeYy5agW0T1AbJx2uxTyBWGxJG5\nOHB5hINkX4fEnCbqDTVCPdBqjA/9WL1VOPJjZI40cZKhy5d4luUQ4jjvrugO\ne2YLxviBWe1Lq/SqSbQ3ihk142O2FlpHjyNkEp8Q/s4pQHYiWLVvGZ7dd3Vg\nMQ5n+kcZFj7guFMVd0vFEtDaPrC/meabBAyIqaQGr1CpmctPUHpJgXfXVUWm\nhKj3\r\n=SpYI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE6QSy1ZpVvm03LjtNgWyofUZrpt1IqjtUhuPPGvVldXAiEA4y4oMKmmQkU9UpdkSxSF4j0afk7a1lXB8aw4hG53bwY="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.2_1528119214423_0.46421413840630876"},"_hasShrinkwrap":false},"1.2.3":{"name":"timpla","version":"1.2.3","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js"},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","chai":"^4.1.2","mocha":"^5.2.0","rollup":"^0.59.4","webpack":"^4.10.2"},"gitHead":"1c0cc04abd065267a5155c3cfe1a9e9a05d833ae","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.3","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-yp+TH91uZ79hW66eQWfDWgXfD3KuRKpreKEtlyQn7LGl5GhsnUQzew6UKU4WfO/Nv9pY9DdBWpdLCW77Lx5ZPw==","shasum":"a2bb7bcb21de0bca5af3611c76fa23c658518f51","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.3.tgz","fileCount":93,"unpackedSize":135818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFUCYCRA9TVsSAnZWagAA+TwP/1TJuB1TlVydQSNEA9Ud\nJsxbNYsV+Jg31/1ydwVooz4FAyZReSilczdYR87zIAF2TbXQ+PiR4Rz7Y4EZ\nl6ewAV83FQQdPUACJIZeEg7/aGm2m/0s5N1d63a4m0hQFQgQ2RyuHwncyfEA\n3goBn8oHHKl7cPYENDQPDCGq2xXBGF+19nrLj1Bm7SnvXlAolmEINfOdVRFw\n0iWpq4ufIg/4pOAmZjhKbARxo6Mfozxl9eiSBLMZkRouxqi9GRLViHIewrcg\n8N6d1vFKjkgpqaVWyZWGYyeqVNBazbdyofzdf4BDF4VCxksc/oyoD8bEmj96\n+Bx2pgSGqPvEM41J6lAeKWoKNu7qsHREUOVx6Rwrdo7uTpCj3yLhKxlPR23H\nGAj32//SWsS6MDWc37Ao5KMLVdbu3F8DGR57zqfihca5neZfeHveEFEhL7Om\nEs8aQUcxWK5INCsP2sPvmDqIIYLV174hKtWnX6QaVzOGiEItQ/XlTRCp79+f\nq0ba8D6rP9RwEufo6j68XGV1nW8V9U4r6Elk65lB6ev4etUqZBNYkUKJff0m\n5EHVGNA/+4xXNrPYsd08fq07Xf39BrAyk3Jv7XcC6wpjXeYozpR/mZWQX3EK\nt0/ueMWEQmSXafveLmlNhaHQiz9XM9DwEu8wbJFuT3P+hGCL59uUrbicEykg\nBwnw\r\n=ZJ0i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFq1H/HhGNlmJ2sGoEBQiASFr60asvoz2mlSxnuLryL1AiEAwtu6ln2tHfr3H1FuS18kfsC0o2urYPcAS/88ar+TD+w="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.3_1528119447644_0.13467387754614513"},"_hasShrinkwrap":false},"1.2.4":{"name":"timpla","version":"1.2.4","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","release":"npm run dev:cjs","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js","precommit":"lint-staged","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","minimist":"^1.2.0","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","babel-eslint":"^8.2.3","chai":"^4.1.2","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","prettier":"^1.13.4","rollup":"^0.59.4","webpack":"^4.10.2"},"gitHead":"f83159e5bb22ec7dfff1921ace8c3ee93ae11816","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.4","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-jnK04uINBOXkQJ6F0D59NBrU0ZoM0gklMPDLJnV+OEjubmMkpMbjxK8s4gOc4dT5dnnwg4bznOo45L3b0VGF0Q==","shasum":"77dd166d9ee724ccfe3794ec95198d106a8017f7","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.4.tgz","fileCount":95,"unpackedSize":137132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFbAHCRA9TVsSAnZWagAAN8UP/21ffhMfOXBfGfVzu6yc\nHZxeN5ZNZ49C8nzY4akI6acvhs0LeDLMhBOxHaHf7HCdlQxjCPI/QufMge6q\nk0BP3JW7xX717BIHJn3KlPs1rcejAvAVXsi/jeED7mvn0TRi1zQzp9bzuq5x\nkkPo5hAP+fhEsYVaQ6e+d5GAhYBngOK1bBGjuaLhY/I6gWjm1NowXyRjA/Jh\nEUXXQAXhVTo0HqVRX+IQee8jU8vFAXJ8LFBMUr32O3IEu+VH3gOVfG8DCxZu\nmyhW9Gak1C1WSApC0i9021iRu8AtdS5YFk0s+d20zjzuqQ9b3p6r5wanTDMt\nFfw4A7a8rJpqGE/h3C+DybGXOq/l8AEJgkgCkaL57dc46GXAv61IhZP5a64J\ny6/aZpKdNfKcHmKGzXXMIXGd/spG1j5Ka0Tt4fM3tCmQUBFJ8i9+YVLAzx6P\n4qyBhrA8bNlgF+XKn6OXtXbuuwxkmjU0czcC8Oz1KSjpZL3EXkMv1waQnqc8\nrExWQrvspXrzaD6t6weyAYa7uVhpBq4J6RaNMEyFhb3d4Kt/04zwMFAlIq0A\n/Ol9hm11KRcHd1qLtzKc/U5ChSSD5tEkJWIA8oPuNKuPC45LrUL5t0+MN+xp\nsByv1IjsqU5lXsrjISEkQpolu3Bsp9VHutgEyf8buhaNEkc0qICh+g3U6sDy\nqxfk\r\n=2ikJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGONGi+Pxj69tEHmd2iGqA+GVoVVmdeoLpWZOAUABO9AiAx1FValwqDAWXDiacf2EeLh8v8tWHXlUm2wc5A3rKmJA=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.4_1528147974344_0.4217540245215414"},"_hasShrinkwrap":false},"1.2.5":{"name":"timpla","version":"1.2.5","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","release":"npm run dev:cjs","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js","precommit":"lint-staged","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","babel-eslint":"^8.2.3","chai":"^4.1.2","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","prettier":"^1.13.4","rollup":"^0.59.4","webpack":"^4.10.2"},"gitHead":"39042235048ef5eac8dfdadd031a107e0620c621","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.2.5","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-v2VpZjj/CPdKbKA7YmeOR/OtpOpeAU5tqiWO8o/m8RMOUPCgOYPPu51WO2ydFMOmq+vdnIH21iA9F1jUqso3/A==","shasum":"a8892d87937dda6354ef9c6b73c2aeb4c10b7844","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.2.5.tgz","fileCount":94,"unpackedSize":136879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFdBgCRA9TVsSAnZWagAAubgP+QEviQX7x3qtwNvtgpLB\nqpPpGJnwRBdcooAvC+GWtsYh2lHymhLouUhZDhRJuNTx9nizfHSoOjocG/vz\noOMlx0lXpjesEld5oa7VByFdX1kGSlK09mH0Z6RFhdILTRNj8dyLk/bf4o00\nWACTCXaOT4GXzbOiXCp0Y+CbwronBCsqmiACGmNe86B6chCFS2LXJ9iZrdyd\nu7nz+vsOu4v8wIJZE0ebMs4jqnPndYHQ3AvTSS89pnkcNi0OOq4DslL99aZw\n74WgYaEWGxGVX50X7YWuCsleuj49uh8zNhLhOA0JAyu0dTpWh3wSdMYgmcr2\nNigFB9w7HJpsXZi6Cz9PhFSvDiyDPjy5aa3VXCyePugSqgZHQo5e14b4qBv2\njWw2pA7zeQSgyYtQcN+jnWLDcsN7oaQQAErATggBR3lJzuaaTyQzezjM1eeT\nsKSqm1eCxS/6pIev9b5pjMeYCaCpuJpjag5t446aEXG72GYfNMN8B99ZQ/8n\nonn6GmGCF9bS7Z1RBkoSnRRf1WyE0Gx6pQwo0hYtp4LDatsop89lH3/s3UAV\ndbe3dZN7XNYly4Um02y8J19HqYcpqjReKSMuNkO4Olyl1rMFMkV6rixj5ST/\nbgmde674Cz/jZRIN3nikZLXF+X/hyApuXLtrpzQqs/JIrI1od31EJa0oINb6\ntmL4\r\n=1R8z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF6rvUFWd2+/DlHySgwzC81SfsY7S4wanXDJCyMrYormAiEAl+/cI/GxyTOvTVWyMnAhF3MgQDtAEB6CaKTa/LUnnAk="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.2.5_1528156255704_0.5177203988690928"},"_hasShrinkwrap":false},"1.3.0":{"name":"timpla","version":"1.3.0","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c","release":"npm run dev:cjs","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js","precommit":"lint-staged","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","plugin-error":"^1.0.1","pretty-bytes":"^5.0.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.10.2","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2"},"devDependencies":{"@babel/polyfill":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","babel-eslint":"^8.2.3","chai":"^4.1.2","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","prettier":"^1.13.4","rollup":"^0.59.4"},"peerDependencies":{"webpack":"^4.10.2"},"gitHead":"74a8ccb9a0715cceb70cda6564e8f1d7cd3fc578","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.3.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-CjtR+7F9NMQBczH7UeWI2TTdDlDEE6C4X1IDisLc3FRwdWzjRaTTfv/rwwk9G1c1ltPzy0Mijutu4TTnGmWQhQ==","shasum":"33a0c942c47374534a2072e91b7b479dba2e6c90","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.3.0.tgz","fileCount":94,"unpackedSize":139093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFetOCRA9TVsSAnZWagAAjZQQAKJmO1LrBRdupkrQbYxv\nQe4iRLVK+t3YhtRQ0SXCyZFQAhHz0Ctvk9nkta7LQUjrfL0vbKbVIU+764JT\nTYF73EpabJ6Xg+mP2YhOdhv1vhHBfLMFM/ZxffNgSp1bEfe9Whl2DWIUyJcR\n9/1r1wKM5frIumVEKf5vyQdJTWTYQw33HMCMBEFz//g58YM0fxcmlF0jyh8R\nwXnknDUMTybyV8nrUgR41+jxU4KwCK45M9yWLFOhOzA2XCqHP+WH9X8o7fMi\n614ifbkfvNh2sEiPOfxscLxzLr06stiLO9IQq7vHxJL6faPu0NpMhTGOY5uQ\nrCALsRJtkuXxNodUl9bkVd5TL9hamrlJAxGwDb+ExVsLLLcZ+lJ+hYEQRk/T\nNe3+X4viQJQJxJauRh0/DucWfKocMCLcJS3BB4hKvKPqFloYDqxkIXBnpQTw\nouYIOYuAb8BfN+hEa3+JtqxetCorPv8Sx8ZoY/ovqZXJ53+s8miurqKNfT3A\ndhABtNkdsPQEjkrh+MZjYFhV2QAKN8Q6Mfzqxlwg5hNeRvLYeLzwo3nq+0/q\nZ5HfkRHWmoBB2k2KXLYWEB8+80uAZqE/dOph5gVFyuvimbnGfM/HUBnsyGw4\nzLmibWzt649DGdhalBhHkcWmtUi/zkhUv8o0kGqh36N1rqj4wxj/acg0V8Il\n0csY\r\n=fg5s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5usrakQ1rKjyerpnIfr/kEn2W3xqYW5xq/BWLtR7hygIhAOo8Fehz3f1Fr1rasWJi5FwPaW9kChCc7xMoUBKzsfIT"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.3.0_1528163149921_0.632497777510088"},"_hasShrinkwrap":false},"1.4.0":{"name":"timpla","version":"1.4.0","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js","precommit":"lint-staged","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.11.1","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"babel-eslint":"^8.2.3","chai":"^4.1.2","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","nodemon":"^1.17.5","prettier":"^1.13.4","rollup":"^0.60.1"},"gitHead":"aa1d02c1c0e3392cbd8bc79406fbf8d51e18e058","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-nexL1V76MAf4WqWAYrDPj82ArEz0tfhEufInUoeMFffAIlJyhMmBDGYBREV2yBtyoVHzWpXOG2kMGIIr0xwHaw==","shasum":"7168cc5653a08aacfc77874c065312dec8ae3978","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.0.tgz","fileCount":95,"unpackedSize":141519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGhuaCRA9TVsSAnZWagAAHqEP/RzVT5jdTQZ307ekEcws\nGumtw4Kkh8qeDJ/b+j/F9xTvyxERYYGsUMIrdVzxUUbp1wGKNVwQX5zM6nFL\nMbu8nZ5Bg8NqrzomRIQZYlAPjXjSeMPJ6BPJvKq+B9cwwGhtF7do2Om07Rks\nNy5FVdFQSHrSuuFp2TKUaJJiL8N//I7YnzkFIgNEWf/P4PGYCUEZdGn/NPEh\nEVtdm+RGjR3o+dAasF6wY4O2bcTmr0MgvxoRGrEyfOeUKSUcHtTRtM85lnXi\n75D23eco8bBNyR0JHrIafazkXzxX+X98iN3OkTms68hcHOnUYgaVa7V4qye3\nzxLgFAlqooTuqpzwA8c8dCylp78XOCXo77F+krgfOKnIstlg+wEQ7n53OFoJ\n+TL7uxihdceiV/oJR51uMIp/7mDOsVRXs+ZfZzUXcccQeBFU+vZRYXVihPz6\nQCXbOF306gyQeP/HXsLM9VpK5kdvZxOUdFDSZnWOIK83eNL2hZD0Y2a6B6hV\nvcHtFSkNlg1HlOV+xKT1zi2sKT2an3/9Y8xqTE/aCXjkuUPkkZo1m3Kwk9Ix\n+anQG+LHeYe+otCV9grNW7O0obeFAtQYgfMp3uiJK0i+o/aki+wXCHBjEXUC\n90UQgH/wh/GFaqLOGTnlUstAD+vre7xxs0EFtRFMOZWuTEQIpyHzSIKBwREL\n3jkM\r\n=Alkf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdaA2DDWC/o+zb0Ugy+tBJz6xAS6bFdiBRdiHMh7zBmAiB5uIeutSs1vTk+HuEYH0xvzgmr2wvHIUYyv2q8zWFrWA=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.0_1528437657607_0.5376224821031903"},"_hasShrinkwrap":false},"1.4.1":{"name":"timpla","version":"1.4.1","description":"An upgraded version of blendid.","license":"MIT","engines":{"node":">=6.11.1","npm":">=3.10.3"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:test":"mocha --require @babel/register --require @babel/polyfill ./test/*.test.js","precommit":"lint-staged","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","node-sass-glob-importer":"^5.1.3","open":"^0.0.5","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.11.1","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"babel-eslint":"^8.2.3","chai":"^4.1.2","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","nodemon":"^1.17.5","prettier":"^1.13.4","rollup":"^0.60.1"},"gitHead":"f8ead87cfdd0562d1572ae670533d5bba3f38796","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-t7B3FisLB/OPNZapaOoQHUqmDqrpODjk2NcRHRhc6vM6vUPk02JbFApowFgMSeSH3FFz/k4NXFqfOoSBrqssXQ==","shasum":"48d3c22fbae198f31067a2bbd264ca86ba6b4b32","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.1.tgz","fileCount":95,"unpackedSize":141554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbGiyCCRA9TVsSAnZWagAA+5IP/AiHW059lJvT7cCDzlVm\nBP9Dgvq5iYPXvsPti5T2BCMUw28thrvXYjivCnCtmTqUeAt+DY7Ry+f4UWlT\nabcRCheQlFyQCArZcU4IyV3XkaY1nU+BSzyqks8gS+8tvRD4SCM8lyNPAgkQ\nekilxe3bL/aPJnHEUfkm9WckPVWio05kYiHoAMOqm7ClwzX3zPnX4toD79GM\nJewZfBtG1YhqUeTtGJANToGgdgqzpdmDPOTkx+sCrrzbwnFyuj37137XQhiN\nQ1MjVO/v+8akOuqdJqKxkyUEDn1R50cSe6BH37UaelCdPKjx2KkQ2pAY4/1b\nmLnCKGR1oYMWbgXZ73QsmdXoVol5bbOOF17ZxFQDEi/tdV8B16MjKOsqKKGh\nMbAbFrOc9UnehC+Tf8UACZmAzKaDAGgaDyNOtH1J/IQxgYT3d5EWeyojHSx3\nh6mPATTmWA6AaqT/G87gK392CLkQWGRaaoqJ82GUYPu0o87Fmp+09IrZD10M\n9KXFyl68hWluhBUHln4y/wM+WzUxnBVCISPy/lvOlTxUgVilS2XevBFgzW6D\n0umfcMJh499F0tKJnQbuzPePfkOjkD7yuuoFL1aOSCjdNogY0cw2DfBxgPKG\nSJOHCZPnimz40s15pXwUM69COdgIxCz0MgaANFdH2UIdAwYzEQE2aC/7uh5Q\ncVHQ\r\n=Yhjg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF1g5bIpKvAs2Vf5FMT8YB/NvJJd9LZK77dG/uw55jiAAiAKGk872cen9p9QCSDT6KYmzXST+taaoyGlwsYKzw4TWw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.1_1528441985284_0.31989333999582725"},"_hasShrinkwrap":false},"1.4.2":{"name":"timpla","version":"1.4.2","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"nyc mocha --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true'","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","cross-env":"^5.1.6","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^6.0.1","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.12.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"babel-eslint":"^8.2.3","coveralls":"^3.0.1","debug":"^3.1.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.0.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.17.5","nyc":"^12.0.2","prettier":"^1.13.5","rollup":"^0.60.1"},"gitHead":"d66a79a8f9b6366483efe25b9748b6f645568a48","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-69r7C7kxsQRgI11rDrH1GLWEWTtclP5yYij5bRSnvUjqdhyVwNLkZF/6ndG2Wg+5kl4M526HDZ4/QlHIGHkZ/w==","shasum":"4ff10f38248d3f69f347eba16b91f9e77853975e","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.2.tgz","fileCount":70,"unpackedSize":136176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbG0ZwCRA9TVsSAnZWagAA4xwQAJSYtCO+y92wEcvLL7uT\nmis2x6pvg2M5q3YaGprU/CRIVFuvKjzNdzfmUoIbFIRImvDBQiFSzuCAn0my\nGRyz9U8m3BPaghZ6ZW/0kw+Al9HwkRxqznVxAkRgHXSg1k4Ava21bjq70X7A\nawzM6EdtqFaP9QqdO3q+nMgP7hQezZEYMVDyyLhyzjqNg44gCkzLUeP+KvfP\nhAwXuC5geL/bZ6Q+rhJ3pn6G34nfHzRwIMXw1SvcAd/kd1JcpCHInyrFNQBd\nGfCwZBSl4BEZ1HRdzbpjDk0Is31cG4RM/n9+vrRHT+6rrbBscYbF5ukeuqoz\nFn8HV4qivGQek9lJft4YmKQEPqAmNHEkl1K8+yaEz4omhm7W/kxXk8lmjiYt\nzH4X2jDaI96KvqNva4+I49WkSU5uYj8M0eZ9nr9MPKV+z5LXB3O1OKkNFfj1\nay5hLzb+yTAFHlmQrpBM5uH0uuSSs+qV6VUAuNOyGcx0QQfcnoIj9VUj6aHA\nBWBee77Q6jmqO9fWqPNbNGwMhX87Sz55J7Xi+jNVcmyLp2J+SrHXwXqMozDL\nomTJodA/hF56nQ5LH94gh9tlU8ZqSAu99jtroeHQKMytFAXiFTMjgLWJmRIr\nQ7ZWgJbTlNXDu0nKYGOaT5U5px5lnMDE9OUfrm3uKycmGIBPW9Kgdb8alP2n\nBx6L\r\n=56tH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqMV2quKBkaA7/NhjE1H46oFOCLKWq4FkjJ1lDRCprUwIgS2OjydZWXwqGS3f63cYRqNO9J0+iPUwMXzHAvumD2EY="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.2_1528514159396_0.8380750311742922"},"_hasShrinkwrap":false},"1.4.3":{"name":"timpla","version":"1.4.3","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","cross-env":"^5.1.6","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^6.0.1","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-data":"^1.3.1","gulp-htmlmin":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-nunjucks-render":"^2.2.2","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.12.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"@babel/node":"^7.0.0-beta.49","babel-eslint":"^8.2.3","coveralls":"^3.0.1","debug":"^3.1.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.0.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.17.5","nyc":"^12.0.2","prettier":"^1.13.5","recursive-readdir":"^2.2.2","rollup":"^0.60.1"},"gitHead":"406273bfe66e02386d4ec9faa1422c1fa919c9d6","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.3","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-gvfUMUFTXE/N3VkrULJNgc/A3eOMs/7JqLCumoVDiDp6vru+9g1lYPhraHCHceEg5q6G4I3u6MljGmgzt20++Q==","shasum":"9e89fb44a1958f4adc56c77f43de5564b5c835f1","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.3.tgz","fileCount":79,"unpackedSize":324314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbG9YvCRA9TVsSAnZWagAAZTEP/2gq731DReuFlwLiSmJ9\nAKiToa5d790o+lLf61LW2wVHoG+8UvEZeeYafn505e5rpAxsZVxcf6+OpWVK\nxhrfCyTnMqM20G1kl9BQ5Vp4pNlK7BuoklvITLMuoKmkFNK8XWTT1qxGvSxr\nHm7ClGVM6mC+xGTFdfWu8N1RnlB8DfxivyqqcjjwawpJOcDHiGQNAamenOxp\n1Qr+QRQJKPBn4ic25vYgesjPtA/3y+Itx2IsM8+WCIQ8oMwWWzIlklfJZJsv\nya7QvSK4gWpvwluAdYNjkZBZUlqerPct9nqaSL8UY4y3epSlUBj7ONXBACYO\n0YPt3k6LBzyfBSxkwTgp1y0nCBexGDCpK1mcaYtJaAvqHAkrSk/Bs/TmqeyO\nmpLfjKa5vOay6xqnGZRZOJ+p0NtjmZFoeZDryMH+g+RQoratvWIiPCEY2qMT\nRkrtBi6ItWsEYMGj638Wtibboev5cUwG/QLDxWvdxn/q2gfpyUDNvz1Ngc9G\n4SqV+lQnMTiMV3soI45XzaNbcy9LreIJHko9OORdcTVAJUoYLAh8ue3bepsj\ndeavT+dZwTIREOxG9jyw4EfGDnU7c8QvnWeM6uPxZuatlNQELQcVLq/D72LD\n+3IdMCSFjUdwrKYQz6C45cCD8uP8WT7mz4Zc7oZlbD+AVx8v+JlysuRktEjH\nqOEX\r\n=7kBg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEx5ja1Nd/Utk7DT3gcPyMHRwBUGB1TKj9EVRjoJKhngAiBA54FD70FQ1Q8zjxLvUFYLu0Awwu8zRKj/V5D5IvkDfw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.3_1528550959027_0.8635316248816927"},"_hasShrinkwrap":false},"1.4.4":{"name":"timpla","version":"1.4.4","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","cross-env":"^5.1.6","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^6.0.1","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.12.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"@babel/node":"^7.0.0-beta.49","babel-eslint":"^8.2.3","coveralls":"^3.0.1","debug":"^3.1.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.0.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.17.5","nyc":"^12.0.2","prettier":"^1.13.5","recursive-readdir":"^2.2.2","rollup":"^0.60.1"},"gitHead":"6881048b816d5c179f31b614fa436e7e8b841b2e","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.4","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-6B8CQRoNFW+qr1egFe4nHjyCo+kw/ZbNwdOOg5wC/uoS74SmojYbEtrFL7y/90JmxIsa7mQH/mMh7EjKQtn2Cg==","shasum":"82882018ad22de96355b2a7c129befc81511bc10","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.4.tgz","fileCount":80,"unpackedSize":313192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHOW2CRA9TVsSAnZWagAAIU4P/jM3B0ltpCVn4OZrLLXt\nq08WUopzevHgKC3wfujYdfzgd4c2ulA5Q2/zDVULytn+jqWrAXqCAL8LcAKb\nHqkE78qG5dJT0cEjOrL0jcn094Lp3JErMYMp//tyyMAJFARYITLDo2HJFsx1\n9Rmkh4J7Oz7lx1876j00o4JQt/tJrGDKE2dQIbHuygnCcPtsN5Z4c/MNDrua\nNJntcFPVFcBxOyG/5arAgLdehupF0AcMyhjmKTlBILJCffCAaxAsnXfCCeno\nvyebZZbbjGDWR9QG/Va+9+rQncCjxkLlsva9/IIMydJaHyjYr6ctrnNJNKXE\n5ryg/Hpo+OQcC8WL73uSIWRGomvZt2Dx5t4bMeNrH8P/OtEL/dGAsa68ux1y\nbIkdf/tS6tOErqDGQVRo6LO4XgU2JrKWAaRahUA+FqK3ncRSF6TFrCl8P5D9\n/M3zndgw2OhyVIHew81QNEtWEec9OAL28RZ7isu5lttEFYhqtKwtvR97v/lW\noSNOb1J0G4hOLxYG6rZt6BCZXhdMoUN+BCKXA6cCraCZ792giUOQ2nhPis8/\nXEf/I6BUPyvbT9Df7joMU0FV77IaGdo14B4AISwmqvd0UZPWJoLcnBWarX39\nbNNJikrhZyIKyerPzIhyZFYXgWxcO41DlLRsNzMcnGHoin5SPjNlmvhd3i7W\nU7OW\r\n=a89T\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbxbphJUvLoYaeUSadcPQR4M2uiT7xCi32Dt2LycNm/gIhAMXDzEKrFNdIvd58aZsdwF+tSDce+TnPX8g1tYrW9WMj"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.4_1528620468718_0.5293064045114262"},"_hasShrinkwrap":false},"1.4.5":{"name":"timpla","version":"1.4.5","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","cross-env":"^5.1.6","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^6.0.1","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.12.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"@babel/node":"^7.0.0-beta.49","babel-eslint":"^8.2.3","coveralls":"^3.0.1","debug":"^3.1.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.0.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.17.5","nyc":"^12.0.2","prettier":"^1.13.5","recursive-readdir":"^2.2.2","rollup":"^0.60.1"},"gitHead":"ec7ed94cbefda1165999909428ecda067a540964","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.5","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-mqxqAOnAqGrb+oox9uYoVxTEkbhwhAEjnyKrSsidJV7QA2jbkqWGQZcnhoXgp5G4ncM4tC+hMpeDH2xjdUbAqw==","shasum":"bc7e12f671070c2a7a553c0f41dc12fe2ea9739e","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.5.tgz","fileCount":80,"unpackedSize":313562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHOcuCRA9TVsSAnZWagAArhQP/i0U91mqFs8NVzOm5ZxL\n+BHH8JjpudSBMeE4uWL5R4MirwWDaaBUf0GByBsak84KQzemK+QZu0hxKQ0F\n87fM6hNbHcqrFw3k7X4nN55RusSJBZS/rgTDBWIbvXW14/B3EBjU4npErwFB\nBVUI1OuCLnpvkNX9tbnPoYo3Mpm/CNOT+rsKP8fdo3sRbvBOIciu/cmLOaGD\ncqadyoMhHe1Wj0Snnafp5it4BN5RF6FoZdEfZQGXYeAVFOlsL9FDV/PLcvDN\n3XiAT2XK5YZvEmCLKOjX5hYmRcEfCPe7DFqVZrtHMEQ3ggCkbzn8034oZeHy\n78JXjYOO0HnVXnVAcnXsOcXIw0TlQuCpAzSZ1+3liwHnniXnLL6XFdNaVA4L\ntEziTSOdzqA6dc4oJ2KznkjjUQP62ijBFuloFMGUwm31269qNNWaMPxV4u7t\n0euG+T8W4cbguBfPqLD4yM/ufpouR7W0xz7sR6TajpRjg7nIpVm2CFbtwlCs\n6G/PgRlLlKJ7i9VrUVufDd0XvOqhU7TAe1I7/9U1GCTqRQGQNP4wFeq7kREe\n3vtgqo+8SdbXfFyTKvH4CNIHe/ns52XNfJZ1nz6oRGCgDLBsURtwiQa6h3C0\nMyNJB7khfIyfWMGbxlww96ceeW4z9r5STjbep64MbnfUuM8DRGHusB1lVwa0\nDHdq\r\n=YIXz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5TNQ8SLU9cbyheJ5H8VOBbuaYZBWA1f3ZlfpemVfdrQIgKdrSXe60qC5tynoWEazaWFo4T5yUpxm3e4nDig66wSw="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.5_1528620845262_0.7478789324745261"},"_hasShrinkwrap":false},"1.4.6":{"name":"timpla","version":"1.4.6","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.49","@babel/plugin-proposal-class-properties":"^7.0.0-beta.49","@babel/polyfill":"^7.0.0-beta.49","@babel/preset-env":"^7.0.0-beta.49","@babel/register":"^7.0.0-beta.49","ansi-colors":"^2.0.1","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.4","cli-table":"^0.3.1","cross-env":"^5.1.6","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^6.0.1","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.2.3","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^4.1.0","hard-source-webpack-plugin":"^0.7.5","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.5","webpack":"^4.12.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.2","webpack-merge":"^4.1.2"},"devDependencies":{"@babel/node":"^7.0.0-beta.49","babel-eslint":"^8.2.3","coveralls":"^3.0.1","debug":"^3.1.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.0.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.17.5","nyc":"^12.0.2","prettier":"^1.13.5","recursive-readdir":"^2.2.2","rollup":"^0.60.1"},"gitHead":"249957fdcc65b27426549b891f326e5339083a26","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.6","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-M+M3DBziouVHA/ba8cW+jKa2EeAWkJ177i9moD/J7BCKWqg/L2PMceL3mstJEL4mMzgbebC+QNg3DhfKNrL/zQ==","shasum":"e65999856812abd8fc0e51ead6add2e57879f9f4","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.6.tgz","fileCount":74,"unpackedSize":132076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHd1zCRA9TVsSAnZWagAAcm8P/0xiWievqR7BxI2LOhPF\nQr7MmWoHbwVmEa1nP1Fv0sTMpjFU+j/kMM0c5kEs3LGGqxSv8zURXhUeifQi\nvKD40fQ4h3LDbn0TbJd+pd/z1bnWmfzDU95KuxfeRkqJkjtDsgL/o6XJtC9w\nY4NRiS6KOlqgdkAuOrFuR1iy7lVwoyigzXHXmd+HjyBYsgdRdtE/PVKeIRkU\nFkqKCvYqyP7I/ef6+JHNEh88ek6SkTZIwceeN1Qg7F9hHzU7gCAWqFWpVJmD\nz91ktxOhlsEnLK15jm4CODkbKcEqzX5Azc9fg+gYs8klAaOiOkzDnrLfG6mB\n//2GVcGy0wtxw0vJC2889SGEhkCBwvJZKZkDzYil9ZVhNBADFigBJyeXvJvB\nzNoRq7k1gbMPxgG7DudgYGC6uHGi8DxD6JBsJGloAKXx7HzSWXpoaphRHkA4\n9/9rWlKBN2wcdCIPNSTuHhJenFMNpQjT8mQD7WMUMWkFSO/hXVNQrf0nH8qH\nQD9MNyf1cRoKr2W9h3Jep7O+nh0b8LqD09UteiyvAzd56DbFQGIEdfdyH01c\nuxCxIVB7/kC82rsYW1TU9ZEXqIazK9LdxfFPJZIK1B5jqEJXBF2n/ERLfwj0\nj023RXx2+iYI6amIDbFzBCi+ZtaHLs39YWhxlMDUtPX93sVxlX/8gg76AjTB\nPFvs\r\n=o7or\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE07kZyOTFqwAftRg2atFInMFTM7wAmJfYxu6s2Tzb0wAiEAsyf9hNTTrVMZJPavvitPAh8JUB7OB7Mgwio3X/Wq8VQ="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.6_1528683890577_0.38794186670277564"},"_hasShrinkwrap":false},"1.4.7":{"name":"timpla","version":"1.4.7","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-beta.55","@babel/plugin-proposal-class-properties":"^7.0.0-beta.55","@babel/polyfill":"^7.0.0-beta.55","@babel/preset-env":"^7.0.0-beta.55","@babel/register":"^7.0.0-beta.55","ansi-colors":"^2.0.5","babel-loader":"^8.0.0-beta.3","beeper":"^1.1.1","browser-sync":"^2.24.6","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.2.7","webpack":"^4.16.3","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.3","webpack-merge":"^4.1.3"},"devDependencies":{"@babel/node":"^7.0.0-beta.55","babel-eslint":"^8.2.6","coveralls":"^3.0.2","debug":"^3.1.0","eslint":"^5.2.0","eslint-config-prettier":"^2.9.0","eslint-plugin-mocha":"^5.1.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.2.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.3","nyc":"^12.0.2","prettier":"^1.14.0","recursive-readdir":"^2.2.2","rollup":"^0.63.4"},"gitHead":"20069f7f5c96a95f67579b3aa6407040c6bf11b1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.7","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-T4WGi+1Ohv0OLt7scun5TCi2xXrp7rH86tuE4oS0MgIDqZBlaB19cTnzQz7lvL8sH5il7ho0foyT2WS22wX4vQ==","shasum":"faf8b756b9c7bc90947cacea83105bbbfa30523c","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.7.tgz","fileCount":80,"unpackedSize":315123,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbX5ugCRA9TVsSAnZWagAAUFEQAJXuU1rkLEgAXletMR0H\nQBi0y4PycA8m9FBGVn1W9woFbAxzOc5MB/pZvcqXJIUAvz3XqBjbSP87ZzLE\ngk6z5tJhzAGo7RaL183iSpF3uvUq8OfzQ7HyGg/25CjfmwF6/s/yYb2EhcFc\n3s/H/qlOdOg8NrkaNX7n4ZntXDMRsKKrvJFKXOiJOnK7gYHu7lfKuzPTNjHA\njfRyGb5bd8O4h35Bk8nNGteDjVUM2mYE19T7AFCihze9xQfzz9K0x/IcroxI\nHifWVubizTe8GRU5RvbVscTwdNEZFlDM5esLlSZKTqdfpRNhE9ZKd0dE7c+4\nvPu6t+xKBvByMS80SGpY2EzrpkS5OS2xGcwVCWryKum1GSvqQOunkRM5uWlk\nehSoSuUrQ7ApsaxXgYKocoiXwDHUxATHs+Bajk0/IPN1aQ9va00EVZwa1Zed\nTqsxUphxjiYoijpxsbWBsJhZI1mDdtpHOFtPhSboLL/V0IjKSpGJwU7yMh68\n4B1MDEAbrkeyDxe6gYY9M5BvPheRk6f7/V0Pshtuel1SKcyz2YCkJoCuk0bQ\nno5ske/oqxf/0A9OMibQP6qIGlvTvGfrpYKEgQZf28wCkh4xDZaaEpGun4KC\nXCEBP5MaRFQ1cPj188s7rmqeiToBeCmDkw9eWO30lizsG3KB0kjzhN0Cphvi\ncKEL\r\n=0D4W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtpyxNDfoBeXdC0BhcqV1fFrrenn6okgtR6900zEzr4QIhAOILnusWeAV3NQxdtyfrzy1joCWQ9hFbbUsOWNLs7you"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.7_1532992416501_0.01102435885431774"},"_hasShrinkwrap":false},"1.4.8":{"name":"timpla","version":"1.4.8","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-rc.1","@babel/plugin-proposal-class-properties":"^7.0.0-rc.1","@babel/polyfill":"^7.0.0-rc.1","@babel/preset-env":"^7.0.0-rc.1","@babel/register":"^7.0.0-rc.1","ansi-colors":"^2.0.5","babel-loader":"^8.0.0-beta","beeper":"^1.1.1","browser-sync":"^2.24.6","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.3.0","webpack":"^4.16.5","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0-rc.1","babel-eslint":"^8.2.6","coveralls":"^3.0.2","debug":"^3.1.0","eslint":"^5.3.0","eslint-config-prettier":"^3.0.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.2.2","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.3","nyc":"^12.0.2","prettier":"^1.14.2","recursive-readdir":"^2.2.2","rollup":"^0.64.1"},"gitHead":"9ddedce0936cb37ee8628603bd6d900234137295","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.8","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-mhIMlOvpJpm+QneLwYM09zey9TL9bxB8tnMfWLcRyvtDd5njHJwEgc9csp1aI+z6PgK82topOJkNCFjfqF5ySA==","shasum":"b626d2e20e97df4532842d47ce1acb7d895fa0cb","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.8.tgz","fileCount":80,"unpackedSize":315690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdU46CRA9TVsSAnZWagAAZ1EP/j4DwWGQutPnPpQKMEax\nV+6eONZOeuDtZJxaD+sIIPku39krjASBwO2EbJcdcm77Ubug2Brzh4N9O6b2\nNZWVKw4sYC7DCo1so55Uk9orI1AVYIHpBvoTcISVCoAWHKm3GYENZ8yZNVJf\nLsT8ah99UVWj8UCAsWDFk5fIST7ZIJ+UX/seiF3DC4o+QOQUN0VjQhkGVDrG\nagNzLLsDBnsDgi56XPstvbccKJEOEtbqm6GCxPmLsozm4AwiFRFSHsr/iRUT\nDZacOpYZdmHw6jZmhAVIJh4EYWzQNpx+2AKhosSo5KvYkTxaxPiZGyf2jYpx\nxGWaoqW+cq3fPTm5MQGy8H/DIviEGA43a0+nZGcFb+RhjH4VNI8er3fldNz+\nWeUGcSNUk5e91uBOT1r/TyzCEAkwuM7DQmbEhegvXHloEj05yst1yOABGLzs\nGUdcU6s9dO2LBno6u0xlgdEXg3WY3eRwavGp54FPuFcDxQWivkUF5GzHpGjW\nrWAlwhvTRiGXIcmEPPZ5Dws1YjTLsBRk1IB4QVLQNGedh36qH9lw3Z0sZRIx\naLoYNiWiucEG/dPpQl63i0+/Tx8VCoBTWWrFqRh/faGuC0FgTxpn0aKh4EDx\nm3YBksruLMuoypg4QF9ihXTV8Y8F1hhdx9LhoxX0fFOJ8VP9alOcNs1cWv2p\nFPIl\r\n=EOnU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF4NBXzqpbyeoFV7SMqKLDeEElC3aXjoOoid9mlMFnfwIhAKwA7oz0b+DZRJludi9XMZkJHwFNomKDfYwQID1lhB9G"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.8_1534414394312_0.5782296940234277"},"_hasShrinkwrap":false},"1.4.9":{"name":"timpla","version":"1.4.9","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-rc.2","@babel/plugin-proposal-class-properties":"^7.0.0-rc.2","@babel/polyfill":"^7.0.0-rc.2","@babel/preset-env":"^7.0.0-rc.2","@babel/register":"^7.0.0-rc.2","ansi-colors":"^3.0.3","babel-loader":"^8.0.0-beta","beeper":"^1.1.1","browser-sync":"^2.24.6","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"5.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^6.1.1","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.3.0","webpack":"^4.17.0","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.1.3","webpack-hot-middleware":"^2.22.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0-rc.2","babel-eslint":"^8.2.6","coveralls":"^3.0.2","debug":"^3.1.0","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^3.1.0","husky":"^0.14.3","lint-staged":"^7.2.2","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.3","nyc":"^12.0.2","prettier":"^1.14.2","recursive-readdir":"^2.2.2","rollup":"^0.64.1"},"gitHead":"44a42165e7ee3a073a5b7e8ebf551038e021480a","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.9","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-qwTF8tRBDt58ugX/v3qvSPydtQ8EiHgZAzqv9lf47bDtuJFLI3DVDybZAvxX6sNt2TVoiuzlQv90JzZ4vyNq3A==","shasum":"76414afea755080b54a815dd203ae609acc4f199","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.9.tgz","fileCount":80,"unpackedSize":241319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfKoHCRA9TVsSAnZWagAApgYP/1R6C9Jl1HntW4vZojKL\nU07FKeSIyW0xmaz0Ci5MpEMKmyRJO87HtdSGEypE6aGIEwIvheMuWzklRKdg\n430bLELsOn/yHFXgZQurtiuq5lSQhLPA9b/zXfPjcufW3AdOxDxToyhzmLpF\ny8e3U3dS9Bf7AWz+mwXbIZzHs9qeloiG2C2B2GB1ziSwavCZFHBqMxvz3wj6\nXNfXLAgE+wfCDyqZ6fz/wJn/ehbSN66J/ZprrEvqm9GE73oPALaE3kVmw+KQ\nGM6tfU4lLdo3eFTGIpp9RaW4g5hf/a8hYZHYFoy1zQ8jjZBiCBk72stTTRcb\nIoCU2WsehrtIHXEbL2PcaX0egIi+8BCsS+xAuUqIrn9VcJ6S6FvHRzq67Aha\nTmpsBCdkR7Ls1/tMazmRreSOM1F1xEiCZBMPMNQd5r31xA/1xH90Ury9BT1G\nV2KXMZPCoi1VXz1eylq8V4z/vrHn78v3Uqjf/ddJ9jz98OScZyAljf02WuXc\nUuPP6hHJBd74YMs60hAO+tJhC+MD6oFJhZVZigBEcqQ8ZwAkyd1i7wM+eSP5\naaU+G1crZypHGGUkHVOzHq9i7Kq4kavIelpDOwvnIfFdzP49LkQlf8m4JLBS\n7jkFdPKeYbIV9eLeAd8oxWN7HWukUJSlADsypC06gXyfsJmkrFqzhrS4+Az6\neI0+\r\n=8Y0X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGSVEgsLIZny/l7bW67qwsX43Xh+k+72pOkxvPbyJ7yIAiB9LAVjv/NFwAqXcwaU5NjdisuIi2950AOL8V/dvFfXdw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.9_1534896646976_0.7565549372651321"},"_hasShrinkwrap":false},"1.4.10":{"name":"timpla","version":"1.4.10","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","precommit":"lint-staged","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.0.0-rc.2","@babel/plugin-proposal-class-properties":"^7.0.0-rc.2","@babel/polyfill":"^7.0.0-rc.2","@babel/preset-env":"^7.0.0-rc.2","@babel/register":"^7.0.0-rc.2","ansi-colors":"^3.0.5","babel-loader":"^8.0.0-beta","beeper":"^1.1.1","browser-sync":"^2.24.7","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^1.3.0","webpack":"^4.17.1","webpack-bundle-analyzer":"^2.13.1","webpack-dev-middleware":"^3.2.0","webpack-hot-middleware":"^2.22.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0-rc.2","babel-eslint":"^9.0.0","coveralls":"^3.0.2","debug":"^3.1.0","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^0.14.3","lint-staged":"^7.2.2","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.4","nyc":"^13.0.1","prettier":"^1.14.2","recursive-readdir":"^2.2.2","rollup":"^0.65.0"},"gitHead":"e181b27d158740d886d0386054623d7f98101709","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.10","_npmVersion":"6.4.0","_nodeVersion":"10.9.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-YXUcXMWybK4fOB79Gqn6LplScLvVFqHr2O1aAO957apj3uZB9q1q+9JAstN/GfxjLpGlS+yvodpg9xzUVhAN0g==","shasum":"0c544b35180475d27ad3bc8f8998a5c257368736","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.10.tgz","fileCount":80,"unpackedSize":315952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbh7p+CRA9TVsSAnZWagAAak8P/20Mzp1strGHThvr0MpD\nZ2Wq8gXAM91F8drm2nm1lIy2/wBKCRIya7lN+//okxCq5wRfuyv8IZ9C0i/a\npvRGmHqoRrVKCRs8oVfl62sBbTuokI63/lrBVftMreaVXWy20FLq7MwZvJb0\n8/XkFb3J5bZxCFCBpBd/ia8UyvQrgePQBomIn1OUsiAjq5vKjfFE4udjx3yx\neG9OZfDm8sxdnBnIYV1/NVhrh4NZfS/Fi5Blp9isRMOwXmA+5i9GwEQ0jJpU\nm2j21E0JFq9VcuWUWAzd5LYYoAZMBcOPy3H1htuNlpaDrOnNG4v/vzW76u5p\nloPGqVheyt4hbpP3RS1jrNYvThknfrXckFnAu93wGAlti7LBM6+Hjvr5AN37\naUv5e9cpSN6nPBVSyLMv/vmhiWx13eZVMc2Kaxm6p43J5j2hQgeLF9ohlJsp\nkte0t4TXpVh90Fr/1v9Ujoqb1i1vF5Wx874c/7lYLuf9yTymkRcZExPx4S0H\nO0U5Gzgz/dKW1vCq3Tv8+WWg8dtmfT50P1jvjqiGjR/3LC5REH7hqJ7WSKm0\nVDS54zaGNFbXbout8bfYFLYiwNRGhhfz9eJX5AnPjf9x6SL3smzeP+J9WZpu\nT1Ba9tGjRD0NpuhTtOJHPThu9CXJsiT/pet25lZE7kUON5yZyxAbpLmsBu1P\nuOsm\r\n=vITb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsyqYRaJYxaiNYQZje8y2w4SoxKZpmOO0GpJo80xCLDwIhAO3SpPDlsZd+3F3KoInc0rIQwTgOCBSTXs9lAuJX+vYf"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.10_1535621758091_0.29112412131775245"},"_hasShrinkwrap":false},"1.4.11":{"name":"timpla","version":"1.4.11","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.0","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0-rc.2","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0-rc.2","ansi-colors":"^3.0.6","babel-loader":"^8.0.2","beeper":"^1.1.1","browser-sync":"^2.24.7","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.19.1","webpack-bundle-analyzer":"^3.0.2","webpack-dev-middleware":"^3.3.0","webpack-hot-middleware":"^2.24.2","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0-rc.2","babel-eslint":"^9.0.0","coveralls":"^3.0.2","debug":"^4.0.1","eslint":"^5.6.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.0.0-rc.15","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.4","nyc":"^13.0.1","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.2"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f67347ff823a1e06cc16090b0eef0d3521313a17","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.11","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-bcnN4zm7ffVPYvyuyvhj6i5VxXcF8gnIlufLnax3W0HUBdfM0E/8bwZEfaHnEMmpRMyjVr+7v4+GyVwyZCD/0g==","shasum":"d74d3d7917e0a8714b760fe8370e6165ad4dff5f","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.11.tgz","fileCount":81,"unpackedSize":315038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbpmT/CRA9TVsSAnZWagAAadsP/iRmFKLx5HUAuP3RY3Yp\nfwBNAD5qWbJhJJ19ulGQ0OzSzW6IoYcY/gzXiSnlNw/3pOJK3L675aE9TIp9\nrK9cZ7RdRJJaoKFDG5M21L6sjq0vEycjRfh4AyJaj6jFjsvwC8j0AT5wwgb7\n4/ExKf/788WReCZVV1wtxi+fq9peEYusOdwH8uwWLgAwyUHnythqW2JEy/uX\ncqDMcNXGlHLzD88MU0LRMQJwtiXOVMMMna9cIPXv/GUU+ZZpHyDf+iwlYfP3\nFM2Bph1uGB0eVUtDxXp/Sy1vP6YbvVxXXdFTjV8HZOnp2Kas0bliHLZcZ/yq\nli0nh9kqV4lxXu8ZEg7lr08Pb0lMzrRTjG5gC2slskE4ZijNnEUwF1BHvQoq\nv4lM7FR8lSF8xd//LuGUG4Wh2nC17WYUJgeNKU4AKkjgT4NgAN3wxSTu+jD0\nlFETUVgC5Jsy36ZwmF2GdanWlMlCI724Y4Cm1kJeBwHIEjyOmxZXp/7DKYiZ\n9KBU9QRfOGxN6BBBBtL26zgXO64oPig3iNQk5fcblwRwriQSZ1Fc031r7pAL\nE22yY6b8iJBkchzexQJ6V9BUL3R518ykcEp4XKil1lCcHsn3m7ffHolT/TUI\ns5E9GnVnGux64RLBb6+ey53ZdERNcT3af2TJOkwPt8RE1QOsN8lWcV3sgnnb\nJ4La\r\n=mEkx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwluSNdpq0wDVD9AHeFaLAq6kcrF1JHt/76I/SXS4KpAiBRak7wicmBwnEoYkAug5b5M6G6Cw/PWd91fLSxAbWqyw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.11_1537631486411_0.05286882254536063"},"_hasShrinkwrap":false},"1.4.12":{"name":"timpla","version":"1.4.12","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","ansi-colors":"^3.1.0","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.0","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^8.1.1","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.1","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.20.2","webpack-bundle-analyzer":"^3.0.2","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.2","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.0.1","eslint":"^5.6.1","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.1","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.4","nyc":"^13.0.1","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.4"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"d67469f89cc179f9ff44bd1dc0ac402ea720279f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.12","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-JkYIlBF17oeI5GoE6pM9BwBjWHsdzAZYU3/wLrqiKruAqcmcnAOS6+edRlR+7mJXmqxI743INniD4a3z/hvBdQ==","shasum":"0da57331c799e285845828aa10a17a368d41860f","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.12.tgz","fileCount":81,"unpackedSize":315234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbuLVvCRA9TVsSAnZWagAA1zQQAIcl9S798bAJOGNTfZWA\n2s8lUl+YJ39fHl3ta/n7GNRaxpT4vPdjMrk/hDFB9G++kY26TfYQLaztOFg+\ng8dEpVMWrwODNQmdH0efuAwWW4lznncQz6ZT/9/T+jEOFLb8udZuwlLVQrzz\nsUYsgjfMBGZtLzAdqQpefvmouePzgiixGOJWBrY59jepuXvu7atxgdGe3lZi\nn8uWwEYej65GxPlyvg+AxtOnD+FyoE6zsfdvqi5VDg/MfBWLxW1DFtJ5eOE2\nJBtz2m1C61q4QqJPiorhJm673SKPcqh44ti1AB7b/PP0Rz10sPXTDTt38nPr\nsr1gwO2a92QK2dKM8RAydXxoShlkJ14G+ytOSTwIk0IxFhW6JToMFCuLwHX5\n6GoQQP/peg4LLm8rBe/CN0G9j4a5iAoejxxUoMZwhoBSIx0vCtz0GgH03EqP\nkIacSBJQYWyG0WDLheq/8g5RTRoMnTR759Kx2F+8DJq0LXUixTclSUrbSX26\ncX4D2Vp4VmneqIhEjFiBLmd53ALpR7oNUFkzj7JVPfGta3CdUt69X7JnRkg/\n9WqYZPVwxMYpKWlcuAB6DlGct+sSJYRdFlsB0kFAJNCHRTdcP7cmMnLQ3eWG\nFPn4M8HT5U3Jdmk/yKDL2ca87E/7rCcdwAdlyBQewaQnNb2oHlx/S/FLI5yh\nbPfG\r\n=yHaV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLCfegcEYMrPfvCfelg9ZMvMEdsxf8cZAEJ70txb9pBAiApayjSNyLKmiVae4YhjzQtdGhEJBjWwAUpQjEuZh1bzA=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.12_1538831727236_0.8639918231698227"},"_hasShrinkwrap":false},"1.4.13":{"name":"timpla","version":"1.4.13","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","ansi-colors":"^3.1.0","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.21.0","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.7.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.4","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f62e954c0d74192dac039c1df604f819104f9409","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.13","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-DYtWjrjSCr717uysOmjXnWDf6R7jKrAdrP8jmTUn6XCSVCEzih1HxAx3tFhtcqeRUhnOFhp2UerG+i7W8N1E3w==","shasum":"aec59db0c2d617fe4e08a1b5e8cd4f2b17957781","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.13.tgz","fileCount":81,"unpackedSize":315165,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbx6ZhCRA9TVsSAnZWagAAFLgP/jW4IqoOmUrh0iSeYpvV\nBy6RdtxZvOlGq866eeSeanOnde2se2O48RinyLkv+/SR85yPo9HFjhxvLYmy\nfYS3tHoUMSXQSkAM2aQcbocSe4v5SzSDxQp4n9PPTTzjsIOhuB475nTjnUxF\ntSdB70iAei2waItotH0j6nQsCITKOe24P4ZuZUaeudtfDXAvV3qInS5O7TsW\nqoF7a18AbhksTtS6akyPjzwqkcufNb766a/5XtYNeHnFK62sj2H9Fcugz0T+\n6kWABq6f5VBLlscKvU3N1q99rrhqIX1g8GkzAGKmXaIbMGB3wpWFJkwOpbrw\nQocQPAPupsu9j7/FVSF6f7VNCdUHldfIISoBZpyG0uR+XCtUAtL5GBhx/Whq\nYTN8P+wqafxGzh0VpMb+lqisRZK6jgKsoO+6wPbMjg9IhvGv/XHBQOvDbK6m\nD8OnCb1ge4LFgJ701H/OyegWrN2tn6cbP8ybjOKschAVOSAU9jLUwelHh4S/\nNcpr4Uro2O9jnHm3yt6TPLlGmsAgVJ7hPJKGtAEgMmYIERFfU6RAZf1TzSex\nfA3OD7hyzW5gBIN2Ai0HtPzJHV5VKtGL4ql52gCozJ4oBM8abFbV9yAkNS8K\nxTZAabipTW7uY3OawQzoC+yUBcN9L1fK+kDC2zkB0kGpwdoKZ1SANFJ73I+U\nsZxH\r\n=nPQP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHFaTBnTZ0Wkfkcbbm4jENpz0LPpMwbWD3BDBFwjGp0AIgF/BFKjvLfDm2sBt5XOd6ZSTvc379wvaLXeGMj1Go22Q="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.13_1539810913296_0.959688924974345"},"_hasShrinkwrap":false},"1.4.14":{"name":"timpla","version":"1.4.14","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.0","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.7.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.4","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"50ce0cf554130f33e7ea3ee24797557c040264e1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.4.14","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-fGOI+VjYjc51+XJX2K6jSXDxTeRdVHTo2qh/U3ZQpuReWhG+8hae/0dQQfBSx8QpO13oAdZu9mMP39EmWF5+nQ==","shasum":"3f806d5efcb434cf062128445a3dc3d106abaa93","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.4.14.tgz","fileCount":81,"unpackedSize":315330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0UYYCRA9TVsSAnZWagAA4xoP/3KZN9Cg4OBzmx8r/BYW\njxvSDtuCQi2xyXvxapmkRXuW+YF4ce5Uz7Gl/BGXKiy7liLc6aLeD9tVSQ48\nt7d/b9nU95ilkWCr5yBlx04ZLgkFglWA6C/wUOqKwrGroSi+qCGp9oj6flWt\nS0zGPsXdwXQsPlwYTc4KRPb5cYtodkIfi/AehEAvUCeQoXtjTAm9bOt+HkXI\nZz+Rp9c4k8ODYfKrrxFRbcyD4WRQTvS7Cks+CSxdHXBOBMn5LXIzwufoUA2n\nAsO6iN3zszZjTXF8hHgdi6as4p+HaKRIVdnGkgYTPSuYsDWLG+UkGa10FmvI\nflcmMaFz1J4pvTXlBcVRZHU0ncth1PdsJrK0X7+9fKLyiYMUeb9i9BDepfYK\nRnVFQkJNULQBoJy6DUyTKLRvSgvsmpzOtPcFhjWZPxP1OC85L5Lm+S4HS3pI\nyNVkD54mutVzAgtyK711L9nApJYMSePaUoKLK0WhMZ1X8if2UfNyxP1wxK/W\nS3jKU4IYiJwifQnxOINobjf4CqrYO3UhNPzvj6OHzD7CFEWcUkROfeUFuvna\nVnlArLB93lcy/NTVKZi6udF23bPxXNJAbIjOs8fSqddn7ANq5JjZoxS290Av\nQ96pfsRn2PU8qqryTW+FUqh2nN93tGxs7OaZX5SusAA6dXlXUjDKLbPv9l+a\nQqp9\r\n=p1+l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTnMoHVR13n7kfPoie653QdYTEX2MRZ1Hwh6t13Q4VfAiAQw7q6vXdBcOnEgr4akDKNf0CLuIGKeOm7dpqwT77aew=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.4.14_1540441623381_0.7629479440128868"},"_hasShrinkwrap":false},"1.5.1-rc1":{"name":"timpla","version":"1.5.1-rc1","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","@types/webpack":"^4.4.17","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","ts-loader":"^5.2.2","tslint":"^5.11.0","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"91b744f95a9c04831d5d05696b8e44ea3fbbaea1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc1","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-MF6T3v7gHjp6STzLlSRfOZ4oY/j5E+oSoutR6c0bjszkiVCunzZzOEBOHKHSdilceRatCnjBstImJizwFqCyGw==","shasum":"7b9eb2165a82b2360de6f899a19441e23e6b39ef","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc1.tgz","fileCount":85,"unpackedSize":397041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1FdSCRA9TVsSAnZWagAAx84P/2fqVglc01YCZgS1jSlI\n3z0pg4Io3IRnBRzw6eKjJg5vN7gw1f9ZRWQbB/zJOvRgST5OosIw/H7wDxj9\nVY/E3irlJPh5c8ZQ7ltKlJHZPbLxYqME0nhrlXDdBLR9ks5N/wnTHDFAomFq\npFIGg6imZrG0h5fZvxMHbURvK7r/oxsApvenVQbg9oUWNMR7UBX5S8Qg7GXj\nmGOVMdECryhh1oFG4DMJGGV7VUqqNQQnxKaau/UQtYINam+zP1XDMyDI8sz7\nhWePngV5mmx+TWddgYDnaPzZ4SryB+W8dvSkWQVK7CwfqACk0Yc9Wgr8QNPd\nwy7+NjtjkX52Rm2ww/3PscnNxzlAUg2DE5Hg+S9oyRXrs04oHgcA3/UwS3eY\nmSEv2fZ9CHjlhCPJSI2DlN3YYxD+gQMZf1wPzf7P/cIa7o+UMqMpqwQjHfkY\nR5x59eDYd9iArjqnothpPU6PoiHzT0GgyuOgULLhv7J7JUwKUde9szLPO/kT\ny6DSZbiJ7NZ+/QVS9vMLErnKp+1hYb52YMJSVIbqvlNE1VK99JcF5sYQe2Sp\nJHyYaI4APGTgMi104/zPUpo22BtfBDNC3CgUFMv0+lfUvgAklhOU8ubuZBhk\nMKaCumwHqntmduY7kIgt2NrI4tEaovGybE4boMY0g17cEqW/ksg/7f20CziV\nUY1P\r\n=4qLg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9a4MHLVv+Bgq/ZrcYS7vchd/wQ00x/3P+LTuhd6pjtAiBOvSqL2gR7bS1b8CZ7sIdhHBCXyomhaB5ZScOmSY6zbw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc1_1540642642196_0.17351606496155703"},"_hasShrinkwrap":false,"deprecated":"Invalid"},"1.5.1-rc2":{"name":"timpla","version":"1.5.1-rc2","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","@types/webpack":"^4.4.17","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","ts-loader":"^5.2.2","tslint":"^5.11.0","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"91b744f95a9c04831d5d05696b8e44ea3fbbaea1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc2","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-3IsOx9HZEsR9e0ekzPc5msh2vHAhYMgZebl6ywzkm0rWxjAsPOJDFJ6lKwqt/fZcVMF2iu05mDV8494o1WJHHw==","shasum":"049176fd8e776340053d4e31842f15e9ed288b4a","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc2.tgz","fileCount":85,"unpackedSize":394194,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1GyFCRA9TVsSAnZWagAAImoP+wTyqjggZzhOKErpuNHq\n6zg8BkV1FDpCty+BPuz4wCJXYt1JmZ2QQUupuYuImphARrEL7xQMGFgiTNZt\narOCm7QB5Z3eb/e7x9FBe+GOE2Ta3qVywJ26vvI3nhD2vs4bh3YakPY/iVl7\n5t+jHBylXK5+tQy5OkFqn7iEDtMfgcFw35CxaIx8AZQ0LDRCVWGUijYdK2lW\n3xBOdGWOqEDZc2mmapjoONwyRV4/EXmeFLjhiBTvTNxxowczwb1oAIfv1G+T\nBKglYOnU6JUI624e27bRzkwfo5HViBCLnEB/mMqlSuxFngkNDC9dZyuI2Uh5\nYBaF2VznUitkGya4MHycUwuKbRq5BztvzcxWps5w23yJggwSN9EuynBS9sKO\nnZp8vzF2osz7xVkl4cuP74FNBkHB/uA4I6Xs3hZoxl0EYT3m19vYcOCYIMXp\nuJRGzIJl60YWIVxDMCMGT4/tnx5J1gCwWp7zbaE7T7wTl2KegLkZEYoDGz6g\ngPJZriC7JgZoHltHWje0GPJ4yF7qqTCpodlJ7nXSqjmsUsiOzJcpvxIzkoBU\nU5bVpIGAAWZJMmtrU/1mVJj1PepjM8UQA1DYe03LleiV3qfUeeKPn/Bjqtmn\n8A6He4qdZ7KmBGG+UK1+kbI9C3PSWvJGeXRklvQlaFvlZ92AfvvqL6K/aLQj\nfrxA\r\n=D+s2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB1GqEIypbctr3gVBvweVuqxbh29O4KuLoQC13xJyhtuAiANG7ufGV8ChzrVZBRgVSi4rCNZBNRwfIV5nRQXjtlt5A=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc2_1540648068845_0.4199239769402079"},"_hasShrinkwrap":false,"deprecated":"Invalid"},"1.5.1-rc3":{"name":"timpla","version":"1.5.1-rc3","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","@types/webpack":"^4.4.17","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","ts-loader":"^5.2.2","tslint":"^5.11.0","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc3.tgz","readme":"# Timpla\nYour auntie's favourite asset bundler for [server-side] web frameworks. Powered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n## Influence\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS via Webpack\n- Compiling sass\n- Bundling svgs via SVGO\n- Copying static fonts, images and other files.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\n## CAQIAs (Commonly asked questions I ask)\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets.\n  </p>\n  <p>\n    If you are working on a single page application or a client-side framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>The added benefit of gulp is that it opens up streams and allows them to pass through to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process.</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Getting started\n\n```sh\nnpm install --save @babel/core timpla\nnpx timpla init # outputs config files\n```\n\n## Configuring the plugin\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page.\n\nFull configuration is available through config/task-config.js and config/path-config.json. These are output to your project's config folder after running `npx timpla init`. task-config.js tasks that Timpla runs. path-config.json is for adjusting the input and output folders that Timpla should watch.\n\nA full list of configurations are [available here](http://bit.ly/2JBiimV)\n\nThe most common usage will be proxying your website through Browsersync. You run your server-sive framework and Timpla together. Full browsersnyc options may be passed under the browserSync option in task-config.js. An example of etting it to work with Django/Rails follows:\n\n```javascript\n// config/task-config.js\n\nmodule.exports = {\n  // The rest of your task-config file...\n  browserSync: {\n    port: 3000,\n    cors: true,\n    proxy: {\n      target: 'http://localhost:8000',\n      proxyReq: [\n        function(proxyReq) {\n          // If you need to set extra headers such as access-control-allow-origin\n          proxyReq.setHeader(\n            'host',\n            pathConfig.host.replace(/^https?:\\/\\//i, '')\n          );\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*');\n        }\n      ]\n    },\n    files: ['templates/**/*'], // watch the template folder\n    open: false, // disable opening browsersync on launch\n    online: false\n  }\n}\n```\n\n## Commands\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla.\n\n```sh\nnpx timpla # starts the dev server / equivalent to calling gulp\nnpx timpla build # builds the site files / equivalent to calling gulp build\nnpx timpla --tasks shows available tasks\nnpx timpla --help show help menu\n```\n\nNote that you can set DEBUG=timpla to display more logging information i.e.\n`DEBUG=1 timpla [your command]`\n\n## Developing the plugin\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n5. master > npm run changelog (needs to be installed first)\n6. master > Commit package.json and CHANGELOG.md files\n7. master > Tag\n8. master > Push\n9. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc3","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-9m7QHFUD6Bfe9uOlLZ4FvXzRhTWdmxm1CENWMZjdWI0vzv221FaWlgDLY5C9TRX9tFTRzRjrj+6wZnWH9O4kQQ==","shasum":"ed6ba32be6e06fabe9909e50499e5f54d473b7f1","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc3.tgz","fileCount":85,"unpackedSize":392089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1G8fCRA9TVsSAnZWagAA9xoP/A9kjhUMTE38FM7DzIvo\nFzfLYpfi6Eur6r8SGchmYAUVZQ4BLN9VFARxfYQvwZKhBgpHpc9ZgEFRknN1\ns1z0F4dMe1wlhlgRBfrCloIACP/yc4WH1UxyeZ6Zif3CWjpK4M61FKHlDzMx\n47XBJ25scQ/J+PLywH/38TmwgnfTlmXViaoEPpxQXqDgw5vZuyOERFZsliBB\npQicXUQWdqLBcm4D3MJpGDqCHgzVzOHEt3y6d0Cy3r+RwdUNuzMrx2BS13wr\n9UxHDO6Tkm0wlp3vHzESu6hsZLz661faqQpQiZQJNs67V8IAQSMfpIKy347G\naa4hoBuynrJCn9pADje3LPvRMnDv3N514wvL5sFYIA/Qu9ljgT/mjV7tLJ7x\nO2veu+QHYFSlvpjHDP46UkIjCI2TTiUrS1kY8STZtwvpK6vtqxXRfr00iG0r\nuA1UmrjOZze5g37VlWj0Y/03Hpnk/wsz8QYR9K2Jdy5RKp7+cWujuxhK3IYX\nVEjQyqXvEHPUGFI7OK+vm7TEHX6MxIDRdslLdQp7pgPGZ3VN0BEDbApFxcT3\nVFFvAt/Nl63FSzAJq2RCTVAf0X4ul7KIf/GxVSV4AJVM8kgk8ZB3cU9HDyv1\nQH9CDVcYLXxgydjdOc2FOf6/bpadEvMWzfL2P/MZkjdu/t2AfBCcXxmJlkCB\ncWDi\r\n=Yr+P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmtrOyhSDYbjWvoh/XHedQkeXXmGCVrPOGqeeRch5ANQIhAP/xrA8Xsp/dZ5itYzE868qJwrdGNyad2Ph028EjBn1Y"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc3_1540648734391_0.15370153412782983"},"_hasShrinkwrap":false,"deprecated":"Invalid"},"1.5.1-rc4":{"name":"timpla","version":"1.5.1-rc4","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","@types/webpack":"^4.4.17","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","ts-loader":"^5.2.2","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3","tslint":"^5.11.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc4.tgz","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc4","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-DgdMJdw+RS8tk6CM4HvPqTJ4rgI/MJUd83fkh2da/E2T+2OMQZ0jM5ye3xLHrxy1v28o4i+1DlG1XArW/MQWGw==","shasum":"925869351f34a16229d98ce1cdacf9991e2a160d","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc4.tgz","fileCount":88,"unpackedSize":475382,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1IYTCRA9TVsSAnZWagAAkuwP/1XzIyKXlDnkpKudZVOW\n2X8TDf7XjFWh3j59nFbXm5pyOS1UTP2jwgIrL8WXnRCUkr10z6C8AdXIJSpW\nPLXPBm9uMq7Z6kPqsi909RyuSNgCcSVRuProjLohnngEVBus+3tbRXwg2oX7\nKU5r78P5BrHhJK3YpDNZ1HYhqqUgPPxFTlkHHiCVgmb1u1dLUNYjMGSpY64N\nMpWsWhjqW9ry97SJnQDcoAL5VXC641Gs8yOuQ4d9+1Het1bTBf3/nMdUGokv\n9r2h3Rg3YU3IYQtpmoq07g1uCQUcHSkRulHvI+N8C0k0aj9vA5XQBTRljxms\nDxT/VeCsnANw9gCUm5yZvEVaktHUwDc2XYGxqlKrSBCVw5e36A1Laz6qHeZi\n7yaxY1GjQpYqofWu/NdqREZDve/N9RAp9KsMaRc+fg/w+MdxLse+Sofoc1h6\nLumDhpJizFD3GrpNStxPNrGc6MlMSdm2pU0dl9IW/iubmod4+v55/suEXNe5\nCFUaDQo4/JxrqWKVXBw/Q4OBiNG5p0C9VByeGK1xnGZDu68sN1hLnX2RDT7U\neIBg7a2loO6m9LcEY3L4ZjKLkWkDLrnhmZXCqxfMGEwkhNhRkLMdSzeELr1Y\nXoTvEHTU18D+gfsiKH/8f53zARtKVELPxhgqDkYu09PXa6FOMHYcAD1XKAyt\neqYD\r\n=NAnW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHx2SqqAxQJHOO0h7DKauoxc+QMrJ0TqhUwlk6uOLfSFAiAkd9jGQKzrHLxwEBI+XutG9HXCBkJAMJr06MF9/guG8w=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc4_1540654610630_0.7820130400764578"},"_hasShrinkwrap":false,"deprecated":"Invalid"},"1.5.1-rc5":{"name":"timpla","version":"1.5.1-rc5","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production gulp --gulpfile dev.gulpfile.js --require @babel/register build","test":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","@types/webpack":"^4.4.17","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","fs-extra":"^7.0.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","through2":"^2.0.3","ts-loader":"^5.2.2","uglifyjs-webpack-plugin":"^2.0.1","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3","tslint":"^5.11.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc5.tgz","readme":"# Timpla\nYour auntie's favourite asset bundler for [server-side] web frameworks. Powered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n## Influence\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS via Webpack\n- Compiling sass\n- Bundling svgs via SVGO\n- Copying static fonts, images and other files.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\n## CAQIAs (Commonly asked questions I ask)\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets.\n  </p>\n  <p>\n    If you are working on a single page application or a client-side framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>The added benefit of gulp is that it opens up streams and allows them to pass through to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process.</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Getting started\n\n```sh\nnpm install --save @babel/core timpla\nnpx timpla init # outputs config files\n```\n\n## Configuring the plugin\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page.\n\nFull configuration is available through config/task-config.js and config/path-config.json. These are output to your project's config folder after running `npx timpla init`. task-config.js tasks that Timpla runs. path-config.json is for adjusting the input and output folders that Timpla should watch.\n\nA full list of configurations are [available here](http://bit.ly/2JBiimV)\n\nThe most common usage will be proxying your website through Browsersync. You run your server-sive framework and Timpla together. Full browsersnyc options may be passed under the browserSync option in task-config.js. An example of etting it to work with Django/Rails follows:\n\n```javascript\n// config/task-config.js\n\nmodule.exports = {\n  // The rest of your task-config file...\n  browserSync: {\n    port: 3000,\n    cors: true,\n    proxy: {\n      target: 'http://localhost:8000',\n      proxyReq: [\n        function(proxyReq) {\n          // If you need to set extra headers such as access-control-allow-origin\n          proxyReq.setHeader(\n            'host',\n            pathConfig.host.replace(/^https?:\\/\\//i, '')\n          );\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*');\n        }\n      ]\n    },\n    files: ['templates/**/*'], // watch the template folder\n    open: false, // disable opening browsersync on launch\n    online: false\n  }\n}\n```\n\n## Commands\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla.\n\n```sh\nnpx timpla # starts the dev server / equivalent to calling gulp\nnpx timpla build # builds the site files / equivalent to calling gulp build\nnpx timpla --tasks shows available tasks\nnpx timpla --help show help menu\n```\n\nNote that you can set DEBUG=timpla to display more logging information i.e.\n`DEBUG=1 timpla [your command]`\n\n## Developing the plugin\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n5. master > npm run changelog (needs to be installed first)\n6. master > Commit package.json and CHANGELOG.md files\n7. master > Tag\n8. master > Push\n9. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc5","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-U1kK/k8aIqa8kCcRKYqNiLl6UlljZjjYvznDRFfQE5n5J2l3kuj9LrpLIKGH4ULUU0geCULhjqlhk91d3TcOnw==","shasum":"8ca1c35b4d56c409827ad7b7ab907b1a513f69dc","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc5.tgz","fileCount":84,"unpackedSize":474955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1WqnCRA9TVsSAnZWagAATZUP/izvsvaFCdteHXsdBf83\nH9DC6jWQsqzua8vBG0mBtOaGA5qMctTltIbzzM/XL3mZAJIC611Bx7SWqrz9\nXfoj6U3fdDsuJA66r41yWgRmcJ1qGSaiZyMToDCf9WAAC8J6Mga71OBNtgz9\nYFFi6HUzNPpniN5VH7Ex7x/cUGJl4fYHEVpGapke98nj38x1UUfoznLzZQD6\n3zsvrOhWRn9TuC9JXF+p/QVTyX3rIgGA6Q9Ld682GzBfD1iy/r5dNO7ngCxl\nYPEdQebTxswrNtMLXzgmoCm+5akJPUAaLeNKqjXO6ig9ZqE/kO37LaYcQt5K\n5j9yn12Vyi9m1bLd0TU6UwR6JuSI35AKCGX653V8VUA8YgU5/esl3X0sDqg6\nZiSZ4QSZk0NAh5T4lKmVwNRQdIr7O9KuSx2psXhXiG0/Aq8FRe52KO2cl7t0\nqhrn1+mTfQnB3b4nYT2z/wMu8xU7nq1WJ5G3jhfIRQIW5bdWa3KkcaPjGJ3b\ni6STtFBKjbDsL0t3eQTQaS/feaN++3q43vH15xecv6zfHHkfVi177FN1Hr4y\nVN5zdbxvbPyjVR3e+pwJmCjc9LMRbMDuX5rm50Q6wQyyqfTWPxRce4aJwtxX\nM8Yoqf+W2sunVicKnZHzS4d0biJVJnGkiQ1fxda64rZ1Eba+VLbFZEjgjaGI\nf+Zl\r\n=1bvx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC5pz9F+vGV6FKeqMb9oBUclQSqFPOvXuC7es9BIQ40dAiEAj/kI3C3NvDFSaMLy7+FpEqBgyAZWWmQz+uti7QQornA="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc5_1540713126861_0.5230917822647332"},"_hasShrinkwrap":false},"1.5.1-rc6":{"name":"timpla","version":"1.5.1-rc6","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/core":"^7.1.2","@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.3"},"peerDependencies":{"typescript":"^3.1.3","tslint":"^5.11.0","react":"^16.6.0","react-dom":"^16.6.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc6.tgz","readme":"# Timpla\nYour auntie's favourite asset bundler for [server-side] web frameworks. Powered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n## Influence\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS via Webpack\n- Compiling sass\n- Bundling svgs via SVGO\n- Copying static fonts, images and other files.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\n## CAQIAs (Commonly asked questions I ask)\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets.\n  </p>\n  <p>\n    If you are working on a single page application or a client-side framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>The added benefit of gulp is that it opens up streams and allows them to pass through to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process.</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Getting started\n\n```sh\nnpm install --save @babel/core timpla\nnpx timpla init # outputs config files\n```\n\n## Configuring the plugin\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page.\n\nFull configuration is available through config/task-config.js and config/path-config.json. These are output to your project's config folder after running `npx timpla init`. task-config.js tasks that Timpla runs. path-config.json is for adjusting the input and output folders that Timpla should watch.\n\nA full list of configurations are [available here](http://bit.ly/2JBiimV)\n\nThe most common usage will be proxying your website through Browsersync. You run your server-sive framework and Timpla together. Full browsersnyc options may be passed under the browserSync option in task-config.js. An example of etting it to work with Django/Rails follows:\n\n```javascript\n// config/task-config.js\n\nmodule.exports = {\n  // The rest of your task-config file...\n  browserSync: {\n    port: 3000,\n    cors: true,\n    proxy: {\n      target: 'http://localhost:8000',\n      proxyReq: [\n        function(proxyReq) {\n          // If you need to set extra headers such as access-control-allow-origin\n          proxyReq.setHeader(\n            'host',\n            pathConfig.host.replace(/^https?:\\/\\//i, '')\n          );\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*');\n        }\n      ]\n    },\n    files: ['templates/**/*'], // watch the template folder\n    open: false, // disable opening browsersync on launch\n    online: false\n  }\n}\n```\n\n## Commands\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla.\n\n```sh\nnpx timpla # starts the dev server / equivalent to calling gulp\nnpx timpla build # builds the site files / equivalent to calling gulp build\nnpx timpla --tasks shows available tasks\nnpx timpla --help show help menu\n```\n\nNote that you can set DEBUG=timpla to display more logging information i.e.\n`DEBUG=1 timpla [your command]`\n\n## Developing the plugin\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n5. master > npm run changelog (needs to be installed first)\n6. master > Commit package.json and CHANGELOG.md files\n7. master > Tag\n8. master > Push\n9. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc6","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-9uV3iIDSaPsA3UAY8NqqcQg10q2l8B7oC6GzWxDLtA3+qjQEmVcqxbUbsZCPQgXv9ef0cSpguJim1vQOnDPblA==","shasum":"46c50c67ac475c65291ba8d02a8685ac5b6a50b0","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc6.tgz","fileCount":77,"unpackedSize":141098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1mPJCRA9TVsSAnZWagAAcK8QAIX7qswDdotPc6wSU6Th\nN0CuxP11omYU7vM0ridyNF9Cde+pIRhpzJerfjf1Uqe1IlQQDKYPTgrzDGMR\nV50D3FcKzUAqf2/ybrIIlvPWPy23IkuZUmO1QifahE1PUY/b8GldZtS37Ota\n+Ni6doboYxI3aXnZtiYnyybH4YBbwR/UCbPz2ecZmB+DoRnAo3ncwhKx+VuH\nT/FvwC9EvI2e17Oq1/LbVanLJu9xTHB5lutgPeOR5PDNGWKBT+VSE/w7M0fk\nfE4Bo2aUV/Kt4FjiqH6CC9Q3MEXuIEzYs5VjgTygiuTaIrpXY9sh1o4DN0jB\nnXLluJFp9Hx6wu+1OkGMtDdtb/TbTnDEz2jwLSYgtom5Zwmk6L4tpVa7Wc/A\nvGXrOPbjb2lsb5YkspTx7bQyDK/YjlguxI1Kim6dBj1ORt+jHlkp96xQzThg\n4hXaTT5DA/IXW2DbVIIi3S5dRE4NJg6HtX8qbV4U2SQKIjJULxBpSvyBEYnj\n5bRj3aCDv5cTe4w07lcplcdp8B0dRgmuoScncNXOnPDxiZ1ygnFfyOkozwhL\nAqxO+pfCF93NBEQMyPiyIZid8AFYOcb90A4lb1Dfkh+0TtB9Np5OGuve8oPq\nwJ8QS1ft3HRcwTlnfMt+rW5jGjFksxcdkc57SiEzdjfTpf3j2CWJx0VfUZdA\nleB2\r\n=N6gl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSzoOIJYz9/CnpIx8Ge4MHLlunGhe4Ffy7KbgAL36YqAiEAwxxRhX3osYGzEcr7r9kZM5OBywlteyX76+TU4/FEj+Y="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc6_1540776905087_0.19590065938243062"},"_hasShrinkwrap":false},"1.5.1-rc7":{"name":"timpla","version":"1.5.1-rc7","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.13","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.3"},"peerDependencies":{"@babel/core":"^7.1.2","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","typescript":"^3.1.3","tslint":"^5.11.0","react":"^16.6.0","react-dom":"^16.6.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc7.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Powered by gulp 4 & webpack 4. Now supports typescript and react.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n---\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling Typescript and TSLint support](#enabling-typescript-and-tslint-support)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel-loader options](#overriding-babel-loader-options)\n- [Enabling TypeScript support](#enabling-typescript-support)\n  - [Typescript - under the hood](#typescript---under-the-hood)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n---\n\n## Getting started\n\n### Installation\n\n```sh\n# Js-only\nnpm i --save @babel/core timpla\n\n# Js-only with React support\nnpm i --save timpla @babel/core react react-dom\n\n# With Typescript support\nnpm i --save timpla @babel/core typescript tslint\n\n# With Typescript & React support\nnpm i --save timpla @babel/core typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# outputs config files (timpla-config.js, tslint.json, tsconfig.json) and a starter src directory\nnpx timpla init\n```\n\n### Enabling Typescript and TSLint support\n\nPlease create `tsconfig.json` and `tslint.json` based on your requirements. Removing them from the root of your project will disable the Typescript compiler.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. A full list of commands are shown below:\n\n```sh\n# If timpla is run without any commands, starts the development server\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\"\n  }\n}\n```\n\n### Debugging\n\nVerbose logs can be enabled by setting the env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n---\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGO\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n---\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nMost tasks can be configured by specifying an alternate task. To keep Timpla light, no pre-processing is done to images, svgs etc. It is left to the user to add their preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. This is output to your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Javascript / typescript / webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig(webpackConfig, env, webpack) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, files are revved(hashed filenames) and a json manifest file is output\n    // You will need to implement your own mapper for this in order to pick up the hashed files.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // Initialize tasks are run before build and development tasks\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(gulp, env, TIMPLA_CONFIG) {},\n    development: {\n      prebuild(gulp, TIMPLA_CONFIG) {},\n      postbuild(gulp, TIMPLA_CONFIG) {},\n    },\n    production: {\n      prebuild(gulp, TIMPLA_CONFIG) {},\n      postbuild(gulp, TIMPLA_CONFIG) {},\n    },\n  },\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel-loader options\n\nPlease use customizeWebpackConfig to change the babel loader options. Project .babelrc / .babel.js files will be ignored.\n\n---\n\n## Enabling TypeScript support\n\nTo add support for typescript, add a `tsconfig.json` to your project root.\n\nTo add support for TSLint, add a `tslint.json` file in the root as well.\n\n### Typescript - under the hood\n\nThe tsconfig is passed to both [TS Loader](https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin). To improve compilation times, we use the fork ts checker webpack plugin to create a separate linting process for typescript. Any linting errors won't block the webpack compilation process, but will eventually show up either in the console or as an overlay on the web page.\n\n---\n\n## Linting files\n\nApart from tslint, sass and js files are not linted in Webpack. This is done to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n---\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins:\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consisten\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) tslint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides visual report of js bundle sizes\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts configure function:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig: (webpackConfig, env, webpack) => {\n      const modifiedConfig = { ...webpackConfig }\n      // modify the config to how you want it\n\n      // or even check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even remove unwanted rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules = modifiedConfig.module.rules.filter(yourFilterFunction)\n\n      // with webpack merge plugin, you can even do a merge(webpackConfig, yourOverrides)\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n---\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve a html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks will have your site running on a localhost (or locally configured server). Timpla will be able to mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-sive framework and Timpla in a separate process. Full browsersnyc options may be passed to the browserSync option in timpla-config.js. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Set the port that the site will serve from\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n---\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>The added benefit of gulp is that it opens up streams and allows them to pass through to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through push worker / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n---\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n---\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc7","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-GZUMiygF/4Vjk7us5lPEUmLEo/82yvi1ysDyZhhCQVefjKNYvQ4qt540uc4NFvGoElpj9uaeGvw0U7dG2LQ6iQ==","shasum":"04545062e71ddc29f3c1e3122ee97d00ac1b1748","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc7.tgz","fileCount":56,"unpackedSize":116072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1rK9CRA9TVsSAnZWagAA1SYP/jOIMjcQvg8HE/ehXCeL\nGN/+LMxtl7+B9tU422LlAHvoZoC4ou98VQsTkM8UX4nZznmbuElaguQOaGzD\nTtU0ICBneUTMxTKRqjDFgQOqZUgDPANOji42nz+p56FnLHIKnXNZEN/47YYw\nKqOZBY7CY47zoXJadZFnpq0knej4vkU2P8dqe5N++B46ok47ajf+yHwDn4mB\nU2indOp+EtqhrO9vaU5yWkPedi1xf795k0bW2R1biGi3LWcpT9AuBdJqu9gh\nXc8gYf+e3jEcvDTKB7m+h4R6EWkIinB0kk/WagGcqPbHrtgXupPslfq6zJAH\nCCmsPkQZn8x85qWBFxoTOcFOpAklvexxkZ41slggLzs0Hlc7GExFVxQDkx/5\n9r+LCXdyOB4UrMKepdjsOnTlDanMdEtancfuCWxDpaeKj8IEUmMC0cMYOIx+\n78BPF4wxZipbiSjCcllWyfxl7MD37B2WqsPiE6PznQsiqsAVUliGEi8j1bFQ\nHm1Or68qDV7phGsyrWTa1QrFRoecc/qJhAKukXb/FJzRhNDhFR7zzy7QEb7s\njnO64GFg9kScME8cYFfZMllAapfESL3Z8NYYgkvjHVTysFqG17LXNNn2A8sp\nQmTOq7n7s8u4mHzqlQGohD0zlUFyNodXGvo35+447Q6P84CIUFWz9n96XHE1\nwkgF\r\n=ufiO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCi/GH5NYRmDOTJ6NgH/8aCeQCBfR1nZ1FHuPnIqENBQwIgCxWdW9dXeAkE1TjB7fvU/HUwlJ5yJ8Tj4vqXlMLDL3Y="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc7_1540797117001_0.06335638947405542"},"_hasShrinkwrap":false},"1.5.1-rc8":{"name":"timpla","version":"1.5.1-rc8","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.3"},"peerDependencies":{"@babel/core":"^7.1.2","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","typescript":"^3.1.3","tslint":"^5.11.0","react":"^16.6.0","react-dom":"^16.6.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc8.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Supports typescript and react.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling Typescript and TSLint support](#enabling-typescript-and-tslint-support)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel-loader options](#overriding-babel-loader-options)\n- [Enabling TypeScript support](#enabling-typescript-support)\n  - [Typescript - under the hood](#typescript---under-the-hood)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\n# Js-only\nnpm i --save @babel/core timpla\n\n# Js-only with React support\nnpm i --save timpla @babel/core react react-dom\n\n# With Typescript support\nnpm i --save timpla @babel/core typescript tslint\n\n# With Typescript & React support\nnpm i --save timpla @babel/core typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# outputs config files (timpla-config.js, tslint.json, tsconfig.json) and a starter src directory\nnpx timpla init\n```\n\n### Enabling Typescript and TSLint support\n\nPlease create `tsconfig.json` and `tslint.json` based on your requirements. Removing them from the root of your project will disable the Typescript compiler.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. A full list of commands are shown below:\n\n```sh\n# If timpla is run without any commands, starts the development server\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nVerbose logs can be enabled by setting the env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGO\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nMost tasks can be configured by specifying an alternate task. To keep Timpla light, no pre-processing is done to images, svgs etc. It is left to the user to add their preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. This is output to your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(gulp, env, TIMPLA_CONFIG) {},\n  },\n\n  // Javascript / typescript / webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig(webpackConfig, env, webpack) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, files are revved(hashed filenames) and a json manifest file is output\n    // You will need to implement your own mapper for this in order to pick up the hashed files.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // Initialize tasks are run before build and development tasks\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(gulp, env, TIMPLA_CONFIG) {},\n    development: {\n      prebuild(gulp, TIMPLA_CONFIG) {},\n      postbuild(gulp, TIMPLA_CONFIG) {},\n    },\n    production: {\n      prebuild(gulp, TIMPLA_CONFIG) {},\n      postbuild(gulp, TIMPLA_CONFIG) {},\n    },\n  },\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel-loader options\n\nPlease use customizeWebpackConfig to change the babel loader options. Project .babelrc / .babel.js files will be ignored.\n\n## Enabling TypeScript support\n\nTo add support for typescript, add a `tsconfig.json` to your project root.\n\nTo add support for TSLint, add a `tslint.json` file in the root as well.\n\n### Typescript - under the hood\n\nThe tsconfig is passed to both [TS Loader](https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin). To improve compilation times, we use the fork ts checker webpack plugin to create a separate linting process for typescript. Any linting errors won't block the webpack compilation process, but will eventually show up either in the console or as an overlay on the web page.\n\n## Linting files\n\nApart from tslint, sass and js files are not linted in Webpack. This is done to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins:\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consisten\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) tslint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides visual report of js bundle sizes\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts configure function:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig: (webpackConfig, env, webpack) => {\n      const modifiedConfig = { ...webpackConfig }\n      // modify the config to how you want it\n\n      // or even check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even remove unwanted rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules = modifiedConfig.module.rules.filter(yourFilterFunction)\n\n      // with webpack merge plugin, you can even do a merge(webpackConfig, yourOverrides)\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve a html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks will have your site running on a localhost (or locally configured server). Timpla will be able to mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-sive framework and Timpla in a separate process. Full browsersnyc options may be passed to the browserSync option in timpla-config.js. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Set the port that the site will serve from\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>The added benefit of gulp is that it opens up streams and allows them to pass through to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through push worker / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc8","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-LXkJ+H8gAVamFl+1AQ+VWo/54ilyMxYP2vh1ID11F/MfBX4Udbfn21eEDZ/7x+t12+l4k3DiN/kXqG521n0PFg==","shasum":"408a6170e4c131eb954b7525c9e8ea616da60ec9","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc8.tgz","fileCount":56,"unpackedSize":115917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1rq0CRA9TVsSAnZWagAA9WUP/3gF4LizsY09HJENFldr\nGg+oFZc42LYy/SeegSm6OUP0a2jsjRIHkFZt0wZjOI4vU3fkQoJ7Zcx72Awt\nWYB8ucObTojP2GgRWPZbPubcsv4tz5H5e2dVGaPmyXCJbJpwJJsdqru9Dwk4\nzZtmsPuQhbFFPvhlNSkbNUY18nrwTIoqBOGmNbz4tMdWPCTpHI8eAUHLfF2W\nWnBkMVoDHJEY0ohRaZ57y6Y9VkOTJ1/kQJ9heo3Xa+AimJlPuk0Moz07v7IX\ndKkI+tVeCTznqmEFBBqg8N0tDJdANfFE3wdC2VGgsYWKU+xGQJdhmj8tdI0z\nJebFm1irRNITdV3EVN6pW4GYOrzBJho5V+oErn8eEx/kTBN7LCGe+nbjqpi0\nnppZ1qKZ2FAmw9PIS9lG5Ylltxr0mHrN3744YXSdieTei1c2P/rlGpJAUjm4\nsFtHJDKMeiLApYCzwISKhpXFtOTFgeOFNdo10MhhnE/YEyjzZFwWnDml9mEj\nfud2XhCBjTaxzypkZ2q1cXzKqiHretWuzsRzvyBesNY5gu1jWYi/swrZWy51\nzIZtgAR6l4qJqWk1qYhA+OdeOmXyviHO+YVTQIMOB451i4vWWWVeeAXHUczV\nKzJ5hGk+XCn0t9kv1I4H1rT4ayNodCLLGixJdR7uPYPpgnMNtfHi06x0k732\n6ctz\r\n=bONy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCV0ZUEE8py1lb6U9nSIByeNHvNMAa9PtEyzizmDZtmMgIhANcEkxJwCPMyMwkFxplrzAaCaiujzLWHnTv8oI3Ablwp"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc8_1540799155521_0.8355665476723033"},"_hasShrinkwrap":false},"1.5.1-rc9":{"name":"timpla","version":"1.5.1-rc9","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.js":["eslint --fix","prettier --write","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^7.3.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.3"},"peerDependencies":{"@babel/polyfill":"^7.0.0","@babel/core":"^7.1.2","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","typescript":"^3.1.3","tslint":"^5.11.0","react":"^16.6.0","react-dom":"^16.6.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc9.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Comes with first-class ESNext / Typscript and React support.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling JS-only mode](#enabling-js-only-mode)\n  - [Enabling Typescript and TSLint support](#enabling-typescript-and-tslint-support)\n    - [Typescript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\nnpm i --save timpla @babel/core @babel/polyfill typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .prettierrc\n#  .gitignore\n#  tsconfig.json\n#  tslint.json\n#  config/timpla-config.js\nnpx timpla init\n```\n\n### Enabling JS-only mode\n\nDue to the way ES is bundled, you will still need to install as per instructions above. However, removing `tsconfig.json` and `tslint.json` disables typescript support (disabled the Webpack plugin/rule). You may opt-out of installing any @types files.\n\nIf somehow, you need the tsconfig to be in the same folder, but disable the webpack process, please set the javascripts.disableTypescript flag.\n\n### Enabling Typescript and TSLint support\n\nOut-of-the-box, typescript and tslint should just work. `npx timpla init` will create base `tsconfig.json` and `tslint.json` files for you.\n\nFor typescript to work, a `tsconfig.json` needs to be in your project root.\n\nFor TSLint to work, a `tslint.json` file should be in the root as well.\n\n#### Typescript - under the hood\n\nThe tsconfig is passed to both [TS Loader](https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin). To improve compilation times, we use the fork ts checker webpack plugin to create a separate linting process for typescript. Any linting errors won't block the webpack compilation process, but will eventually show up either in the console or as an overlay on the web page.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. A full list of commands are shown below:\n\n```sh\n# If timpla is run without any commands, starts the development server\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nVerbose logs can be enabled by setting the env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- Typescript (can be disabled)\n- Tslint (can be disabled)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nMost tasks can be configured by specifying an alternate task. To keep Timpla light, no pre-processing is done to images, svgs etc. It is left to the user to add their preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. This is output to your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHlper) {},\n  },\n\n  // Javascript / typescript / webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // Setting this to true will always disable Typescript\n    disableTypeScript: false,\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig(webpackConfig, env, webpack) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, files are revved(hashed filenames) and a json manifest file is output\n    // You will need to implement your own mapper for this in order to pick up the hashed files.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(timplaConfig) {},\n    development: {\n      prebuild(timplaConfig) {},\n      postbuild(timplaConfig) {},\n    },\n    production: {\n      prebuild(timplaConfig) {},\n      postbuild(timplaConfig) {},\n    },\n  },\n}\n```\n\n### Overriding tasks\n\nTasks listed with the alternate option above may be overriden. Provide a function and Timpla will feed it a timplaHelper object. You may use these to overwrite the tasks. You will need to supply a higher order function (a function returning a function) that signals gulp completion.\n\nThere are two ways to signal gulp completion: callback and by returning a gulp stream.\n\nThe watch task will still continue watching the extensions configs that were provided.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      // You may use the following from the Timpla Helper\n      browserSync, // Access the browerSync instance\n      gulp, // use this to create new tasks\n      projectDestPath, // a helper that will return a resolved src path, accepts an arbitrary amount of string arguments and concatanates them\n      projectSrcPath, // a helper that will return a resolved dest path, accepts an arbitrary amount of string arguments and concatanates them\n      timplaConfig, // the full timplaConfig\n      timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be done to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of extensions to watch. If an empty array is provided, Timpla watches all of the files in the tasks' dest folder. This holds true for html - to give your more flexibility with watching entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nTimpla will extend babel-loader from your root's .babelrc.js file (via babel-loader > options > extends). I highly recommend using a js file over an rc file so that you can modify it more like a javascript file (e.g. access env constants). Please use customizeWebpackConfig for complete customisation babel-loader (e.g. setting the extends to another file).\n\nSample babelrc.js file\n\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        useBuiltIns: 'usage',\n        debug,\n      },\n    ],\n  ],\n}\n```\n\n## Linting files\n\nApart from tslint, sass and js files are not linted in Webpack. This is done to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consisten\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) tslint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides visual report of js bundle sizes\n```\n\nAnd the following loaders:\n\n```\nurl-loader\nfile-loader\nhot-loader\nbabel-loader\nts-loader\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts configure function:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig: (webpackConfig, env, webpack) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve a html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks will have your site running on a localhost (or locally configured server). Timpla will be able to mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-sive framework and Timpla in a separate process. Full browsersync options may be passed to the browserSync option in timpla-config.js. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Set the port that the site will serve from\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc9","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Tx85Cusnj0lVt04FcFue8ccE1SwUb65Jkd0sCxOwDPoHy6Q9QRiHoVwH+NzVGH/US8IOOszr+evBMkFKjQ9TKg==","shasum":"e44caf9933c07c0bf5e834555659b3a68b4a6927","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc9.tgz","fileCount":56,"unpackedSize":121366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2A+XCRA9TVsSAnZWagAAerUQAJHMLLVBOOv8Hjh1mN+j\nt3N1OlYKlZcAJfb0I8ZMXLs7NIwVsaRF9mnVd/ewefH/zdHWYs6hnXNRbVCC\npMZ6aAGbvNSIz5MJT53T5t6UKWwGSIznw9JnHNKA5fDdqHqpNtvf8QGPbW10\nnMdDDAdffQOREIYfxtffhD41H1155DiXRokfnLZfqdMx5dkMFA8h5UgHu47e\nTX+f0s9PBP2Wy59D4ooVQaZHgaakc+zZPo+pX6ReufETpf5IsSPaw1unvqeH\n1C6FU8ERNUeL3J1gDhACHWM97j/I0OCzZt3U+ZLkUvb9CimaOJzJFls8z6Qq\nogPqHSv2QaX6T1EksKWnHZY3aB8QrabBnmdrzSu1C3lwrGdAUYVOuYaHhhwH\n6lprs6cn6OjitxTkRqpIrPZmQ4xWNXh2Tl59efuEmjkjjE+f3HFAoTkLdQI8\nI506IcDo64hWluu2pgCy7JnOpruBC7ROdnuHMYNXwZX0U7C94Xb+m53nZ+HD\nKTh2psI0tRAF99+n85/1lgd6yRM9ryugMQY9xcVS8f8uJaU/ALV/pbjuRcn3\ng+iuha26ef5PtOeP5HstirynghlrPG4L1l251sId1X8OLHu7rBTVFr3wQ5kq\npGPmQRt2GR3PUk1zReuThwXT192pfW4O2542sZRtSHgLGM4wRjYWSMnE4Rcp\ndOJ6\r\n=9gN8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO7ZKRACb27jCpzPWAHQaKhRd4RYVUuuZfK6QIb1y3uAIhAPPPbcHVSTB6M3lvmuB1QcyIK+WwWrvjPxgTxSyZi2vp"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc9_1540886422961_0.2571893465320165"},"_hasShrinkwrap":false},"1.5.1-rc10":{"name":"timpla","version":"1.5.1-rc10","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.4","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^8.0.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.4"},"peerDependencies":{"@babel/polyfill":"*","@babel/core":"*","@types/react":"*","@types/react-dom":"*","typescript":"*","tslint":"*","react":"*","react-dom":"*"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc10.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Comes with first-class ESNext / TypeScript and React support.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling JS-only mode](#enabling-js-only-mode)\n  - [Enabling TypeScript and TSLint support](#enabling-typescript-and-tslint-support)\n    - [TypeScript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\nnpm i --save timpla @babel/core @babel/polyfill typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .prettierrc\n#  .gitignore\n#  tsconfig.json\n#  tslint.json\n#  config/timpla-config.js\nnpx timpla init\n```\n\n### Enabling JS-only mode\n\nPlease follow the same installation instructions above. After the initial install, remove `tsconfig.json` and `tslint.json` to disable TypeScript support. Doing so removes the webpack plugins that parse and lint your TypeScript files. You may also remove the @types dependencies from packages.json.\n\nIf you require a tsconfig to be in the same folder but still require to disable TypeScript in Timpla, please set the javascripts.disableTypeScript flag to false.\n\n### Enabling TypeScript and TSLint support\n\nOut-of-the-box, TypeScript and TSLint should work. Timpla creates `tsconfig.json` and `tslint.json` files when you run `npx timpla init`.\n\nFor TypeScript to work, a `tsconfig.json` needs to be in your project root.\n\nFor TSLint to work, a `tslint.json` file should be in the root as well.\n\n#### TypeScript - under the hood\n\nTimpla uses (https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Pluginto create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- TypeScript (can be disabled)\n- TSLint (can be disabled)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. You'll get a copy in your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // Setting this to true will always disable TypeScript\n    disableTypeScript: false,\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // Implement your custom mapper for your framework to pick up the hashed files.\n    rev: false,\n    // Set this to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(timplaHelper) {},\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n```\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nTimpla will extend babel-loader from your root's .babelrc.js file (via babel-loader > options > extends). I highly recommend using a js file over an rc file so that you can modify it more like a javascript file (e.g. access env constants). Please use customizeWebpackConfig for complete customisation babel-loader (e.g. setting the extends to another file).\n\nSample babelrc.js file\n\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        useBuiltIns: 'usage',\n        debug,\n      },\n    ],\n  ],\n}\n```\n\n## Linting files\n\nApart from TSLint, sass and js files are not linted in Webpack. We do this to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consistent\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nhot-loader\nbabel-loader\nts-loader\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts a function that returns a configuration object:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in timpla-config.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc10","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-S8ZqKxvmSCur13pJJZ+c4chKMfRh85DAzmn8DA9tEdVEcjHEAxMXEo5m3RlsLjkKa/PlvvpmgA4/Tl8O/s1uDA==","shasum":"08841326723aa84c126caab197cefc1513498139","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc10.tgz","fileCount":49,"unpackedSize":107364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2TUqCRA9TVsSAnZWagAAcg0P/Rz6OU0i5P004WosDFjJ\nNhyyjC9nVx9LrJowpEhD7qsrkmuayfYk1RDJl1J+cw2v1lKnP9h/D/o2ftRq\nYK2bDX3LPxGzDv8/66dHh9HZ+lDr1BxtcCyy1vailLGWvFI8DHr7QDwZevQg\nkj7nqK4YVvOxhkco76pev9c5EN1qBiRuY7nkNJvcbhPqOrf4Ixss/LlX+H0W\nB8pSGAzUxt3G4fqmQgrPH8ORwThlHnI8sRDDU8ju07oSMuY4pFNDLneLtG4l\nfdUK6F+S/96CbldffLiu30I/9i10i3uzmRbiCVEAYzGJWDjiIAjMgd9BjLxs\ngz/TNENQfgVIwvzS8Kk62XsEM6QPSObKYRBsqxhhZGhI4AiiEiDvo73lVe8v\nWtA1derUuyMIubtqj9CG1Acx3qs/6cOdqr8YVxNg0G/adpNwoIaHW3ax4YsM\nXYfGlInscXhmciH6YIzVfc99gAdl7MDB3k6IbPG2yvEcfJ/XbGIPrBOUmkak\n0WSBSPJ2mbtgjCrx1pQN1ZW+RjKsrXL9CsQNeCyZFfjpTwjfppNAlOr4lzg5\nKEJqF7Xf5vOJVg3E0gStJGEyr/PjzNwLjhem7SycD23MvuOXDFiWCRa7oGXI\nUvvLemUwXYVS8ZvY1IQJMk2pXaalAuasE3MAnfI7u6wo7zQM2qd3SXdhEhSO\nchWj\r\n=Ij4i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHsixEdROXQ0zuUQT/fcrv6lLIdO6oC0HII5Mpw6wafjAiBIs6pQjaAuJ6r4/E4pnpL6X0T1su9aGV5VzA2zxVb5ww=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc10_1540961577605_0.2901101834868305"},"_hasShrinkwrap":false},"1.5.1-rc11":{"name":"timpla","version":"1.5.1-rc11","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.2.2","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.4","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^8.0.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.4"},"peerDependencies":{"@babel/polyfill":"*","@babel/core":"*","@types/react":"*","@types/react-dom":"*","typescript":"*","tslint":"*","react":"*","react-dom":"*"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc11.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Comes with first-class ESNext / TypeScript and React support.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling JS-only mode](#enabling-js-only-mode)\n  - [Enabling TypeScript and TSLint support](#enabling-typescript-and-tslint-support)\n    - [TypeScript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\nnpm i --save timpla @babel/core @babel/polyfill typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .prettierrc\n#  .gitignore\n#  tsconfig.json\n#  tslint.json\n#  config/timpla-config.js\nnpx timpla init\n```\n\n### Enabling JS-only mode\n\nPlease follow the same installation instructions above. After the initial install, remove `tsconfig.json` and `tslint.json` to disable TypeScript support. Doing so removes the webpack plugins that parse and lint your TypeScript files. You may also remove the @types dependencies from packages.json.\n\nIf you require a tsconfig to be in the same folder but still require to disable TypeScript in Timpla, please set the javascripts.disableTypeScript flag to false.\n\n### Enabling TypeScript and TSLint support\n\nOut-of-the-box, TypeScript and TSLint should work. Timpla creates `tsconfig.json` and `tslint.json` files when you run `npx timpla init`.\n\nFor TypeScript to work, a `tsconfig.json` needs to be in your project root.\n\nFor TSLint to work, a `tslint.json` file should be in the root as well.\n\n#### TypeScript - under the hood\n\nTimpla uses (https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Pluginto create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- TypeScript (can be disabled)\n- TSLint (can be disabled)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. You'll get a copy in your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    development: {\n      sourceMap: true,\n    },\n    production: {\n      sourceMap: false,\n    },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // Setting this to true will always disable TypeScript\n    disableTypeScript: false,\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // Implement your custom mapper for your framework to pick up the hashed files.\n    rev: false,\n    // Set this to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(timplaHelper) {},\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n```\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nTimpla will extend babel-loader from your root's .babelrc.js file (via babel-loader > options > extends). I highly recommend using a js file over an rc file so that you can modify it more like a javascript file (e.g. access env constants). Please use customizeWebpackConfig for complete customisation babel-loader (e.g. setting the extends to another file).\n\nSample babelrc.js file\n\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        useBuiltIns: 'usage',\n        debug,\n      },\n    ],\n  ],\n}\n```\n\n## Linting files\n\nApart from TSLint, sass and js files are not linted in Webpack. We do this to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consistent\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nhot-loader\nbabel-loader\nts-loader\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts a function that returns a configuration object:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in timpla-config.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc11","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Ffn8NyGZ1Qo9MJUPhFKL7Vfz/HOPJdhGMYxGi4qSHOMlEXUY0NbMrgd4F0BMA6xRWzD2Z1V2x1DgLzd3O5XsKg==","shasum":"88f6143d3aad7e12efdf5ddde701e24cacb07d6c","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc11.tgz","fileCount":49,"unpackedSize":108079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2TpQCRA9TVsSAnZWagAAsW8P/j5GcC+IfwRqj4ZZcrqR\ndHHO2IdsNiumcW0kiyWAjnmtzZ6FqnuvDxrHny59tovX+1Y47jn50aUGtdzd\nn01RU+YEZ4u/nYMlHCM6dZh/CaoXiySkmOUSzzXd0ukAjrZcGQosDmf05Qnw\nfnCUv45+E25qy61YmfhrTt1m/6JUl3vpBydOb+g12VJcGz3syZtTwfBIA38W\nrhHEyHM+niW7MdYRDcq5u0RAcpL7ZMblj0KoushfcPZV8E85tC22B0cvvgBS\nEdXV6yYZTaWqqPgvlNkHYdNmtYgVIqnREfgCT5R1PdBxSOUzsq7xm7KtEJE5\nbBQSZQs0D5dQoAB6MsBxdNplnmOpARePfN8kIbA4lGixo7pWK/fUqcLtMV+e\nww7rVDL48PTTpM+2knRRPczyyikjEeHESHDorM9rRxBSJMcJxraM74yIXAK7\ncNgjweOY4NVOuWGClYDGo33q1n6lOfskr6nojGjwonD4qVGNfj30uSqMI5CR\ncEM4T+VqIYBiK/iULf4qZYcjHgj+rMm8J6xYHwi2lrsoNbo0bUFJPpbjtdEI\nTY1qTtca0gLdpbQJ6BaOaujMkBGmx5p+g9fH1ENP42AgXw570PriZ6I3qNea\nWKpGRnVNR6DuReVjt5u3TOoTACZQ13w7rlSBDpAc0LouD/JVb3Apw7HBQvQf\n9KF+\r\n=8IYO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8/Ush8xVe5iFIRS70RxfOBxoxP9Kh7gUOBchTbJuHlAiBJBanzIv/9efez2q7nmiu3uRkLyPhuw5Ht+oe92/aDkA=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc11_1540962895488_0.5897912477264788"},"_hasShrinkwrap":false},"1.5.1-rc12":{"name":"timpla","version":"1.5.1-rc12","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=./timpla-travis-config.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/config/timpla-config.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","friendly-errors-webpack-plugin":"^1.7.0","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.11","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","ts-loader":"^5.3.0","webpack":"^4.23.1","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.4","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-standard":"^4.0.0","husky":"^1.1.2","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.5"},"peerDependencies":{"@babel/polyfill":"^7.0.0","@babel/core":"^7.0.0","typescript":"*","tslint":"*","react":"*","react-dom":"*"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc12.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Comes with first-class ESNext / TypeScript and React support.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Enabling JS-only mode](#enabling-js-only-mode)\n  - [Enabling TypeScript and TSLint support](#enabling-typescript-and-tslint-support)\n    - [TypeScript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n- [Linting files](#linting-files)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\nnpm i --save timpla @babel/core @babel/polyfill typescript tslint @types/react @types/react-dom\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .prettierrc\n#  .gitignore\n#  tsconfig.json\n#  tslint.json\n#  config/timpla-config.js\nnpx timpla init\n```\n\n### Enabling JS-only mode\n\nPlease follow the same installation instructions above. After the initial install, remove `tsconfig.json` and `tslint.json` to disable TypeScript support. Doing so removes the webpack plugins that parse and lint your TypeScript files. You may also remove the @types dependencies from packages.json.\n\nIf you require a tsconfig to be in the same folder but still require to disable TypeScript in Timpla, please set the javascripts.disableTypeScript flag to false.\n\n### Enabling TypeScript and TSLint support\n\nOut-of-the-box, TypeScript and TSLint should work. Timpla creates `tsconfig.json` and `tslint.json` files when you run `npx timpla init`.\n\nFor TypeScript to work, a `tsconfig.json` needs to be in your project root.\n\nFor TSLint to work, a `tslint.json` file should be in the root as well.\n\n#### TypeScript - under the hood\n\nTimpla uses (https://github.com/TypeStrong/ts-loader) and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Pluginto create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev)\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- TypeScript (can be disabled)\n- TSLint (can be disabled)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides support for TypeScript, TSLint and React.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through config/timpla-config.js. You'll get a copy in your project's config folder after running `npx timpla init`.\n\n### List of available options\n\n```javascript\n// config/timpla-config.json\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: './src',\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    development: {\n      sourceMap: true,\n    },\n    production: {\n      sourceMap: false,\n    },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: 'javascripts',\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // Setting this to true will always disable TypeScript\n    disableTypeScript: false,\n    // These configs are used for webpack hmr\n    hot: {\n      reload: true,\n      noInfo: false,\n      quiet: true,\n      react: true,\n    },\n    webpackBundleAnalyzer: {\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': ['./js-index.jsx'],\n      'ts-index': ['./ts-index.tsx'],\n      'ts-error': ['./ts-error.ts'],\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    development: {\n      devtool: 'eval-cheap-module-source-map',\n    },\n    // The source map to be used / output\n    // Set to false when not required\n    production: {\n      devtool: 'source-map',\n    },\n    // Override terser js (uglify) config\n    // terserConfig: {}\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // Implement your custom mapper for your framework to pick up the hashed files.\n    rev: false,\n    // Set this to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    initialize(timplaHelper) {},\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n```\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nTimpla will extend babel-loader from your root's .babelrc.js file (via babel-loader > options > extends). I highly recommend using a js file over an rc file so that you can modify it more like a javascript file (e.g. access env constants). Please use customizeWebpackConfig for complete customisation babel-loader (e.g. setting the extends to another file).\n\nSample babelrc.js file\n\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        useBuiltIns: 'usage',\n        debug,\n      },\n    ],\n  ],\n}\n```\n\n## Linting files\n\nApart from TSLint, sass and js files are not linted in Webpack. We do this to keep the build process fast. Linting can be done in the IDE or as part of a pre-commit hook.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consistent\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nhot-loader\nbabel-loader\nts-loader\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in timpla-config.js. It accepts a function that returns a configuration object:\n\n```javascript\n// timpla-config.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in timpla-config.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// config/timpla-config.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc12","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Lg3YbDbXjRsV7l+hY8IYcpc4atW+NsAhKpqhKTBR50tYccNyTbpx8XQCdBDHjeaYPOC4RgoekFw7jALL6ATg0w==","shasum":"5a6e6c5270ff3b8a7d9594c14b1a78fb8ebb0712","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc12.tgz","fileCount":49,"unpackedSize":108285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2oIFCRA9TVsSAnZWagAAs20P/RIgySy6zSM/laelKxqi\n2QI2C8AZgMyFErAbcF5vYZHupllcg6BwlPwuIK6uUk0XmBAeX5GbcYXH+OAI\ntGXel5DdM8MUu+xbYipNzbSirVn25Cd4T0KCEQI4fasMtV4MfZ563el8zgTp\nKI9zVYr81S31wZvhu6J3+yHzNhNl1s/dsHBFXh2XaGIwX8R6UtuENcXWeY+I\nAM6s/9ffSfRHC+EaZdhiRjKccgBQulRU/8kVK7iSBMiRu8sLi6XgVtukFN1H\nX9W4MU4ePTlvbkfqnUppSMaTiP+D+faHMSdQbvn0zYIiJ7zC1zWoUxkWVwxJ\n7T1gaO5jiK9HUPKeF3fHCdWPx2ymy/5bDoVXA7nwvc59gDCGIKG6lYChmOGA\nb0dBAHYUMR2mJBmVemaAviGlLJRO6bbuwqJ26nwYqgGiKMvWkTSP6y3Z0crT\nAwefh6c94nPeil/pwfcNpXMTlo7vxkSaUMy2v0rnYM5clMyCbvovyhUWYiOz\n2StRZckeKYPvKwd7dcSPerlvALYABADZBBdtu3ODEdsA+KCytc6x7KNuXIIp\nIaMaargjeqNDi0pWZaqA6y+b0MFGTjHhwSXUWDs/6sbkqR110xYEQilTL70G\nrSnH6Ld6aU/HVydh+fT02un+VuBdm43OxQuVgNoS99GEbMotbBrVTTxcxwBN\nYu4A\r\n=lW+K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGsbt4Sw7WDxFOW+LaPEvSU/K5YejGiTBV3lDhT1a1eAIgYmKUfdEa0Q9WJNavXDDDURwNsr6koUVbDJZ2/JchIJA="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc12_1541046788602_0.18865365069399864"},"_hasShrinkwrap":false},"1.5.1-rc13":{"name":"timpla","version":"1.5.1-rc13","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","local:readme":"gulp --gulpfile local.gulpfile.js --require @babel/register","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/code-frame":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","eslint-loader":"^2.1.1","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","log-symbols":"^2.2.0","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","plur":"^3.0.1","pretty-bytes":"^5.1.0","react-hot-loader":"^4.3.12","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"webpack":"^4.24.0","@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.4","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","gulp-inject":"^4.3.2","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.6"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0","typescript":"^3.0.0","tslint":"^5.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc13.tgz","readme":"<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Supports and provides an efficient development workflow for TypeScript, ESNext and React.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [TypeScript](#typescript)\n    - [Enabling TypeScript and TSLint](#enabling-typescript-and-tslint)\n    - [Disabling TSLint](#disabling-tslint)\n    - [TypeScript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n  - [Enabling HMR and React HMR](#enabling-hmr-and-react-hmr)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\n# With TypeScript support\nnpm i --save timpla @babel/core @babel/polyfill @babel/preset-typescript typescript tslint @types/react @types/react-dom\n\n# JS-only\nnpm i --save timpla @babel/core @babel/polyfill\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .timplaconfig.js\n\nnpx timpla init\n```\n\nAfter initialising Timpla for the first time, please create the following files:\n\n```bash\ntsconfig.json # Your TS Config\ntslint.json # Your TSLint rules\n.eslintrc # Your ESLint rules\n```\n\n### TypeScript\n\n#### Enabling TypeScript and TSLint\n\nInstall @babel/preset-typescript and add it as a babelrc presets. Timpla outputs the following babelrc file when `timpla init` is run. Please use it as an example.\n\nTSLint is enabled by default for development mode. `npx timpla`\n\n#### Disabling TSLint\n\nPlease set javascripts.development.tslint to false in .timplaconfig.js. This turns off the ForkTsCheckerWebpackPlugin.\n\n#### TypeScript - under the hood\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Pluginto create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through .timplaconfig.js. You'll get a copy in your project's root folder after running `npx timpla init`.\n\n### List of available options\n\n<!-- inject:timpla_config:js -->\n```javascript\nconst path = require('path')\nconst srcPath = './src'\nconst srcJs = 'javascripts'\n\n// Timpla sets the context\nconst pathToJs = (...paths) => path.resolve(srcPath, srcJs, ...paths)\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: srcPath,\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n    development: {\n      sourceMap: false,\n    },\n    production: {\n      sourceMap: false,\n    },\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: srcJs,\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // files paths are relative to\n    // javascripts.dest\n    entry: {\n      'js-index': [pathToJs('./js-index.jsx')],\n      'ts-index': [pathToJs('./ts-index.tsx')],\n      'ts-error': [pathToJs('./ts-error.ts')],\n    },\n    // Options for the babelLoader\n    babelLoaderOptions: {},\n    // Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n    // Setting this to false disables webpackBundleAnalyzer\n    webpackBundleAnalyzer: {\n      // The production json output file for webpackBundleAnalyzer\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode WebpackBundleAnalyzer\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    development: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'eval-cheap-module-source-map',\n      // These configs are used for webpack hmr\n      // Setting this to false disables hot module reloading\n      webpackHotMiddlewareConfig: {\n        reload: true,\n        noInfo: false,\n        quiet: true,\n      },\n      // ESLint is only enabled for development mode\n      // Setting this to false will disable ESLint\n      eslint: {\n        // Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n        esLintLoaderOptions: {},\n      },\n      // TSLint is only enabled for development mode\n      // Setting this to false will disable TSLint\n      tslint: {\n        // Accepts [forkTsChecker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options.\n        forkTsCheckerOptions: {},\n      },\n    },\n    production: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'source-map',\n      // Override terser js (uglify) config\n      terserConfig: {},\n    },\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // Implement your custom mapper for your framework to pick up the hashed files.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // Initialise extra tasks\n    initialize(timplaHelper) {},\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nTimpla will user your project's .babelrc or .babelrc.js config. Please use customizeWebpackConfig for complete customisation babel-loader (e.g. setting the extends to another file).\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js)\n\n<!-- inject:babelrc:js -->\n<!-- endinject -->\n\n### Enabling HMR and React HMR\n\nHot module reloading is enabled by default. Setting javascripts.development.webpackHotMiddlewareConfig to false disables it.\n\nTo support react hot module reloading, please install and add react-hot-loader/babel to your babelrc's plugins. This should be fine even for production builds, as react-hot-loader adds a minimal footprint to your code.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consistent\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nbabel-loader\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc13","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-oGfOkjKPgMtlsd/IPcGH2ZAjbAoYWVy1LrWIk+XLJCMofPcyJIGQlzUEHiNqQzL0e9x+I+9gc1V85CzvWJPnmA==","shasum":"fc8c3e9672cf1919061afdd28a5f03f3303629f9","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc13.tgz","fileCount":57,"unpackedSize":147665,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3srjCRA9TVsSAnZWagAAjsUP/jl7Vjxh8VwNrFRinzUG\nYrk2qp8ntp2rAFVCsLaqbVUA3Cp3ZwUo4mQYEXQ1hxNgRPa4/yOvDgUux42j\nPgjbmu1Hp7/egoH7W1v7y+Hvmn+oKsd8MaynlHBLUtHoPQzn8SZo/f7t6sco\nv/kMjfbio7V/ym6aVPg1kaN72J2QC997bSR3pg71qpJt/0MLZliVY7iW1y/r\nPNRQJjn2E6G/Z6bSikiKAElXonwccQmf5vDg3c1oXwt4qVQ81i886WMiEXTe\nC1SrpReha3eDzWlDhDq/3xG2NrumABmkSAu4LFrpaot1Sv7vYOgd3XTpVhwq\nHnUkOtevcwL+OdpxPhjmFits4WhFNdcS85pRf9cYTtxLaZ4IO2TG0CBsWmTH\n6+b3SOBurg64ocOGSfCEiJ6nv8MvGBQ51tgXu+iSW/WzX34hOuht62vKrAXy\nQKQdaIZRoAaVN4IZAvG4fRRElFkZrSxQHaffZjcZBl9j+LgcTmyXvd15VSX8\njJSwlN3Grx5HAPVkNmeh05Bep/c+Y/Mi1KCt+Jt9i+4em7elBEzaMkhxUFgo\ndhFzz43XeRplF/OreXA0zGmMw5D5HIq5HW78R8IpatNa+iY0XlKdvfCllbgI\nT4LXpFYIJd2/O0S8ofYzhC9RXmSHWbbcfKLIGB2/XyQUgzg6YBPW7uinrHaa\njrHa\r\n=XILP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo1WxOM6UNZM+K9wFr2j+g2xy05jSImGwos6j0804p4QIhAJBmiJr0Eq9flGpJD4jv/kbvcTo779prMJp+rqRdiT6e"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc13_1541327586790_0.6423029039485906"},"_hasShrinkwrap":false},"1.5.1-rc14":{"name":"timpla","version":"1.5.1-rc14","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","local:readme":"gulp --gulpfile local.gulpfile.js --require @babel/register","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/code-frame":"^7.0.0","@babel/preset-react":"^7.0.0","ansi-colors":"^3.2.1","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","case-sensitive-paths-webpack-plugin":"^2.1.2","cli-table":"^0.3.1","cross-env":"^5.2.0","cross-spawn":"^6.0.5","del":"^3.0.0","duplicate-package-checker-webpack-plugin":"^3.0.0","eslint-loader":"^2.1.1","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","lodash.mergewith":"^4.6.1","log-symbols":"^2.2.0","merge-stream":"^1.0.1","openurl":"^1.1.1","optimize-js-plugin":"0.0.4","plugin-error":"^1.0.1","plur":"^3.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"react-hot-loader":"^4.3.12","@babel/preset-env":"^7.1.0","webpack":"^4.24.0","@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.4","babel-eslint":"^10.0.1","coveralls":"^3.0.2","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","gulp-inject":"^4.3.2","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","recursive-readdir":"^2.2.2","rollup":"^0.66.6","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.6"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0","typescript":"^3.0.0","tslint":"^5.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc14.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks.\n\nPowered by gulp 4 & webpack 4. Supports and provides an efficient development workflow for TypeScript and/or ESNext.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [TypeScript](#typescript)\n    - [TypeScript - under the hood](#typescript---under-the-hood)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Examples](#examples)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [Disabling TypeScript / TSLint](#disabling-typescript--tslint)\n  - [Disabling ESLint](#disabling-eslint)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n  - [Enabling HMR and React HMR](#enabling-hmr-and-react-hmr)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd-isnt-working-as-its-supposed-to)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\n```sh\n# Don't worry about the long install, you may remove eslint, react and typescript dependencies separately for simple JS projects. Read-on to learn more!\nnpm i --save timpla webpack typescript tslint react-hot-loader @babel/core @babel/preset-env @babel/polyfill @babel/preset-typescript @babel/preset-react react react-dom @types/react @types/react-dom eslint-config-prettier babel-eslint eslint-plugin-react tslint-config-prettier tslint-react\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .eslintrc\n#  tsconfig.json\n#  tslint.json\n#  .timplaconfig.js\n\nnpx timpla init\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode. `npx timpla`\n\n#### TypeScript - under the hood\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Pluginto create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n### Examples\n\nPlease explore the examples folder to find common configurations.\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through .timplaconfig.js. You'll get a copy in your project's root folder after running `npx timpla init`.\n\n### Disabling TypeScript / TSLint\n\nRemove @babel/preset-typescript from .babelrc.js. Please set javascripts.development.tslint to false in .timplaconfig.js. This turns off the ForkTsCheckerWebpackPlugin.\n\n### Disabling ESLint\n\nSet javascripts.development.eslint to false.\n\n### List of available options\n\n<!-- inject:timpla_config:js -->\n```javascript\nconst path = require('path')\n// Gulp / Timpla sets the INIT_CWD to the current projectRoot whereas process.cwd()\n// points to the node_modules/timpla folder.\n// Please ensure that you use process.env.INIT_CWD instead to resolve to projectPaths.\nconst projectRoot = process.env.INIT_CWD\nconst srcPath = './src'\nconst srcJs = 'javascripts'\n\n// Use this function to create full-paths to JS entry points.\nconst pathToJs = (...paths) => path.resolve(projectRoot, srcPath, srcJs, ...paths)\n\n// This is the timpla config file!\n// For any inner src and dest files, they are prepended with the base src/dest paths.\n// nested extensions configs are used by watch and gulp tasks\nmodule.exports = {\n  // Input directory\n  src: srcPath,\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n    development: {\n      sourceMap: false,\n    },\n    production: {\n      sourceMap: false,\n    },\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: srcJs,\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n    // Files will need to point to their exact locations from\n    // the project root. Use the pathToJs helper to easily set them.\n    entry: {\n      'js-index': [pathToJs('./js-index.jsx')],\n      'ts-index': [pathToJs('./ts-index.tsx')],\n      'ts-error': [pathToJs('./ts-error.ts')],\n    },\n    // Options for the babelLoader\n    babelLoaderOptions: {\n      // Specify a babelrc file to inherit from\n      extends: path.resolve(projectRoot, '.babelrc.js'),\n    },\n    // Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n    // Setting this to false disables webpackBundleAnalyzer\n    webpackBundleAnalyzer: {\n      // The production json output file for webpackBundleAnalyzer\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode WebpackBundleAnalyzer\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    development: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'eval-cheap-module-source-map',\n      // These configs are used for webpack hmr\n      // Setting this to false disables hot module reloading\n      webpackHotMiddlewareConfig: {\n        reload: true,\n        noInfo: false,\n        quiet: true,\n      },\n      // ESLint is only enabled for development mode\n      // Setting this to false will disable ESLint\n      eslint: {\n        // Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n        esLintLoaderOptions: {},\n      },\n      // TSLint is only enabled for development mode\n      // Setting this to false will disable TSLint\n      tslint: {\n        // Accepts [forkTsChecker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options.\n        forkTsCheckerOptions: {},\n      },\n    },\n    production: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'source-map',\n      // Override terser js (uglify) config\n      terserConfig: {},\n    },\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // Implement your custom mapper for your framework to pick up the hashed files.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // Initialise extra tasks\n    initialize(timplaHelper) {},\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nPlease use javascripts.babelLoaderOptions.extends to set the babelrc file.\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        useBuiltIns: 'usage',\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Enabling HMR and React HMR\n\nHot module reloading is enabled by default. Setting javascripts.development.webpackHotMiddlewareConfig to false disables it.\n\nTo support react hot module reloading, please install and add react-hot-loader/babel to your babelrc's plugins. This should be fine even for production builds, as react-hot-loader adds a minimal footprint to your code.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nCaseSensitivePathsPlugin # ensure that path casings are consistent\nDuplicatePackageCheckerPlugin # ensure that imported packages are not duplicated\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nOptimizeJsPlugin # wraps built js in iifes to improve load times\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nbabel-loader\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSyncConfig: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths. An example is provided in .timplaconfig.js.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n2. pr > Commit those changes to a separate PR\n3. pr > Make sure Travis turns green\n4. master > Merge PR\n5. master > Bump version in package.json\n6. master > npm run changelog (needs to be installed first)\n7. master > Commit package.json and CHANGELOG.md files\n8. master > Tag\n9. master > Push\n10. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc14","_npmVersion":"6.4.1","_nodeVersion":"11.0.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-QOwvyH10k3bYtvoO6OG8sQoZk57VAFVpydFiif9RoNiHfeQkUYWPjiGYFqHw3GVayHToV6j0nSy3qD8q10s5tw==","shasum":"d3195cfd8870f60af20d66d4fbbaa15c7d31c043","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc14.tgz","fileCount":57,"unpackedSize":151926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3uSoCRA9TVsSAnZWagAAXK0P+wffgKIjXCC4/huIsxW/\nrNZxu4sWkY3/z1G82VrH2g8Z6MpdnG7sSWS1KGlNerMUIU/qlVsu8HAc4wo9\nm+7f+cojHXkKbn8ZGvaoai7+S8C7gNb8M3BnWlwo12FBNTw0DJCDT95KKaNJ\nyzd+3V2wOfXjYalYmdBbqFitLVmGRXslk3De8t9DBvVdn3Mkw1PoZnLIobMl\nEio6Q4yy4g8fm1eOT0KJLUdObT1/2BPAL8MfSKnW0CDcsWkUbXSaVtDWtQ66\n5RVACnZCeOPTDLxwP9WTzbe6wGry6F8b+1rrZKm0Lan5qBBpYAeLDmSU4RpT\n0FR+CUbxLicGNcVuAsjHpiBx9DhAHyiwdkT2hED9jou4SKSUc2wGCIWeWANx\nTf5HYWSdyn87ZkTrE6PZi9s9mexcQOrYBKlpBqEsaaqsxDO76ibGGorkxACw\nuDK2LV06qzhSnTJ5mwE9FOtfWHgRM4wcowMCNctGqpiUf04k68l89puVJ71J\nTxjzT4uJAzYhwU2k1+834SbhteaSoX0YRbIM9w+CL4S/1oS05kHzkFBEJ7Fx\nXkViztOe9GyHEu+U6rd1IV1q9m0SB6vO0YaMQHm/5cATzMGA3czKSKNu1Wp3\nxHV5LiD+GHXLR9H44DYKVaYEH3HgNkPyhoL1nZHupDEofMISc5qpUssTeL27\n9GSx\r\n=CzoC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTez2P7eka8gwgiDcF+yWSUB6a6ra1Dx3HTm5dbY8ZCAiEA6KPqKki5Lr0Z624RfoupQQjv5M4qjXwSmjJ6xsQtYQc="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc14_1541334184004_0.5473029954709059"},"_hasShrinkwrap":false},"1.5.1-rc15":{"name":"timpla","version":"1.5.1-rc15","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"gulpfile.js","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"bin/timpla.js"},"scripts":{"start":"gulp","gulp":"gulp","build":"cross-env NODE_ENV=production gulp build","build:travis":"npm run dev:cjs && cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build","dev:lint":"eslint dev.gulpfile.js/**/*.js","dev:cjs":"rollup -c rollup.config.js","release":"npm run dev:cjs","dev:link":"nodemon --exec 'npm run dev:cjs' --watch dev.gulpfile.js","dev:start":"cross-env DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","dev:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register build","dev:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","dev:readme":"gulp --gulpfile local.gulpfile.js --require @babel/register","dev:timpla":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile dev.gulpfile.js --require @babel/register","test:run":"cross-env NODE_ENV=production nyc mocha --exclude test/config --exclude test/dest --exclude test/fixtures --exclude test/util --require @babel/register --require @babel/polyfill","test":"npm run test:clean && npm run test:build && npm run test:run","test:clean":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register clean","test:build":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile dev.gulpfile.js --require @babel/register build","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","coverage":"nyc report --reporter=text-lcov | coveralls","prepare":"npm run release"},"lint-staged":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"dependencies":{"@babel/code-frame":"^7.0.0","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table":"^0.3.1","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","eslint-loader":"^2.1.1","fancy-log":"^1.3.2","file-loader":"^2.0.0","fork-ts-checker-webpack-plugin":"^0.4.14","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","openurl":"^1.1.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","speed-measure-webpack-plugin":"^1.2.3","terser-webpack-plugin":"^1.1.0","through2":"^2.0.3","webpack-bundle-analyzer":"^3.0.3","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.2","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/react":"^16.4.18","@types/react-dom":"^16.0.9","@types/webpack":"^4.4.17","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.8.0","eslint-config-prettier":"^3.1.0","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","gulp-inject":"^4.3.2","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.5","nyc":"^13.1.0","prettier":"^1.14.3","react":"^16.6.0","react-dom":"^16.6.0","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","rollup":"^0.67.0","rollup-plugin-node-resolve":"^3.4.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typescript":"^3.1.6","webpack":"^4.25.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0","typescript":"^2.0.0 || ^3.0.0","tslint":"^5.0.0","eslint":"^5.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-1.5.1-rc15.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n# Timpla\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript / TSLint](#disabling-typescript--tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n    - [Auto-reloading Timpla based on config file changes](#auto-reloading-timpla-based-on-config-file-changes)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n  - [Enabling HMR and React HMR](#enabling-hmr-and-react-hmr)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd-isnt-working-as-its-supposed-to)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\nTimpla is capable of running ESNext and TypeScript in parallel, to help you migrate or run co-existing source code. You may also configure Timpla to run TypeScript or ESNext only through specific options.\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install. After running init below,\n# You will need to cleanup example files that you don't need.\nnpm i --save-dev timpla webpack @babel/core typescript tslint\n\n# Run these too to get Timpla up and running after npx timpla init.\n# Otherwise, customise the list as to how you see it fit\n# Each of the installs here are removeable, so we recommend\n# installing the whole bunch first to see how everything works.\nnpm i --save-dev react react-dom react-hot-loader prettier @babel/preset-env @babel/polyfill @babel/preset-typescript @babel/preset-react eslint babel-eslint eslint-config-prettier eslint-plugin-react tslint-config-prettier tslint-react @types/react @types/react-dom\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .eslintrc\n#  tsconfig.json\n#  tslint.json\n#  .pretterrc\n#  .timplaconfig.js\nnpx timpla init\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through .timplaconfig.js. You'll get a copy in your project's root folder after running `npx timpla init`.\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode. `npx timpla`\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript / TSLint\n\nTo disable TypeScript, remove @babel/preset-typescript from .babelrc.js. TSLint can also be disabled by removing tslint/typescript from package.json and setting javascripts.development.tslint to false.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet javascripts.development.eslint to false if you don't require it. As eslint-loader is loaded conditionally, you may remove it if you don't require eslint.\n\n### List of available options\n\n<!-- inject:timpla_config:js -->\n```javascript\n// .timplaconfig.js\n\n// You have the flexibility to pull in node modules and constants that you need.\n// Below are some quick helpers to get you up to speed.\nconst path = require('path')\nconst projectRoot = process.env.INIT_CWD\nconst srcPath = './src'\nconst srcJs = 'javascripts'\n\n// Resolves files to the projectRoot\nconst resolveToProjectRoot = (...paths) => path.resolve(projectRoot, ...paths)\n// Use this function to create full-paths to JS entry points.\nconst pathToJs = (...paths) => resolveToProjectRoot(srcPath, srcJs, ...paths)\n\n// Export a configuration object from your config file.\n// Each task has an extensions config which is used by Gulp, Webpack and fs watch.\nmodule.exports = {\n  // Input directory\n  src: srcPath,\n  // Output directory\n  dest: './public',\n\n  // Static files config\n  staticFiles: {\n    src: 'static',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Stylesheets config\n  stylesheets: {\n    src: 'stylesheets',\n    dest: 'stylesheets',\n    // css nano options\n    cssnano: {},\n    // sass options\n    sass: { includePaths: [] },\n    extensions: ['sass', 'scss', 'css'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n    development: {\n      sourceMap: false,\n    },\n    production: {\n      sourceMap: false,\n    },\n  },\n\n  // Fonts config\n  fonts: {\n    src: 'fonts',\n    dest: 'fonts',\n    extensions: ['woff2', 'woff', 'eot', 'ttf', 'svg'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Images config\n  images: {\n    src: 'images',\n    dest: 'images',\n    extensions: ['jpg', 'png', 'svg', 'gif'],\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Svg icons config\n  svg: {\n    // svgstore config\n    svgstore: {},\n    outputName: 'icons.svg',\n    src: 'svg',\n    dest: 'images',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Html config\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    // alternate(timplaHelper) {},\n  },\n\n  // Javascript / TypeScript / Webpack configs\n  javascripts: {\n    src: srcJs,\n    dest: 'javascripts',\n    extensions: ['js', 'jsx', 'ts', 'tsx'],\n\n    // This config is passed to Webpack's context.publicPath option\n    // Specify the base path for all the assets within your application.\n    // publicPath: '/',\n\n    // The entry files here are passed to the webpack entry option.\n    // Files will need to point to their exact locations from\n    // the project root. Use the pathToJs helper to easily set them.\n    entry: {\n      'js-index': [pathToJs('./js-index.jsx')],\n      'ts-index': [pathToJs('./ts-index.tsx')],\n      'ts-error': [pathToJs('./ts-error.ts')],\n    },\n    // Options for the babelLoader\n    babelLoaderOptions: {\n      // Specify a babelrc file to inherit from,\n      // Use this to specify your babel config\n      extends: path.resolve(projectRoot, '.babelrc.js'),\n    },\n    // Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n    // Setting this to false disables webpackBundleAnalyzer\n    webpackBundleAnalyzer: {\n      // The production json output file for webpackBundleAnalyzer\n      statsFilename: 'timpla-webpack-stats.json',\n      // This config only applies to dev mode WebpackBundleAnalyzer\n      // timpla openAnalyzer has to be run manually after building the files\n      openAnalyzer: true,\n    },\n    // The full webpack config can be modified using this hook,\n    // before it is passed to webpack\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) {\n      return webpackConfig\n    },\n    development: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'eval-cheap-module-source-map',\n      // These configs are used for webpack hmr\n      // Setting this to false disables hot module reloading\n      webpackHotMiddlewareConfig: {\n        reload: true,\n        noInfo: false,\n        quiet: true,\n      },\n      // ESLint is only enabled for development mode\n      // Setting this to false will disable ESLint\n      eslint: {\n        // Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n        esLintLoaderOptions: {},\n      },\n      // TSLint is only enabled for development mode\n      // Setting this to false will disable TSLint\n      tslint: {\n        // Accepts [forkTsChecker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options.\n        forkTsCheckerOptions: {},\n      },\n    },\n    production: {\n      // The source map to be used / output\n      // Set to false when not required\n      devtool: 'source-map',\n      // Override terser js (uglify) config\n      terserConfig: {},\n    },\n  },\n\n  // The browserSync config accepts a full browserSync configuration object\n  browserSync: {\n    server: {\n      // should match `dest` in\n      // path-config.json\n      baseDir: 'public',\n    },\n  },\n\n  production: {\n    // When rev is enabled, Timpla revs your files and generates a json manifest file.\n    // You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n    rev: false,\n    // Open can be set to any arbitrary path or url\n    open: false,\n  },\n\n  development: {\n    // Open can be set to any arbitrary path or url\n    open: false,\n    // Extra relative or resolved files/folders for Timpla to watch\n    // When these change, Timpla reloads the dev-server\n    // E.g. path.resolve('../README.txt') to reload the server whenever the README file outside the projectRoot changes...\n    // Setting this to false disables reloading the dev-server\n    timplaWatch: [],\n  },\n\n  // Any additional tasks may be added here\n  additionalTasks: {\n    // Initialise extra tasks\n    initialize(timplaHelper) {},\n    // If you wish to use these, please ensure that you return gulp\n    // So timpla gulp tasks can continue resolving\n    // Alternatively, you may set them to null if you don't need them\n    development: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n    production: {\n      prebuild(timplaHelper) {},\n      postbuild(timplaHelper) {},\n    },\n  },\n}\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browerSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream.\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = {\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n}\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n#### Auto-reloading Timpla based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babelrc, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > development.timplaWatch. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting timplaWatch to false disables the reload server.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nPlease use javascripts.babelLoaderOptions.extends to set the babelrc file.\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Enabling HMR and React HMR\n\nHot module reloading is enabled by default. Setting javascripts.development.webpackHotMiddlewareConfig to false disables it.\n\nTo support react hot module reloading, please install and add react-hot-loader/babel to your babelrc's plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nHardSourceWebpackPlugin # improves build time performance\nTerserPlugin # uglifies/minifies code\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nand the following loaders:\n\n```\nurl-loader\nfile-loader\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a merge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = {\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n}\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths. An example is provided in .timplaconfig.js.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run dev:link # starts the nodemon watcher, compiling the gulpfile.js from dev.gulpfile.js on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run dev:changelog (needs to be installed first)\n1. master > npm run dev:readme (builds the readme file)\n1. master > Commit package.json and README and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@1.5.1-rc15","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Wi36WG7a4vlJw1zCd2oXU3C5fFnKdUb3hRj+fwLsx5sd7GJdl3iPHHotZzXwiQvh+bJe6eDYhU729JvblITY1A==","shasum":"4930a183fce8b026eda001a7335aa674fb1c04d7","tarball":"https://registry.npmjs.org/timpla/-/timpla-1.5.1-rc15.tgz","fileCount":57,"unpackedSize":158542,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4LDRCRA9TVsSAnZWagAAU9oP/070T5xrtUpZ6Mg9lNvv\nTMNTADZ5FFUX93soEG6HpNjfPy5yzqhzWGvouflh3Rv027FDegLS9HzJ+15r\nTkYFRKKGeKhU6ALFeH7b0aKbhN1b1YbwjW1DS7Smvods6a0T9808PA01qh8T\nmNrzW2/3XsDLe/AfSSQYbSGU4wCYXavnnXgSgFljJ85OdXhe00oIn05+TA+I\n8VjRgNBKWqPUw1OY+74hvjQrJJxSKIePYn4TSwojLhtAxkgly3RFz6Q8/6iQ\nWlD5IvlobbrOhkrZIuEn2wDW2jlzI2MhlIQe2XeK5pYkIPpOs/aYSXdvT+J9\nIMK1OKSCAiyFVeEXfX2LSLuoBHlx73sNMpV1S044VRp6WaXcid2Ui2kML4VO\nniSffDCyk4vbmlkzZjYgMK1Tu2Bcf2NJ5fMKJKKjj7MUcvEkl1hiBhPlDi1Y\n9KtiOwcCq48o6TpTuoFE430eO0qnAsrquCfobQ0S44dc2O2+Pi1RVoFYchRA\npMT6uBE/tE5X+OdB7Z6ggn36k8rVzqpfYdaKIdDwcf66YpPJca7GGmWPl5uN\nZ9Mad5sTqtAemmbMjeB4hRDJ5ZIGk+DpmOftDvBSRLxYry61NgpOx2fD/B3n\ni5gTNlzAt/uF1CiOl3iW4qWTwfkwBfujh/Uw41mQg0VRjFwnUrCZS4+mXhLZ\nhrEX\r\n=ivjD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChjvhPRf4MYVP714YnzjQVklrI7RRqsg+6/nzOxM/HmwIhANAlEklepxdziSG6OUd3kf4lOqcJfgzZKI5h260qlQs2"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_1.5.1-rc15_1541451984339_0.19545646745636236"},"_hasShrinkwrap":false},"2.0.0-rc1":{"name":"timpla","version":"2.0.0-rc1","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"lib/public.js","typings":"lib/index.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:link":"nodemon --exec 'npm run lib:build' --watch gulpfile.ts","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-rev-replace":"^0.2.33","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.2","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.2.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.1","react-dom":"^16.6.1","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.6.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-2.0.0-rc1.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n<!-- TOC -->\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n- [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript / TSLint](#disabling-typescript--tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Overriding tasks](#overriding-tasks)\n    - [Example: Replacing the html task with Shopify Liquid templating](#example-replacing-the-html-task-with-shopify-liquid-templating)\n  - [Watching more files](#watching-more-files)\n    - [Auto-reloading Timpla based on config file changes](#auto-reloading-timpla-based-on-config-file-changes)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel--babel-loader-options)\n  - [Enabling HMR and React HMR](#enabling-hmr-and-react-hmr)\n- [Configuring Webpack](#configuring-webpack)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Extending the html process](#extending-the-html-process)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site-proxy-option)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#im-getting-a-different-version-of-dependency-x-when-i-use-timpla)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd-isnt-working-as-its-supposed-to)\n- [CAQIAs (Commonly asked questions I ask)](#caqias-commonly-asked-questions-i-ask)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n<!-- /TOC -->\n\n## Getting started\n\n### Installation\n\nTimpla is capable of running ESNext and TypeScript in parallel, to help you migrate or run co-existing source code. You may also configure Timpla to run TypeScript or ESNext only through specific options.\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Run these too to get Timpla up and running after npx timpla init.\n# Each of the dependencies here are removeable, so we recommend\n# installing the whole bunch first to see how everything works.\n# Slim it down afterwards based on your requirements!\nnpm i --save-dev react react-dom react-hot-loader prettier @babel/preset-env @babel/polyfill @babel/preset-typescript @babel/preset-react eslint eslint-loader babel-eslint eslint-config-prettier eslint-plugin-react tslint-config-prettier typescript tslint tslint-react @types/react @types/react-dom webpack-bundle-analyzer hard-source-webpack-plugin fork-ts-checker-webpack-plugin speed-measure-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .eslintrc\n#  tsconfig.json\n#  tslint.json\n#  .prettierrc\n#  .timplaconfig.js\nnpx timpla init\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### Commands\n\nTimpla is a thin wrapper for gulp. You may pass gulp args and options to timpla. Here's a full of commands:\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files (hash filenames + output manifest file)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from html src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nYou may add extra tasks through through your timplaconfig.These will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n## Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid). It has been upgraded to support the latest versions of node, webpack, and @babel!\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check - this is harmless, vscode might just make your life easier!\n\nconst timpla = require('timpla')\n\nmodule.exports = timpla.configure({\n  javascripts: {\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the alternate option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs below)\n\nFull configuration is available through .timplaconfig.js. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode. `npx timpla`\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript / TSLint\n\nUninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from .babelrc.js. Finally, set javascripts.development.tslint to false.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet javascripts.development.eslint to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `images`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `images`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. */\n        srcOptions: SrcOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        options: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** [Gulp cssnano](https://www.npmjs.com/package/gulp-cssnano) options */\n        cssnano: {\n          [option: string]: any\n        }\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixer: {\n          [option: string]: any\n        }\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sass: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'png', 'svg', 'gif']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry | IWebpackObjectEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babelrc file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzer: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /** Instructs timpla on how Webpack should run in dev-mode. */\n    development: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `cheap-module-eval-source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) options.\n       * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n       * Defaults to\n       * - `reload: true`\n       * - `noInfo: false`\n       * - `quiet: true`\n       */\n      webpackHotMiddlewareConfig: IWebpackHotMiddlewareClientConfig | false\n      /**\n       * In dev-mode, Timpla supports ESLint via the ESLint loader.\n       * By default, Timpla requires the eslint package to be installed.\n       * - `npm i --save-dev eslint`\n       * - Set to `false` to disable ESLint.\n       */\n      eslint: {\n        /*\n         * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n         */\n        esLintLoaderOptions: IESLintLoaderOptions\n      }\n      /**\n       * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n       * By default, Timpla requires dependent packages to be installed.\n       * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n       * - Set to `false` to disable the plugin, and TSLint support.\n       */\n      tslint:\n        | {\n            /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n            forkTsCheckerOptions: IForkTsCheckerOptions\n          }\n        | false\n    }\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   * May also be used to individually `disable` the default middleware added to proxy and server modes:\n   * - webpackDevMiddleware - disableDev\n   * - webpackHotMiddleware - disableHot\n   * - historyApiFallback - disableSpa\n   *\n   * Set server/proxy.middleware to disable all default middleware.\n   */\n  browserSync: browserSync.Options & {\n    /** Toggle default BrowserSync middlewares added by Timpla. */\n    middlewareConfig: {\n      /** Disables webpackDevMiddleware. */\n      disableDev: boolean\n      /** Disables webpackHotMiddleware. */\n      disableHot: boolean\n      /** Disables historyApiFallbackMiddleware. */\n      disableSpa: boolean\n    }\n    /** Disables the fallback server config that Timpla uses when no browserSync config is supplied. */\n    disableServerFallback: boolean\n  }\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /** Instructs Timpla on post-dev-launch tasks. */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\nexport type ITimplaConfig = RecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance\n  gulp, // use this to create new tasks\n  projectDestPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  projectSrcPath, // accepts an arbitrary amount of string arguments, concatenates them and returns a full path\n  timplaConfig, // the full timplaConfig\n  timplaProcess, // useful constants such as IS_DEVELOPMENT, IS_PRODUCTION, INIT_CWD\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n#### Example: Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n### Watching more files\n\nBrowsersync accepts a `files: [globs]` config - so you may use that to watch other file globs:\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['templates/**/*'],\n  },\n}\n```\n\nTimpla also sets up a watcher that streams individual task runs to browsersync. Each task can be configured with a list of `extensions` to watch. Provide an empty array to watch all of the files in the tasks' dest folder. For example, the default HTML task watches entire folders.\n\nKeep this in mind when overriding the tasks - as long as you reuse browserSync.stream(), you should see changes on-screen.\n\n#### Auto-reloading Timpla based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babelrc, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > development.timplaWatch. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting timplaWatch to false disables the reload server.\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nPlease use javascripts.babelLoaderOptions.extends to set the babelrc file.\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Enabling HMR and React HMR\n\nHot module reloading is enabled by default. Setting javascripts.development.webpackHotMiddlewareConfig to false disables it.\n\nTo support react hot module reloading, please install and add react-hot-loader/babel to your .babelrc's plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n## Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nHardSourceWebpackPlugin # improves build time performance\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable. For example, javascripts.tslint.forkTsCheckerOptions accepts a ForkTsCheckerWebpackPlugin configuration object.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (env === 'production') {\n        // do this;\n      }\n      if (env === 'development') {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Extending the html process\n\nIf you wish to build pages with nunjucks or pug, please refer to the samples/html folder.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths. An example is provided in .timplaconfig.js.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Can't Webpack do most of what the workflow is doing?</summary>\n  <p>\n    Timpla provides a simple workflow for your assets. Timpla relies on a task runner for static assets and a module bundler for more bundling.\n  </p>\n  <p>\n    A few issues I've encountered with using Webpack for server-side web frameworks:\n    <ul>\n      <li>Webpack hot module reloading support depends on the existence of a middleware plugin. Deciding to use one would require one to spend time learning the ins and outs of the plugin</li>\n      <li>Webpack bundling all your assets means that you have to feed all your html and asset references to webpack.</li>\n      <li>Extracting css via webpack is tailored for Client-side frameworks. I want a hard css file to use with my html pages. Webpack bundles css via mini-css-plugin but also outputs js entry points.</li>\n    </ul>\n  </p>\n  <p>\n    <a href=\"https://webpack.js.org/guides/integrations/\">From the webpack docs</a>\n    <blockquote>\n      Let's start by clearing up a common misconception. webpack is a module bundler like Browserify or Brunch. It is not a task runner like Make, Grunt, or Gulp. Task runners handle automation of common development tasks such as linting, building, or testing your project. Compared to bundlers, task runners have a higher level focus. You can still benefit from their higher level tooling while leaving the problem of bundling to webpack.\n    </blockquote>\n  </p>\n  <p>\n    However, do always take it with a grain of salt. What works for your team should be the option.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but I've found myself working on different server-side frameworks throughout the years. That's why I've decided to pursue an option that's easy to use and is framework-agnostic.\n  </p>\n  <p>\n    Browsersync is a powerful development tool. It automates live-reloading, file and interaction syncing. Marrying that up with webpack's Hot Module Reloading allows for a solid development environment.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated lighter configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in ESNext syntax and transpiled through babel, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:link # starts the nodemon watcher, compiling the gulpfile.js from gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.0-rc1","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Kh4gDD8pV2/g/h2G0ixaqb7wPawHuaEkXThQ/REcRlrL6+plEJJo0hzSHzqbKFgGZTDUmB0EM2cA+JB/aWyWtA==","shasum":"742e8a9b00872336d88984eda9acb4f2dd6ce122","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.0-rc1.tgz","fileCount":102,"unpackedSize":202282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb59jiCRA9TVsSAnZWagAAbngP+wT18U4iwXxf/0+J6s8E\nYuVKUbwA1yiHORIkVnvdX7bUHQ62j7fUJpzCl47XDtr+EMMYi76nbRmWYBJI\nS5462Z7EeyRA8VvwPyVaMW6qjY5raHpY7o69lKZ0dtOqLhZs6FTkOCYTIxkU\nM2Tfex2mhUoorgf5wKx78P7HbKRcAFZ+a9AbTVcKa6HMiszF+Q9FqC3oA5w8\nst4pf3c1GX8DFlqbUa9YmR4N9sS92xRtFrXI96vpMSsKz3j6Cdu9W3enSkEo\nDHm+OlrnKgeBGNz7Xbtq6cbEgwthUj5dfZ+i88a1p1FHFKRkfy/RAY/lVsJA\nq19QLiKrWB8MazMjyuHhM6EikfDqyGrgNdvC48K+wsyTGgQ95VtRMbtOy9p4\n1H1LVTyIeAXaBKFAP6LK5+65H/8WJ3XNCk5Em85CpMaa+puzgKsBVJsid4kc\ne6g9s87dY5/iFlk0t6AVkM8F3R0o1n3R1sNypau9RJjSR2b3fbJRIfQpBbzt\n7hrkRFtEpHM88NDxVkm34zgd9rt9KdfIajR4z45Z/0vXcGMl1VywI/3YQqdb\nZeGTlK/dIIH/qj4Fy6C9/YXZXCB38f4teTwRCuhM6YS+Tp7KIp3Yeeok/oqT\nFw/lDgoo/HwbWhL/EzYh/jiGzvJJ8k9LNnptIpygCqghZQqhb0qzViO+zLdn\nlaAR\r\n=gorK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6ZFAzhtgElCsvbkMy7db78gMTciYPSMurNzzsAHr7dAiA/y2ORQ8rpi8KmTJMzRtO+epgYGdBm3dDNQJeP+XK1AQ=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.0-rc1_1541920994185_0.5938860734899016"},"_hasShrinkwrap":false},"2.0.0-rc2":{"name":"timpla","version":"2.0.0-rc2","description":"Your auntie's favourite asset bundler for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.11.2","npm":">=5.6.0"},"keywords":["webpack","bundler","asset","pipeline","gulp","build","rails","django","laravel","drupal"],"main":"lib/public.js","typings":"lib/index.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-replace":"^0.4.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-rev-replace":"^0.2.33","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.2","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.2.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.1","react-dom":"^16.6.1","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.6.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f2a226e207fd88f27c7dbe7c855868879c4fee5a","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.0-rc2","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-jt6WOD4Gi4/o1GjL8qOcblhGSniKjn+eP/+uLHYTu63xOlGzkNlB8FC+qX2WDwUvCMO5VEzmzf2xadvGGB4w3A==","shasum":"b6bf4639c12e7d9df635dafc24c0a4e227b72e33","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.0-rc2.tgz","fileCount":102,"unpackedSize":202467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5++zCRA9TVsSAnZWagAAqe4QAI2GBcUQL8a1MOjcPIaN\nldk0m+/Dl3S42fsR90ZyUX2rCnMEBiFAEhA36LkT9U+KsMyllACXec0kjXzR\n+cdGsnVJVzJROVuZZ3yUFIBGL7hf4+PqDCuq6Y4zEmhDxbEFdUMe6RezMNbC\nTEuOc7LFU/veLjD3Akpp4j3Z7ZZo1nr54Ny3lxvV9urYcgYzvu+Eq6nCNF5h\nKcTmHQlTs8rR/sceONAdULsXTN6Cf1d6CXx3bavCKrFWWIpwVphdYz0LSgir\nDCwwjLAOpZogpG2Z59DCG0sPyqHaErV4ttTzC6JAdLMlTfgFvZ4nSpBzZz3X\niBYVmBnKIOqP4Rt6z42dZu4RNoZsj0+2oD5YBOngeFkewjGr7GEd7Bvf5F5p\ncL1RIZRilLI1GaQ8Nf6prZuGixUR3VDdY9fps96+5kZ5ZrqvQCJmuJxcrxo4\ne/BH+WDWQEg3lB9Wq6iyT7zYWZa/Hn8jXM6cU1S0wf3h1cF/L6NnMoF5lwUk\nXfmISWogzwI3cop5aZZdOHny6QZH/H0HDBfAGhumYBd0i5gGJHtcRkgvheFl\n8iJ8n5tdFx07qQgH2BTetV7WYAsPBIf3Za+Ae5Ntdcdmx609x711izr922N2\nDVdMMYrpf+iGNmOyU1jlH0OAQC4RJu9bn/bWZ4bGi5ykoHMCW3T568FDXI0u\nfHJs\r\n=cYhy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwLx/83C5Enerizo/tBAYmo1ri8en2U4tBKZIDPfUbWgIgQbZqxv7cl44fFx0ktocQouCGKWvMOsrv5kn8/vvxDPE="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.0-rc2_1541926834460_0.904348567744691"},"_hasShrinkwrap":false},"2.0.0-rc3":{"name":"timpla","version":"2.0.0-rc3","description":"An optimal website development experience.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.3","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.1","react-dom":"^16.6.1","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f01c0b709a4404ea0c7bcb4cd6537076d08d9e29","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.0-rc3","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Rx+RfpQjflPxyNRNZJ4AUX/2qZwYJM4ElPwE2DB7hDsTTO7Jp25AM9n3wy+Yx6M1j9SMU1/1g8X5VkmnImuBOg==","shasum":"e8c182af8317bea7291f058c1452981debed4ce6","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.0-rc3.tgz","fileCount":104,"unpackedSize":221198,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6T6xCRA9TVsSAnZWagAAd7kP/jmFDRmL1UIR+rxE/wrj\nBbO1qFpohOmS+kbNFDMySLavvYTkUwmXnTHRyYHWT7QWnscjvXkIbjGHLlBW\nqStWycQDz+/utBk8HY7R7Kvs5ETMB3ziglqKNjkq4EVS6D+yAFY0m/NVoLSr\nTaXVP64IpTUnkCJX2/nCWbDeJhr6S3uAZuK6kCZuDz/SNxF8lmWDOw0reTEF\nfsVbG66jshY+w7N6rS+XvM3hancVZXawv6yY1UU9e223305f/zFByxrX4Iae\nvDqUlJk7UwJx3WK7Dv6531eHhHHo3awIvl8OXoj2QIa3z693N7dsGVPF65S1\nfwj5k2JeBGYd3UfQkNZ9HUUOAodUYtOSRlSJMnaE9kGz0tAwaZNEz2PxxvoU\nBXKeIgmhseZejeXZv4Hh04nwoCReyI+i7SMi7sZf9Ul1x+gcElCCZzNoEKuw\n9GxxbrDCrATMZuJfv9+C4lEA50i3X32ZVhlZ7yBnTkocOLAEpDuYfWXQ2sHQ\nhJHi27yfcjD8cDjCE6sx/CnzE52cck7a4A7xbT1EmEeOf6wj92VlP/gW2voA\nxgn9cVAJLBWAOEeeDj5QJ0In8NO8ihvqk4uwj4fVq2afteA38t3isY7OuoMb\nuh43uFr6uz595zdSwfgMqIW0T1WwEzZWQWfAX6WPiEKSkBiuV1sz+IUC1ELn\ns0pJ\r\n=0xDZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtPqp2tsoKiUPl6z/UvffXDCdNhtDW/KAYOBJWkcVDDAIhAOElAo3+OUTM/ReOPZauEd9BWzIXkpBW6HwCh1oeg7LE"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.0-rc3_1542012592173_0.8847495678879691"},"_hasShrinkwrap":false},"2.0.0":{"name":"timpla","version":"2.0.0","description":"An optimal website development experience.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.3","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.1","react-dom":"^16.6.1","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"2bd76d0561522c3d682963b3172e521856b221ba","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.0","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-/JW//1LGOs09hq5/nn1QDrMGA6UHed90EzWMAd3ea8VDuSBOUoKg/fr8Ya8Aexy6t70PFCZ9o9Ao01hD5GyDTw==","shasum":"712229b7941b2faba9df806c90a81d39d90f48bd","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.0.tgz","fileCount":104,"unpackedSize":221194,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6UOFCRA9TVsSAnZWagAAyjMP/ijl9dZ/ZCffVwDCLYa+\nKdTIjL4PKUi1nplm2c1c3v2ZR4EUzTSY1MUe3py+T39zuUGjNwC6xT0gztGL\nEvxsuU3tKmUFthwDLFIytWITfgYPz2dpmLP6ZJ6EcFzH6+7p7VNIbD5YF6Vp\nzoLNfuNVSFEi68UKsUm4Fa9k+bCYlNT6yoreSuXXZG8k7ac+hie6vw7OkedB\nRGXr6XWpF53SOA+OEdKlK31UbkimORwflfs47u1xpohan+fcizhBNkKomxYP\nOo0VAXis8aHRFksELhjIYX/+Otl401Gne8JQ+LxG/jUM3z7Z+ai7ddRzQvl5\nKB4445wJcND77oSrC6YiAxK/XXOzDBoT81VQsCV2zSlofOkGFQZgJfzcf48/\n6GyfB/G+nMKtdiKs+xxH2P1hFqAW7371pKpZLjJ+gvj3389e8RYcg9woEHXt\nh+wuh/JPXiyosaWjnOZpD49tqvuFKONX6O9aFgfSCuX7HxvdakCRB468wXY/\nrwJjhxNXalXoWvwxMRyVyUUHoslU3H1m6cUZkNJ1J+Nq6doUIxbKOmUiVX5I\nP1AAg8RxZh+fzQg/K1GCxfsyfEDTN7hKlQTmIW6QGNeN4kPEZ3AJCiKYiFt7\nWIXTy8VgbHi2WCjlmOdvJmnbh1cDhW1Ql7oqhi+um0AKoP31Fd7WYUfXXqFI\n7cpf\r\n=STWZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTCuytFa4JEjHWaKX7bjXY+yVnenaVCD9xYLcFCaBbAAiEAnhiKPqtVT0JjWMsnMXQz+Hji4cM70fdKbGWF+eWdRPI="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.0_1542013828649_0.5913714403247443"},"_hasShrinkwrap":false},"2.0.1":{"name":"timpla","version":"2.0.1","description":"An optimal website development experience.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.3","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.1","react-dom":"^16.6.1","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"e2e3e10976264349e8803e3b29ff65675c0a70a9","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.1","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-WXsw+jG5e1rOe/W6EzDLncTdbTOgPALO/hWRQbthPX2AaPqwrfmwAGkP63qrzKnxA4IpFJBYY3O71z8FQnj5Nw==","shasum":"b659ded8c05cbae51066c373b0f0864175595334","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.1.tgz","fileCount":104,"unpackedSize":225710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6WCrCRA9TVsSAnZWagAA+HQP/2fCQlcUELFi7I40fM9j\nj3AeCRgNTBvTi+XhWMUqT48uvrEU5UnQpb8SvY82WOZPPBaAGiplrtpT3iKI\nZqnByz3Wv5axVy0yxGoPG9P5DaNktmhV1mFU5kzA1bHOJyH5w8flG/fuj5TG\naDVt5vl7IwxIGSgkL6vhx2L+ch8KmllKS5g6GGmA4jslWwu7izZUzwxkCIe6\nNp0hbw4cfQojNF63SYuaEBF8oVrGma8KMVoza4T/CRg8GbajoJC4dSEhWlxl\nq79IN7AMz4Es3BQpuX/dV/r0i2hO9rvcKqctM6JBEslweY/miUQ/geVquboa\ngydfAt8h/I/hLDB8D/0kesSD4SvVmV+vGqPLrMIVG2t70sKRl297Mjbna8ze\nKfSrVhMvk79iW2AG+PHHGHZakJ2QIyFXJp96IhTdPqys+pDbY5R1x/5gIXZ2\ns3ijICZv5LudxToGw058LpkL+/UByYAH9d3nMxkXThDLHnejAbGY1MiIK6GN\nRxGeARd2WvzDsftzpjbWgS+i/GQIn4MuGuXt0hy0v/U6AYkIiCff3k50jX1l\nZW8IICt8R+a6yXQ6YInFmv4biVrg9iV3W7bvXlUCJPjEBIFSkERxqL1KB5p6\nGXPjwtDrXgxClVp1iSOllrLeeJhQRSVbdQNB+R6FTlCXuUwUgMYmliX+jR/7\n0Apm\r\n=SdbH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlaZeT3rxr+B1eHhZrYYhiWUE2yC6IHn42mk8l68jptwIgaLHCk1eMhhW6BEljtqIy/FDNALSBVmCbZVHty9Tvq/g="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.1_1542021290876_0.7206346427759911"},"_hasShrinkwrap":false},"2.0.2":{"name":"timpla","version":"2.0.2","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.18","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.5","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.3","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.3","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"0acf1fd254c9b6a8e90d49637a2678d840b6599d","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.2","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-UpbP5rYUS6GKGjM7+o/3dM7i5KrTUgNY1HXE8wvBuvvHyqHvtaqhV3ZloeX9Jhsw89vHsN/rJtXeD1fdismA/w==","shasum":"9b8fc7a873a3ae36ebaf0a01d90b693c094fa35e","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.2.tgz","fileCount":104,"unpackedSize":228117,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6pIYCRA9TVsSAnZWagAAukUP/iTdPoxDOVJ6l5sWPtwV\nnmCBfEEgqx+xVRfgx8/s4ckoBeASYK+mJihI0YuUXUmmjJQ293auEyymLlGv\nRo1ZmDuH46/TDsOJ//FTgjIiONpiGsvl925T4MP308VLhA0J1HVifjZFihP9\nPwfqCS8AJZBqCGh94MlI9DcyNzNLobbqeQNI6f8qB4OHcGnULwP8583BXmc3\nuDyXUYuJdE9BDgzEhd0ATr8qbuVfrCdvs8vcHvlJD7H9nOT+YbO/KYITrGPI\niqCOJnNOWzoI2mraE0VUQsQfN3e1vM6UiTzoP+eXVE0X/AzkzAMVzMuImHqr\nKaNYPvqkLwWmZPBUw9vJIgjp7c8ky1osvRzjLfHSec7bM5LWX2CnG6OKOpCO\nk/p1tKIrRcKGkFZ1nxoICSPKkCkHZQkcu2tUhen3+Q4kD7kYTzSNVWxSHbgc\nTkb+wm4Jp9lr9QagCCTVQvKqhC+e1DZL/3xwFQKHJ6fNK09lhkQOtva9ALOw\nZ7RuerAM/5V5Fh0FzaZK3XGsB7NvHxDsroS/z51o6NhtgMPjpYxeshmaS8Go\nJVLU9uEOCWeEsInhHmqr1x6S9x/5MZXgoPuXjFao/TzTAanM7UZ+y3pNc4lu\nLeagVrH+jtNKBJwVnasVLdM5GI4U+W+MpzqswdVRl1/exDvQyyI+9Jx+IPoC\nvN1N\r\n=2wMU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJL1xYr7Mz9YEi7BiF3L2JpJb+VoIlm5W+GoSFbOEVSQIgUmk8a9VmTvT2zEHPmJrMGwosdIa4EWh8dMTK1yNxJXU="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.2_1542099479844_0.20655079227065642"},"_hasShrinkwrap":false},"2.0.3-rc1":{"name":"timpla","version":"2.0.3-rc1","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.5","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.4","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-2.0.3-rc1.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [The Timpla-way of thinking](#the-timpla-way-of-thinking)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel---babel-loader-options)\n  - [Configuring Webpack](#configuring-webpack)\n  - [Overriding tasks](#overriding-tasks)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript / TSLint](#disabling-typescript---tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n- [The three levels of reloading](#the-three-levels-of-reloading)\n  - [BrowserSync injection and reloading](#browsersync-injection-and-reloading)\n  - [Hot module reloading + React HMR](#hot-module-reloading---react-hmr)\n    - [Dev-server reloading based on config file changes](#dev-server-reloading-based-on-config-file-changes)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site--proxy-option-)\n  - [Replacing the html task with Shopify Liquid templating](#replacing-the-html-task-with-shopify-liquid-templating)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#i-m-getting-a-different-version-of-dependency-x-when-i-use-timpla-)\n  - [When I build, javascript files don't work!](#when-i-build--javascript-files-don-t-work-)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd---isn-t-working-as-it-s-supposed-to-)\n- [CAQIAs (Commonly asked questions I ask)](#caqias--commonly-asked-questions-i-ask-)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n## Getting started\n\nTimpla aims is to provide you with an excellent web development experience. Timpla focuses on the truly defined parts in every build process: preparing javascript, css and media files for your websites. Three layers of reloading power Timpla: CSS-injection/reloading via BrowserSync (proxy or server), Webpack JS/TS Hot Module Reloading and full dev-server reloads based on core config changes.\n\nUnlike a `boilerplate` or a `full-blown` development framework, the rational behind Timpla is that of guiding users with an undiscriminating base. You bring your own dependencies to enhance and/or extend the core Timpla build pipeline.\n\nTimpla maintains its own side of the fence, while you focus on the more important aspects of your workflow, or better yet - getting straight into work!\n\nYou may wonder why bother with Timpla if Webpack does everything. Timpla by no means undermines what Webpack is already able to achieve! However, in our quest to find a sweet development environment, we've come to realise that forcing everything through Webpack yields painful load and reload times. Timpla's performance and tooling in a decently sized project is something we're proud of!\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-sample.jpg\" />\n\n### Installation\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Run these too to get Timpla up and running after npx timpla init.\n# The dependencies below are for extending Timpla to have both\n# TypeScript and Javascript running in parallel.\n# Each of the dependencies here are removeable, so we recommend\n# installing the whole bunch first to see how everything works.\n# Slim it down afterwards based on your requirements!\nnpm i --save-dev react react-dom react-hot-loader prettier @babel/preset-env @babel/polyfill @babel/preset-typescript @babel/preset-react @babel/plugin-syntax-dynamic-import eslint eslint-loader babel-eslint eslint-config-prettier eslint-plugin-react tslint-config-prettier typescript tslint tslint-react @types/react @types/react-dom webpack-bundle-analyzer hard-source-webpack-plugin fork-ts-checker-webpack-plugin speed-measure-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .eslintrc\n#  tsconfig.json\n#  tslint.json\n#  .prettierrc\n#  .timplaconfig.js\nnpx timpla init\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### The Timpla-way of thinking\n\nTimpla is a process-driven tool. Each `asset stream` holds a pre-defined and parallelised part in the Timpla build chain. The following assets are built in parallel:\n\n- `Sass` files are compiled into css files, so you may load it as normal in your templates.\n- `SVG` files are combined into single-svgs for use, either via direct insertion into your templates, or your javascript-driven loading.\n- `Image` and `static` asset files are simply copied, but the processes are extendible, wherein you can tap into the build-stream and introduce your own pre-processing tasks.\n- `Javascript and/or Typescript` files bundled using Webpack.\n- Useful tooling such as file size reports, file-revving, bundle analysis and Webpack performance measurements are made available to further enhance your development process.\n\nIn every dev or production build, `prebuild` and `postbuild` hooks are available for you to enhance the Timpla process. Apart from Javascript task, you may replace how each asset-type is processed via Timpla's alternateable tasking system.\n\nTimpla also allows you to register extra tasks via Gulp. These may be added to the pre or post parts of the build process.\n\nTimpla nukes the `destination` folder for every dev or production start. This ensures that you treat the `src` directory as the one true source for raw source files.\n\n### Commands\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files and outputs a manifest file (designed for html/basic use-cases only)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from font src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nThese will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n### Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid), and continues to carry the torch for providing awesome server-side-driven dev experiences.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check\n\n/**\n * The @type annotations are harmless, vscode might just make your life easier\n * by adding intellisense support whilst you type!\n */\n\nconst { configure } = require('timpla')\n\nmodule.exports = configure({\n  javascripts: {\n    /** @type { import(\"timpla\").ITimplaWebpackEntryHook } */\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n\n    /** @type { import(\"timpla\").ITimplaCustomizeWebpackConfig } */\n    customizeWebpackConfig(w) {\n      // The following helpers are available to aid you in extending the webpack config.\n      const {\n        projectDestPath,\n        projectSrcPath,\n        timplaConfig,\n        timplaProcess,\n        webpack,\n        webpackConfig,\n        webpackMerge,\n      } = w\n      return w.webpackConfig\n    },\n  },\n\n  // To get intellisense for more complex configs, follow the jsdoc example below:\n  // html: {\n  //   /** @type { import(\"timpla\").ITimplaHofTask } */\n  //   alternate: p => {\n  //     p.timplaProcess\n  //   },\n  // },\n\n  //  additionalTasks: {\n  //    /** @param p { import(\"timpla\").ITimplaHelper } */\n  //    initialize: p => {},\n  //    development: {\n  //      /** @type { import(\"timpla\").ITimplaHofTask } */\n  //      prebuild(tp) {},\n  //    },\n  //  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the `alternate` option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs for reach of the asset tasks below)\n\nFull configuration is available through `.timplaconfig.js`. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `./src`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `./dest`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        /** Options to pass to the del function. */\n        delOptions: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** [Gulp cssnano](https://www.npmjs.com/package/gulp-cssnano) options */\n        cssnanoOptions: {\n          [option: string]: any\n        }\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixerOptions: {\n          [option: string]: any\n        }\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sassOptions: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'png', 'svg', 'gif']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     * Defaults to the `javascripts.dest` path. e.g. `/javascripts`\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babelrc file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzerOptions: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /** Instructs timpla on how Webpack should run in dev-mode. */\n    development: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `cheap-module-eval-source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) options.\n       * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n       * Defaults to\n       * - `reload: true`\n       * - `noInfo: false`\n       * - `quiet: true`\n       */\n      webpackHotMiddlewareOptions: IWebpackHotMiddlewareOptions | false\n      /**\n       * In dev-mode, Timpla supports ESLint via the ESLint loader.\n       * By default, Timpla requires the eslint package to be installed.\n       * - `npm i --save-dev eslint`\n       * - Set to `false` to disable ESLint.\n       */\n      eslint: {\n        /*\n         * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n         */\n        esLintLoaderOptions: IESLintLoaderOptions\n      }\n      /**\n       * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n       * By default, Timpla requires dependent packages to be installed.\n       * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n       * - Set to `false` to disable the plugin, and TSLint support.\n       */\n      tslint:\n        | {\n            /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n            forkTsCheckerOptions: IForkTsCheckerOptions\n          }\n        | false\n    }\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   *\n   * May also be used to individually `disable` the default\n   * middleware added to proxy and server modes via middlewareConfig:\n   * - webpackDevMiddleware - disableDev\n   * - webpackHotMiddleware - disableHot\n   * - historyApiFallback - disableSpa\n   *\n   * Set proxy/server.middleware to `false` to disable middleware.\n   */\n  browserSync: ITimplaBrowserSyncOptions\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /** Instructs Timpla on post-dev-launch tasks. */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla to add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\n/** The partialised Timpla Config so users' may opt in to only customise what they wish to. */\nexport type ITimplaConfig = IRecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance.\n  gulp, // A gulp instance that can be used to register new tasks.\n  projectDestPath, // Resolves a list of strings to the project's dest path.\n  projectSrcPath, // Resolves a list of strings to the project's src path.\n  timplaConfig, // The full timplaConfig\n  timplaProcess, // Provides useful constants such as isDevelopment, isProduction and INIT_CWD (your project's resolved base path).\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nYou may use javascripts.babelLoaderOptions to fully control how the webpack babel-loader works.\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['@babel/plugin-syntax-dynamic-import', 'react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nHardSourceWebpackPlugin # improves build time performance\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable/can be disabled. For example, javascripts.tslint.forkTsCheckerOptions accepts ForkTsCheckerWebpackPlugin configuration options.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (timplaProcess.isProduction) {\n        // do this;\n      }\n      if (timplaProcess.isDevelopment) {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode.\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript / TSLint\n\nIf you followed the installation instructions above, please uninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from .babelrc.js. Finally, set javascripts.development.tslint to false.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet javascripts.development.eslint to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n## The three levels of reloading\n\n### BrowserSync injection and reloading\n\nTimpla uses BrowserSync to inject stylesheets and notify the browser of full-reloads when files change. Timpla pre-configures the watched files for you, but you may also extend it through the `files: [globs]` config.\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['when_this_changes_reload_the_page/**/*'],\n  },\n}\n```\n\nWhen writing your own tasks, Timpla Helper passes the browserSync instance so you may stream(inject) your changes on the fly!\n\n### Hot module reloading + React HMR\n\nAny files you mark as hot won't cause the browser to reload. This is useful when you need to keep the browser in its current state.\n\nHot module reloading is enabled by default. Setting `javascripts.development.webpackHotMiddlewareOptions` to `false` disables it.\n\nTo support react hot module reloading, please install and add `react-hot-loader/babel` to your `.babelrc`'s plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n#### Dev-server reloading based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babelrc, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > development.timplaWatch. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting `development.timplaWatch` to `false` disables the reload server.\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n### Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### When I build, javascript files don't work!\n\nWe have encountered this happening whenever you switch the `production.rev` setting. Please clear `./node_modules/cache` to force-clear all caches and try again!\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Shopify, Wordpress, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but often do we care less the older project dev environments get. By delegating the `core` to Timpla, we hope that more focus is put on extending, rather than maintaining!\n  </p>\n  <p>\n    Also, we often get into the framework-exclusivity. Think of Timpla as a consistent tool to bring over to projects.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated and extensive configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in TypeScript, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:start # starts the tsc watcher, compiling gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.3-rc1","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-pXPW+kxaG97S1uJ10unjHUE1b1pxuyvdWxMyg5IDxRivB2z4Pyomxw8nGPDRwZPlZU+X6uOjbjy18nmEy/R4aQ==","shasum":"3f3e7bf72b24b7db11062197abf50bf130d53f35","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.3-rc1.tgz","fileCount":104,"unpackedSize":228124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb64q5CRA9TVsSAnZWagAAtfIP/2cUlWYdcv45A2VutJFa\n+FVR9+2OUvHEsJFn0JP/tKNah7EovtQXoatFk6P7GiPkmoUXAE8E+RU0sUS6\nSLgY/8dASIU0F+mydHrhLlYl0pr80wU0k0g9yO4Yd6GaHr5n8WtAOWW/tLsF\nk0/QdSQ5BZfvpf3QB0vkg6RUhdqYPkFqEQxMSYzdJlz5WagcO6pzpTT91yIm\nZjzPMK26Fnm0w14bJT5N5wzw3exCvXZbeQxbvorjI75qlZfAZE37OZTB4M6m\nJOrEBRJMtaxBtGHdOh54+rGuvdTfA7WrZwssYfax+Cb4svjC0r+q6RVdvhPR\njzGDtqlxXhlZwPJAytwOsLzxqVbJGlVxbo7izcrPEhg7ykfHo5IuxPMEzFIU\nQUWlzlonkvsDOF1XqMXTMln6UmSeG+Gqc3EfD3tFHr9fxMmJifxETKS+PCt9\nhf9EDJ7esOH1C3XBNi0U8cYnDpb2Z6R70mcfN3MGzzGKYE2o9krfWiMefUvD\nGZDqCqztleZxk6QbTwfRvpokwNQulMWBSjneX0LTRSxpNZsz8/1pIGRILRYy\niLzId1B5qEbUulgwRJpAoAYTuGMlkUjCPc2yV1Xfkoqz6ZHSIAylh+A/e6mK\nnxQcQEPfrH4NQ9OrNYlzgxMfceWRTxtIqr74hyJrhnuR2hVxTYR8aLn0gQ1d\nU1sT\r\n=Cd/A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDusKJdKSBJRMD+wdHAcG3ujmf987oVVlI79SWb5rPJzAIhAIiX3X8LisgYB5YCdvdcynF3jUmlYHyAMzm+qZbhnEbY"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.3-rc1_1542163128423_0.7426437346932269"},"_hasShrinkwrap":false},"2.0.3-rc2":{"name":"timpla","version":"2.0.3-rc2","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/chalk":"^2.2.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.5","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.4","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-2.0.3-rc2.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![Coverage Status](https://coveralls.io/repos/github/igimanaloto/timpla/badge.svg)](https://coveralls.io/github/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n\n</div>\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [The Timpla-way of thinking](#the-timpla-way-of-thinking)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel---babel-loader-options)\n  - [Configuring Webpack](#configuring-webpack)\n  - [Overriding tasks](#overriding-tasks)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript / TSLint](#disabling-typescript---tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n- [The three levels of reloading](#the-three-levels-of-reloading)\n  - [BrowserSync injection and reloading](#browsersync-injection-and-reloading)\n  - [Hot module reloading + React HMR](#hot-module-reloading---react-hmr)\n    - [Dev-server reloading based on config file changes](#dev-server-reloading-based-on-config-file-changes)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site--proxy-option-)\n  - [Replacing the html task with Shopify Liquid templating](#replacing-the-html-task-with-shopify-liquid-templating)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#i-m-getting-a-different-version-of-dependency-x-when-i-use-timpla-)\n  - [When I build, javascript files don't work!](#when-i-build--javascript-files-don-t-work-)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd---isn-t-working-as-it-s-supposed-to-)\n- [CAQIAs (Commonly asked questions I ask)](#caqias--commonly-asked-questions-i-ask-)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n## Getting started\n\nTimpla aims is to provide you with an excellent web development experience. Timpla focuses on the truly defined parts in every build process: preparing javascript, css and media files for your websites. Three layers of reloading power Timpla: CSS-injection/reloading via BrowserSync (proxy or server), Webpack JS/TS Hot Module Reloading and full dev-server reloads based on core config changes.\n\nUnlike a `boilerplate` or a `full-blown` development framework, the rational behind Timpla is that of guiding users with an undiscriminating base. You bring your own dependencies to enhance and/or extend the core Timpla build pipeline.\n\nTimpla maintains its own side of the fence, while you focus on the more important aspects of your workflow, or better yet - getting straight into work!\n\nYou may wonder why bother with Timpla if Webpack does everything. Timpla by no means undermines what Webpack is already able to achieve! However, in our quest to find a sweet development environment, we've come to realise that forcing everything through Webpack yields painful load and reload times. Timpla's performance and tooling in a decently sized project is something we're proud of!\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-sample.jpg\" />\n\n### Installation\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Run these too to get Timpla up and running after npx timpla init.\n# The dependencies below are for extending Timpla to have both\n# TypeScript and Javascript running in parallel.\n# Each of the dependencies here are removeable, so we recommend\n# installing the whole bunch first to see how everything works.\n# Slim it down afterwards based on your requirements!\nnpm i --save-dev react react-dom react-hot-loader prettier @babel/preset-env @babel/polyfill @babel/preset-typescript @babel/preset-react @babel/plugin-syntax-dynamic-import eslint eslint-loader babel-eslint eslint-config-prettier eslint-plugin-react tslint-config-prettier typescript tslint tslint-react @types/react @types/react-dom webpack-bundle-analyzer hard-source-webpack-plugin fork-ts-checker-webpack-plugin speed-measure-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  .babelrc.js\n#  .eslintrc\n#  tsconfig.json\n#  tslint.json\n#  .prettierrc\n#  .timplaconfig.js\nnpx timpla init\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### The Timpla-way of thinking\n\nTimpla is a process-driven tool. Each `asset stream` holds a pre-defined and parallelised part in the Timpla build chain. The following assets are built in parallel:\n\n- `Sass` files are compiled into css files, so you may load it as normal in your templates.\n- `SVG` files are combined into single-svgs for use, either via direct insertion into your templates, or your javascript-driven loading.\n- `Image` and `static` asset files are simply copied, but the processes are extendible, wherein you can tap into the build-stream and introduce your own pre-processing tasks.\n- `Javascript and/or Typescript` files bundled using Webpack.\n- Useful tooling such as file size reports, file-revving, bundle analysis and Webpack performance measurements are made available to further enhance your development process.\n\nIn every dev or production build, `prebuild` and `postbuild` hooks are available for you to enhance the Timpla process. Apart from Javascript task, you may replace how each asset-type is processed via Timpla's alternateable tasking system.\n\nTimpla also allows you to register extra tasks via Gulp. These may be added to the pre or post parts of the build process.\n\nTimpla nukes the `destination` folder for every dev or production start. This ensures that you treat the `src` directory as the one true source for raw source files.\n\n### Commands\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files and outputs a manifest file (designed for html/basic use-cases only)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from font src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nThese will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n### Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid), and continues to carry the torch for providing awesome server-side-driven dev experiences.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check\n\n/**\n * The @type annotations are harmless, vscode might just make your life easier\n * by adding intellisense support whilst you type!\n */\n\nconst { configure } = require('timpla')\n\nmodule.exports = configure({\n  javascripts: {\n    /** @type { import(\"timpla\").ITimplaWebpackEntryHook } */\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n\n    /** @type { import(\"timpla\").ITimplaCustomizeWebpackConfig } */\n    customizeWebpackConfig(w) {\n      // The following helpers are available to aid you in extending the webpack config.\n      const {\n        projectDestPath,\n        projectSrcPath,\n        timplaConfig,\n        timplaProcess,\n        webpack,\n        webpackConfig,\n        webpackMerge,\n      } = w\n      return w.webpackConfig\n    },\n  },\n\n  // To get intellisense for more complex configs, follow the jsdoc example below:\n  // html: {\n  //   /** @type { import(\"timpla\").ITimplaHofTask } */\n  //   alternate: p => {\n  //     p.timplaProcess\n  //   },\n  // },\n\n  //  additionalTasks: {\n  //    /** @param p { import(\"timpla\").ITimplaHelper } */\n  //    initialize: p => {},\n  //    development: {\n  //      /** @type { import(\"timpla\").ITimplaHofTask } */\n  //      prebuild(tp) {},\n  //    },\n  //  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the `alternate` option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs for reach of the asset tasks below)\n\nFull configuration is available through `.timplaconfig.js`. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `./src`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `./dest`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        /** Options to pass to the del function. */\n        delOptions: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** [Gulp cssnano](https://www.npmjs.com/package/gulp-cssnano) options */\n        cssnanoOptions: {\n          [option: string]: any\n        }\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixerOptions: {\n          [option: string]: any\n        }\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sassOptions: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'png', 'svg', 'gif']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     * Defaults to the `javascripts.dest` path. e.g. `/javascripts`\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babelrc file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzerOptions: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /** Instructs timpla on how Webpack should run in dev-mode. */\n    development: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `cheap-module-eval-source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) options.\n       * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n       * Defaults to\n       * - `reload: true`\n       * - `noInfo: false`\n       * - `quiet: true`\n       */\n      webpackHotMiddlewareOptions: IWebpackHotMiddlewareOptions | false\n      /**\n       * In dev-mode, Timpla supports ESLint via the ESLint loader.\n       * By default, Timpla requires the eslint package to be installed.\n       * - `npm i --save-dev eslint`\n       * - Set to `false` to disable ESLint.\n       */\n      eslint: {\n        /*\n         * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n         */\n        esLintLoaderOptions: IESLintLoaderOptions\n      }\n      /**\n       * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n       * By default, Timpla requires dependent packages to be installed.\n       * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n       * - Set to `false` to disable the plugin, and TSLint support.\n       */\n      tslint:\n        | {\n            /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n            forkTsCheckerOptions: IForkTsCheckerOptions\n          }\n        | false\n    }\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   *\n   * May also be used to individually `disable` the default\n   * middleware added to proxy and server modes via middlewareConfig:\n   * - webpackDevMiddleware - disableDev\n   * - webpackHotMiddleware - disableHot\n   * - historyApiFallback - disableSpa\n   *\n   * Set proxy/server.middleware to `false` to disable middleware.\n   */\n  browserSync: ITimplaBrowserSyncOptions\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /** Instructs Timpla on post-dev-launch tasks. */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the opn package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla to add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\n/** The partialised Timpla Config so users' may opt in to only customise what they wish to. */\nexport type ITimplaConfig = IRecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance.\n  gulp, // A gulp instance that can be used to register new tasks.\n  projectDestPath, // Resolves a list of strings to the project's dest path.\n  projectSrcPath, // Resolves a list of strings to the project's src path.\n  timplaConfig, // The full timplaConfig\n  timplaProcess, // Provides useful constants such as isDevelopment, isProduction and INIT_CWD (your project's resolved base path).\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nYou may use javascripts.babelLoaderOptions to fully control how the webpack babel-loader works.\n\nTimpla copies the following babelrc file to your project folder. (.babelrc.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['@babel/plugin-syntax-dynamic-import', 'react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\nHardSourceWebpackPlugin # improves build time performance\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable/can be disabled. For example, javascripts.tslint.forkTsCheckerOptions accepts ForkTsCheckerWebpackPlugin configuration options.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (timplaProcess.isProduction) {\n        // do this;\n      }\n      if (timplaProcess.isDevelopment) {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode.\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript / TSLint\n\nIf you followed the installation instructions above, please uninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from .babelrc.js. Finally, set javascripts.development.tslint to false.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet javascripts.development.eslint to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n## The three levels of reloading\n\n### BrowserSync injection and reloading\n\nTimpla uses BrowserSync to inject stylesheets and notify the browser of full-reloads when files change. Timpla pre-configures the watched files for you, but you may also extend it through the `files: [globs]` config.\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['when_this_changes_reload_the_page/**/*'],\n  },\n}\n```\n\nWhen writing your own tasks, Timpla Helper passes the browserSync instance so you may stream(inject) your changes on the fly!\n\n### Hot module reloading + React HMR\n\nAny files you mark as hot won't cause the browser to reload. This is useful when you need to keep the browser in its current state.\n\nHot module reloading is enabled by default. Setting `javascripts.development.webpackHotMiddlewareOptions` to `false` disables it.\n\nTo support react hot module reloading, please install and add `react-hot-loader/babel` to your `.babelrc`'s plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n#### Dev-server reloading based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babelrc, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > development.timplaWatch. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting `development.timplaWatch` to `false` disables the reload server.\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n### Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### When I build, javascript files don't work!\n\nWe have encountered this happening whenever you switch the `production.rev` setting. Please clear `./node_modules/cache` to force-clear all caches and try again!\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths.\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Shopify, Wordpress, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but often do we care less the older project dev environments get. By delegating the `core` to Timpla, we hope that more focus is put on extending, rather than maintaining!\n  </p>\n  <p>\n    Also, we often get into the framework-exclusivity. Think of Timpla as a consistent tool to bring over to projects.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated and extensive configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in TypeScript, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:start # starts the tsc watcher, compiling gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.3-rc2","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-dxdaeMoGcuMvYOgW7W8zhVWzfc02y5maCHN0G5iS99dD6U+UmZxXb3NWS385TPl0RTFyc2FUz5XQnrRz7LyKWg==","shasum":"47f48d432ea7bd9259d1bbe20cc8377d64c21ea0","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.3-rc2.tgz","fileCount":104,"unpackedSize":228177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb643aCRA9TVsSAnZWagAA6R0QAIUqE6hFoD22M6AsmhBD\nLcy4UMdgyOsjPsJBRiDz6od5FJdVRsoauGpEGd/aJjPDuBfJ7JrKxlw3KyKf\nIG9v6jWUr9FYJpfDp001ZqO7qt+CkeyZ7dxO21QTOoMrqDXhm+xDro1F57cd\nhRWbRS6TOXz7NpmjPG+D9eIGjwpcVr+2eyYCo5soQ0n/l+Jgq5kPAalsB2HU\no5QyB6iXoTtv6L6cige7hjqrwf+2fD2pSvF35Z19Hm6DLYvBNbpSYTNbePrl\n2BEByL2sFuDaXtIzke51zhNm26/7mqUZ84XlOgRjge9WLsG7GG8zBFeE766w\nqko1fEZw2+y98O+Y60O0O5GKsnKtSrDmacd8kCxV1VRLL3nILoFNrxKS6yuN\nxT4yWluisqogA1FEsIxQ5gHAjY4El+t0SYPW4YiT8ownv3v3JFyUFVJMvKwv\nLoulmb07lCS17PpBfLRG9CVjOKwFK6+TLtwT7g32vG4jj6MWVE9NUivJvPKX\nlJrAPTxGFt494QxUvqdcysLCO34Vtdu4F6BVAmK5bD5mHofNmTrfOI+WUIsu\nsHiZfzWm1oNnZNzWqJmbvDq1VYtckPTkzLwCvZnrIxAgycXZt4XgQjM5/9wJ\ntMWqQ6+xCuRuedEMdXl04uNrJg8GMvQ+f6oqizMzdfBx30hEMKfIY1X5bgTu\nb5jv\r\n=CpD9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGshC9Udl6t1FtdG8C90sSOIdix6r45QoMskPRW3ZHqSAiAsUiLT5gbCrZ1GEDdfc0f/+i8SqT5seVGHQSFk6U/Szg=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.3-rc2_1542163929653_0.5395257345912232"},"_hasShrinkwrap":false},"2.0.3":{"name":"timpla","version":"2.0.3","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.5","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^4.3.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.1.4","lint-staged":"^8.0.4","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.25.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"6cdcb581424c2b90efaf5b8e327a698f7aa10920","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.3","_npmVersion":"6.4.1","_nodeVersion":"11.1.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-H6m8n8GJoVJ8IBkeJQWQ6Mw+8zeIPpxatgW6H9UkhcJvcs0LotOw5Hg96dy0KajaKiJ4xS0YGcPl4odF4xwhxA==","shasum":"3e8308f26a7036e675c5eee3de8516d0f381e910","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.3.tgz","fileCount":104,"unpackedSize":228480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb65E1CRA9TVsSAnZWagAA5ysP/iEg8GXBR1/MrjmnmrJI\nPhQpfp8hlxCk75f8tz9d9DDDWFWorKsAjEo+2NcvUcvqTLIropPc8w50kQV6\n6zxGsEoZDVnIfshJsljKOfh8jQnqFTFI7qBMe0BHKH88H68tlmmBZjyeCYXZ\nDcglE1Pz0tmYzAzHSj3ViLKtIfrMtNxZET6Xznf7dCGproZt+ZScm6NwoFQ7\nAlIghGwea1eYQrJBn/drcoNKWW1apdnqxy+u0ECaIFrnXxGN8KsnLkXMuh5A\n9Vhm3rNiHLt0xnmmv7odbPyop5CKwmgdeWVDl/0rQVC59B5caYZUsTMKBRF1\n3du8jxKn9NsQUOrk3V3+pS3uqkED0k4qmm/EoPT78imMkCaC3pfp1cDFPYwH\nkomfbsQo89VAbhEIWOKTxvydk0xNcp0bKZxZWDRNRZ6857lUYez06FYrYuRL\nUU0W06uuZWfoJj6lUXT10KBe5QL9r7VlIFyJwUJ+52vKD9IgQhkeELS60W0B\nIzdxSEYC2wFz16vg0u/OG480Lf/9iZXfUXWNPZmmSHaCjgb+eiye7ruFU+EH\n2IpFweY6v+y4FQB6bgqr5jEEx6SRf7L31wBdzHTD2LLkRnLeCh1G2N3Vvdps\nwfEehjVZesbBXBzQu17P4l6s4BDV13wg4oDCljk5kwEnbqSDJ6dsrqjpXlu6\nLIib\r\n=8M+E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3Zy/1z6cuo4MjwzNXiXc2e/qFu7YmpqTuZmxxpwzclAiBACUOrp7NY7YM4PPBp8v00R0x9rQEzi8q0QYsGG0m0uQ=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.3_1542164788249_0.059809428812426235"},"_hasShrinkwrap":false},"2.0.4":{"name":"timpla","version":"2.0.4","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.6","@types/react-dom":"^16.0.9","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.4.15","gulp-inject":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.0.5","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.26.0","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"f8e077dc491016d0b2425ee1acae7328c3173460","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.4","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-Qqgked+NhLY9NdX1ukiN4U+AoDfAiGh4dNeNGk7D3IgLJlPdVWCFqb5ZkncLM6/npDTTS0KjqAl5yw1TVAInCQ==","shasum":"cc37aab3cc4b37c937acd82c52efe235a7f4ab5c","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.4.tgz","fileCount":104,"unpackedSize":228883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9Ng7CRA9TVsSAnZWagAAlJwP/2+vMvQ8ogYDvVEv51IU\ngePXJOzHFYQ0q5Y92X310RZzL9tl7Q+EXmSOj++r5ptxDAByBqGeB1rcTdLx\ntrIVKK7s8KrihImqG5mu8WFJOKN/Dtu0YaljMRt+GqY61A53TDFNPZZeyUMT\nQ4MMvNZCzaV1WhvBiamrktVYFGItLTv96GeVe47uWCJxmzNNy5CTSJ8iiy13\nu/DHTb32r3iWipHUSwXY26cBm5K/cJyohbuJbujRzQ1hZofapiUi06SRpoty\nEmnd193JPhiEKEKapKsL5IXt6880tgMIHbi3wVOQffCkYW84SS5qZrEkUfpg\nuwnuqS29WoXnHuhyCiSPuv8gHbcGM/MG2c/K4xSbt9QwDjlEOh7f4+SJkGjQ\nAdKYVdGRIwG2niS6pXdPHf7QzPb6nD7rAWibs6Y/X3YDER3rBJkt11XN7/v8\n45s9NT2Xw911r0Ddc6xZDmkKB1syfG9ka7dGJGsHiwp3HGndxfrwkci5NvlU\nrkmbEs69gtct8d4EHUUv+ci/s6dpIDMYv6bSLKBQ0YqTae4Ok0hb5b8pqFZ7\nVKfw5/bwPtSsCL/+H7VgOYXoDluHPVfcPnnOLXEvmP+Io4bqSBK300Xauwqw\nPGEQR7tOlROmfuDQbFLeDGXl1iAcWVmssNhVDZ+sAqMd7C3uC4q1/IU3VBaB\nwi5I\r\n=vTGe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0bLQmIInqLeMePyuqjESmL/2evm6FS6O5y566kPYSAAiBBQpAyEBz4pwmF2ghqpqXtDaylpKB5NCxWENgVE7eK3Q=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.4_1542772794641_0.6605420843924534"},"_hasShrinkwrap":false},"2.0.5":{"name":"timpla","version":"2.0.5","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.7","@types/react-dom":"^16.0.10","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.3","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.26.0","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"7010be069a87204a641fb81cac191138f291d225","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.5","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-SI0OI+3kV0tY2uTqwkAMpIl9mVKahVPMeYTHHkr5evQo0Y98Je0liTfy684qwNrXuP10ws+UjjrJ6IlxnkEs/A==","shasum":"31e2cd6ecbd156e0d216c679eb5f370c69da0161","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.5.tgz","fileCount":104,"unpackedSize":229235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9zCXCRA9TVsSAnZWagAA/4kP/AqSviJNbTGstsEysxsY\nsu6IXeQU1Qz+eCfZRDiSQp3d4XiICW5A+4SIfsFwal5/hlfF1bHfgSUUGFVH\nVMBmiROsTVsrQUSw1GsZ0X7yYiiTqptD0VplE1oo54F9WzvEnjcIHSu8rJsF\nwT4P+JQ+TDNVMIZ0jbONCo9L8mOXGe2VPY9WUTSb6zNuAo8brlvTQ2HmfNwE\n79f9fXiKtbe99IP5SFB6TynzkJY71iHJYFc4aemWdvzocVxeR/3MXlSNdE3F\nwlZlhn0JYUnjCElikLvbH1oyMfMG/IaGitqsLowzqvrKmdfCGJa+SWgbcBsd\ncWxbmoKTwJl0fTPBFckkONxwy1svHvSt3XHJCG4MbhrApWeoKxxcPEKlq0fP\nQHsLyv7a/QYhJ4x8YQhiovQLPpeVa34ZJwqw+AA9Srxf69HnUvjeNDrwCdEL\nBJ6igjYinCxLiNz0j9QVWea5+wzcRrkoMGsL1EqDfSTUIRr6X6Ic0zurz+k4\nBzDJpKpltw5S3ZdY0aRpzwuWyHm/g5Ml55RBSPYOw2Cx3h0OIqPh+YM/QPg+\npEq/n73Uer+q0vu734npySBzv8sb5xvLGUvcYU0+ahNHCfTttPS5P5n30+Xq\n2KoFDa9Sy2OhwP42eSY76pTNKemScyIUZUVq/jjt/8QExvSl4fK+yIlu0+G6\niwBp\r\n=0oB9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDhEYWIdei93OxAemMKpLcFLSxh7fYlXGO+Guih4PgKdAiBaqN/wk8B3phN7xD05Q+fMIkLV+hI0FuOJaXaDTcDDhw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.5_1542926486666_0.08044039120674151"},"_hasShrinkwrap":false},"2.0.6":{"name":"timpla","version":"2.0.6","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.2","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.7","@types/react-dom":"^16.0.10","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.0","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.6","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.16.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.26.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"c28bf8f83d6f17fad9aa95b70896827b42561e90","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.6","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-60ytX53QEUXLpw/9i8ZYspvezjuLilWhk24lxlZCtNabENubVGzIqqDk9swD0x48ZOt0l+Uw19G0WzdgWK+R3g==","shasum":"050a51dc02885011d3bb4c8949166a354b92f750","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.6.tgz","fileCount":104,"unpackedSize":230373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/JECCRA9TVsSAnZWagAAzS0P+wRqXha/K/+BeBQdw00w\nK6Y7o3PtMcW88Zn3iRB94ThVkpdNX4DFbuM8hi8NwIJLzDRICKiCGgTAXvuB\nX1fOvpq4TFTwNRb7HRRZro2Oa8vssnDLzglWii3Tt3N7U2H5DRVQWIZ+NU4V\ntSIuj467CAgTi88Z0EpZs74ntP+EJPXiiY6gL/yvdgvAV5+WCUMzK/JWcRU5\n57wY3XvXUhmRFQvcBEUpwBkCbNZHgszIAcZSo/0AfnY2czXWG35wMIRQlASz\nj7rDt+qJnvuorWUmebo6/08yZm1mTqkgsyFR0VNkZqa26k/DJt7JCGZOkL7c\nz+HLK757IL8LFsaSoHgg5hGcC2Lk5vis27cztcZSQs13NHwCRM4GCCYJ/xnB\nwfZuNrczMz0olS/dBgYx1CQb8uzwYzhffci5Er4l+SLnixPg6bv3zh4zspHD\nOSdOBlW3rIuiYkE7OE5snL3czl5QmLD3FF8bhpJd7+NFJu1RZbHtv6YwwqOC\nwJ/cu2ABGlFCWUqEf86g1H56aZhODmV4qg5mX+b592dgpV27hwe0XvenF5Dl\nduNMayQTRuXGybEyuUj4gUuy0IKsQSfUveS2R/Uq2ijpRHQmrZZd4g0/wUO8\nZ3a40e81xvPPju/iEKAywOnT4VRZYywU6yxxOAOy828F6Gn0mLfTn+ziGpfl\nEHdT\r\n=qfnf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGh6xExnbpfxY/cYDmjXZThP5v8Ji7SK4PW9UWoRDdbQAiEA1+wLx9vZ88EemLrKYLWJM1MOZiVOhHD5jTenAY1PfBs="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.6_1543278848995_0.8768710099958312"},"_hasShrinkwrap":false},"2.0.7":{"name":"timpla","version":"2.0.7","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.19","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.2","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.3","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.7","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.5.5","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.7","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.2","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.1.6","webpack":"^4.26.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"5b2eda576796ea82ae991681a0229144e3e0c677","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.7","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-0kxX/7+cypHquvwUdOox0bniposHj7lLC58P9+zJ5TOIZVEVWes9XbeDIS8XR5r4PfePVwjHOQdKAE2jR8wLow==","shasum":"104e3258ca73c2bedf546d2a205a6f4f76bfd13a","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.7.tgz","fileCount":104,"unpackedSize":232246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb/ggKCRA9TVsSAnZWagAAz90QAI3x2dgOwGQvDOvM57eK\nQqFNoRQtmalqRZA3DtOoQQ0fgc92KYFihVO3ZOxd4V3Em2jYJHWPxwWbacD3\nwg2feKWOQeMmOMK2ojF/csfIuQK/mm+kqvZ/SX3aGWt4FtNbSdoTyUEW725x\nzP6Cg0ZEDXFh3AcIV12qP5C7+kZO3wdKSIeEp9pnKIiOxTdjRM+0kycG0OUN\ncsK77kXf34T0S8WRuz4NMkhHmChodf81FqOG9UMNRoKY/YwqtVpHn9ka02JM\n87zqzlRH+qpPp4Yfw09jlofo7quOBLy9AJXVtm8f3KAg+BOcglmUTvScOVKR\nPrNQqVevAamuXSHPybAJa8U4I+CST94wwHZElXUJNj2R8lZ4Sxa4vu7VIang\n9oKQ9FQRPe5Sa6CgijsuCGV5nfPCWktTKTPfOi1q6jMubLxMvrz8LeqtVCxN\n1cIZUHTh+pZOXp5QIQh2N4fLjxl0dP1/DbWNGJB4lmmV5n2AYbP+iyMZlA31\nnOQi8m2AUnH0am8ewo4jscV5B1chV4FPLNJ2lijsbPAvcxUE0KGa9pLfhNc6\nOBRyf0OVF96526gajXUpLfbRMQuNHrCo+HoN9w4F230z+GJ/bnM/Sw0ooU6r\nInK1bPsBymFINwVPWnYJ+/7qRGoVemKdl4NZoWQSrj4hi/NMiT8QIY+ysK/X\n2gkN\r\n=Q40V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQy1giwYknlSeJ7KAVayAxjlz8hMYx6ZhrC0B376ym6AIgc07EadfEg/Dhbr0FC92arJA0yEjj/2QFyK7EyeEgzGA="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.7_1543374857630_0.37879806325518994"},"_hasShrinkwrap":false},"2.0.8":{"name":"timpla","version":"2.0.8","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.20","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^2.2.1","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.3","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-syntax-dynamic-import":"^7.0.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.1.6","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.4","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.11","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.6.1","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.7","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.3","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.2.1","webpack":"^4.26.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"5335e8f1ac9fd366eb8db0ea90274d524eb1d406","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.8","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-zyiwRVjc4iB8HA6m4MPOyziOWvxo05ESU48FSZ6UB/NUe/TnTAPHZQy1oa/VwcgZ+5zZ/GMZKk+PU5VMsNNc7g==","shasum":"11b0790caf1815c672b665df9a6015f855b30f34","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.8.tgz","fileCount":104,"unpackedSize":232277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBE5YCRA9TVsSAnZWagAAxooP/2eF4tXhKfgD5IY3KrxI\nfakX3VSy5jbHOg12oQ1TE0BPYXIBSxfDI0pKOheWeGev5LTkeNmAQ4Xz+3kG\n0KbaQBaldibxrNKfBbZRoq+nGVujYMq8E7TK3jkAHBFh1+t8i0tFl+p4VOd1\n7jf+e2KRpu6zfPN58y929kYaqJCeHrq9eQU7qYMVK90ygCGMSArYRIZTDFnE\nNg6ngv5g2YOPjZ/r/CJKbLuJ7IcDclTtu8e977quKr2NWF4HC45XNKFUVCtm\nAL0x1J5tz/wPG6tkwYUoVLA4KrmauGYgfQV+EuUjA75pDwSAHDkJ92h1utq/\nHBNfZbAGGebrLDljHeiTyIRUOWgA9fkooEwDyExII+YMprm9h3QJWTt2ftiI\n+qxT/HCPKzAOoMHCNTnLkbmWounQI0LoWg8iJic+YqnMM8ZS6tE4gjY+ApbY\nDQDTsJbVuhDwCyK7HvDlVnaU5IxHrcY73yFz7D4B11oPasXJ0g4OBVkscCQS\naZgKnR58yOI0PaBn6mdcSS9p+rWzg7fP2Oi6HgZ8VeVcSFDI7XvCH34VEEAp\nUUJTJ9F6t58fhbrOTEBBdCJ/EI0ZiEVCxZ8LeZTDoNyVuU53b7GXN/WBA6Qr\nSTJt7xj5TkAUu/qh3LReXnftY05mzzAM+nQaATaVbbk1r5qhD+qB3KfYYO7r\nY4NN\r\n=8xA0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAbgRUDMaLg1mI66ObpIoCEVBMYzZxHs0F6Y4rZc+KgRAiB5Qt2h0fXtn2LfS9IEa79ZvCpthIB6fsjOT+k7ehlwiw=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.8_1543786071836_0.9933472041362423"},"_hasShrinkwrap":false},"2.0.9":{"name":"timpla","version":"2.0.9","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.20","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","deepmerge":"^3.0.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-autoprefixer":"6.0.0","gulp-changed":"^3.2.0","gulp-cssnano":"^2.1.3","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.3","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.4"},"devDependencies":{"@babel/core":"^7.2.0","@babel/node":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.2.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.5","@types/fancy-log":"^1.3.0","@types/gulp-autoprefixer":"0.0.31","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.13","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.6.1","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.9.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.12.0","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.7","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.3","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.2.1","webpack":"^4.27.0","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"9187a85d6ee8fb778bad98ccf3b8560c7ad55a07","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.9","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-UOsD+K+eu+JKLTdmLbzf3lg2zU+2feTk+pXuCy2YO+dd2StvgmQbUMiUCT3+WnvKMzltpuTJW8vdSeDRKA8Rmw==","shasum":"034faf807a7b3d67e1ae43aa939105d3b01a7d3c","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.9.tgz","fileCount":104,"unpackedSize":232528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcB1AGCRA9TVsSAnZWagAAAwUQAJN22ZyxVLJHb6LAF7ba\nJWmPYqSrV1Eew5cxRieybrrTVP4TZn3SdiZ2Fm6wtHhM5lsGY+qxm2RIMCaB\niGB1pmAfvPFqK9mzOzAWjEwwtGKExq0dVXC1rut+S8G0uhLR+hUBGeeVvFD1\nWXzliVkFZ6WRcftijqZJFAvPLITreR3h9ol8hWV6s1XzNZF/x+VTz/8oOcWT\nh7WbJZNCrR74GA200BHrJNa3zet478xhAfJFT+rgzAGM8bOTZ72iuxZzuf4B\nScLCGzHpCKyl6Ns6K0q0dw9fq3VOswRuQSzZzd+UyWDFLMAIIn7Jo0um1H7H\nTKYRWClSJ1BHx41yI0RZftv1uj7En3DnOvL02t2RkCpwnkkZoB3PMm38SvM2\nM+348xmzFJhqVPDlNtoyTSqlcrBHhMGrJKFmWgLyLN8Dup16X27hkjQRGujG\nAkUCWPouVrYfRW4XQ2FQ+HW7OfuH5SupWngSyQPVJeHKJGx5LWpBfW8CtR1k\nnAZklJHP3ppyiY+celjBSwf9RBnbzneIztW23yt5XxGI1/ni8VhBRyPAwm7v\ncDRMzOvxZgPMBmMP04BLEeEWbEcNUwyPKofPJk9rWmN2By/kdLjMuqEROchI\ny662sv7waA0UpiNzsFVqE0jtEsHvAQ3fze/A30hwyTINcglutAsYweZsiVt2\nPqQe\r\n=4ZAB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFlB0CDCo1oKSbu96zmvLVWFDZKV4fL1lYUdpKjqFbPxAiAAkEmqyywKZTAvGxYcMWQfGXZn5bXnqPOd6viVSjfIKQ=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.9_1543983109057_0.9774804731962832"},"_hasShrinkwrap":false},"2.0.10":{"name":"timpla","version":"2.0.10","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.1.1","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/cssnano":"^4.0.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.21","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.2","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","cssnano":"^4.1.7","deepmerge":"^3.0.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.3","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.0","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.1.0","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.5"},"devDependencies":{"@babel/core":"^7.2.0","@babel/node":"^7.2.0","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.0.0","@babel/preset-env":"^7.2.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.5","@types/fancy-log":"^1.3.0","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.13","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.6.1","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.0","eslint":"^5.10.0","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.2.0","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.8","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.3","react":"^16.6.3","react-dom":"^16.6.3","react-hot-loader":"^4.3.12","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.3","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.11.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.2.2","webpack":"^4.27.1","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"874ad14b95bcc8de88f6648bd232084e3e7036db","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.10","_npmVersion":"6.4.1","_nodeVersion":"11.3.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-wkUaRElcKQEzcM3PZuI8QWddr+OrD8yn/hhY2/O3ttm2v4GDectedo9eQOYoWbe7xo21mb0jFnryMo++3qb8dg==","shasum":"6ccef9ccdd5bf822cf58ef598f9c50c83db7a8fc","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.10.tgz","fileCount":104,"unpackedSize":233232,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDw5HCRA9TVsSAnZWagAAM7wP/03ZljL5djZ9BcsgtYi0\nVvZZdKCtWlNYpKai3zH1gqBXNJ10i6VBw4ShFDQvgQXUpRXU+bcJdJyiJp4F\n5JI2XE3aCe9gQ7/Nghn+2eW4DY4/O+8+k0UWhnA0bWbMha2o6lK/5/++Q9lM\n/3sC/LCI1L4IsqaJOvKXQxjq8lKqnd/WIWZfzXw3N9Qrn0kTMihbbreLRzfJ\nHAdSLhxbDOuaVDRCbxc1AozZVl/xabzoTRNI+3G14r0psAhhRNo5c8+IAqpn\nJQGCDMT6F6/twYcsiI+mVPHkRbu/HlKE4B+TdhxVVtjgkrv3scukyTpB49L2\nu98dyxV0deAax/jCnI/tOmJWcoy5ir43YTZegSd0pV6/L9XCa/zxNMUZDxfL\nq6aY/8IRh0jmi47I5KB5bYafMFVKyTsoEL5GjYLMdsMwF5FcJNwuJTwto+Tn\n/pvdkm/qOhPj2rBzbCzyiJBr2pfq9SGnYoJNY7hbf6adlfEWJARFWsYcr3jI\nvCVdArWzCYQ/QbssCC318+D5FgY1FexVsHt3r1OJrHxHC03y07Juj4Li7jfN\nXWnbqbYSmZN+RszTI6PZj8JsipCe4oy3chQpARBhRidJOrwEMgdqPvgH5V3i\nG95M9OYouEEnDhB0USSxS4aQ7WuE2w6QLz+wv6765K/qSfoUvU8bSsitzLfg\n0DnP\r\n=WlVt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmZUiCCFeprVzRniBMe1KznltDiWtDHK9tK/2iHRt2vgIgST+Kdm9159AF9P6TiXCHbfAhWSs1yOpgOwqWZs+aNJs="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.10_1544490566075_0.8503719683085669"},"_hasShrinkwrap":false},"2.0.11":{"name":"timpla","version":"2.0.11","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.1.1","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/cssnano":"^4.0.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.22","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.3","babel-loader":"^8.0.4","beeper":"^1.1.1","browser-sync":"^2.26.3","chalk":"^2.4.1","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.5.0","cross-spawn":"^6.0.5","cssnano":"^4.1.8","deepmerge":"^3.0.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.3","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.2","terser-webpack-plugin":"^1.2.1","through2":"^3.0.0","webpack-dev-middleware":"^3.4.0","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.1.5"},"devDependencies":{"@babel/core":"^7.2.2","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.2.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.5","@types/fancy-log":"^1.3.0","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.18","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.6.2","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.11.1","eslint-config-prettier":"^3.3.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.0","eslint-plugin-react":"^7.11.1","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.2","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.2.1","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.9","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.15.3","react":"^16.7.0","react-dom":"^16.7.0","react-hot-loader":"^4.6.3","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.2.5","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.12.0","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.13.0","typedoc-plugin-internal-external":"^1.0.10","typescript":"^3.2.2","webpack":"^4.28.2","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"b127b98f528f27b48fcc983b90d255b344ecdd63","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.11","_npmVersion":"6.5.0","_nodeVersion":"11.6.0","_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"dist":{"integrity":"sha512-cNI624z/UTYwOj8EQXbSNs6jQeKoeY9UmGjKm/6NajDZfI1N9Lg4k52Zuzwp5fIIu5UMv85W0fSPcASJ66YJMw==","shasum":"6d95ca3d6a0390d1cb20c2adf61c29878aac4210","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.11.tgz","fileCount":104,"unpackedSize":233438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJTqPCRA9TVsSAnZWagAAIL8P/0fW612sVrLhldDjnEaO\nzSkv7wadO6ZzhJ420obYA0aDyK69tsLID1X/Sl2bNrFj1m4mG2r5YqNpa6QB\nyjIQkyPgoPr+rjheBIb9sm0dbv0L+eThG78h2nyYFEZoqgkZiDgZzKb2su8+\n7fP5sCevfkX8U6MnK+43Qq6F/LWdfPBcxCKVvCXh8rLdDNRzzuf7cElxholz\nBThakiUGcm1+da/Vs66ysaU/Zc47LPKmOOcKeGZ5L+PZcVQLAUIL1vC6czbz\n2u/H6AwwDJ9w9oPeG8UEIFVDD5zIUBRjArmXetgdou9FDlOHpSpnlRz3LJ+O\nGxmF4bo56UclAzFb/J3R9Zq5eJ/2QsD5F9kEwhruAXdgGZsqmyu/67RcZeuq\n8dFOU4jbzPARcMrNHU3xv84gRDZEGnGpgsZMWXmqpAxdbBg6xOkcyBQppGPJ\n40/Y1hGIzBVH0pn1VFQOq8wIgBv0KMs46tgMDdTTL1M9Bkt2s7CwpFc1xJKk\nXFj7g8icdd6hZy5GLh8QtAMK3+2ieNkPyyLHxmaCBH97WIOgSREo9D8/s5bq\n6reAl2R2fXClS9sHrtPTfoSaWkPmImmwXZXjpclypePgwVaiS9XhEtAc8GJ+\nQax3kpM//9NOjJd9+eYxyfklghA0sukQxrY4xY1o2IooCzvbARP3GGhhvV9E\nLLIa\r\n=rAAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAVDXugmllMavrb+/DexMWZcKk9qZ922k9dJhPU8r4+pAiBIjjbFXMkjjUz5Jb4TmgofcLovA9CeRbjBWjkEe0rqMg=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.11_1545943694971_0.3731203549797397"},"_hasShrinkwrap":false},"2.0.12":{"name":"timpla","version":"2.0.12","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.1.1","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/cssnano":"^4.0.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.23","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.6","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.8","deepmerge":"^3.1.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.1","through2":"^3.0.0","webpack-dev-middleware":"^3.5.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.2.2","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.0","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.5","@types/fancy-log":"^1.3.0","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.7.20","@types/react-dom":"^16.0.11","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.7.0","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.12.1","eslint-config-prettier":"^3.6.0","eslint-loader":"^2.1.1","eslint-plugin-mocha":"^5.2.1","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.2","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.0","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.9","npm-run-all":"^4.1.5","nyc":"^13.1.0","opn":"^5.4.0","prettier":"^1.16.0","react":"^16.7.0","react-dom":"^16.7.0","react-hot-loader":"^4.6.3","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^7.0.1","tsconfig-paths":"^3.7.0","tslint":"^5.12.1","tslint-config-prettier":"^1.17.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.2.4","webpack":"^4.29.0","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"8f9919da560345add730c0c4b67293b8d61644de","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.12","_nodeVersion":"11.7.0","_npmVersion":"6.6.0","dist":{"integrity":"sha512-u5tCzd8MJ9jPIeKZlDvtrppcHOjms825RuR/skBJqFttiuN8HbUZtoQZWwWvBHWoFDIIdFMptvenm4GE+Q3Kfw==","shasum":"3a504b152a331ac8ec1dd0cf5837f97c00cc647e","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.12.tgz","fileCount":102,"unpackedSize":233074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcRmWyCRA9TVsSAnZWagAAUJoP+wSQ7pGM1blAjrVFUJiP\nHrrvx/4aqg7yk/6Hayb0R7jGtPghLZa99G/8W8Mn6ubcqS3Yq167c3yKf5fR\nSs296q/GgXW41NfeFVVmsQWeKOdqf9cgaCiMJhBsxX565Y0UJNQdd/GsCjLl\nCJhUpzpo379HNfl6QD/rH7Lmagp/JhpCY8Xb+TVGpWOENgzaOx/sqQgCEtGo\nwWTSRXzbbabmNYZaSEcIiKfBM930ObgtlXWttTe6ureTpRk9vVMXJJkJDZ9h\nmQb3h3lwlaH191NOFgQ6OZrTT/FtvDQ/Ayy11PPMXGhZopGn+tG1ZAuH4M6J\nCvxew149ayiEHTTTff2OPq++746mpRbZUeB9cq+l/P+1XI+6GKBFwN45aiB4\nWuPBOfyWqQolm13hRiuRL7AmmchclIGg2GTqW32nbYJGl/z5N8+9HqyY9/R1\n6pCYr0VWZyh19I3S5Y0miqdAtqVwb0ZXx6LzyRXNjNIyOepXCj3OP0CLx9y3\n9GFO2BYeoecLlY4gOnI1n3SRQMtA6DRv1f0QEeZf/VvexCZkwwlEe307NGj/\n/Nr8uyN3H0+1AttZWqnNhDAsdOsXcPR/z6FoaD1iejq5ijz7f0E5ibOaAoTt\n25fZRJdbDZdAifvvKUBRCydDw6wPU8aPMeVC0YRcM+u1aAjIITyrdp6lSWem\nqzBq\r\n=O8ww\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH+RV8Gn8zLE37+XhSH4F/TKsD+ecuBp/Uf9V26ojDOtAiEArE6quQBUQui24HHWS2VDaE5PggNe66vPOGBgQjwdEfU="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.12_1548117426113_0.0755962452706882"},"_hasShrinkwrap":false},"2.0.13":{"name":"timpla","version":"2.0.13","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.1.1","@types/babel-core":"^6.25.5","@types/browser-sync":"0.0.42","@types/cssnano":"^4.0.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.0","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.7","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.8","deepmerge":"^3.1.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.2","through2":"^3.0.0","webpack-dev-middleware":"^3.5.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.2.2","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.1.0","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.0","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"0.0.31","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.0","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.5","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.0","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.2","@types/react-dom":"^16.8.0","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.4","ajv":"^6.8.1","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.13.0","eslint-config-prettier":"^4.0.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.2.1","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.2","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.3","mocha":"^5.2.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.9","npm-run-all":"^4.1.5","nyc":"^13.2.0","opn":"^5.4.0","prettier":"^1.16.4","react":"^16.8.1","react-dom":"^16.8.1","react-hot-loader":"^4.6.5","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^8.0.2","tsconfig-paths":"^3.8.0","tslint":"^5.12.1","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.1","webpack":"^4.29.2","webpack-bundle-analyzer":"^3.0.3"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"93d0095c03c381bb41e44baa6ebab6284c2254e6","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.13","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-0FhIteKMOGVo5M3brQ+nKFtlMMaMFqcxYpkNwfQlihkoD4qAetef/lEZpjn+Jc7NxWTDdwnk89yYEi0UJVB4iQ==","shasum":"9eb7d23d87b9a02c92375eda0e0fedddb55949ba","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.13.tgz","fileCount":102,"unpackedSize":233397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcW07JCRA9TVsSAnZWagAA7xAP/3Ltwz4CuuwqWZRyVIQA\nEK+KbS/oMmUw0nEH1OqbZSvVU33p0zLYIhu3H9BDbr21+AwJpzulH6SrUSSZ\noC9gKCN2QVjmL2yNU2I+yfdW0FxIu0YwXO6JQ6vBzwiv7ewLianDlZMIMViq\nsbqySBbS4Iub3/81W7ddrEddaQ0lETBUB+Mamfx89axd3xeqjftkfxgbrdOT\nB+qUzSnS97ENbDPx0w5DX2NOHr1WF44N7Hrxq8usxuwx/TFxCU/6LqhS3+L7\nF2RTaCbAaQhC9jFYuIaV0XW8oQh/voTUcEO5cKqXJHfLVrS6d6We1J2w7AYd\nXek0In4tSaZJ6JkcZSXfGVb93IjeX1f1dDxfdPLiUQcT+BBjyJtR7xj5XE3Y\nqYPg0qlGYTgSY9mSSGbA/YeR61Qz6nJHuz4l5fMHzUBmEQsDIrk+u5LINqGK\njk1b+2lGrx3wDSX2oX2PNdpNkqL9KjsbhRdyd/naz5XzpJ9ylYEbIYShnPXu\nmkksnWWUWbWhG/J6u1SccHvuz2NHjtLfWVdZ6sUFW2I2Dp6VHQwnA4nUX7Bw\neqqvUNlt45PmhovMqOIC8V/T+rLFTvEhThM5jYAXEP0PVD1kXrPDgoQiIuHT\nKsUDjeq2XPkM07W7PfvPAqf6iDSItItVFepe+IS6fNoUzyrMR5ahnrsIJnzE\nT02Y\r\n=pCHl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHu8n5Y9ZiaTbPXVWTvM0UTkleAlHTocibWpjNsJq7EzAiB2S60lkIpUZ8/kUc6M7KLDtqVFCliYXrQj6qosi61P7A=="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.13_1549487816056_0.5527400803465752"},"_hasShrinkwrap":false},"2.0.14":{"name":"timpla","version":"2.0.14","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.1.1","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.42","@types/cssnano":"^4.0.0","@types/del":"^3.0.1","@types/gulp":"^4.0.5","@types/webpack":"^4.4.24","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.7","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^3.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.4","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.2","through2":"^3.0.0","webpack-dev-middleware":"^3.5.2","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.3.3","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.0.0","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.1","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^3.10.32","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.3","@types/react-dom":"^16.8.2","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.9.1","babel-eslint":"^10.0.1","coveralls":"^3.0.2","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.14.1","eslint-config-prettier":"^4.0.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^0.5.2","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.4","mocha":"^6.0.0","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.4.0","prettier":"^1.16.4","react":"^16.8.2","react-dom":"^16.8.2","react-hot-loader":"^4.7.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^8.0.2","tsconfig-paths":"^3.8.0","tslint":"^5.12.1","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.3","webpack":"^4.29.5","webpack-bundle-analyzer":"^3.0.4"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"68da2c17eca372f977425f681446435ee0475882","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.14","_nodeVersion":"11.10.0","_npmVersion":"6.8.0","dist":{"integrity":"sha512-w42EMAU6eVxrNONdoeMjk6mnWqhIsQ6+ncMVF6iXqG/LB2AZ9Rw+bHYx/RmfF5WNEG9dbWOahV+RRao2rskl4g==","shasum":"45bde5acd1badc271c5897f6ebca1ead28f5e6f4","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.14.tgz","fileCount":102,"unpackedSize":233875,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcazrkCRA9TVsSAnZWagAAu6cP/itvbESjf+CFTjp/nGGF\nlR1BajMQLjn2obsNUqWm7NlGJJHpxAGBOMMCd53bgDOiFDRORWJJ0S4rbIn9\nQXhqPAQ98A57xdnpzHbHXCs1k9CuhcRsBHA9RIx37gG1x5ekM3qvxTLC1hMH\nArYNAlRXcg9d07b4XNMkYB2HYU040jvWFIJySPdpFDAr/lBRPz61O31JY3aY\nzts1gfjYtgJB1dPlqTfUBGx3yitf/ls4NcvZMkTY+NaI9I3XVMkePhsi2XFc\nVUdxeR4yP75WR9jVlhLkAdzhMtMAovqSDgMiWDzFWoret0R2XicDwMZCV4yn\n11+qiZwbL1h0Ayqhapcm4c0mTsdSMCw+s3DPrA6KG6/iA7ANbfXIwD6rf1Ad\n+nLECfVUPMyy4vGsecySdtcyiPUvFwKOdRxZtNLLfEnTaGrCWCr5ef9BVHRF\nyvk58crQIvS5P9OVW7bmzvU5BmnDizPKOhca+J6AB7eWUvczMAHPDH8a2LH2\ndE5XoUM44m6BOFza99oRdFz9G2KNOZymm6TerbaoI1TdBNBCTqye7+QBoZFd\nh0uAGqmMwnBjhcbRWxbi2GCIrDw+n3GMZSWpx9QvyfKCbxQ00+J4cfncLHmb\nTI62mk9h3hUHLmkdRouLZ75gA+ptopRxAjSDsb1GhUVCNuz08PanLaNv0Pkk\nS+0Z\r\n=i5W3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsUTv+RsC6VEvWLxD1g+PkKKxRy8AQI+q98pmFgvTvnAiEAr7Rv5qYnBFBldc+389CshJBjcCDQe1NJxUugKSaOwYE="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.14_1550531298984_0.8232821595799809"},"_hasShrinkwrap":false},"2.0.15":{"name":"timpla","version":"2.0.15","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.25","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.10","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.3.4","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.0.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.1","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.4.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.13.1","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.3333","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"b98793f058aeca97d00965175aaefe94261424a1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.15","_nodeVersion":"11.11.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ff7bERbBMi789oKILMU81BEW91bf+I06yCjmCbJL3x7DKR1DoXRTFyv2H7wjQi2Xm0hdZvrK0VQY4WYO2+TXeQ==","shasum":"b88df0c08e245ff6c53d902ed837bde679b1452a","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.15.tgz","fileCount":102,"unpackedSize":234317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchDr9CRA9TVsSAnZWagAAH6YP+wSCOiHpIe7Nusf96QSO\nCEr/ggz6Eo5m2WyUR6RfmupkLm60N0Cn6XgJ2ARPlJ5fDiBsRqOyyPFepQEc\nwMl5JQElAlDBqsAWFa8zV9kt8oq2RgL6rkzlZFmda7Tr7O2OKYw19DbiTeOf\nvXzT8/th2dXWq0zUWyng5JfoheL//KB1F0AqPjlkOODvFp+dowyWljlmgQzq\n1l3tkBvICHxwaRBhaZgaO3hqBXK78OzkOOU+2KHFI4mmmbuNCn4TnUTL2CkT\nfNld9GgBQBjxl+e6JkD+dzRXipk7cCKkhF+p+Fz3WkodGyJX7EouJGEMTJ/z\nKniydm+Gg0IpPdLqrVM9wbuBJVz7Zrui5k1KIeIHOuWz5cRX4jZa/g2Xo9UM\nxGNmKisHm+osrrMRl70Te0h+zUljjWqDCHvahfoVH0ANTMKPcNpm1PQfkBuU\njlf6s2RCQl7MZ+XSjydFty8pAAwATa1QgcknZlaazZR6gQ31HWaCXt3uasmL\nCfxu2t7ZPLs5S0G+HNp5ymIe1jIwRif6lflSasMKz7OC8QxK4pTU4AdLBgU/\n+YV4h+qdzXtuHN5ujNsvu0RfMJtSf22V1HRIZ9wVpq33U2wn+EnnrhyAIv1X\nvGoeGzlpTxlkX/XUrZIEKBUL/ovuyiRrfHp/0E04izmrNSBP97mS9WxD3Skf\nqhQQ\r\n=wOEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHLGs/7WlZ2moawPcs2k8L+7eNFn3CpZZh+L9UPVOqS9AiEA63lNBznHq/Mfkhn9lvldpooyqoPk6/yfaXTi6DMYvCE="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.15_1552169724929_0.4935089332973652"},"_hasShrinkwrap":false},"2.0.16":{"name":"timpla","version":"2.0.16","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.25","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.4.10","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.3.4","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.0.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.7","@types/react-dom":"^16.8.2","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.1","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.4.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.13.1","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.3333","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"ba6dd45c0952dfbcf62e721b2cd4d2b73eeb54fe","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.16","_nodeVersion":"11.11.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6l1karfNt5bRGdbYnux2Vfx6V78fCm8us5axOU1hG+zM/P4G1AwzRKtXi8DdD5a1VVFk+wesETp5CuyD+HOE5Q==","shasum":"177d89730bf7c6aefae5eeaaaa997c934205485c","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.16.tgz","fileCount":102,"unpackedSize":234717,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchcySCRA9TVsSAnZWagAAoIkP/0n09xktYdJPs5DzG1+o\nCtPZCOijC+jiX7PKV0/Bpxr2ufgWKaqixY9tYpfA2stsM+hSmVev5vKln7G4\nE+yCp2X9MKQKDTlSpnCQphqDD4OaxE6+ZewDmGjb0H4jSpm2J9TjSZo7Wy4p\nXurpj+/MnoGc7R16ofzVmUCAUc/Dd9gYymYqF0/tTK7VuTvag3E9xRUE+50M\nbzNR4trv3lEzsawCh1q/wsK5oCfVph0lMAR+1xkm8Le6juGtcjlh0TDc/17e\ngYDyuVSf+6mqayQjtZLQ5CLXsiNdPbvhKXkoxpIq2Pm/5CN6xzewjt/m2iHV\nULTHi6TRohx7Y4tlBy+zuy0anR6z7Z1YSROQN1lknzSO59vD0rfavKz6DTrU\ntpCU3m9064scUfpicNzf962tGmBBcPEb/IdBXs1dbFg3dv1bHMkRoZmq7xrp\nHtU8sqtsOXMFTw91FWXnUc90oMmBvPN/4n7zhkWFgZlj2FNsFm8ZEGMlTl0l\nEI1/j3O8FtZx2AeTXf7bEiJSmdpDtzB1gf7zrMeKtRD5kU6nIoyf01czr1Fm\n0Kd86f/GEfkQruHMpdKQ6u0R+jgzHPumKo93lxPAyYkqnZvSJspefOAdBq9S\nzmNUr24kPqsR7YgIZd4nunXHAk+zfR3vnMRIHE4+D5vUrVY3v58qKLGyJAKV\nExJH\r\n=dtLi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6KxGSaADYJJQirdRJrdrWcQFS1PedmPm+ZtutZNvu7QIgNXJWaouct5fOnbVKnGpmaXgUymwj0Qaj+tQ1QT17i64="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.16_1552272529715_0.9516416806375247"},"_hasShrinkwrap":false},"2.0.17":{"name":"timpla","version":"2.0.17","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.25","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.0","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.3.4","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.2.5","@babel/preset-env":"^7.3.4","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.0.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.8","@types/react-dom":"^16.8.2","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.1","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.4.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.0","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.14.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.3333","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"64dea8821fe8a7afc7e7dd6c251278faf3fbddf3","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.17","_nodeVersion":"11.11.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-DsDM+xwYKbP5Zo6B1wbczxmFwGIawHEm18wuYNbFd6ART0ttADn64N3+zEroW1s0Bs7W03KLtyx6mGd7cIMc3w==","shasum":"26586e53f07bbd9cbc8bc8f90d2e25cbc6f48a2f","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.17.tgz","fileCount":102,"unpackedSize":234922,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcisDFCRA9TVsSAnZWagAAvw0P/1HGJ3oAQBbNRR61PsFr\nZ983IDY/miWAJ+trwMG3WlaCxTfyN7PrBb2PZ6ceba/IYSn9nxPKTyc8zibf\n1+Xu+pBqi4dgCF2UJZyrKXCtdQdkRIbEwe7nfnSdeDWGDVyUrfgZuz9DcOAF\nvUtNxfWoSxJDIOsQ1wi8uD1SSNSbkAqpvekWqM37GDW56Tx9R6A4CC6FFR7u\nLuruoWTwRctHlZXDsSOChOInXnOp+C8kDCAzkMVM99xp+zSunW20Ngx8KI8i\n8K+PbYVNh4/DMfisUsFWbz1Gplqp/hr6wsMoKklerJxEPI4w6XB4KWUuYRGr\nerERgiZw4MiZkfkPFp2xpl0VJJVNrJcWPZK61VhyDvb4sR/4Z+GaR66KcJbK\nBd+ZZDEr/ja/9xtQDh5+7CfxlIYB5Ahc73t+FrCewBsaS69T0ugeXexY1fZV\nAZxYMyoXVg7XD28M0XWRtI6anAAnygmhidDwYezROFXaiiOEhiQJrfc3g6SG\nGSRRXTMhZUnFEk/YP3stwonTJaHCXvPB6b6LEZk1ijaXcyf60uRYgjAnOvNo\nonupKt5fEjAyRTuJ5KXTiF4WQ14jXQLRfCza81vyeUTVQxyA9b6M77VoHlWx\nNKjQt4ziYU261n0oqRt7rOJ5tqDBv10T63XgCxOA0/qWPAHbm+kQokPaWaa1\n1I1w\r\n=u1p9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV+XU/Til9b1GXYdF3rA2HANPYsIUDQzbernEp6A433wIgNYBxchrpVgaR8oC226HJyFIsw2Q19TfZHhsdfbkWOvk="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.17_1552597188015_0.6378917784215674"},"_hasShrinkwrap":false},"2.0.18":{"name":"timpla","version":"2.0.18","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.0","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.0","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.0","@babel/preset-env":"^7.4.1","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.8","@types/react-dom":"^16.8.3","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.3","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.5.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.14.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.4000","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"3decce5d393d4bdbc82c7bfd4083ba2af4939bda","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.18","_nodeVersion":"11.12.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2tR2J2UnLlN4Z1/kSzgyGuZg0s/6wr0EVZNk2s6Ao6IMhawIf5KpDYTkiVV8eVrDHCaWWnE14Hg+JwyklLzh9Q==","shasum":"4cefb093bf26aac28fca0834d63570544f11a23f","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.18.tgz","fileCount":106,"unpackedSize":240549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckvILCRA9TVsSAnZWagAARScQAJo1TAaLZ1okUC2OAM/o\nNQFSLeh5tF212jn4mZmsE5SQYq25wIclC8KbcHGqSQYxRKaZEO1nvT2JDncE\nuiGChd0LHFipKksX8SujCDj2N8MIklTflW9k2TunuCkSbwokV+fEsRMGyRFp\nHcj01q/PbtkXhWa7+OC2FVNCfBW2YjFCzyjcuuL8m9/BeRjamRmhAq4LYVkw\nu88gKC0Ugeje4FajOJp0u3+u65VvOCEszlQ8CW6WZNK2mn1OVdlTRLYYrCCl\ndiNsYgWU6BWSWGgOtN/cMpMgGqK0Chhp7kopcNolNCj2ROKfTtJLNBsfyT6N\nkPFKC2j+skWdYdhYGVCXwXFIWiE7lGAiuhcRGjrQLWpXyK8wUJy4QVDTjxmt\nn47ug2uauGe+SVV2pAvkehTCHxo68bURCztOGwKi/SrUSrA0jSNH+RT+EjEX\nnGMMs/NtpWuaKlMv9S8DsIldU7XwzGbC3dZmYkEWwhT81eBJB5qh2+GEsvnZ\nR+9Ajx6nhRfYeyJ48GiyTh2Oqyl5lGkVga0yE00CCvg75qwY5kQIAaviBxdo\nUNY3Ezq3WFPGofwQct9E/NbXY8KQjwf20rX6CkJgRk1vqhHJTzTiFQe/R2+q\nxctkaEkf1IQgRVLTIaarxcfYOKBY7qWAEmBCcHBGQjrbABuu2oeKNbM7uCvM\n7z+/\r\n=6UMl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFuPf9j6UelTnHhPfAUnFl3WqzMaC+YT05lj3Q/59Q0QIhAP1d8f9T+g47IMg6D3uBzYUZVM4BVef5HVaSs1Xcugv7"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.18_1553134090037_0.20036090581003974"},"_hasShrinkwrap":false},"2.0.19":{"name":"timpla","version":"2.0.19","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.0","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.0","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.8","@types/react-dom":"^16.8.3","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.3","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.5.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.14.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.4000","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"292ec05e2f09a97422bb3ce289bfaafb9a7425a1","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.19","_nodeVersion":"11.12.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-5ohAZlVt+8Y2rcLkk9KXpcVH4pSL1XP6UiZe3Zz4w3a1vqeAcDYIwimn59tjp7bUktGy4wMxFBgq7bEFzaJZPQ==","shasum":"5abb62c9424f16c0a45df4cf40f4f35bf403d65f","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.19.tgz","fileCount":107,"unpackedSize":242471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclBu2CRA9TVsSAnZWagAAo5QP/1jo3pnXzYIrN6Xze3IF\nditrgBC1M/4LzIuSAq10KEu2komoEBklQIMfkB6QDZ/IxFwYEpeHNYbqdHR+\niKwInNLHpen6GeGV32LwiWRDDuZO/jxXxwwyHhVuu4s6ZLubCadua1d/lzF6\nNN/QsBvKKFGA3oqBCNVfYl+/2xnF194SoE9Y3xCVLj6d5excm/T7Tj4kF+8k\nyCUVqmisZr8eoCpF8ii5VpQzQ6zj/NjI13qduyEvS0XPfa6SqigiQJ5dBSYt\nmq0R5a69R8918OquGID9DoKZ5myXbca2s8yg9Xb+q/FoD3/3C2JVXENLgiI6\n9gX5mY5a3pLY9/0j0e6TVqAMEGNqIOF79XW3smHzNuE2klKvFASgqdNXrnkw\nBVDqN38RbSfgcTVVeNFnrm/mButKK6aCSRUB3z3CUQUm3qeP48E/akcDpSyb\nfp1Lzb9htYxh/FfPdIuirpAkTdY6xcLvHdCyOjtfuPGsC1F6pPhuqM0DqeDh\n1vMDHxHOKYkSxgj6AE5Q8jJLl/YrkgviizdKBLbjUVUK0eWK0AYn0HNsERWV\nbV8rxApp8fXFxypkgAnf+arQfLUXMxQqwQa+aD1fpXYG3YX0eSWlR5Q/DuYo\n/qkXyalG/BzGXsQuLjSQzC5aA2YxiickNBRqW50N/DXdBB56t7/D9tt5zGeu\ns63w\r\n=f7Vr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTzPgtHuQNoZhu+aza+wbl0F9Iqpa2EmP0JORJ1uhNlQIhANEf8z6lMhl5fjKcApiomOCrOsNbkO9ZEt6GWGAt0MYc"}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.19_1553210293329_0.450471873298361"},"_hasShrinkwrap":false},"2.0.20":{"name":"timpla","version":"2.0.20","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.0","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.0","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.0","@hot-loader/react-dom":"^16.8.4","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.1","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.8","@types/react-dom":"^16.8.3","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.3","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.5.0","prettier":"^1.16.4","react":"^16.8.4","react-dom":"^16.8.4","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.14.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.4000","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"a2803766f7450a632dda3c7b920643b1c9e2af1f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.20","_nodeVersion":"11.12.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Xe1tsivixRgBetHfBOWQo3J1+Fa3/e1AcP23AGPWOM4Kd6C4pjZhJJd23GqLo7O2UKE49VyxaRw6HTqS233dlg==","shasum":"22d2289d5b1919ffdc78b542815feee4d977b052","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.20.tgz","fileCount":107,"unpackedSize":242808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJclFY1CRA9TVsSAnZWagAAsr8P/3oAn1ApIsOzZ4Tgr2Ik\n/8OHa/Qq3w+pptJlVVm38csAIsANfn3RM3h6UZPcQOJVgPzZOxFl/jGRvpPb\n4T/hckgF8p4N/mC+CMbYXx/qviF/a+D7YAlTvSUnFlnb6u5Uzo402TjM7SqX\nz634uxcbiUiTW1IyD5EICuLaoGEN2vqgOjQJwg5ecHIdQ2eF3jM53dia+oUM\n+5ZC/tdJA/1WJM97ojpRKfflELSXO+QCXyDT6NOAK5qFct04NjGOtNH2IBjp\noDEePx4xcu0YNFpx/ev7rISTQcCnET8KAUHyE/0QW9YJMYDR80SeeozfZz9r\nb3sfRLZ83S6vUHyQwRnwvsetu5HYxX6hmmCVWDSygaiTj+e6VE71n5vqDNw0\neHFaqwNjZ5B7b+gRq01JoBOESoAt+lPwa8/jXQEAyjapzYlzXAQWlYLW2R8L\n/HrU00t3TdZAN/la6k7A5EzTfhXC79OviWtcZYcAnzKtaGfX+w4bnh3/2vGx\nKykNF/Ci2sfRTBPJNpuICpzrcSAtxD12a0BVZscE+VNbl2SYMy09ho02m5L9\ndVZZMvBLimjLd9WNMnJdBpl1kU9Gyb5HTOjnBMWUvGmkEOGFL+joYrbNf3ck\nxVWVjnUzZyYluOq0/6+RYW+QAa81tuWVVWUG8J1uZiOjrQZoo9UO2Cd6PW5R\nO20F\r\n=vzSp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZMCi5Zp08jgVqEYTqOWyZZhHwpf/iioYxLHYDmHabkAiEAxEYcBGVADoNq302eP82amaZEwWoYPkxH2KXNyrG1xNU="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.20_1553225267924_0.36337096935524493"},"_hasShrinkwrap":false},"2.0.21":{"name":"timpla","version":"2.0.21","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=test/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:coverage":"nyc report --reporter=text-lcov | coveralls","test:run":"cross-env NODE_ENV=production nyc mocha --require ts-node/register 'test/*.test.ts'","test:watch":"nodemon --exec 'npm test || true' --ignore test/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/webpack":"^4.4.26","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.0","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.0.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.1","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.0","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.0","@babel/preset-env":"^7.4.2","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.0","@hot-loader/react-dom":"^16.8.5","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.2","@types/cross-spawn":"^6.0.0","@types/debug":"4.1.2","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/mocha":"^5.2.6","@types/node-sass":"^4.11.0","@types/opn":"^5.1.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.8","@types/react-dom":"^16.8.3","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","coveralls":"^3.0.3","cross-env":"^5.2.0","debug":"^4.1.1","eslint":"^5.15.3","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-mocha":"^5.3.0","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.0","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","lint-staged":"^8.1.5","mocha":"^6.0.2","mocha-lcov-reporter":"^1.3.0","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","opn":"^5.5.0","prettier":"^1.16.4","react":"^16.8.5","react-dom":"^16.8.5","react-hot-loader":"^4.8.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.14.0","tslint-config-prettier":"^1.18.0","tslint-react":"^3.6.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.3.4000","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"3a10c611c272175807396826973dafa4abdd8e3f","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.0.21","_nodeVersion":"11.12.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fZc1XZVFBf5Wh5anLfOEJxxZN3YXTFtwwm/k+ccS0hNRE+1xgEAADxsbTJWu/d0VkAnAdEpwnGUFS6q0uVnk6A==","shasum":"77ada964cf8ce9ac4f66271db9b61ab43c43e96f","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.0.21.tgz","fileCount":108,"unpackedSize":253613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmaq+CRA9TVsSAnZWagAAeb8P/js0bIpC9W3k4ITGSQ3/\nsoYnTyTKyjkNjAE9kT8eqGH56cHrKDYFhDimGR4KI1ocfyTS5bpv2DwOhrMs\nXccAxKozPLcf/Pq/Qg0igHWKVLfl3Ymfx3gXcXXb7jDkDSBB7ePovUVrV2/Z\ncIMi7yVCcgtYbYyh2WrecF5H3Jb7k0QEKI4RHGBZ1FM99OsV8GSjMItHCpS5\nBmfsFD/ryzSf74SgRkOc3ryV4IjVSVyPibmMz0xQrrvAWZETsZWz5oIgeQpz\nUEVlt8EuDL35pFQkhJgruX8YBw6esjtln8dmole2D/9OaU9k6Xwz2atxwOpc\no4L1CLoE/ySxGcH3gndG2k9uWjf+vuPQ8ewbvRj0yK/J3RJ8EoyE4BMoBrt+\nnaSjg1GzXfvGR/2c2CvsAHd+etlXHlHj3sdtbdkplG9nx/oSel1JaO9IEcwm\ncBIQxoNFFp82K12dO4TygTxYNppqD5VeQ71ImQY1bZ+LG9Ogny3SkJX0TeeT\n4A1hY0UkQ2kJ8z7YMUMWYOPD29Zv1SR++kIpwGzyksUIo1e3NPc7b2dhxDTL\nmkz7jf9E5hiI39uKQ8H07yGPo8I1l/Gx0ZWyWbvkOOZk8+hS1TG2dPC3/KAz\n/7eX1qh1fh4CPma51Wt+eWLWlFoyO9E2D+UpAtVvKklL3GHfc2ptXMmFIRyn\n+Ty8\r\n=6zJ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIChaMSgCeYeKyF889n84ZxaCvJkmlJ8JLL+W47e5HdK3AiEA3t3biiSyzVAExG9jp8e4/TmOe0E3Z3tWeR+wwQY6ESA="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.0.21_1553574589575_0.28168842177587616"},"_hasShrinkwrap":false},"2.1.0-rc1":{"name":"timpla","version":"2.1.0-rc1","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=__tests__/integration/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:run":"jest --coverage","test:watch":"nodemon --exec 'npm test || true' --ignore __tests__/integration/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.4.0","@types/babel-core":"^6.25.6","@types/browser-sync":"0.0.43","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/open":"^6.0.0","@types/webpack":"^4.4.27","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.3","autoprefixer":"^9.5.1","babel-loader":"^8.0.5","browser-sync":"^2.26.3","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.1.0","fancy-log":"^1.3.3","gulp":"^4.0.0","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.0.0","import-lazy":"^3.1.0","log-symbols":"^2.2.0","merge-stream":"^1.0.1","open":"^6.1.0","plugin-error":"^1.0.1","pretty-bytes":"^5.1.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.3","through2":"^3.0.1","webpack-dev-middleware":"^3.6.2","webpack-hot-middleware":"^2.24.3","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.3","@babel/node":"^7.2.2","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.3","@babel/preset-env":"^7.4.3","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.0","@hot-loader/react-dom":"^16.8.6","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.2","@types/cross-spawn":"^6.0.0","@types/debug":"^4.1.3","@types/del":"^4.0.0","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"0.0.31","@types/gulp-sourcemaps":"0.0.32","@types/gzip-size":"^4.1.0","@types/jest":"^24.0.11","@types/log-symbols":"^2.0.0","@types/merge-stream":"^1.1.2","@types/node-sass":"^4.11.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.12","@types/react-dom":"^16.8.3","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-prettier":"^4.1.0","eslint-loader":"^2.1.2","eslint-plugin-react":"^7.12.4","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.0.1","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","nodemon":"^1.18.10","npm-run-all":"^4.1.5","nyc":"^13.3.0","prettier":"^1.16.4","react":"^16.8.6","react-dom":"^16.8.6","react-hot-loader":"^4.8.3","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-jest":"^24.0.2","ts-node":"^8.0.3","tsconfig-paths":"^3.8.0","tslint":"^5.15.0","tslint-config-prettier":"^1.18.0","tslint-react":"^4.0.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.1","typescript":"^3.4.2","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.2.0"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-2.1.0-rc1.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n[![codecov](https://codecov.io/gh/igimanaloto/timpla/branch/master/graph/badge.svg)](https://codecov.io/gh/igimanaloto/timpla)\n\n</div>\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [The Timpla-way of thinking](#the-timpla-way-of-thinking)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel---babel-loader-options)\n  - [Configuring Webpack](#configuring-webpack)\n  - [Overriding tasks](#overriding-tasks)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript](#disabling-typescript)\n  - [Disabling TSLint](#disabling-tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n- [The three levels of reloading](#the-three-levels-of-reloading)\n  - [BrowserSync injection and reloading](#browsersync-injection-and-reloading)\n  - [Configuring BrowserSync middleware](#configuring-browsersync-middleware)\n  - [Hot module reloading + React HMR](#hot-module-reloading---react-hmr)\n    - [Dev-server reloading based on config file changes](#dev-server-reloading-based-on-config-file-changes)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site--proxy-option-)\n  - [Replacing the html task with Shopify Liquid templating](#replacing-the-html-task-with-shopify-liquid-templating)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#i-m-getting-a-different-version-of-dependency-x-when-i-use-timpla-)\n  - [Timpla doesn't pick up changes to my eslintrc](#timpla-doesn-t-pick-up-changes-to-my-eslintrc)\n  - [When I build, javascript files don't work!](#when-i-build--javascript-files-don-t-work-)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd---isn-t-working-as-it-s-supposed-to-)\n  - [Tips for working with npm linked dependencies](#tips-for-working-with-npm-linked-dependencies)\n- [CAQIAs (Commonly asked questions I ask)](#caqias--commonly-asked-questions-i-ask-)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n## Getting started\n\nTimpla aims is to provide you with an excellent web development experience. Timpla focuses on the truly defined parts in every build process: preparing javascript, css and media files for your websites. Three layers of reloading power Timpla: CSS-injection/reloading via BrowserSync (proxy or server), Webpack JS/TS Hot Module Reloading and full dev-server reloads based on core config changes.\n\nUnlike a `boilerplate` or a `full-blown` development framework, the rational behind Timpla is that of guiding users with an undiscriminating base. You bring your own dependencies to enhance and/or extend the core Timpla build pipeline.\n\nTimpla maintains its own side of the fence, while you focus on the more important aspects of your workflow, or better yet - getting straight into work!\n\nYou may wonder why bother with Timpla if Webpack does everything. Timpla by no means undermines what Webpack is already able to achieve! However, in our quest to find a sweet development environment, we've come to realise that forcing everything through Webpack yields painful load and reload times. Timpla's performance and tooling in a decently sized project is something we're proud of!\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-sample.jpg\" />\n\n### Installation\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Timpla allows you to bring in your own versions of the following modules!\nnpm i --save @babel/polyfill @babel/preset-env @babel/preset-react @hot-loader/react-dom babel-eslint eslint eslint-config-prettier eslint-loader eslint-plugin-react hard-source-webpack-plugin prettier react react-dom react-hot-loader speed-measure-webpack-plugin webpack-bundle-analyzer\n\n# Install typescript dependencies as well. You may skip this part of you only wish to build JS scripts.\nnpm i --save @babel/preset-typescript @types/react @types/react-dom typescript tslint tslint-config-prettier tslint-react fork-ts-checker-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  babel.config.js\n#  .eslintrc\n#  .prettierrc\n#  .timplaconfig.js\n# The following are generated for TS projects\n#  tsconfig.json\n#  tslint.json\n\n# For TypeScript support (DEFAULT)\nnpx timpla init\n\n# For JS-only, disabling TypeScript support\nnpx timpla initJS\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### The Timpla-way of thinking\n\nTimpla is a process-driven tool. Each `asset stream` holds a pre-defined and parallelised part in the Timpla build chain. The following assets are built in parallel:\n\n- `Sass` files are compiled into css files, so you may load it as normal in your templates.\n- `SVG` files are combined into single-svgs for use, either via direct insertion into your templates, or your javascript-driven loading.\n- `Image` and `static` asset files are simply copied, but the processes are extendible, wherein you can tap into the build-stream and introduce your own pre-processing tasks.\n- `Javascript and/or TypeScript` files bundled using Webpack.\n- Useful tooling such as file size reports, file-revving, bundle analysis and Webpack performance measurements are made available to further enhance your development process.\n\nIn every dev or production build, `prebuild` and `postbuild` hooks are available for you to enhance the Timpla process. Apart from the javascript task, you may replace how each asset-type is processed via Timpla's alternateable tasking system.\n\nTimpla also allows you to register extra tasks via Gulp. These may be added to the pre or post parts of the build process.\n\nTimpla nukes the `destination` folder for every dev or production start. This ensures that you treat the `src` directory as the one true source for raw source files.\n\n### Commands\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files and outputs a manifest file (designed for html/basic use-cases only)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from font src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nThese will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n### Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid), and continues to carry the torch for providing awesome server-side-driven dev experiences.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check\n\n/**\n * The @type annotations are harmless, vscode might just make your life easier\n * by adding intellisense support whilst you type!\n */\n\nconst { configure } = require('timpla')\n\nmodule.exports = configure({\n  javascripts: {\n    /** @type { import(\"timpla\").ITimplaWebpackEntryHook } */\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n\n    /** @type { import(\"timpla\").ITimplaCustomizeWebpackConfig } */\n    customizeWebpackConfig(w) {\n      // The following helpers are available to aid you in extending the webpack config.\n      const {\n        projectDestPath,\n        projectSrcPath,\n        timplaConfig,\n        timplaProcess,\n        webpack,\n        webpackConfig,\n        webpackMerge,\n      } = w\n      return w.webpackConfig\n    },\n  },\n\n  // To get intellisense for more complex configs, follow the jsdoc example below:\n  // html: {\n  //   /** @type { import(\"timpla\").ITimplaHofTask } */\n  //   alternate: p => {\n  //     p.timplaProcess\n  //   },\n  // },\n\n  //  additionalTasks: {\n  //    /** @param p { import(\"timpla\").ITimplaHelper } */\n  //    initialize: p => {},\n  //    development: {\n  //      /** @type { import(\"timpla\").ITimplaHofTask } */\n  //      prebuild(tp) {},\n  //    },\n  //  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the `alternate` option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs for reach of the asset tasks below)\n\nFull configuration is available through `.timplaconfig.js`. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `./src`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `./dest`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        /** Options to pass to the del function. */\n        delOptions?: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** [Cssnano](https://www.github.com/cssnano/cssnano) options */\n        cssnanoOptions: CssNanoOptions\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixerOptions: autoprefixer.Options\n        /** [PostCSS](https://github.com/postcss/postcss#options) options */\n        postcssOptions: postcss.ProcessOptions\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sassOptions: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'jpeg', 'png', 'svg', 'gif', 'webp']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     * Defaults to the `javascripts.dest` path. e.g. `/javascripts`\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babel config file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzerOptions: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n\n    /**\n     * Enables or disables TypeScript support for Timpla. Default: `true`\n     * When upgrading a Timpla JS project, please install the required dependencies:\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     */\n    useTypeScript: boolean\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   */\n  browserSync: false | ITimplaBrowserSyncOptions\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /**\n   * Instructs timpla on how it runs in dev-mode.\n   */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n\n    /**\n     * The webpack devtool to use.\n     * Defaults to `cheap-module-eval-source-map`.\n     */\n    devtool: webpack.Options.Devtool\n\n    /**\n     * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) client options.\n     * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n     * Defaults to\n     * - `reload: true`\n     * - `quiet: true`\n     * - To configure the middleware itself, use `development.middlewareConfig.webpackHotMiddleware`.\n     */\n    webpackHotMiddlewareClient: IWebpackHotMiddlewareClientOptions | false\n\n    /**\n     * Toggle default BrowserSync middlewares added by Timpla.\n     *\n     * Set to `false` to disable all default middleware from being added. Err on the side of caution as this may break browserSync and JS from working altogether.\n     *\n     * By default, timpla runs as a SPA, so it requires the use of connectHistoryApiFallbackMiddleware so that requests\n     * may be routed correctly.\n     *\n     * When browserSync is configured to run in proxy-mode,\n     * we disable connectHistoryApiFallbackMiddleware to ensure that all requests go through to your proxied server as normal.\n     */\n    middlewareConfig:\n      | false\n      | {\n          /**\n           * Accepts webpackDevMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          webpackDevMiddleware?: false | Partial<IWebpackDevMiddlewareOptions>\n\n          /**\n           * Accepts webpackHotMiddleware config.\n           * This only sets the middleware config.\n           * - To configure the client, Use `development.webpackHotMiddlewareClient`.\n           * - To disable, set the value to `false`.\n           */\n          webpackHotMiddleware?: false | Partial<IWebpackHotMiddlewareOptions>\n\n          /**\n           * Accepts connectHistoryApiFallbackMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          connectHistoryApiFallbackMiddleware?: false | IConnectHistoryApiFallbackOptions\n        }\n\n    /** Disables the `fallback server config` that Timpla uses when no browserSync config is supplied. */\n    disableServerFallback: boolean\n    /**\n     * In dev-mode, Timpla supports ESLint via the ESLint loader.\n     * By default, Timpla requires the eslint package to be installed.\n     * - `npm i --save-dev eslint`\n     * - Set to `false` to disable ESLint.\n     */\n    eslint:\n      | false\n      | {\n          /*\n           * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n           */\n          esLintLoaderOptions: IESLintLoaderOptions\n        }\n\n    /**\n     * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n     * By default, Timpla requires dependent packages to be installed.\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     * - Set to `false` to disable the plugin, and TSLint support.\n     */\n    tslint:\n      | {\n          /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n          forkTsCheckerOptions: IForkTsCheckerOptions\n        }\n      | false\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla to add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\n/** The partialised Timpla Config so users' may opt in to only customise what they wish to. */\nexport type ITimplaConfig = IRecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance.\n  gulp, // A gulp instance that can be used to register new tasks.\n  projectDestPath, // Resolves a list of strings to the project's dest path.\n  projectSrcPath, // Resolves a list of strings to the project's src path.\n  timplaConfig, // The full timplaConfig\n  timplaProcess, // Provides useful constants such as isDevelopment, isProduction and INIT_CWD (your project's resolved base path).\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nYou may use javascripts.babelLoaderOptions to fully control how the webpack babel-loader works.\n\nBabel config resolution is set to default, so babel.config.js and babelrc files are picked up by Timpla. We recommend using babel.config.js as opposed to a babelrc so that npm linked modules are also picked up by babel-loader, via Babel's root config resolution mechanism.\n\nTimpla copies the following babel config file to your project folder. (babel.config.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\n# HardSourceWebpackPlugin - disabled for now, as caching may break babel-loader 7.2 builds.\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable/can be disabled. For example, javascripts.tslint.forkTsCheckerOptions accepts ForkTsCheckerWebpackPlugin configuration options.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (timplaProcess.isProduction) {\n        // do this;\n      }\n      if (timplaProcess.isDevelopment) {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode.\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript\n\nIf you followed the installation instructions above, please uninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from babel.config.js. Finally, set javascripts.useTypeScript to false.\n\n### Disabling TSLint\n\nPlease set `development.tslint` to false. You may also opt to uninstall `tslint` and `fork-ts-checker-webpack-plugin` as these won't be loaded by Timpla anymore.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet `development.eslint` to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n## The three levels of reloading\n\n### BrowserSync injection and reloading\n\nTimpla uses BrowserSync to inject stylesheets and notify the browser of full-reloads when files change. Timpla pre-configures the watched files for you, but you may also extend it through the `files: [globs]` config.\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['when_this_changes_reload_the_page/**/*'],\n  },\n}\n```\n\nWhen writing your own tasks, Timpla Helper passes the browserSync instance so you may stream(inject) your changes on the fly!\n\n### Configuring BrowserSync middleware\n\nTimpla uses `webpack-hot-middleware`, `webpack-dev-middleware` and `connect-history-api-fallback` by default. Each of these accept config objects, via `development.middlewareConfig`. You may disable any of them by passing `false` to their config key, e.g. `development.middlewareConfig.webpackHotMiddleware: false`. If you wish to disable everything, then set `middlewareConfig` to `false`.\n\n### Hot module reloading + React HMR\n\nAny files you mark as hot won't cause the browser to reload. This is useful when you need to keep the browser in its current state.\n\nHot module reloading is enabled by default. Setting `development.webpackHotMiddlewareClient` or `development.middlewareConfig.webpackHotMiddleware` to `false` disables it.\n\nTo support react hot module reloading, please install and add `react-hot-loader/babel` to your `babel.config.js`'s plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n#### Dev-server reloading based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babel config, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > `development.timplaWatch`. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting `development.timplaWatch` to `false` disables the reload server.\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n### Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### Timpla doesn't pick up changes to my eslintrc\n\nThis is a known [issue](https://github.com/webpack-contrib/eslint-loader/issues/214) with eslint-loader. Ensure that cache is turned off whilst a patch is being worked on. Alternatively, you may specify your own eslint caching strategy via `cacheIdentifer`.\n\n### When I build, javascript files don't work!\n\nWe have encountered this happening whenever you switch the `production.rev` setting. Please clear `./node_modules/cache` to force-clear all caches and try again!\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths.\n\n### Tips for working with npm linked dependencies\n\nEnsure that you are using a babel.config.js. This will allow babel-loader to process the linked module files (TypeScript and ESNext).\n\n1. npm link yourmodule\n1. set up a module.resolve rule for webpack e.g. yourmodule\\$: path.resolve(\\_\\_dirname, 'node_modules/yourmodule/src/index.ts')\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Shopify, Wordpress, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Help! Running the server redirects all requests to index.html!</summary>\n  <p>\n      In your .timplaconfig.js config, please set development.middlewareConfig.connectHistoryApiFallbackMiddleware to true. Alternatively, providing a browsersync.proxy config disables this automatically for you.\n  </p>\n</details>\n<details>\n  <summary>BrowserSync serverStatic option doesn't work! I'm not able to see my statically served files when visiting their urls.</summary>\n  <p>\n      Please make sure that the `browserSync.serveStatic` uses absolute paths. You may use `path.join(__dirname, [youroutdir])` for example to get the full path based on the location of your config.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but often do we care less the older project dev environments get. By delegating the `core` to Timpla, we hope that more focus is put on extending, rather than maintaining!\n  </p>\n  <p>\n    Also, we often get into the framework-exclusivity. Think of Timpla as a consistent tool to bring over to projects.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated and extensive configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in TypeScript, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:start # starts the tsc watcher, compiling gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.1.0-rc1","_nodeVersion":"11.13.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rAh6DLtejvf81vsM1Nfn7sbOARm/Hd7qhI8eNwl8TuS7b1qX/5BVQZ9OK+QoUXMapM09uEtf5uzb0+0cf99FKw==","shasum":"23d8f8b0ae14080abdcc40bc1562907bac00bc28","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.1.0-rc1.tgz","fileCount":278,"unpackedSize":1485502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqphACRA9TVsSAnZWagAA9QkP/3xladuYtcI9CX580bTf\nZLl9uIGXNt9FgQS1RFOtWkYdpSdl75f8c+Q4tORA8B7cVK/uUi2bLQt32zeW\nPsv+KSL6nFUnIFmRuB/6u+ZwhXuymrMfuS76TcbtpgD80Cx+Dw6DbGVI8KXL\naQhemEpGbpUrRHMZAgtwuzoBwgJO84arECPX1Z4PDSSTpgF8/7wxmWzpGy+p\nTNVJp1PfFrY7KMUfYuJVnnQnLA8vRN+j48+8csLFrvXgv0N3FmWVt9O6h9x7\nkn5jRDqSUKhwL5vOV1r+JjiIHzzUS3JkOJYtyr0aJYRCcU2EG/fz782Rfj0Z\np6IYfg3gKYaeCFsxDbwHPZftZwszZnWta6gZTl6F3QyZ6NYlPn5BIwuC/NPb\nZogZWGXfcYPSmAgvHTMP0CcwVnOynHDOnbC/XE774KT1KlCWZt7iC19UT9nd\ny78LTHZgWdeapvGdDjqs43ZDyCwXJZ0FSsZkXDXLch9qLqewZR11Rx0B7CPG\nJceRP7GZrslQFcywNwQtj0jEBfJbGgUANItGNdTsQ6txAGVPepvSEhni50uE\n8pncCngbLWBdWxTV+Ual/fYZAGgyA51QGJJxJHQO+As2/2ucIFtV8Lw02O6Q\nngJDVEZ+CXQ75KVh4TOGAsWmCQWI3GR+Q06kpXuwcCn+M2d26V7/cmNqRlXQ\nQd/5\r\n=tyqV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARUXsW0Ezq6alvrHK8sIVnDWr/h1gV1FznTtUkz3Z9vAiEAxcm06iGY1deKsWXaapSAzjhxXHNl3ZXwiGc3MSKjEC8="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.1.0-rc1_1554683967561_0.7762163032073119"},"_hasShrinkwrap":false},"2.1.0-rc2":{"name":"timpla","version":"2.1.0-rc2","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=8.10.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=__tests__/integration/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:run":"jest --coverage","test:watch":"nodemon --exec 'npm test || true' --ignore __tests__/integration/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.5.0","@types/babel-core":"^6.25.6","@types/browser-sync":"2.26.0","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/open":"^6.1.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.5","autoprefixer":"^9.5.1","babel-loader":"^8.0.6","browser-sync":"^2.26.5","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.1.1","fancy-log":"^1.3.3","gulp":"^4.0.2","gulp-changed":"^3.2.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.1.1","import-lazy":"^4.0.0","log-symbols":"^3.0.0","merge-stream":"^1.0.1","open":"^6.3.0","plugin-error":"^1.0.1","pretty-bytes":"^5.2.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.2.4","through2":"^3.0.1","webpack-dev-middleware":"^3.7.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.5","@babel/node":"^7.4.5","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.4","@hot-loader/react-dom":"^16.8.6","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.2","@types/cross-spawn":"^6.0.0","@types/debug":"^4.1.4","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"4.0.0","@types/gulp-sourcemaps":"0.0.32","@types/jest":"^24.0.13","@types/merge-stream":"^1.1.2","@types/node-sass":"^4.11.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.18","@types/react-dom":"^16.8.4","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","codecov":"^3.5.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-prettier":"^4.3.0","eslint-loader":"^2.1.2","eslint-plugin-react":"^7.13.0","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.3.4","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^2.3.0","jest":"^24.8.0","lint-staged":"^8.1.7","node-sass":"^4.12.0","nodemon":"^1.19.0","npm-run-all":"^4.1.5","nyc":"^14.1.1","prettier":"^1.17.1","react":"^16.8.6","react-dom":"^16.8.6","react-hot-loader":"^4.8.7","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-jest":"^24.0.2","ts-node":"^8.1.0","tsconfig-paths":"^3.8.0","tslint":"^5.16.0","tslint-config-prettier":"^1.18.0","tslint-react":"^4.0.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.2","typescript":"^3.4.5","webpack":"^4.32.2","webpack-bundle-analyzer":"^3.3.2"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"_resolved":"","_integrity":"","_from":"file:timpla-2.1.0-rc2.tgz","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n[![codecov](https://codecov.io/gh/igimanaloto/timpla/branch/master/graph/badge.svg)](https://codecov.io/gh/igimanaloto/timpla)\n\n</div>\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [The Timpla-way of thinking](#the-timpla-way-of-thinking)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel---babel-loader-options)\n  - [Configuring Webpack](#configuring-webpack)\n  - [Overriding tasks](#overriding-tasks)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript](#disabling-typescript)\n  - [Disabling TSLint](#disabling-tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n- [The three levels of reloading](#the-three-levels-of-reloading)\n  - [BrowserSync injection and reloading](#browsersync-injection-and-reloading)\n  - [Configuring BrowserSync middleware](#configuring-browsersync-middleware)\n  - [Hot module reloading + React HMR](#hot-module-reloading---react-hmr)\n    - [Dev-server reloading based on config file changes](#dev-server-reloading-based-on-config-file-changes)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site--proxy-option-)\n  - [Replacing the html task with Shopify Liquid templating](#replacing-the-html-task-with-shopify-liquid-templating)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#i-m-getting-a-different-version-of-dependency-x-when-i-use-timpla-)\n  - [Timpla doesn't pick up changes to my eslintrc](#timpla-doesn-t-pick-up-changes-to-my-eslintrc)\n  - [When I build, javascript files don't work!](#when-i-build--javascript-files-don-t-work-)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd---isn-t-working-as-it-s-supposed-to-)\n  - [Tips for working with npm linked dependencies](#tips-for-working-with-npm-linked-dependencies)\n- [CAQIAs (Commonly asked questions I ask)](#caqias--commonly-asked-questions-i-ask-)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n## Getting started\n\nTimpla aims is to provide you with an excellent web development experience. Timpla focuses on the truly defined parts in every build process: preparing javascript, css and media files for your websites. Three layers of reloading power Timpla: CSS-injection/reloading via BrowserSync (proxy or server), Webpack JS/TS Hot Module Reloading and full dev-server reloads based on core config changes.\n\nUnlike a `boilerplate` or a `full-blown` development framework, the rational behind Timpla is that of guiding users with an undiscriminating base. You bring your own dependencies to enhance and/or extend the core Timpla build pipeline.\n\nTimpla maintains its own side of the fence, while you focus on the more important aspects of your workflow, or better yet - getting straight into work!\n\nYou may wonder why bother with Timpla if Webpack does everything. Timpla by no means undermines what Webpack is already able to achieve! However, in our quest to find a sweet development environment, we've come to realise that forcing everything through Webpack yields painful load and reload times. Timpla's performance and tooling in a decently sized project is something we're proud of!\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-sample.jpg\" />\n\n### Installation\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Timpla allows you to bring in your own versions of the following modules!\nnpm i --save @babel/polyfill @babel/preset-env @babel/preset-react @hot-loader/react-dom babel-eslint eslint eslint-config-prettier eslint-loader eslint-plugin-react hard-source-webpack-plugin prettier react react-dom react-hot-loader speed-measure-webpack-plugin webpack-bundle-analyzer node-sass\n\n# Install typescript dependencies as well. You may skip this part of you only wish to build JS scripts.\nnpm i --save @babel/preset-typescript @types/react @types/react-dom typescript tslint tslint-config-prettier tslint-react fork-ts-checker-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  babel.config.js\n#  .eslintrc\n#  .prettierrc\n#  .timplaconfig.js\n# The following are generated for TS projects\n#  tsconfig.json\n#  tslint.json\n\n# For TypeScript support (DEFAULT)\nnpx timpla init\n\n# For JS-only, disabling TypeScript support\nnpx timpla initJS\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### The Timpla-way of thinking\n\nTimpla is a process-driven tool. Each `asset stream` holds a pre-defined and parallelised part in the Timpla build chain. The following assets are built in parallel:\n\n- `Sass` files are compiled into css files, so you may load it as normal in your templates.\n- `SVG` files are combined into single-svgs for use, either via direct insertion into your templates, or your javascript-driven loading.\n- `Image` and `static` asset files are simply copied, but the processes are extendible, wherein you can tap into the build-stream and introduce your own pre-processing tasks.\n- `Javascript and/or TypeScript` files bundled using Webpack.\n- Useful tooling such as file size reports, file-revving, bundle analysis and Webpack performance measurements are made available to further enhance your development process.\n\nIn every dev or production build, `prebuild` and `postbuild` hooks are available for you to enhance the Timpla process. Apart from the javascript task, you may replace how each asset-type is processed via Timpla's alternateable tasking system.\n\nTimpla also allows you to register extra tasks via Gulp. These may be added to the pre or post parts of the build process.\n\nTimpla nukes the `destination` folder for every dev or production start. This ensures that you treat the `src` directory as the one true source for raw source files.\n\n### Commands\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files and outputs a manifest file (designed for html/basic use-cases only)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from font src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nThese will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n### Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid), and continues to carry the torch for providing awesome server-side-driven dev experiences.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check\n\n/**\n * The @type annotations are harmless, vscode might just make your life easier\n * by adding intellisense support whilst you type!\n */\n\nconst { configure } = require('timpla')\n\nmodule.exports = configure({\n  javascripts: {\n    /** @type { import(\"timpla\").ITimplaWebpackEntryHook } */\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n\n    /** @type { import(\"timpla\").ITimplaCustomizeWebpackConfig } */\n    customizeWebpackConfig(w) {\n      // The following helpers are available to aid you in extending the webpack config.\n      const {\n        projectDestPath,\n        projectSrcPath,\n        timplaConfig,\n        timplaProcess,\n        webpack,\n        webpackConfig,\n        webpackMerge,\n      } = w\n      return w.webpackConfig\n    },\n  },\n\n  // To get intellisense for more complex configs, follow the jsdoc example below:\n  // html: {\n  //   /** @type { import(\"timpla\").ITimplaHofTask } */\n  //   alternate: p => {\n  //     p.timplaProcess\n  //   },\n  // },\n\n  //  additionalTasks: {\n  //    /** @param p { import(\"timpla\").ITimplaHelper } */\n  //    initialize: p => {},\n  //    development: {\n  //      /** @type { import(\"timpla\").ITimplaHofTask } */\n  //      prebuild(tp) {},\n  //    },\n  //  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the `alternate` option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs for reach of the asset tasks below)\n\nFull configuration is available through `.timplaconfig.js`. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `./src`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `./dest`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        /** Options to pass to the del function. */\n        delOptions?: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** [Cssnano](https://www.github.com/cssnano/cssnano) options */\n        cssnanoOptions: CssNanoOptions\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixerOptions: autoprefixer.Options\n        /** [PostCSS](https://github.com/postcss/postcss#options) options */\n        postcssOptions: postcss.ProcessOptions\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sassOptions: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'jpeg', 'png', 'svg', 'gif', 'webp']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     * Defaults to the `javascripts.dest` path. e.g. `/javascripts`\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babel config file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzerOptions: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n\n    /**\n     * Enables or disables TypeScript support for Timpla. Default: `true`\n     * When upgrading a Timpla JS project, please install the required dependencies:\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     */\n    useTypeScript: boolean\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   */\n  browserSync: false | ITimplaBrowserSyncOptions\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /**\n   * Instructs timpla on how it runs in dev-mode.\n   */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n\n    /**\n     * The webpack devtool to use.\n     * Defaults to `cheap-module-eval-source-map`.\n     */\n    devtool: webpack.Options.Devtool\n\n    /**\n     * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) client options.\n     * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n     * Defaults to\n     * - `reload: true`\n     * - `quiet: true`\n     * - To configure the middleware itself, use `development.middlewareConfig.webpackHotMiddleware`.\n     */\n    webpackHotMiddlewareClient: IWebpackHotMiddlewareClientOptions | false\n\n    /**\n     * Toggle default BrowserSync middlewares added by Timpla.\n     *\n     * Set to `false` to disable all default middleware from being added. Err on the side of caution as this may break browserSync and JS from working altogether.\n     *\n     * By default, timpla runs as a SPA, so it requires the use of connectHistoryApiFallbackMiddleware so that requests\n     * may be routed correctly.\n     *\n     * When browserSync is configured to run in proxy-mode,\n     * we disable connectHistoryApiFallbackMiddleware to ensure that all requests go through to your proxied server as normal.\n     */\n    middlewareConfig:\n      | false\n      | {\n          /**\n           * Accepts webpackDevMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          webpackDevMiddleware?: false | Partial<IWebpackDevMiddlewareOptions>\n\n          /**\n           * Accepts webpackHotMiddleware config.\n           * This only sets the middleware config.\n           * - To configure the client, Use `development.webpackHotMiddlewareClient`.\n           * - To disable, set the value to `false`.\n           */\n          webpackHotMiddleware?: false | Partial<IWebpackHotMiddlewareOptions>\n\n          /**\n           * Accepts connectHistoryApiFallbackMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          connectHistoryApiFallbackMiddleware?: false | IConnectHistoryApiFallbackOptions\n        }\n\n    /** Disables the `fallback server config` that Timpla uses when no browserSync config is supplied. */\n    disableServerFallback: boolean\n    /**\n     * In dev-mode, Timpla supports ESLint via the ESLint loader.\n     * By default, Timpla requires the eslint package to be installed.\n     * - `npm i --save-dev eslint`\n     * - Set to `false` to disable ESLint.\n     */\n    eslint:\n      | false\n      | {\n          /*\n           * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n           */\n          esLintLoaderOptions: IESLintLoaderOptions\n        }\n\n    /**\n     * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n     * By default, Timpla requires dependent packages to be installed.\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     * - Set to `false` to disable the plugin, and TSLint support.\n     */\n    tslint:\n      | {\n          /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n          forkTsCheckerOptions: IForkTsCheckerOptions\n        }\n      | false\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla to add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\n/** The partialised Timpla Config so users' may opt in to only customise what they wish to. */\nexport type ITimplaConfig = IRecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance.\n  gulp, // A gulp instance that can be used to register new tasks.\n  projectDestPath, // Resolves a list of strings to the project's dest path.\n  projectSrcPath, // Resolves a list of strings to the project's src path.\n  timplaConfig, // The full timplaConfig\n  timplaProcess, // Provides useful constants such as isDevelopment, isProduction and INIT_CWD (your project's resolved base path).\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nYou may use javascripts.babelLoaderOptions to fully control how the webpack babel-loader works.\n\nBabel config resolution is set to default, so babel.config.js and babelrc files are picked up by Timpla. We recommend using babel.config.js as opposed to a babelrc so that npm linked modules are also picked up by babel-loader, via Babel's root config resolution mechanism.\n\nTimpla copies the following babel config file to your project folder. (babel.config.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\n# HardSourceWebpackPlugin - disabled for now, as caching may break babel-loader 7.2 builds.\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable/can be disabled. For example, javascripts.tslint.forkTsCheckerOptions accepts ForkTsCheckerWebpackPlugin configuration options.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (timplaProcess.isProduction) {\n        // do this;\n      }\n      if (timplaProcess.isDevelopment) {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode.\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript\n\nIf you followed the installation instructions above, please uninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from babel.config.js. Finally, set javascripts.useTypeScript to false.\n\n### Disabling TSLint\n\nPlease set `development.tslint` to false. You may also opt to uninstall `tslint` and `fork-ts-checker-webpack-plugin` as these won't be loaded by Timpla anymore.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet `development.eslint` to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n## The three levels of reloading\n\n### BrowserSync injection and reloading\n\nTimpla uses BrowserSync to inject stylesheets and notify the browser of full-reloads when files change. Timpla pre-configures the watched files for you, but you may also extend it through the `files: [globs]` config.\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['when_this_changes_reload_the_page/**/*'],\n  },\n}\n```\n\nWhen writing your own tasks, Timpla Helper passes the browserSync instance so you may stream(inject) your changes on the fly!\n\n### Configuring BrowserSync middleware\n\nTimpla uses `webpack-hot-middleware`, `webpack-dev-middleware` and `connect-history-api-fallback` by default. Each of these accept config objects, via `development.middlewareConfig`. You may disable any of them by passing `false` to their config key, e.g. `development.middlewareConfig.webpackHotMiddleware: false`. If you wish to disable everything, then set `middlewareConfig` to `false`.\n\n### Hot module reloading + React HMR\n\nAny files you mark as hot won't cause the browser to reload. This is useful when you need to keep the browser in its current state.\n\nHot module reloading is enabled by default. Setting `development.webpackHotMiddlewareClient` or `development.middlewareConfig.webpackHotMiddleware` to `false` disables it.\n\nTo support react hot module reloading, please install and add `react-hot-loader/babel` to your `babel.config.js`'s plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n#### Dev-server reloading based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babel config, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > `development.timplaWatch`. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting `development.timplaWatch` to `false` disables the reload server.\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n### Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### Timpla doesn't pick up changes to my eslintrc\n\nThis is a known [issue](https://github.com/webpack-contrib/eslint-loader/issues/214) with eslint-loader. Ensure that cache is turned off whilst a patch is being worked on. Alternatively, you may specify your own eslint caching strategy via `cacheIdentifer`.\n\n### When I build, javascript files don't work!\n\nWe have encountered this happening whenever you switch the `production.rev` setting. Please clear `./node_modules/cache` to force-clear all caches and try again!\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths.\n\n### Tips for working with npm linked dependencies\n\nEnsure that you are using a babel.config.js. This will allow babel-loader to process the linked module files (TypeScript and ESNext).\n\n1. npm link yourmodule\n1. set up a module.resolve rule for webpack e.g. yourmodule\\$: path.resolve(\\_\\_dirname, 'node_modules/yourmodule/src/index.ts')\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Shopify, Wordpress, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Help! Running the server redirects all requests to index.html!</summary>\n  <p>\n      In your .timplaconfig.js config, please set development.middlewareConfig.connectHistoryApiFallbackMiddleware to true. Alternatively, providing a browsersync.proxy config disables this automatically for you.\n  </p>\n</details>\n<details>\n  <summary>BrowserSync serverStatic option doesn't work! I'm not able to see my statically served files when visiting their urls.</summary>\n  <p>\n      Please make sure that the `browserSync.serveStatic` uses absolute paths. You may use `path.join(__dirname, [youroutdir])` for example to get the full path based on the location of your config.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but often do we care less the older project dev environments get. By delegating the `core` to Timpla, we hope that more focus is put on extending, rather than maintaining!\n  </p>\n  <p>\n    Also, we often get into the framework-exclusivity. Think of Timpla as a consistent tool to bring over to projects.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated and extensive configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in TypeScript, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:start # starts the tsc watcher, compiling gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.1.0-rc2","_nodeVersion":"12.3.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qIp9Omj1oIac0YP+rGv7kC7ipOXBllfYKl5PFRsBkfg4b1bFvnUL6GJU7NWzPf3NVr0LwMzEbMkTBACRIUVE9w==","shasum":"1384bb941653bc9534de702b2c50640ee3880a5c","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.1.0-rc2.tgz","fileCount":278,"unpackedSize":1529656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5d4DCRA9TVsSAnZWagAAY0UP/RY140tV87zS3md3SX8V\n6zcF0Q+r0b7ah++q24T687nMrCefw8YGFsjtL+TPtZ7R5zd2K6ewuOGtDEfY\naS7755iOqAxyY9g35yNyUNVrWLgFUCzwL4ZEcdWLcYwDQdiPmbOLCBBSfMjE\na7OnFWgH7PhzDna8cKjoc4E00z4mUWXyCnRFTyMRuA7SjWCEmV9aK3TuXMol\n6HoqerkNRESrg92EQHaojkyGlq92bEhhu4eiJ4728aNOvCAxoTN8GhY/naDx\ntCcv/I/gH/TBkEZJqoCd9m8YJnaGag/jTGbXiJNst1xi1sTp+yI6Hwk7hIyd\nKTthlPbLCavwQlThT5zarFF76xBLrCT3Qf7Bap/4m5DQjTkk22opRCTiJaKM\nrxd3mvQTdnDogo9nSMfqjrlwIk4l0X+ugwBmrGw6dll6LWLDbBYd/AtAL/eu\n8zUfBJUZtwGwwYmPgVaV1DKcFGNJOinP/9JyI/q8S6K9JAXsSCTPsYYQprcM\nHhHfsElPZnW6TXjSenvGZT09qvt3CMzoizlxrJkzbmxHo1ydKFii3Umz2COA\nolGxPLh3cNMr8bc+xJ3o9I7kvXPde+OGMBMOJrnM1FcxN0JyaYzxQAGPwF90\npAGjV7arJ1GVR+DP86jiQrgj3j3FBTrUNoWWT5w23RUTIn7FJjs9Mji4w/WJ\nA1uj\r\n=XJNJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMZJW2fE+Gr2wzpEHiBe5lQxwPN5LEiVEsauSgbXO//gIgB1x+VHWFxcSXcQBZiKv5QNluScgULHGCTkOSQjvsU3s="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.1.0-rc2_1558568450150_0.08526155964044113"},"_hasShrinkwrap":false},"2.1.0":{"name":"timpla","version":"2.1.0","description":"An optimal website development experience for [server-side] web frameworks.","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"license":"MIT","engines":{"node":">=10.15.0","npm":">=5.6.0"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"],"main":"lib/public.js","typings":"lib/public.d.ts","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bin":{"timpla":"lib/bin.js"},"scripts":{"start":"cross-env DEBUG=timpla gulp","build":"cross-env NODE_ENV=production DEBUG=timpla gulp build","build:travis":"run-s lib:build build:travisconf","build:travisconf":"cross-env NODE_ENV=production DEBUG=timpla TIMPLA_CONFIG_FILE=.timplaconfig.travis.js gulp build --gulpfile lib","compiled:start":"cross-env DEBUG=timpla gulp --gulpfile lib","compiled:build":"cross-env NODE_ENV=production DEBUG=timpla gulp --gulpfile lib build","lib:build":"run-s lib:clean lib:tsc_build lib:chmodbin","lib:changelog":"npx conventional-changelog -i CHANGELOG.md -s -r 0","lib:chmodbin":"chmod +x lib/bin.js","lib:clean":"rimraf lib/*","lib:docs:clean":"rimraf docs/assets docs/interfaces docs/media docs/modules docs/*.html","lib:docs:copy":"cp -r docs_staging/* docs/ && rimraf docs_staging","lib:docs":"run-s lib:docs:clean lib:readme lib:typedocs lib:docs:copy","lib:lint":"tslint gulpfile.ts/**/*.js","lib:readme":"gulp --gulpfile local.gulpfile.ts --require ts-node/register","lib:start":"tsc -p tsconfig.lib.json --watch","lib:tsc_build":"tsc -p tsconfig.lib.json","lib:typedocs":" typedoc --options typedoc.js gulpfile.ts","prepare":"npm run release","release":"npm run lib:build","test:run_timpla":"cross-env DEBUG=timpla NODE_ENV=production TIMPLA_CONFIG_FILE=__tests__/integration/.timplaconfig.js gulp --gulpfile gulpfile.ts --require ts-node/register","test:build":"npm run test:run_timpla build","test:clean":"npm run test:run_timpla clean","test:run":"jest --coverage","test:watch":"nodemon --exec 'npm test || true' --ignore __tests__/integration/dest/**/*","test":"run-s test:clean test:build test:run"},"lint-staged":{"linters":{"*.json":["prettier --write","git add"],"*.{js,jsx}":["eslint --fix","prettier --write","git add"],"*.{ts,tsx}":["prettier --parser typescript --write","tslint --fix -c tslint.json","git add"]},"ignore":["**/docs/**/*"]},"dependencies":{"@babel/code-frame":"^7.0.0","@types/autoprefixer":"^9.5.0","@types/babel-core":"^6.25.6","@types/browser-sync":"2.26.0","@types/cssnano":"^4.0.0","@types/gulp":"^4.0.6","@types/open":"^6.1.0","@types/webpack":"^4.4.32","@types/webpack-bundle-analyzer":"^2.13.1","@types/webpack-merge":"^4.1.5","autoprefixer":"^9.6.0","babel-loader":"^8.0.6","browser-sync":"^2.26.5","chalk":"^2.4.2","cli-table3":"^0.5.1","connect-history-api-fallback":"^1.6.0","cross-spawn":"^6.0.5","cssnano":"^4.1.10","deepmerge":"^3.2.0","del":"^4.1.1","fancy-log":"^1.3.3","gulp":"^4.0.2","gulp-changed":"^4.0.0","gulp-if":"^2.0.2","gulp-notify":"^3.2.0","gulp-postcss":"^8.0.0","gulp-rename":"^1.4.0","gulp-replace":"^1.0.0","gulp-rev":"^9.0.0","gulp-rev-rewrite":"^1.1.4","gulp-sass":"^4.0.2","gulp-sourcemaps":"^2.6.5","gulp-svgstore":"^7.0.1","gzip-size":"^5.1.1","import-lazy":"^4.0.0","log-symbols":"^3.0.0","merge-stream":"^2.0.0","open":"^6.3.0","plugin-error":"^1.0.1","pretty-bytes":"^5.2.0","rimraf":"^2.6.3","terser-webpack-plugin":"^1.3.0","through2":"^3.0.1","webpack-dev-middleware":"^3.7.0","webpack-hot-middleware":"^2.25.0","webpack-merge":"^4.2.1"},"devDependencies":{"@babel/core":"^7.4.5","@babel/node":"^7.4.5","@babel/plugin-syntax-dynamic-import":"^7.2.0","@babel/polyfill":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@babel/preset-typescript":"^7.3.3","@babel/register":"^7.4.4","@hot-loader/react-dom":"^16.8.6","@types/babel__code-frame":"^7.0.1","@types/connect-history-api-fallback":"^1.3.2","@types/cross-spawn":"^6.0.0","@types/debug":"^4.1.4","@types/eslint":"^4.16.6","@types/fancy-log":"^1.3.1","@types/gulp-changed":"0.0.32","@types/gulp-if":"0.0.33","@types/gulp-rename":"0.0.33","@types/gulp-replace":"0.0.31","@types/gulp-rev":"^5.0.31","@types/gulp-sass":"4.0.0","@types/gulp-sourcemaps":"0.0.32","@types/jest":"^24.0.13","@types/merge-stream":"^1.1.2","@types/node-sass":"^4.11.0","@types/plugin-error":"^0.1.1","@types/pretty-bytes":"^5.1.0","@types/react":"^16.8.19","@types/react-dom":"^16.8.4","@types/recursive-readdir":"^2.2.0","@types/rimraf":"^2.0.2","@types/through2":"^2.0.34","@types/webpack-dev-middleware":"^2.0.2","@types/webpack-hot-middleware":"^2.16.5","ajv":"^6.10.0","babel-eslint":"^10.0.1","codecov":"^3.5.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-prettier":"^4.3.0","eslint-loader":"^2.1.2","eslint-plugin-react":"^7.13.0","eslint-plugin-standard":"^4.0.0","fork-ts-checker-webpack-plugin":"^1.3.5","gulp-inject":"^5.0.2","hard-source-webpack-plugin":"^0.13.1","husky":"^2.3.0","jest":"^24.8.0","lint-staged":"^8.1.7","node-sass":"^4.12.0","nodemon":"^1.19.1","npm-run-all":"^4.1.5","nyc":"^14.1.1","prettier":"^1.17.1","react":"^16.8.6","react-dom":"^16.8.6","react-hot-loader":"^4.9.0","recursive-readdir":"^2.2.2","speed-measure-webpack-plugin":"^1.3.1","ts-jest":"^24.0.2","ts-node":"^8.2.0","tsconfig-paths":"^3.8.0","tslint":"^5.17.0","tslint-config-prettier":"^1.18.0","tslint-react":"^4.0.0","typedoc":"^0.14.2","typedoc-plugin-internal-external":"^2.0.2","typescript":"^3.5.1","webpack":"^4.33.0","webpack-bundle-analyzer":"^3.3.2"},"peerDependencies":{"@babel/core":"^7.0.0","webpack":"^4.0.0"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"464048f644d8ec069391d5dafaf3a4fa5b326111","bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"_id":"timpla@2.1.0","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-4DqBwuTVAEJ85GZo3NE8ecvF4hy2zP0NwIvMDe2lv02FAs4JexIjv0QYQ45EMUsXSweu9T9GXjbRrZCTITc9JA==","shasum":"2ffd744e06abab81121c90330eb12179d9eb4847","tarball":"https://registry.npmjs.org/timpla/-/timpla-2.1.0.tgz","fileCount":278,"unpackedSize":1530222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc90mZCRA9TVsSAnZWagAAMPQP/1qoWXKRlJCe3ezsOPFZ\nDf+QpxH1eIwa9yI/cJvKtGOgUwxBDsEUczg4U3PB6zJAEodcMxgpn+NOv3Uz\nmAtmJvkJiq9v3//s/YTCKzuJV+kBLFSXRuDPZTbIImBH015TIusMECvJ74v4\nUXEiY7/mhULmV8Y7WXYnS7jYz6UwlnjjkbPMHfDIvm6gtTTuedJieSJ+lO7j\nZt/JXwassYiiNSkHv5Lw5mHY5V/H0gdVe3n1cVo2denVoOdrlKZ3UfvkBYa/\ndiIQE51yn0AJQozPsKq7VbNjLfahT4MS5nitGWO3mD7De1K8H+zLUN/DaOjB\nmmeGOTnktIyElVfo+QlCKDjlW/wMv74Rk6BtCAjImI8fqvU8B/JY/3XaflGK\nwf3duinwY0esdMQjJInmTpbLg6MxOUFcGUkggQg8YANi0G4rDRHeqtslgg4q\nmIETgWeFftQnlxPXt1mk5RJxkF7LeYi+L0tPv3iBBfhouesFfkgBqRrEVkAn\nUIC4Jt07BcWk3UkB0HbKVKFwV4/vDGREumkoDM1p5as4mMYjtHUQaQBZl4eM\nH5Kz2EW1NiUurLbUL2xfVoEbB2O5H2tPAS8KhlgkTpzrv9Zkc1pTrZF3Rw8v\nlnlBSdNeSfxiX5F/E6YSH8huu/MtIqmQ+TCG53ZMjOLmyZGkHi3LcKLLglHP\nzeD+\r\n=jFMY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIxKUaS4htmz1+Tw/TzvFDAqEaucTuf0B8C45QvChExQIgEpQABeoYZ9mzfU5qWyKihbNfwvgxCyhBk3mbfSqufmM="}]},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"_npmUser":{"name":"igikorn","email":"igikorn@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/timpla_2.1.0_1559710104279_0.6931870944069096"},"_hasShrinkwrap":false}},"time":{"created":"2018-06-04T02:52:09.853Z","1.0.0":"2018-06-04T02:52:09.972Z","modified":"2022-05-21T21:25:01.059Z","1.0.1":"2018-06-04T09:41:58.199Z","1.0.3":"2018-06-04T09:57:38.097Z","1.0.4":"2018-06-04T10:28:55.046Z","1.1.0":"2018-06-04T11:20:01.868Z","1.1.1":"2018-06-04T11:20:41.335Z","1.1.2":"2018-06-04T11:24:50.047Z","1.1.3":"2018-06-04T11:46:45.733Z","1.1.4":"2018-06-04T12:53:05.195Z","1.1.5":"2018-06-04T12:59:51.847Z","1.2.0":"2018-06-04T13:06:06.062Z","1.2.1":"2018-06-04T13:23:29.663Z","1.2.2":"2018-06-04T13:33:34.492Z","1.2.3":"2018-06-04T13:37:27.766Z","1.2.4":"2018-06-04T21:32:54.443Z","1.2.5":"2018-06-04T23:50:56.195Z","1.3.0":"2018-06-05T01:45:50.025Z","1.4.0":"2018-06-08T06:00:57.781Z","1.4.1":"2018-06-08T07:13:05.366Z","1.4.2":"2018-06-09T03:15:59.604Z","1.4.3":"2018-06-09T13:29:19.129Z","1.4.4":"2018-06-10T08:47:48.893Z","1.4.5":"2018-06-10T08:54:05.392Z","1.4.6":"2018-06-11T02:24:50.654Z","1.4.7":"2018-07-30T23:13:36.630Z","1.4.8":"2018-08-16T10:13:14.406Z","1.4.9":"2018-08-22T00:10:47.091Z","1.4.10":"2018-08-30T09:35:58.257Z","1.4.11":"2018-09-22T15:51:26.643Z","1.4.12":"2018-10-06T13:15:27.404Z","1.4.13":"2018-10-17T21:15:13.477Z","1.4.14":"2018-10-25T04:27:03.531Z","1.5.1-rc1":"2018-10-27T12:17:22.360Z","1.5.1-rc2":"2018-10-27T13:47:49.041Z","1.5.1-rc3":"2018-10-27T13:58:54.688Z","1.5.1-rc4":"2018-10-27T15:36:50.814Z","1.5.1-rc5":"2018-10-28T07:52:07.069Z","1.5.1-rc6":"2018-10-29T01:35:05.216Z","1.5.1-rc7":"2018-10-29T07:11:57.200Z","1.5.1-rc8":"2018-10-29T07:45:55.710Z","1.5.1-rc9":"2018-10-30T08:00:23.223Z","1.5.1-rc10":"2018-10-31T04:52:57.777Z","1.5.1-rc11":"2018-10-31T05:14:55.664Z","1.5.1-rc12":"2018-11-01T04:33:08.723Z","1.5.1-rc13":"2018-11-04T10:33:06.913Z","1.5.1-rc14":"2018-11-04T12:23:04.207Z","1.5.1-rc15":"2018-11-05T21:06:24.504Z","2.0.0-rc1":"2018-11-11T07:23:14.374Z","2.0.0-rc2":"2018-11-11T09:00:34.686Z","2.0.0-rc3":"2018-11-12T08:49:52.393Z","2.0.0":"2018-11-12T09:10:28.893Z","2.0.1":"2018-11-12T11:14:51.052Z","2.0.2":"2018-11-13T08:57:59.950Z","2.0.3-rc1":"2018-11-14T02:38:48.621Z","2.0.3-rc2":"2018-11-14T02:52:09.774Z","2.0.3":"2018-11-14T03:06:28.456Z","2.0.4":"2018-11-21T03:59:54.841Z","2.0.5":"2018-11-22T22:41:26.838Z","2.0.6":"2018-11-27T00:34:09.886Z","2.0.7":"2018-11-28T03:14:17.905Z","2.0.8":"2018-12-02T21:27:52.018Z","2.0.9":"2018-12-05T04:11:49.175Z","2.0.10":"2018-12-11T01:09:26.309Z","2.0.11":"2018-12-27T20:48:15.066Z","2.0.12":"2019-01-22T00:37:06.240Z","2.0.13":"2019-02-06T21:16:56.214Z","2.0.14":"2019-02-18T23:08:19.218Z","2.0.15":"2019-03-09T22:15:25.116Z","2.0.16":"2019-03-11T02:48:49.872Z","2.0.17":"2019-03-14T20:59:48.315Z","2.0.18":"2019-03-21T02:08:10.166Z","2.0.19":"2019-03-21T23:18:13.479Z","2.0.20":"2019-03-22T03:27:48.081Z","2.0.21":"2019-03-26T04:29:49.786Z","2.1.0-rc1":"2019-04-08T00:39:27.782Z","2.1.0-rc2":"2019-05-22T23:40:51.310Z","2.1.0":"2019-06-05T04:48:24.512Z"},"maintainers":[{"name":"igikorn","email":"igikorn@gmail.com"}],"description":"An optimal website development experience for [server-side] web frameworks.","homepage":"https://github.com/igimanaloto/timpla","repository":{"type":"git","url":"git+ssh://git@github.com/igimanaloto/timpla.git"},"bugs":{"url":"https://github.com/igimanaloto/timpla/issues"},"license":"MIT","readme":"<!-- STOP! Don't edit me. Look at local.gulpfile.js/README.md and build from there. -->\n\n<div align=\"center\">\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-logo.png\" width=\"182\" height=\"100\" />\n\nYour auntie's favourite asset bundler for [server-side] web frameworks. Provides an optimal web-development experience for TypeScript and/or ESNext.\n\nPowered by gulp 4 & webpack 4.\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/igimanaloto/timpla.svg)](https://greenkeeper.io/)\n[![Build Status](https://travis-ci.org/igimanaloto/timpla.svg?branch=master)](https://travis-ci.org/igimanaloto/timpla)\n[![npm version](https://badge.fury.io/js/timpla.svg)](https://badge.fury.io/js/timpla)\n[![codecov](https://codecov.io/gh/igimanaloto/timpla/branch/master/graph/badge.svg)](https://codecov.io/gh/igimanaloto/timpla)\n\n</div>\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [The Timpla-way of thinking](#the-timpla-way-of-thinking)\n  - [Commands](#commands)\n  - [Debugging](#debugging)\n  - [Influence](#influence)\n- [Configuring Timpla](#configuring-timpla)\n  - [List of available options](#list-of-available-options)\n  - [The timplaHelper object](#the-timplahelper-object)\n  - [Specifying a config file on runtime](#specifying-a-config-file-on-runtime)\n  - [Overriding babel & babel-loader options](#overriding-babel---babel-loader-options)\n  - [Configuring Webpack](#configuring-webpack)\n  - [Overriding tasks](#overriding-tasks)\n  - [TypeScript](#typescript)\n  - [Disabling TypeScript](#disabling-typescript)\n  - [Disabling TSLint](#disabling-tslint)\n  - [ESLint](#eslint)\n  - [Disabling ESLint](#disabling-eslint)\n- [The three levels of reloading](#the-three-levels-of-reloading)\n  - [BrowserSync injection and reloading](#browsersync-injection-and-reloading)\n  - [Configuring BrowserSync middleware](#configuring-browsersync-middleware)\n  - [Hot module reloading + React HMR](#hot-module-reloading---react-hmr)\n    - [Dev-server reloading based on config file changes](#dev-server-reloading-based-on-config-file-changes)\n- [Common setups](#common-setups)\n  - [Using Timpla as a static html workflow](#using-timpla-as-a-static-html-workflow)\n  - [Using Timpla with an existing site (Proxy option)](#using-timpla-with-an-existing-site--proxy-option-)\n  - [Replacing the html task with Shopify Liquid templating](#replacing-the-html-task-with-shopify-liquid-templating)\n- [Common Problems](#common-problems)\n  - [I'm getting a different version of dependency X when I use Timpla!](#i-m-getting-a-different-version-of-dependency-x-when-i-use-timpla-)\n  - [Timpla doesn't pick up changes to my eslintrc](#timpla-doesn-t-pick-up-changes-to-my-eslintrc)\n  - [When I build, javascript files don't work!](#when-i-build--javascript-files-don-t-work-)\n  - [process.cwd() isn't working as it's supposed to!](#processcwd---isn-t-working-as-it-s-supposed-to-)\n  - [Tips for working with npm linked dependencies](#tips-for-working-with-npm-linked-dependencies)\n- [CAQIAs (Commonly asked questions I ask)](#caqias--commonly-asked-questions-i-ask-)\n- [Developing the plugin](#developing-the-plugin)\n- [Releasing the plugin](#releasing-the-plugin)\n\n## Getting started\n\nTimpla aims is to provide you with an excellent web development experience. Timpla focuses on the truly defined parts in every build process: preparing javascript, css and media files for your websites. Three layers of reloading power Timpla: CSS-injection/reloading via BrowserSync (proxy or server), Webpack JS/TS Hot Module Reloading and full dev-server reloads based on core config changes.\n\nUnlike a `boilerplate` or a `full-blown` development framework, the rational behind Timpla is that of guiding users with an undiscriminating base. You bring your own dependencies to enhance and/or extend the core Timpla build pipeline.\n\nTimpla maintains its own side of the fence, while you focus on the more important aspects of your workflow, or better yet - getting straight into work!\n\nYou may wonder why bother with Timpla if Webpack does everything. Timpla by no means undermines what Webpack is already able to achieve! However, in our quest to find a sweet development environment, we've come to realise that forcing everything through Webpack yields painful load and reload times. Timpla's performance and tooling in a decently sized project is something we're proud of!\n\n<!-- Typedocs will have a copy of ./media in its own folder -->\n<img src=\"media/timpla-sample.jpg\" />\n\n### Installation\n\nWe recommend that you install Timpla as a whole first first, and removing bits that you do not need. See [Configuring Timpla](#configuring-timpla) for more info.\n\n```sh\n# Base install\nnpm i --save-dev timpla webpack @babel/core\n\n# Timpla allows you to bring in your own versions of the following modules!\nnpm i --save @babel/polyfill @babel/preset-env @babel/preset-react @hot-loader/react-dom babel-eslint eslint eslint-config-prettier eslint-loader eslint-plugin-react hard-source-webpack-plugin prettier react react-dom react-hot-loader speed-measure-webpack-plugin webpack-bundle-analyzer node-sass\n\n# Install typescript dependencies as well. You may skip this part of you only wish to build JS scripts.\nnpm i --save @babel/preset-typescript @types/react @types/react-dom typescript tslint tslint-config-prettier tslint-react fork-ts-checker-webpack-plugin\n\n# Initialise timpla\n# Careful: outputs config files and a starter src directory:\n#  babel.config.js\n#  .eslintrc\n#  .prettierrc\n#  .timplaconfig.js\n# The following are generated for TS projects\n#  tsconfig.json\n#  tslint.json\n\n# For TypeScript support (DEFAULT)\nnpx timpla init\n\n# For JS-only, disabling TypeScript support\nnpx timpla initJS\n\n# Start the dev-server\nnpx timpla\n\n# Build all asset files\nnpx timpla build\n```\n\n### The Timpla-way of thinking\n\nTimpla is a process-driven tool. Each `asset stream` holds a pre-defined and parallelised part in the Timpla build chain. The following assets are built in parallel:\n\n- `Sass` files are compiled into css files, so you may load it as normal in your templates.\n- `SVG` files are combined into single-svgs for use, either via direct insertion into your templates, or your javascript-driven loading.\n- `Image` and `static` asset files are simply copied, but the processes are extendible, wherein you can tap into the build-stream and introduce your own pre-processing tasks.\n- `Javascript and/or TypeScript` files bundled using Webpack.\n- Useful tooling such as file size reports, file-revving, bundle analysis and Webpack performance measurements are made available to further enhance your development process.\n\nIn every dev or production build, `prebuild` and `postbuild` hooks are available for you to enhance the Timpla process. Apart from the javascript task, you may replace how each asset-type is processed via Timpla's alternateable tasking system.\n\nTimpla also allows you to register extra tasks via Gulp. These may be added to the pre or post parts of the build process.\n\nTimpla nukes the `destination` folder for every dev or production start. This ensures that you treat the `src` directory as the one true source for raw source files.\n\n### Commands\n\n```sh\n# Timpla starts the development server by default (npx timpla)\nnpx timpla [command]\n\n[command]\ninit # inits timpla (copies initial src and config files to project root)\ninitConfig # recreates the .timplaconfig.js file in the project root\nbuild # outputs build files\nclean # cleans the dest directory\njavascripts # builds js and ts files\nrev # revs files and outputs a manifest file (designed for html/basic use-cases only)\nsizeReport # shows a file sizes report\nsvg # combines svg files into one\nstylesheets # transpiles sass/scss files to css\nopenAnalyzer # opens the bundle analyzer (run this after a build)\nfonts # copies files from font src to dest\nimages # copies files from images src to dest\nstaticFiles # copies files from static src to dest\nhtml # copies files from html src to dest\n```\n\nThese will be available as `npx timpla [yourcustomtask]`.\n\nYou can also set up npm scripts to simplify the commands:\n\n```json\n# You package.json file\n{\n  \"scripts\": {\n    \"build\": \"timpla build\",\n    \"start\": \"timpla\",\n    \"tasks\": \"npx timpla --tasks\"\n  }\n}\n```\n\n### Debugging\n\nEnable verbose logs by running any timpla command with env DEBUG=timpla:\n\n```sh\nDEBUG=timpla timpla [command]\n```\n\nTo view a breakdown of plugin / loader times, you may also enable it by setting MEASURE=1:\n\n```sh\nMEASURE=1 timpla [command]\n```\n\nThis is done through `speed-measure-webpack-plugin`, so you'll need to have that installed in your project. ForkTS Checker breaks when this is run along-side it, so we have decided not to make it separate from the rest of the debug process. Follow the [issue here](https://github.com/stephencookdev/speed-measure-webpack-plugin/issues/56).\n\n### Influence\n\nServer-side frameworks like Django, Rails, Craft, Wordpress and Laravel come with templating engines that require access to static assets.\n\nTimpla brings back the ol' 'just-output-built-files' approach to asset bundling.\n\nThis plugin provides a drop-in asset bundling system to complement your favourite server-side framework. It streamlines your build and development processes through the following features:\n\n- Bundling JS/TS via Webpack\n- On-screen ESLint and/or TSLint feedback\n- Compiling sass and scss files\n- Bundling svgs via SVGStore\n- Copying static fonts, images and other files, with support for extending their workflows.\n- Live-reloading via browsersync and webpack hmr (dev), with support for React Hot Module reloading\n\nTo be exact, Timpla uses the following technologies:\n\n- Gulp\n- Webpack\n- BrowserSync\n- Node-sass\n- Babel\n- SVGStore\n- ESLint (dev-only)\n- TypeScript\n- TSLint (dev-only)\n\nTimpla also provides TSLint and ESLint support for development-mode. Having errors on an overlay are helpful! On production builds, Timpla disables these to speed up compilation times. Please use an alternative process for production builds, if you wish to lint files.\n\nTimpla started as a fork of [Blendid](https://github.com/vigetlabs/blendid), and continues to carry the torch for providing awesome server-side-driven dev experiences.\n\n## Configuring Timpla\n\nOne of Timpla's aims is to be zero-configuration. By default, Timpla is set to run in HTML mode and displays an html page. Browsersync may be used to `mount` on top of your existing project.\n\nThe most basic Timpla configuration follows:\n\n<!-- inject:timpla_config_basic:js -->\n```javascript\n// @ts-check\n\n/**\n * The @type annotations are harmless, vscode might just make your life easier\n * by adding intellisense support whilst you type!\n */\n\nconst { configure } = require('timpla')\n\nmodule.exports = configure({\n  javascripts: {\n    /** @type { import(\"timpla\").ITimplaWebpackEntryHook } */\n    entry: ({ resolve: r }) => ({\n      'js-index': r('./js-index.jsx'),\n      'ts-index': r('./ts-index.tsx'),\n      'ts-error': r('./ts-error.ts'),\n    }),\n\n    /** @type { import(\"timpla\").ITimplaCustomizeWebpackConfig } */\n    customizeWebpackConfig(w) {\n      // The following helpers are available to aid you in extending the webpack config.\n      const {\n        projectDestPath,\n        projectSrcPath,\n        timplaConfig,\n        timplaProcess,\n        webpack,\n        webpackConfig,\n        webpackMerge,\n      } = w\n      return w.webpackConfig\n    },\n  },\n\n  // To get intellisense for more complex configs, follow the jsdoc example below:\n  // html: {\n  //   /** @type { import(\"timpla\").ITimplaHofTask } */\n  //   alternate: p => {\n  //     p.timplaProcess\n  //   },\n  // },\n\n  //  additionalTasks: {\n  //    /** @param p { import(\"timpla\").ITimplaHelper } */\n  //    initialize: p => {},\n  //    development: {\n  //      /** @type { import(\"timpla\").ITimplaHofTask } */\n  //      prebuild(tp) {},\n  //    },\n  //  },\n})\n\n```\n<!-- endinject -->\n\nTasks such as html, static and images copy files from the src to the dest folder. Use the `alternate` option to define processing logic. To keep Timpla light, no preprocessing happens for image and other static files. It is left to you to add your preferred workflows. (see alternate configs for reach of the asset tasks below)\n\nFull configuration is available through `.timplaconfig.js`. You'll get a copy in your project's root folder after running `npx timpla init`.\n\nTimpla exports a helper function called `configure`. Use this to create a timplaconfig object in your `.timplaconfig.js`. As an added benefit, your IDE's intellisense should suggest what options are available!\n\n### List of available options\n\n[Full TS documentation](https://igimanaloto.github.io/timpla/interfaces/_lib_timplainterfaces_.ifulltimplaconfig.html) of the timpla config object is available for viewing. An excerpt of the full timpla config follows:\n\n<!-- inject:timpla_config:ts -->\n```typescript\n\nexport interface IFullTimplaConfig {\n  /** The base folder to include for compilation. Defaults to `./src`. */\n  src: string\n  /** The base folder to output bundled files to. Defaults to `./dest`. */\n  dest: string\n  /*\n   * Instructs timpla on how to run the staticFiles task.\n   * Set to `false` to disable the task.\n   */\n  staticFiles:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `static`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `./`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the clean task.\n   * Set to `false` to disable the task.\n   */\n  clean:\n    | false\n    | {\n        /**\n         * Extra files and folders to `clean` before Timpla runs the dev-server or full-build.\n         * `Please take great care when specifying your own patterns`\n         * Accepts an array of globs. Defaults to the project `dest` directory.\n         */\n        patterns?: string | ReadonlyArray<string>\n        /** Options to pass to the del function. */\n        delOptions?: Options\n      }\n\n  /** Watch task options */\n  watch: {\n    /**\n     * Gulp watch options.\n     * Accepts gulp watch options for all tasks,\n     * or a keyed-list of watch-options to apply to tasks individually.\n     * - E.g. gulpWatch.svg = {} sets specific configs for the svg task.\n     */\n    gulpWatch: {\n      [name: string]: any\n    }\n  }\n\n  /**\n   * Instructs timpla on how to run the stylesheets task.\n   * Set to `false` to disable the task.\n   */\n  stylesheets:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `stylesheets`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `stylesheets`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** [Cssnano](https://www.github.com/cssnano/cssnano) options */\n        cssnanoOptions: CssNanoOptions\n        /** [Autoprefixer](https://github.com/postcss/autoprefixer#options) options */\n        autoprefixerOptions: autoprefixer.Options\n        /** [PostCSS](https://github.com/postcss/postcss#options) options */\n        postcssOptions: postcss.ProcessOptions\n        /** [Gulp/Node sass](https://www.npmjs.com/package/gulp-sass) options */\n        sassOptions: INodeSassOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['sass', 'scss', 'css']`. */\n        extensions: string[]\n        /** Development-specific stylesheets options */\n        development: {\n          /** Defaults to `true`. */\n          sourceMap: boolean\n        }\n        /** Production-specific stylesheets options */\n        production: {\n          /** Defaults to `false`. */\n          sourceMap: boolean\n        }\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the fonts task.\n   * Set to `false` to disable the task.\n   */\n  fonts:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `fonts`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `fonts`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['woff2', 'woff', 'eot', 'ttf', 'svg']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the images task.\n   * Set to `false` to disable the task.\n   */\n  images:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `images`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A list of extensions for BrowserSync to watch. Defaults to `['jpg', 'jpeg', 'png', 'svg', 'gif', 'webp']`. */\n        extensions: string[]\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the svg task.\n   * Set to `false` to disable the task.\n   */\n  svg:\n    | false\n    | {\n        /** Options for the gulp-svg plugin. */\n        svgstore: IGulpSvgStore\n        /** The output filename for the concatanted svg file. Defaults to `icons.svg`. */\n        outputName: string\n        /** The folder to include for compilation. Defaults to `svg`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to `images`. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the html task.\n   * Set to `false` to disable the task.\n   */\n  html:\n    | false\n    | {\n        /** The folder to include for compilation. Defaults to `html`. */\n        src: string\n        /** The folder to output bundled files to. Defaults to ``. */\n        dest: string\n        /** Options to pass to the gulp src task. This setting is ignored when an alternate task is provided. */\n        srcOptions: SrcOptions\n        /** Options to pass to the gulp dest task. This setting is ignored when an alternate task is provided. */\n        destOptions: DestOptions\n        /** A custom task to override the default with. */\n        alternate?: ITimplaHofTask\n      }\n  /**\n   * Instructs timpla on how to run the javascripts task.\n   */\n  javascripts: {\n    /** The folder to include for compilation. Defaults to `javascripts`. */\n    src: string\n    /** The folder to output bundled files to. Defaults to `javascripts`. */\n    dest: string\n    /** A list of extensions for BrowserSync to watch and Webpack to load. Defaults to `['js', 'jsx', 'ts', 'tsx']`. */\n    extensions: string[]\n    /**\n     * The webpack entry config.\n     * Accepts a Timpla-flavoured entry function or a webpack entry object.\n     * Webpack is configured to use the projectRoot as the cwd.\n     * Files you point in the entry config need to have the relative path to the javascripts folder.\n     * Use the `resolve` helper to resolve files to the js src folder.\n     */\n    entry: ITimplaWebpackEntry\n    /**\n     * Instructs webpack the base path for all the assets within your application.\n     * Defaults to the `javascripts.dest` path. e.g. `/javascripts`\n     */\n    publicPath?: string\n    /**\n     * Options for the babelLoader. Accepts babel-loader specific as well as Babel options.\n     * For more advanced use-cases, e.g. manually specifying the babel config file to use.\n     * Defaults to\n     * - `cacheDirectory: true`\n     * - `cacheCompression: false`\n     * - `root: your project root`\n     */\n    babelLoaderOptions: IBabelLoaderOptions\n    /**\n     * Accepts [webpackBundleAnalyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) options.\n     * Set to `false` to disable webpackBundleAnalyzer.\n     * Defaults to\n     * - `statsFilename: timpla-webpack-stats.json`\n     * - `openAnalyzer: true if Timpla hasn't fully reloaded.`\n     */\n    webpackBundleAnalyzerOptions: false | BundleAnalyzerPlugin.Options\n    /**\n     * A customisation function that allows modifying the generated\n     * webpack config before it is passed to webpack.\n     */\n    customizeWebpackConfig: ITimplaCustomizeWebpackConfig\n\n    /**\n     * Instructs timpla on how to run Webpack in production.\n     */\n    production: {\n      /**\n       * The webpack devtool to use.\n       * Defaults to `source-map`.\n       */\n      devtool: webpack.Options.Devtool\n      /**\n       * Timpla uses Hard Source to improve production build times.\n       * Set to `false` to disable the plugin.\n       * Accepts [hard-source-webpack-plugin](https://github.com/mzgoddard/hard-source-webpack-plugin) options.\n       */\n      hardSourceOptions: false | IHardSourceWebpackPluginOptions\n      /**\n       * [Terser Webpack Plugin](https://github.com/webpack-contrib/terser-webpack-plugin) options.\n       * Timpla uses Terser to uglify the bundled JS files.\n       * UglifyJS2 is outdated, and Terser is its successor.\n       */\n      terserConfig: Partial<{}>\n    }\n\n    /**\n     * Enables or disables TypeScript support for Timpla. Default: `true`\n     * When upgrading a Timpla JS project, please install the required dependencies:\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     */\n    useTypeScript: boolean\n  }\n\n  /**\n   * Configures the BrowserSync task.\n   * Accepts [browser-sync](https://browsersync.io/docs/options) options.\n   */\n  browserSync: false | ITimplaBrowserSyncOptions\n\n  /** Instructs Timpla on after-build tasks. */\n  production: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Enables file-reving (hashed filenames).\n     * Timpla revs your files and generates a json manifest file.\n     * You'll need to write your own mapper to pick up the filenames from the rev manifest file.\n     * Defaults to `false`.\n     */\n    rev: boolean\n  }\n\n  /**\n   * Instructs timpla on how it runs in dev-mode.\n   */\n  development: {\n    /**\n     * Opens a specified target in an app after all the core-tasks run.\n     * Uses the open package to achieve this.\n     * Defaults to `false`.\n     */\n    open: false | IOpenOptions\n    /**\n     * Extra files and folders for Timpla to watch.\n     * When these change, Timpla reloads the dev-server.\n     * Set to `false` to disable this option.\n     * Defaults to `true`.\n     */\n    timplaWatch: boolean | string[]\n\n    /**\n     * The webpack devtool to use.\n     * Defaults to `cheap-module-eval-source-map`.\n     */\n    devtool: webpack.Options.Devtool\n\n    /**\n     * Accepts [Webpack Hot Middleware](https://github.com/webpack-contrib/webpack-hot-middleware) client options.\n     * Set to `false` to disable [hot module reloading](https://webpack.js.org/concepts/hot-module-replacement/).\n     * Defaults to\n     * - `reload: true`\n     * - `quiet: true`\n     * - To configure the middleware itself, use `development.middlewareConfig.webpackHotMiddleware`.\n     */\n    webpackHotMiddlewareClient: IWebpackHotMiddlewareClientOptions | false\n\n    /**\n     * Toggle default BrowserSync middlewares added by Timpla.\n     *\n     * Set to `false` to disable all default middleware from being added. Err on the side of caution as this may break browserSync and JS from working altogether.\n     *\n     * By default, timpla runs as a SPA, so it requires the use of connectHistoryApiFallbackMiddleware so that requests\n     * may be routed correctly.\n     *\n     * When browserSync is configured to run in proxy-mode,\n     * we disable connectHistoryApiFallbackMiddleware to ensure that all requests go through to your proxied server as normal.\n     */\n    middlewareConfig:\n      | false\n      | {\n          /**\n           * Accepts webpackDevMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          webpackDevMiddleware?: false | Partial<IWebpackDevMiddlewareOptions>\n\n          /**\n           * Accepts webpackHotMiddleware config.\n           * This only sets the middleware config.\n           * - To configure the client, Use `development.webpackHotMiddlewareClient`.\n           * - To disable, set the value to `false`.\n           */\n          webpackHotMiddleware?: false | Partial<IWebpackHotMiddlewareOptions>\n\n          /**\n           * Accepts connectHistoryApiFallbackMiddleware config.\n           * - To disable, set the value to `false`.\n           */\n          connectHistoryApiFallbackMiddleware?: false | IConnectHistoryApiFallbackOptions\n        }\n\n    /** Disables the `fallback server config` that Timpla uses when no browserSync config is supplied. */\n    disableServerFallback: boolean\n    /**\n     * In dev-mode, Timpla supports ESLint via the ESLint loader.\n     * By default, Timpla requires the eslint package to be installed.\n     * - `npm i --save-dev eslint`\n     * - Set to `false` to disable ESLint.\n     */\n    eslint:\n      | false\n      | {\n          /*\n           * Accepts [eslint-loader](https://github.com/webpack-contrib/eslint-loader) & [eslint](http://eslint.org/docs/developer-guide/nodejs-api#cliengine) options.\n           */\n          esLintLoaderOptions: IESLintLoaderOptions\n        }\n\n    /**\n     * In dev-mode, Timpla uses Fork TS Checker, a webpack plugin that runs typescript export type checker on a separate process.\n     * By default, Timpla requires dependent packages to be installed.\n     * - `npm i --save-dev typescript tslint fork-ts-checker-webpack-plugin`\n     * - Set to `false` to disable the plugin, and TSLint support.\n     */\n    tslint:\n      | {\n          /** Accepts [Fork TS Checker](https://github.com/Realytics/fork-ts-checker-webpack-plugin) options. */\n          forkTsCheckerOptions: IForkTsCheckerOptions\n        }\n      | false\n  }\n\n  /** Instructs Timpla on additional tasks */\n  additionalTasks: {\n    /** An init function that runs before all the other Timpla. */\n    initialize?: (timplaHelper: ITimplaHelper) => any\n    /** Instructs Timpla to add extra `development tasks`. */\n    development: {\n      /** Adds an extra development `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra development `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n    /** Instructs Timpla to add extra `production tasks`. */\n    production: {\n      /** Adds an extra production `prebuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      prebuild?: ITimplaHofTask\n      /** Adds an extra production `postbuild task`. Accepts a `higher-order-function`, i.e. returns a Gulp/Undertaker TaskFunction. */\n      postbuild?: ITimplaHofTask\n    }\n  }\n}\n\n/** The partialised Timpla Config so users' may opt in to only customise what they wish to. */\nexport type ITimplaConfig = IRecursivePartial<IFullTimplaConfig>\n\n```\n<!-- endinject -->\n\n### The timplaHelper object\n\nThe following variables are available from the timplaHelper\n\n```javascript\nconst timplaHelper = {\n  browserSync, // Access the browserSync instance.\n  gulp, // A gulp instance that can be used to register new tasks.\n  projectDestPath, // Resolves a list of strings to the project's dest path.\n  projectSrcPath, // Resolves a list of strings to the project's src path.\n  timplaConfig, // The full timplaConfig\n  timplaProcess, // Provides useful constants such as isDevelopment, isProduction and INIT_CWD (your project's resolved base path).\n}\n```\n\n### Specifying a config file on runtime\n\nTo specify a timpla config on runtime, you may set the TIMPLA_CONFIG_FILE env like so:\n\n`TIMPLA_CONFIG_PATH='./relative/path/to/file' npx timpla [command]`\n\n### Overriding babel & babel-loader options\n\nYou may use javascripts.babelLoaderOptions to fully control how the webpack babel-loader works.\n\nBabel config resolution is set to default, so babel.config.js and babelrc files are picked up by Timpla. We recommend using babel.config.js as opposed to a babelrc so that npm linked modules are also picked up by babel-loader, via Babel's root config resolution mechanism.\n\nTimpla copies the following babel config file to your project folder. (babel.config.js) and pre-configures your .timplaconfig.js to pick this up.\n\n<!-- inject:babel:js -->\n```javascript\nconst debug = process.env.DEBUG === 'timpla'\nconst isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        // usage automatically injects @babel/polyfill, so older browsers may still work\n        // see https://babeljs.io/docs/en/babel-polyfill\n        // We're only loading this for production builds so development compilation times are faster!\n        ...(isProduction && { useBuiltIns: 'usage' }),\n        debug,\n      },\n    ],\n    '@babel/preset-typescript',\n    '@babel/preset-react',\n  ],\n  plugins: ['react-hot-loader/babel'],\n}\n\n```\n<!-- endinject -->\n\n### Configuring Webpack\n\nWebpack by default uses the following plugins (module.rules):\n\n```sh\n# HardSourceWebpackPlugin - disabled for now, as caching may break babel-loader 7.2 builds.\nTerserPlugin # uglifies/minifies code\nSpeedMeasurePlugin # Shows a useful breakdown of Webpack compilation speed. Runs when DEBUG=timpla is set.\nForkTsCheckerWebpackPlugin # creates a forked (separated) TSLint server to run alongside Timpla\nBundleAnalyzerPlugin # provides a visual report of js bundle sizes\n```\n\nEach of these plugins are configurable/can be disabled. For example, javascripts.tslint.forkTsCheckerOptions accepts ForkTsCheckerWebpackPlugin configuration options.\n\nIn certain scenarios, Timpla lazy-loads plugins. This gives you the flexibility to `remove` packages that you don't need :). For example, setting javascripts.tslint to false disables tslint and loading the module itself. As a result, you may remove tslint and ForkTsCheckerWebpackPlugin from your dependencies.\n\nWebpack also uses the following loaders:\n\n```\nbabel-loader (ESNext and TypeScript support)\neslint-loader (dev-only)\n```\n\nYou have access to the full webpack configuration before it gets fed to Webpack itself. This way, you can add extra loaders you wish to use. Please use the javascripts.customizeWebpackConfig rule in .timplaconfig.js. It accepts a function that returns a configuration object:\n\n```javascript\n// .timplaconfig.js\n{\n  // ... the rest of your config file\n  javascripts: {\n    customizeWebpackConfig({\n      webpackConfig,\n      timplaConfig,\n      timplaProcess,\n      webpack,\n      projectDestPath,\n      projectSrcPath,\n      webpackMerge\n    }) => {\n      const modifiedConfig = { ...webpackConfig }\n      // You can modify the config to how you want it\n\n      // check if it's prod or development\n      if (timplaProcess.isProduction) {\n        // do this;\n      }\n      if (timplaProcess.isDevelopment) {\n        // do this\n      }\n\n      // or even modify rules & plugins...\n      modifiedConfig.plugins = modifiedConfig.plugins.filter(yourFilterFunction)\n      modifiedConfig.module.rules.push(yourOwnRule)\n\n      // or with the webpack merge plugin, you can even do a webpackMerge(webpackConfig, require('./yourOverrides'))\n\n      return modifiedConfig\n    }\n  }\n}\n```\n\n### Overriding tasks\n\nYou may overwrite any listed tasks with an alternate option. Please provide a higher order function (a function returning a function) that accepts a timplaHelper object. You may use these to help write the tasks. The higher order function should signal gulp completion: either through a manual callback call or by returning a gulp stream. If in doubt, always return an Undertaker TaskFunction!\n\nA contrived example follows.\n\n```javascript\n{\n  // ... the rest of your timpla config\n  stylesheets: {\n    // ... the rest of your stylesheets config\n    alternate({\n      browserSync,\n      gulp,\n      projectDestPath,\n      projectSrcPath,\n      timplaConfig,\n      timplaProcess,\n    }){\n      const stylesheetsConfig = timplaConfig.stylesheets // access the stylesheets config\n      const paths = {\n        src: projectSrcPath(stylesheetsConfig.src, '**/*.{' + stylesheetsConfig.extensions + '}'),\n        dest: projectDestPath(stylesheetsConfig.dest),\n      }\n\n      // We must return a higher order function\n      return (cb) => {\n        // if gulp is not being used, cb can be used to call signal completion\n        // dosomethingElse();\n        // cb()\n\n        // We can also return a gulp stream instead\n        return gulp\n          .src(paths.src) // finds [your-project]/stylesheets/something.txt\n          .pipe(yourOwnSassProcesser())\n          .pipe(gulp.dest(paths.dest)) // transfers the file to [your-project]/stylesheets/somethingelse.txt\n          .pipe(browserSync.stream()) // streams changes to browserSync\n      }\n    }\n  }\n}\n```\n\n### TypeScript\n\nBy default TypeScript and TSLint are enabled. TypeScript functionality is provided through babel-loader and @babel/preset-typescript. TSLint is enabled by default for development mode.\n\nTimpla uses babel-loader with @babel/preset-typescript and [Fork TS Checker Webpack Plugin](https://github.com/Realytics/fork-ts-checker-webpack-plugin) to process TypeScript files. To improve compilation times, Timpla utilises the Fork TS Checker Webpack Plugin to create a separate linting process for TypeScript. Any linting errors won't block the webpack compilation process but will display either in the console or as an overlay on the web page.\n\nFor production builds, TSLint is disabled. We've found that it is better to run TSLint as a separate production process.\n\n### Disabling TypeScript\n\nIf you followed the installation instructions above, please uninstall the following packages: `fork-ts-checker-webpack-plugin`, `tslint`, and `typescript`. Remove @babel/preset-typescript from babel.config.js. Finally, set javascripts.useTypeScript to false.\n\n### Disabling TSLint\n\nPlease set `development.tslint` to false. You may also opt to uninstall `tslint` and `fork-ts-checker-webpack-plugin` as these won't be loaded by Timpla anymore.\n\n### ESLint\n\nESLint is enabled for dev-mode. Timpla requires you to have an eslintrc file in your project directory, as well the eslint-loader package installed. Eslintrc resolution is left to the eslint-loader plugin, which means that it should pick up child-dir eslintrc files.\n\n### Disabling ESLint\n\nSet `development.eslint` to false if you don't require it. As eslint-loader is loaded conditionally, you may uninstall it if you don't require eslint.\n\n## The three levels of reloading\n\n### BrowserSync injection and reloading\n\nTimpla uses BrowserSync to inject stylesheets and notify the browser of full-reloads when files change. Timpla pre-configures the watched files for you, but you may also extend it through the `files: [globs]` config.\n\n```javascript\nmodule.exports = {\n  browserSync: {\n    files: ['when_this_changes_reload_the_page/**/*'],\n  },\n}\n```\n\nWhen writing your own tasks, Timpla Helper passes the browserSync instance so you may stream(inject) your changes on the fly!\n\n### Configuring BrowserSync middleware\n\nTimpla uses `webpack-hot-middleware`, `webpack-dev-middleware` and `connect-history-api-fallback` by default. Each of these accept config objects, via `development.middlewareConfig`. You may disable any of them by passing `false` to their config key, e.g. `development.middlewareConfig.webpackHotMiddleware: false`. If you wish to disable everything, then set `middlewareConfig` to `false`.\n\n### Hot module reloading + React HMR\n\nAny files you mark as hot won't cause the browser to reload. This is useful when you need to keep the browser in its current state.\n\nHot module reloading is enabled by default. Setting `development.webpackHotMiddlewareClient` or `development.middlewareConfig.webpackHotMiddleware` to `false` disables it.\n\nTo support react hot module reloading, please install and add `react-hot-loader/babel` to your `babel.config.js`'s plugins. This should be fine even for production builds, as react-hot-loader adds minimal footprint to your code.\n\n#### Dev-server reloading based on config file changes\n\nTimpla fully reloads the dev-server whenever your config files such as babel config, tsconfig, tslint and eslint files change. This saves you the hassle of having to restart just to test configuration settings!\n\nYou may also extend the watched files/folders by adding them to .timplaconfig.js > `development.timplaWatch`. Timpla iterates through these files and sets up reload watchers. You may provide resolved or relative paths.\n\nSetting `development.timplaWatch` to `false` disables the reload server.\n\n## Common setups\n\n### Using Timpla as a static html workflow\n\nOut of the box, Timpla is configured to serve an html page.\n\n### Using Timpla with an existing site (Proxy option)\n\nMore often than never, server-side frameworks run your site on localhost (or a locally configured server). Timpla can mount on your site through BrowserSync's proxy option.\n\nTo use timpla with an existing site, you may follow the sample browsersync config below. You run your server-side framework and Timpla in a separate process. Use the browserSync option in .timplaconfig.js to set BrowserSync options - it accepts a configuration object. An example of getting it to work with Django/Rails/Laravel follows:\n\n```javascript\n// .timplaconfig.js\nconst { configure } = require('timpla')\nconst path = require('path')\n\n// You would most probably want to react to template changes, you may set extra folders here (relative)\nconst extraWatchFiles = ['templates/**/*']\n\n// The local instance of your site that Timpla will proxy to\nconst proxyTarget = 'http://127.0.0.1:7025'\n\n// Access the site via localhost:localhostPort\nconst localhostPort = 5605\n\n// If you are using nginx/htaccess to point a host to a local port\n// This is useful if CORS headers are set on your local site resources (CDN)\nconst host = 'http://local-new.grabone.co.nz'\n\nmodule.exports = configure({\n  browserSync: {\n    proxyTarget,\n    files: extraWatchFiles,\n    port: localhostPort,\n    cors: true,\n    proxy: {\n      target: proxyTarget,\n      proxyReq: [\n        // Additional request headers may be added here\n        function(proxyReq) {\n          proxyReq.setHeader('host', host.replace(/^https?:\\/\\//i, ''))\n          // grabone authentication requires proper host header to be set\n          proxyReq.setHeader('Access-Control-Allow-Origin', '*')\n        },\n      ],\n    },\n    files: files.map(fileGlob => path.join(process.env.PWD, fileGlob)),\n    host,\n    // Prevent browsersync from automatically opening the site (can get annoying pretty quickly)\n    open: false,\n    online: false,\n  },\n  // ... the rest of your config\n})\n```\n\n### Replacing the html task with Shopify Liquid templating\n\nThe following example shows how to get Shopify liquid templating support. We'll override the html task to run the html files through liquidr via gulp-liquidr.\n\nThe same approach can be made to pull in gulp-pug, gulp-haml, gulp-slim and gulp-jinja!\n\n```javascript\n// make sure to run npm i --save gulp-liquidr first\nconst { configure } = require('timpla')\nconst liquidr = require('gulp-liquidr')\nconst changed = require('gulp-changed')\n\nmodule.exports = configure({\n  // ... the rest of your file\n  html: {\n    src: 'html',\n    dest: './',\n    // An alternative task may be defined to replace the default\n    alternate({ gulp, env, timplaConfig, browserSync, projectSrcPath, projectDestPath }) {\n      const htmlConfig = timplaConfig.html\n      const paths = {\n        src: [projectSrcPath(htmlConfig.src, '**/*.html')],\n        dest: projectDestPath(htmlConfig.dest),\n      }\n\n      return () =>\n        gulp\n          .src(paths.src)\n          .pipe(changed(paths.dest))\n          .pipe(\n            liquidr({\n              root: [projectSrcPath(htmlConfig.src)],\n              data: {\n                accessMeInYourTemplate: 'ishouldwork',\n              },\n              // other config available from https://www.npmjs.com/package/gulp-liquidr\n            })\n          )\n          .pipe(gulp.dest(paths.dest))\n          .pipe(browserSync.stream())\n    },\n  },\n})\n```\n\n## Common Problems\n\n### I'm getting a different version of dependency X when I use Timpla!\n\nRun `npm i --save/--save-dev [your-package`] to ensure that Webpack picks up your preferred package version.\n\n### Timpla doesn't pick up changes to my eslintrc\n\nThis is a known [issue](https://github.com/webpack-contrib/eslint-loader/issues/214) with eslint-loader. Ensure that cache is turned off whilst a patch is being worked on. Alternatively, you may specify your own eslint caching strategy via `cacheIdentifer`.\n\n### When I build, javascript files don't work!\n\nWe have encountered this happening whenever you switch the `production.rev` setting. Please clear `./node_modules/cache` to force-clear all caches and try again!\n\n### process.cwd() isn't working as it's supposed to!\n\nGulp / Timpla sets the process.env.INIT_CWD to the current projectRoot whereas process.cwd() points to the node_modules/timpla folder. Please ensure that you use INIT_CWD instead to resolve to projectPaths.\n\n### Tips for working with npm linked dependencies\n\nEnsure that you are using a babel.config.js. This will allow babel-loader to process the linked module files (TypeScript and ESNext).\n\n1. npm link yourmodule\n1. set up a module.resolve rule for webpack e.g. yourmodule\\$: path.resolve(\\_\\_dirname, 'node_modules/yourmodule/src/index.ts')\n\n## CAQIAs (Commonly asked questions I ask)\n\n<details>\n  <summary>Is this workflow right for me?</summary>\n  <p>\n    If you are working on a server-side web framework like Django, Rails, Laravel, Shopify, Wordpress, Drupal or Craft - then yes! Timpla works along-side your engine's web templating system by dealing only with building your site assets. Timpla provides live-reloading and a sweet build process - so you can worry less about setup and more about writing code!\n  </p>\n  <p>\n    If you are working on a single page application or a client-side library/framework (e.g. Vue, React and Angular), it's best to go for a client-side boilerplate. The returns will diminish with no-backbone apps.\n  </p>\n</details>\n<details>\n  <summary>Help! Running the server redirects all requests to index.html!</summary>\n  <p>\n      In your .timplaconfig.js config, please set development.middlewareConfig.connectHistoryApiFallbackMiddleware to true. Alternatively, providing a browsersync.proxy config disables this automatically for you.\n  </p>\n</details>\n<details>\n  <summary>BrowserSync serverStatic option doesn't work! I'm not able to see my statically served files when visiting their urls.</summary>\n  <p>\n      Please make sure that the `browserSync.serveStatic` uses absolute paths. You may use `path.join(__dirname, [youroutdir])` for example to get the full path based on the location of your config.\n  </p>\n</details>\n<details>\n  <summary>Gulp? Task runners are no longer required!</summary>\n  <p>Gulp still solves the issue of running tasks. Instead of polluting your npm run scripts or ad-hoc writing your build scripts, Gulp provides an easy-to-pick-up DSL for writing tasks.</p>\n  <p>Although gulp plugins are long past their debut, most of them are still relevant to our tasking needs.</p>\n  <p>Gulp is useful as it opens up streams to BrowserSync and Webpack.</p>\n</details>\n<details>\n  <summary>Gem/plugin/package X provides webpack middleware...</summary>\n  <p>\n    Yes, there are packages, gems or composer plugins that allow injecting webpack via middleware into your asset pipeline.\n  </p>\n  <p>\n    These tools are great, but often do we care less the older project dev environments get. By delegating the `core` to Timpla, we hope that more focus is put on extending, rather than maintaining!\n  </p>\n  <p>\n    Also, we often get into the framework-exclusivity. Think of Timpla as a consistent tool to bring over to projects.\n  </p>\n</details>\n<details>\n  <summary>How different is this from Blendid?</summary>\n  <p>\n    After a fork to upgrade dependencies, it was decided to branch out to provide an updated and extensive configuration framework.\n  </p>\n</details>\n<details>\n  <summary>Does it optimise images or fonts?</summary>\n  <p>Timpla only copies images and fonts to their destination folders. It is recommended that you optimise the images separately, so as not to overload the build process. If you really want to, use the alternate() config.</p>\n</details>\n<details>\n  <summary>Why not inject stylesheets?</summary>\n  <p>Critical-css, lesser requests through service workers / caching and css-in-html have benefits too :)</p>\n</details>\n<details>\n  <summary>Is this production ready?</summary>\n  <p>We use Timpla for [Grabone](https://grabone.co.nz). We invite you to share ideas, and raise issues if you find any! The added benefit of reusing existing gulp tasks is that they are tested independently, dropping the need to duplicate tests!</p>\n</details>\n\n## Developing the plugin\n\nFiles are written in TypeScript, so program to your heart's content. Dev plugins are loaded only in your environment, so they don't get shipped as part of the main package!\n\n```sh\ncd [timpla folder]\nnpm install\nnpm run lib:start # starts the tsc watcher, compiling gulpfile.ts on the go.\n\n# In a separate terminal\ncd [your project]\nnpm link timpla\n```\n\nWhen npm-linked, make sure you execute your commands using `timpla`.\n\n## Releasing the plugin\n\n1. Make changes\n1. pr > Commit those changes to a separate PR\n1. pr > Make sure Travis turns green\n1. master > Merge PR\n1. master > Bump version in package.json\n1. master > npm run lib:changelog (needs to be installed first)\n1. master > npm run lib:docs (builds the ts-docs and readme files)\n1. master > Commit package.json and docs, README.md and CHANGELOG.md files\n1. master > Tag\n1. master > Push\n1. npm publish\n","readmeFilename":"README.md","author":{"name":"Igi Manaloto","email":"igikorn@gmail.com"},"keywords":["javascript","workflow","boilerplate","assets","local","development","environment","useful"]}