{"_id":"template-anything","_rev":"29-5baefa3bf91d0d75a5b3ff4b2e31b047","name":"template-anything","description":"Turn any git repository into a project template!","dist-tags":{"latest":"1.3.1"},"versions":{"1.0.0":{"name":"template-anything","version":"1.0.0","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"66b1909f177572ee123b7a3a18e26a85067a8b95","_id":"template-anything@1.0.0","_shasum":"03fc92edb527b4c4b580f075c97cf5ea45392fb8","_from":".","_npmVersion":"2.0.0-beta.2","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"03fc92edb527b4c4b580f075c97cf5ea45392fb8","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.0.0.tgz","integrity":"sha512-aFAn4CK8RFsgFlhhKDQ3y/UY2R+tJgSh70wlnWXAfg8wEU3aYYinEPSRSDkvFZtu1xqXWqO4bJEIe8jkfMj0aw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICPK42heRKbusl87alimftuYL0pBReaQtnCMR4r97rytAiEAty56WRGqbyV6sOk99LPG6QLDnieBb4G3loHqPePBclA="}]}},"1.0.1":{"name":"template-anything","version":"1.0.1","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"d34aa6a2bd079b1b32529f01e3467ac8d4974c1e","_id":"template-anything@1.0.1","_shasum":"1acad9b9fad7556ac44847ebbc50be0fe3ca8d37","_from":".","_npmVersion":"2.0.0-beta.2","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"1acad9b9fad7556ac44847ebbc50be0fe3ca8d37","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.0.1.tgz","integrity":"sha512-A+CkkmsyjhACGsxUouv9AS86VnavHSiVEJfaxOFD95MGZDTGAPpzhjHD3Acy29A30AdeEnaJzaQ6P0NnI3lI/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVz2xoL0MYLnQ7cm5CyVfUWy4DUhmepzuogXVYPUBiTAiBF/3j8B7ljj0RSgyV9qZLac+2FHkokXpEkb5MgSZKK6w=="}]}},"1.0.2":{"name":"template-anything","version":"1.0.2","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"2cfe5e05fa0760dfde282cb70f9836a27bd47ee0","_id":"template-anything@1.0.2","_shasum":"3a87145378a696ad4cf4b24240fa617bee729cbb","_from":".","_npmVersion":"2.0.0-beta.2","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"3a87145378a696ad4cf4b24240fa617bee729cbb","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.0.2.tgz","integrity":"sha512-16yjy0yBRpfOP4UXIwUUZUSKnM4Rm17t18+A7Bsmo8imYjNKMcTLmlZIrNflmSUP6LYJluTMZh4+6eKaq5s+8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcFL5ZAs1HAynbCH3oc5sEDezLBM0gLKDj4hSjx9GovAIgcxw4Bg/5XYTREkuWIutCk4oAUCaVZxq9C4oDUpRcyEE="}]}},"1.0.3":{"name":"template-anything","version":"1.0.3","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"a2871753556d657263778a6c233d5b401ea01f62","_id":"template-anything@1.0.3","_shasum":"d3d3e72f664c2e72119d150b55b8d5913772d482","_from":".","_npmVersion":"2.0.0-beta.2","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"d3d3e72f664c2e72119d150b55b8d5913772d482","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.0.3.tgz","integrity":"sha512-dsS7YFV5gVTeoOsCpxU8JNQ5vMreOnYSNDtfg0Z0mbett0/uikon7dyLU2vTSZwVL8qzboWhNxde0Xw9h6oFGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcoCZ59sZ6yQdAudNKQjimINbjdaaI3TPmqAi1xrUeRAiBAuVLWj5ZKFuJN5aG6CgJkRZiVRv1iSwOavYxk+F3fPw=="}]}},"1.1.0":{"name":"template-anything","version":"1.1.0","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"b4c58445837d491a0fd09213bc65f58acb21b94f","_id":"template-anything@1.1.0","_shasum":"924cd0e5b951b979ca22ff1660948330dc39baba","_from":".","_npmVersion":"2.5.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"924cd0e5b951b979ca22ff1660948330dc39baba","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.1.0.tgz","integrity":"sha512-vRuGT19Xll9LilWr2H+9FUbGy4GMGMc0mV2LwX2BB3YucyzqgYptUXtdD72DnrtFf57DI+HUjHnNg+MG3+aahw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJH6U1n/vUFqeyPiZObdRW1OrogfPi+k293BWEe2aFAAiEAhLAzyrfQy/enbkFiOQxQWywg961EuYDS1anMU+0sXdA="}]}},"1.2.0":{"name":"template-anything","version":"1.2.0","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"ed81176d7c56d8466d2011eb55d92e26bdbd08e6","_id":"template-anything@1.2.0","_shasum":"6baca6ce92f3f78f785c522185cc185ff83511c6","_from":".","_npmVersion":"2.5.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"6baca6ce92f3f78f785c522185cc185ff83511c6","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.0.tgz","integrity":"sha512-lVYDYXphv+76E4k2DNxU11MXNaftP+mE9A90FkOCatvCK2QZERVRLtosISJAyRfu4uJcfTDi4i9DMseQjBwQtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCegIpWeRi0qb9fQ6wH0A33aKpiKBm9QtVSDdX7iD85NQIhAOqFZzJ7a+kG63/1erFikkJtmCNzZJ1wWBI5QDfTM7AP"}]}},"1.2.1":{"name":"template-anything","version":"1.2.1","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"a9cf0227f5e415ab47f8d575935d3e32eb71510b","_id":"template-anything@1.2.1","_shasum":"3d7e1e0968641bc21bac3bbc36e7501882a17a18","_from":".","_npmVersion":"2.5.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"3d7e1e0968641bc21bac3bbc36e7501882a17a18","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.1.tgz","integrity":"sha512-mQoWmlIX60GuVXgm76JOAnbFjNkapsh9j0DoKbLGgOedJtV4uGG6lz/T1p4ZgA3Bu+74BDGJQQ4LRvR0RXkowg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNc1/ar8SS2/DMuRvO8sXD08A0JPH2mLZSr91DfZWxbAIgBCXwrkX9P+xrWGVTtZ0AEjvwt+pcSBiNxrLqXHE6c0o="}]}},"1.2.2":{"name":"template-anything","version":"1.2.2","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","tape":"^3.0.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"f78f5dc96898c30111078ea087b9954efa5ba9fa","_id":"template-anything@1.2.2","_shasum":"7d309e6bf7f3652f289c9cfbd387ea00b7a638c2","_from":".","_npmVersion":"2.5.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"7d309e6bf7f3652f289c9cfbd387ea00b7a638c2","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.2.tgz","integrity":"sha512-M5gN3CE337iGWR9BZvtvv1uMdWZOn8lT52pIFR0EBGLdn1dxKQzOaZLdMB0Jk52cldef4TA8C+bXvUd0yoDJIw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGudxJActoc72IoQFgNuFGmWMdq+/AKQNYg2rWRfYp01AiAK2oqM68C1yQyENi26sYGiewUjk7lJIO4cWcqCH9ssdw=="}]}},"1.2.3":{"name":"template-anything","version":"1.2.3","description":"Turn any git repository into a project template!","scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"0.0.4","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","tmp":"0.0.24"},"devDependencies":{"pegjs":"~0.8.0","tape":"^3.0.0"},"repository":{"type":"git","url":"https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"859c47dea247114fc78c78d3a5cef904a0f25482","_id":"template-anything@1.2.3","_shasum":"e2a7803588d4a55ef3e15918bc58154b70f9905e","_from":".","_npmVersion":"2.5.0","_nodeVersion":"0.10.35","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"dist":{"shasum":"e2a7803588d4a55ef3e15918bc58154b70f9905e","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.3.tgz","integrity":"sha512-qBzVzMsBghCFBvLA2v/m+GAWjV9x+PVaXmqKjq2hCyAOXXv4mBU90aiqxI28Xm6yiVPLS/pt+M1vt0yd3ZLtpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDivZ9c9TKQI+X2MLCPnye+g1PwlvP6fZHXn9sULWY+nQIhALsyJ2SEM4ZE17HIXnQ/2iEUQcc0BMZc+wkCBGRdgZUG"}]}},"1.2.4":{"name":"template-anything","version":"1.2.4","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"930bedffefa2e10d295a2589b8305eabd663861a","_id":"template-anything@1.2.4","_shasum":"57dcbf7ab9b8616ae66a429d7d54d1b2682840bf","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"57dcbf7ab9b8616ae66a429d7d54d1b2682840bf","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.4.tgz","integrity":"sha512-OXOEXAXUJSvpf33JljQ/VMku0DtU11jsn1CAXrCmiQXEEXAf1r4su8S8F1JzrvevpK0xz9bm5o9m5x9DzOSX1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGbvmNkC0QLVHbMF6a1ZWfaM3YwjJKK6gg3cUG62JHWAiEAtss3AymT2u/5GR3kinfpKiinW0gjflMrupYkqR9PObs="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}]},"1.2.5":{"name":"template-anything","version":"1.2.5","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"2b0145fbbaf84180c734eb54c474e5986e34aa22","_id":"template-anything@1.2.5","_shasum":"8f64791a6d891b5de84d985ed9f0ae6777f26480","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"8f64791a6d891b5de84d985ed9f0ae6777f26480","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.5.tgz","integrity":"sha512-EK/baAmQLk/C2/eKS+r1tJ42nKPHZqfetp6T7gL8qocRdgqVsuynd9dEL15TebjQo5Kxst2E+oScCQ3L5vXVGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAe16j6cBRgs69XcTmihuYxQnFIVXTGcXgp16QHJr5fQAiATGvc2LBz0LFEz0IPOtagrvSMv/G9S+KrMCS6XnKn06Q=="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}]},"1.2.6":{"name":"template-anything","version":"1.2.6","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"1caffe1075ee9666e4e5b30e01a44f57d99da24e","_id":"template-anything@1.2.6","_shasum":"1958cd628a40c270c9b12277da85d1d79077932b","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"1958cd628a40c270c9b12277da85d1d79077932b","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.6.tgz","integrity":"sha512-4MG96gY0AJuPP9yMnpx+3vK0y6MSBiL9CIdFmW41G6VRMDHWGETHKE2hN5psys3wJQZwdt91v9gk8XV2hoMF5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGsilzJ9V0aA+vSRQaTAZ/IvdILMW9BSajrem9kJXM2wIgC6w9lH0VDwXhp8nX1BMQjA8hFWiuRfqIgCz0VjTKYdQ="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/template-anything-1.2.6.tgz_1454850222912_0.5654097793158144"}},"1.2.7":{"name":"template-anything","version":"1.2.7","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*.js; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"a43fc6428b3d011299b8600398abf9d30c0f8878","_id":"template-anything@1.2.7","_shasum":"e93d6fa8eab4a0423b7c52a9a17e092c5b353a88","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"e93d6fa8eab4a0423b7c52a9a17e092c5b353a88","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.7.tgz","integrity":"sha512-v4y1GPYs4qycUTsyOtohOJCIQL5nvO5Qr6Lcv4zGCqUd8WLrAy9BiBb1LBbnKXVtIJRHmI1vC3q19p6vZq9IgA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh4aFuF5fHUiW5SjuYMXPCw9U0j0k6REOgaDWAEGYExAIhAJRjZJ/7mMhVQMtFgeMM7qicjtjMVY4j8FlF6tmsfeKN"}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/template-anything-1.2.7.tgz_1455213434552_0.6228942156303674"}},"1.2.8":{"name":"template-anything","version":"1.2.8","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*.js; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"6d058dea4b1a882f117fe805a52583ce6e2ecda9","_id":"template-anything@1.2.8","_shasum":"868f629ca7ca4787456ac2ac3891567b6ee336f3","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"868f629ca7ca4787456ac2ac3891567b6ee336f3","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.8.tgz","integrity":"sha512-1hG+qanTRahFWNfhumO6w4zMBXFMh5uy4iqTYyKDeInU9giuIxy1q0oKyUwQ7KPAAhAkr9xCWC5Me9SMMbF9Bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuc2yeRJ3b1S2oraX/vi3w1NE37tISfm5TmvrfkzWC+QIgQ2HNfy9wbWFhlgByFTzC1lU5M9VzVeBXvwt1gCxpObc="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/template-anything-1.2.8.tgz_1455270552321_0.6954074176028371"}},"1.2.9":{"name":"template-anything","version":"1.2.9","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*.js; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"ff4255a1e5b4235ebf8dfdcbf1bb9c08f8d83ef7","_id":"template-anything@1.2.9","_shasum":"260f51da7f1b5b69a457500e0fb1f3d322585f84","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"260f51da7f1b5b69a457500e0fb1f3d322585f84","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.2.9.tgz","integrity":"sha512-b9hlg8y7N97xTWIGSxw3/jZQ5VjQNwxu9jq+aNxhrcvb0X79NmGA99xfaOwUgT1vUimB1jt1EXLyd9tUp5bzxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDumAL98y8tmy0fefrT+tImbdo0BJN+V5DQsHXsw92PuQIhAJcY6gW01fhjpzem3yXZrRGSVi2pfXkd2DBFkGrPtFyH"}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/template-anything-1.2.9.tgz_1455270643946_0.49520273180678487"}},"1.3.0":{"name":"template-anything","version":"1.3.0","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*.js; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","ncp":"~0.6.0","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"9ebced5235b8494e7b3e9f9a3ddaba9321620170","_id":"template-anything@1.3.0","_shasum":"b6593c29dc1669102261abb47f6589cd59548ed1","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"b6593c29dc1669102261abb47f6589cd59548ed1","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.3.0.tgz","integrity":"sha512-3eTCwV2q/YhQw9aFLfCit7HPbi5qsoyLIWkmDj1lJceav2eHYmsr+Rv7FxcYak8gJP/mxafQjGu8uh5leT9khw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkF3hFB1GgBVLfFE9zHRq/NfzHFHB+81cgFGAntqYr1AiEAiXAAE9BV6he4C2K5JGFh5iwLnjEPnvzFW9hubrKvIXs="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/template-anything-1.3.0.tgz_1455276113042_0.691254259319976"}},"1.3.1":{"name":"template-anything","version":"1.3.1","description":"Turn any git repository into a project template!","keywords":["template","scaffold","generator","scripting","project"],"scripts":{"test":"set -e; for t in test/*.js; do node $t; done"},"bin":{"ta":"./bin/ta"},"dependencies":{"cpr":"^1.0.0","docopt":"^0.4.0","git-clone":"^0.1.0","iniparser":"~1.0.5","mkdirp":"~0.5.0","my-github-username":"~0.1.1","osenv":"^0.1.0","rimraf":"~2.2.8","shell-escape":"^0.1.0","shell-quote":"^1.4.3","tmp":"0.0.24"},"devDependencies":{"cheerio":"^0.18.0","marked":"^0.3.3","pegjs":"~0.8.0","pygmentize-bundled":"^2.3.0","tape":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"license":"ISC","bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"homepage":"https://github.com/jaz303/template-anything","gitHead":"24fae25738524b433a5402572b9e4ea11ba7e76c","_id":"template-anything@1.3.1","_shasum":"eb05d2e19f8ea4a2d435dba95fb0fb13ea6cc774","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"jaz303","email":"jason@onehackoranother.com"},"dist":{"shasum":"eb05d2e19f8ea4a2d435dba95fb0fb13ea6cc774","tarball":"https://registry.npmjs.org/template-anything/-/template-anything-1.3.1.tgz","integrity":"sha512-tY8/2Elj6jKxphLSpc5WuNs/fnckLYGmB6RxKVIGSOr62zpO71cR/sgL9rGFWuHCtUc4r/GXoMUaUFhAmdZlNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+/TMO2GvAqustOt12jPiGurckcsg2uemlB0gWu/a3TwIgBZGZeiyZTSq15gjiMY24rTFF4vYBcFI1ukYHWiWYpIo="}]},"maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/template-anything-1.3.1.tgz_1455900837933_0.19455354334786534"}}},"readme":"# template-anything\n\nTurn any git repository into a project template! Just upload your template to Github - or any other publicly accessible Git URL - and then use the `ta` command to generate a new project instance.\n\n### Umm, that sounds like you've just reinvented `git clone`...\n\nThe key to `template-anything`'s power is that its behaviour can be fully customized by adding a _template plan_ to your template. This plan, written in a file called `plan.tpl` in your template's root directory, can gather user input, set variables and orchestrate necessary filesystem operations to configure a new project. `template-anything` also includes a template expansion language that allows file contents to be customized based on user input.\n\n## Core Principles\n  \n  * __Simple:__ template plans should be straightforward to both read and write. Ease of writing matters because authoring templates is a mundane operation and users should be able to dive in, make a template and get out with minimal time investment. Ease of reading matters because template plans should be easy to review in terms of both fitness for purpose and security.\n\n  * __Fat-core/no plugins:__ everything required to scaffold any kind of project should be included in the core distribution. Common high-level operations should be extracted to their own directives and contributed back to the core tool. __Not supporting plugins is a feature__, and will hopefully a) guarantee that templates will work anywhere and b) make it easy to review `template-anything`'s suitability for a given use-case - without having to trawl the web for a bunch of plugins.\n\n  * __No centralised registries:__ publishing a template should be as simple as publishing a git repository - there is no reason to make users sign up to a 3rd party service.\n\n`template-anything`s design has been strongly influenced by [Ansible](http://www.ansible.com/home).\n\n## Installation\n\n    npm install -g template-anything\n\n## Usage - using an existing template\n\nTo scaffold a project from an existing template use the command:\n\n    $ ta <template> <target>\n\n`template` can be either a git URL or a path to a local directory, and `target` should be a path to a non-existant target directory. So, to start a new project based on my `tpl-simple-site` template and put it in `projects/my-new-site` you would do this:\n\n    $ ta git@github.com:jaz303/tpl-simple-site.git projects/my-new-site\n\nThat's a bit of mouthful so there is special shortcut syntax for using templates hosted on Github:\n\n    $ ta jaz303/tpl-simple-site projects/my-new-site\n\nAny git URL can be suffixed with `@revsion` to use a specific SHA1/branch/tag:\n\n    $ ta jaz303/tpl-simple-site@master projects/my-new-site\n    $ ta git@github.com:jaz303/tpl-simple-site.git@2a78059019a projects/my-new-site\n\nOnce you've run this command and answered a couple of questions about your new project you will have a brand new front end web project all ready to play with based on PHP, browserify, SCSS, livereload and spinup. This is the way I like to work on simple frontend builds, but maybe you prefer something else. Read on to learn how to create your own project templates compatible with `template-anything`...\n\n## Usage - creating a template\n\nTo create a template all you need to do is create a directory structure containing your template, (optionally) add a `plan.tpl` declaring the operations to be performed when the template is invoked, and then upload it to a publicly-accessible Git URL.\n\nIf `plan.tpl` is omitted the default behaviour is to copy the contents of the template to the target directory.\n\nHere's an example `plan.tpl`:\n\n```\ninputs:\n\n# Get project name from the user\n# The response will be stored in $project_name\nprompt project_name, prompt: \"Project name: \",\n                     default: \"site-template\"\n\n# Ask user if they'd like to create a git repo\n# The response will be stored in $create_repo\nyesno create_repo, prompt: \"Create git repo?\",\n                   default: 1\n\nactions:\n\n# Copy everything from 'contents', within the template directory,\n# to the target directory. This directive is using positional,\n# rather than named, parameters. The default destination for\n# tree is the target directory so in this case it doesn't need\n# to specified.\ntree contents\n\n# Perform in-place template substitions to the file package.json,\n# located within the target directory. All variables are available\n# when performing template substitutions.\ntemplate inplace: package.json\n\n# Shell command!\nshell \"npm install\"\n\n# Conditional blocks are supported; we only want to create a git\n# repo if the user requested it:\nif $create_repo then\n  # ... if they did, copy in a .gitignore file...\n    copy optional/gitignore, .gitignore\n    # ... and initialize the repo\n    shell \"git init\"\n    shell \"git add .\"\n    shell \"git commit -m 'First commit'\"\nend\n```\n\n## Template Plans in Depth\n\n### Terminology\n\n`template path` is the source directory of the original template.\n\n`target directory` is the target directory where we are creating our new project.\n\n### Format\n\nThe basic format of `plan.tpl` is:\n\n    inputs:\n    [input directives]\n\n    actions:\n    [action directives]\n    \nGenerally speaking, input directives are variable-setting directives like `set`, `prompt` and `yesno`, and action directives are those which actually do the work, such as `copy`, `tree` and `template`. `template-anything` doesn't actually enforce which directives are valid for each section, but its good practice to maintain the distinction.\n\nWhen executing a plan, each `inputs` section will be executed in source order, followed by each `actions` section.\n\n### Syntax\n\nTo invoke a directive simply write its name:\n\n    tree\n\nArguments are separated with commas and can specified either positionally:\n\n    tree \".\", \".\"\n\nOr by name:\n\n    tree src: \"contents\", dest: \".\"\n\nYou can mix both styles in a single invocation if you like, with positional arguments appearing first:\n\n    prompt my_val, prompt: \"please enter a value: \", default: 10\n\nArguments may be split over multiple lines:\n\n    prompt my_val, \n           prompt: \"please enter a value: \",\n           default: 10\n\nConditional blocks are supported and they look like this:\n\n    if {expression} then\n        # execute these directives if {expression} is truthy\n    end\n\nElse blocks are supported:\n\n    if {expression} then\n        # truthy\n    else\n        # falsey\n    end\n\nEmpty strings, empty arrays and zero are considered false; everything else is true. `template-anything` does not have a dedicated boolean type.\n\n### Expression Syntax\n\nThe basic expression literals are:\n\n  * string: `\"able was I ere I saw elba\"`\n  * integer: `42`\n  * symbols: `foo/bar/baz.txt`\n\nSymbols can include the special characters `./_-`, making it possible to express filenames without wrapping them in quotes. They can also include `:` as long as it does not appear at the end of the symbol.\n\nVariable references are dollar-prefixed and evaluate to the contents of the variable. For example: `$name` evaluates to the value of the variable `name`.\n\nArrays are denoted with the familiar syntax `[1, 2, 3]`. Arrays are not particularly useful yet but as `template-anything` grows to support repetition and iteration I expect their importance to increase.\n\nFunction calls are written simply as `function(arg1, arg2, ... argn)`; arguments can be any valid expression.\n\nExpressions can be filtered through functions using the pipeline syntax:\n\n    $name | prepend(\"hello \") | upcase()\n\nIn a pipeline the result of the previous operation is passed as the first argument to the next function (in the function documentation below, this is denoted in  parameter lists by `subject`). For example, given that variable `$name` is `\"Bob\"` the code above would evaluate to \"HELLO BOB\".\n\nStrings can contain template interpolations e.g. `\"Mr {{ $name | upcase() }}\"`.\n\nSome actions (notably `prompt`) accept callbacks in the form of \"partial pipelines\". A partial pipeline is a standard pipeline with the initial value omitted; this value will instead be supplied by the directive itself when it invokes the callback. The syntax for a partial pipeline is thus:\n\n    | downcase() | dasherize()\n\nAnd it would be used like this:\n\n    `prompt username, filter: | trim() | downcase() | dasherize()`\n\nThe `prompt` directive would take the user's input and then pass it through the `filter` partial pipeline, and use the pipeline's output value as the value to assign to the `username` variable.\n\n### Template Syntax\n\nA template is simply a text file, optionally containing moustache-delimited (`{{ ... }}`) expressions. For example, evaluating the following template:\n\n    {\n      \"name\": \"{{ $name | downcase() }}\"\n    }\n    \nwith an environment of `{ \"name\": \"Sauron\" }` yields:\n\n    {\n      \"name\": \"sauron\"\n    }\n\n### Built-in Directives\n\n#### Inputs\n\n##### `prompt`\n\nPrompt the user for input and assign the response to a variable.\n\n  * `name`: name of variable to assign; do not include the `$` prefix __(required)__\n  * `prompt`: prompt to display\n  * `default`: default value to be used if user does not enter anything\n  * `filter`: a partial pipeline that will be applied to the submitted value\n  * `postfilter`: a partial pipeline that will be applied to the submitted value, after validation\n  * `validate`: a partial pipeline that will be used to validate the returned value. If the pipeline is falsey the user will be prompted to re-enter the value.\n\nExample:\n\n    prompt username,\n           prompt: \"Enter username: \",\n           filter: | downcase()\n\n##### `set`\n\nSets a variable to a specified value.\n\n  * `name`: name of variable to assign; do not include the `$` prefix __(required)__\n  * `value`: value to assign __(required)__\n\nExample: `set name, \"Jason\"`\n\n##### `yesno`\n\n  * `name`: name of variable to assign; do not include the `$` prefix __(required)__\n  * `prompt`: prompt to display\n  * `default`: default value (should be either `1` or `0`)\n\nExample: `prompt create_git_repo, prompt: \"Create git repository? \"`\n\n#### Actions\n\n##### `append_line`\n\nAppend a line to `file`. `file` will be created if it does not exist.\n\n  * `file`: target file __(required)__\n  * `line`: line of text append; trailing newline will be added __(required)__\n\n##### `append_string`\n\nAppend a string to `file`. `file` will be created if it does not exist.\n\n  * `file`: target file __(required)__\n  * `string`: string of text append __(required)__\n\n##### `copy`\n\nCopy a single file from the template to the target directory.\n\n  * `src`: source file __(required)__\n  * `dest`: destination file __(required)__\n\nExample: `copy src: foo.txt, dest: bar.txt`\n\n##### `create_git_repo`\n\nInitialise a git repository in the target directory and optionally commit its contents.\n\n  * `commit`: set to 1 or string to commit target directory to git repo; when a string is specified this will be the commit message.\n\nExample: `create_git_repo commit: \"Initial commit!\"`\n\n##### `dir`\n\nCreate a (possibly nested) subdirectory directory in in the target directory.\n\n  * `name`: directory name __(required)__\n\nExample: `dir name: a/b/c`\n\n##### `echo`\n\nWrite a message to standard output.\n\n  * `msg`: message to write; newline will be added __(required)__\n\nExample: `echo \"hello world!\"`\n\n##### `shell`\n\nExecute a shell command. The working directory will be the target directory.\n\n  * `cmd`: shell command to execute __(required)__\n  * `cwd`: working directory; defaults to the target directory\n  * `echo`: echo subprocess's `stdout` and `stderr`\n\nExample: `shell cmd: \"git init && git add . && git commit -m 'Initial'\"`\n\n##### `template`\n\nPerform template substitution in a single file, either in-place or by copy.\n\n  * `src`: source template file\n  * `dest`: destination file\n  * `inplace`: in-place file\n  \nIf `src` and `dest` are specified, `src` will be copied from the template path to `dest` inside the target directory, with all template expressions expanded.\n\n`inplace`, if specified, is relative to the target directory. The file will be opened, template expressions expanded, and the updated file saved back to the same path.\n\n`src`/`dest` and `inplace` are mutually exclusive.\n\nFor more information about expression/template syntax, see below.\n\n##### `tree`\n\nCopy an entire tree of files from the template to the target directory.\n\n  * `src`: source directory, relative to template (default: `.`)\n  * `dest`: destination directory, relative to target (default: `.`)\n    \nAll variables currently defined by the template plan are available for use in templates.\n\n### Built-in Functions\n\n#### Array\n\n##### `join(subject, str)`\n\nJoin elements of `subject` with string `str`.\n\n#### Comparison\n\n##### `eq(subject, other)`\n\nCompare `subject` with `other`. Returns `1` if equal, `0` otherwise. Equivalent to Javascript's `==` operator.\n\n##### `is(subject, other)`\n\nCompare identity of `subject` with `other`. Returns `1` if identical, `0` otherwise. Equivalent to Javascript's `===` operator.\n\n#### Math\n\n##### `random()`\n\nReturn a random number between `0` and `1`.\n\n##### `random(n)`\n\nReturn a random integer between `0` and `n-1`, inclusive.\n\n##### `random(min, max)`\n\nReturn a random integer between `min` and `max-1`, inclusive.\n\n#### String\n\n##### `append(subject, suffix)`\n\nAppend `suffix` to `subject`.\n\n##### `prepend(subject, prefix)`\n\nPrepend `prefix` to `subject`.\n\n##### `replace(subject, needle, replacement)`\n\nReplace all occurrences `needle` with `replacement` in `subject`.\n\n##### `dasherize(subject)`\n\nReplace all runs of 1 or more spaces in `subject` with dashes.\n\n##### `substr(subject, start, length)`\n\nEquivalent to Javascripts `substr()` method.\n\n##### `substring(subject, start, end)`\n\nEquivalent to Javascripts `substring()` method.\n\n##### `downcase(subject)`\n\nConvert `subject` to lower case.\n\n##### `upcase(subject)`\n\nConvert `subject` to upper case.\n\n##### `trim(subject)`\n\nRemove leading and trailing space from `subject`.\n\n### Built-in Variables\n\n`template-anything` defines the following variables:\n\n  * `$TEMPLATE_PATH`: absolute path to template source\n  * `$TARGET_PATH`: absolute path to target directory\n  * `$TARGET_NAME`: basename of target directory\n\n## Contributing\n\n### Adding a function\n\nAdding a function is as straightforward writing a Javascript function and registering it with the default environment.\n\n  1. have a look in `lib/functions`... does your new function fit into one of the existing libraries? If so, edit that file. If not, create a new library using one of the existing libraries (e.g. `lib/functions/math.js`) as a starting point.\n\n  2. add your new function to the library file. Note: functions always run synchronously.\n\n  3. if you created a new library in step 1, update `lib/Context.js` to ensure the library is included when an environment is created.\n\n### Adding a directive\n\nAdding a directive is a two-step process - firstly you must write the \"raw\" version as a single function with conforming signature, and then write some wrapper code that will expose it to the `template-anything`'s scripting environment. The wrapper code also specifies parameter names, required parameters and default values.\n\n#### 1. Implement raw directive\n\nCreate a new file in `lib/directives/raw` with the same name as your new directive. This file should export a single function with the signature:\n\n    module.exports = function(ctx, env, opts, cb) {\n        // ...\n    }\n\nThe arguments are as follows:\n\n  * `ctx`: instance of `lib/Context.js`; stores the paths of the template and target, as well as a reference to the root environment.\n  * `env`: the execution environment; an instance of `lib/Environment.js`. Use this to access defined variables, functions and directives.\n  * `opts`: object containing all arguments passed to the directive. This will be preprocessed by the directive's wrapper so the raw implementation does not need to worry about default values, checking for presence of required arguments, or the difference between positional/named arguments.\n  * `cb`: callback to invoke on completion or error. Pass no arguments if directive executed successfully, or an `Error` instance in the event of error.\n\n#### 2. Implement wrapper\n\nWrappers are defined in `lib/directives/index.js` in alphabetical order. A fluent builder syntax is used to keep their definition reasonably succinct. Here's an example:\n\n```javascript\ndirective('copy')\n    .param('src', {\n        required: true,\n        key: 'sourcePath'\n    })\n    .param('dest', {\n        required: true,\n        key: 'destinationPath'\n    })\n    .handler(require('./raw/copy'));\n```\n\nThis wrapper exposes the `copy` directive to the scripting environment which accepts two parameters, `src` and `dest`, both of which are required. The function exported by `./raw/copy` is then registered as the handler for this wrapper.\n\nAvailable builder functions:\n\n  * `param(name, [opts])`: add a new parameter to this directive with given `name`; this is the same name that will be used when passing a corresponding argument by name from within a template plan. The order of `param()` calls on the builder determines the order that positional arguments will be assigned.\n  * `requiredParams(paramGroups)`: used to denote that the directive accepts two or more groups of mutually exclusive arguments (see the `template` directive for an example). `paramGroups` is an array wherein each entry is an object mapping parameter names to booleans, denoting whether not an argument with that name must (`true`) or must not (`false`) be present. When the directive is invoked, this list of constraints will be searched and the invocation will succeed if and only if one parameter group matches the supplied arguments.\n  * `handler(fn)`: register `fn` as the handler for this directive; this should have the signature `(ctx, env, opts, cb)`, as described above.\n\nSupported parameter option keys:\n\n  * `key`: used to specify an alternative name for the parameter when it is dispatched to the raw handler function; this allows for brevity in the template itself but more descriptive names in the implementation of the directive.\n  * `required`: this parameter must be specified otherwise invocation is erroneous\n  * `defaultValue`: default value for this parameter if unspecified\n","maintainers":[{"name":"jaz303","email":"jason@onehackoranother.com"}],"time":{"modified":"2022-06-27T04:38:09.308Z","created":"2015-02-01T19:01:50.470Z","1.0.0":"2015-02-01T19:01:50.470Z","1.0.1":"2015-02-01T19:10:20.945Z","1.0.2":"2015-02-01T19:14:38.065Z","1.0.3":"2015-02-03T00:01:03.881Z","1.1.0":"2015-02-09T10:55:45.286Z","1.2.0":"2015-02-11T00:07:52.308Z","1.2.1":"2015-02-11T00:15:13.886Z","1.2.2":"2015-02-11T00:22:50.275Z","1.2.3":"2015-02-12T00:03:32.208Z","1.2.4":"2015-12-04T16:19:58.418Z","1.2.5":"2015-12-04T16:49:20.162Z","1.2.6":"2016-02-07T13:03:44.025Z","1.2.7":"2016-02-11T17:57:16.502Z","1.2.8":"2016-02-12T09:49:15.947Z","1.2.9":"2016-02-12T09:50:47.601Z","1.3.0":"2016-02-12T11:21:56.476Z","1.3.1":"2016-02-19T16:54:01.262Z"},"homepage":"https://github.com/jaz303/template-anything","repository":{"type":"git","url":"git+https://github.com/jaz303/template-anything.git"},"author":{"name":"Jason Frame","email":"jason@onehackoranother.com","url":"http://jasonframe.co.uk"},"bugs":{"url":"https://github.com/jaz303/template-anything/issues"},"license":"ISC","readmeFilename":"README.md","keywords":["template","scaffold","generator","scripting","project"],"users":{"zhangzhe":true}}