{"_id":"base-app","_rev":"4175226","name":"base-app","description":"Starting point for creating a base application, with a couple of light plugins for running tasks and writing to the file system, and a functional CLI.","dist-tags":{"latest":"1.0.0"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"time":{"modified":"2026-03-01T21:30:05.000Z","created":"2016-05-11T16:32:04.180Z","1.0.0":"2018-04-13T17:08:38.432Z","0.2.6":"2016-06-26T12:52:11.381Z","0.2.5":"2016-06-08T00:14:59.771Z","0.2.4":"2016-06-08T00:12:48.239Z","0.2.3":"2016-05-24T06:46:13.020Z","0.2.2":"2016-05-14T19:51:51.658Z","0.2.1":"2016-05-11T16:33:49.261Z","0.2.0":"2016-05-11T16:32:04.180Z"},"users":{},"author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"versions":{"1.0.0":{"name":"base-app","description":"Starting point for creating a base application, with a couple of light plugins for running tasks and writing to the file system, and a functional CLI.","version":"1.0.0","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","lib"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">8.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^2.0.1","base-fs":"^0.3.5","base-generators":"^0.4.6","find-pkg":"^2.0.0","global-modules":"^1.0.0","log-utils":"^0.2.1","matched":"^2.0.1","minimist":"^1.2.0","resolve-file":"^0.3.0"},"devDependencies":{"gulp-format-md":"^1.0.0","mocha":"^3.5.3"},"keywords":["api","app","application","base","base-plugin","baseplugin","building-blocks","create","framework","plugin","plugins","tool","toolkit","tools"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-fs","base-pipeline"]},"lint":{"reflinks":true},"reflinks":["base","base-task","composer"]},"gitHead":"48b82c6c891ce8a88bc3ea0679aa354baa07f0a8","_id":"base-app@1.0.0","_npmVersion":"5.8.0","_nodeVersion":"9.9.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"dist":{"shasum":"a1604a59b3a4eae68a863966fa0e90c7bc8c7081","size":8813,"noattachment":false,"key":"/base-app/-/base-app-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-1.0.0.tgz"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/base-app_1.0.0_1523639318354_0.8432888787015451"},"_hasShrinkwrap":false,"publish_time":1523639318432,"_cnpm_publish_time":1523639318432,"_cnpmcore_publish_time":"2021-12-17T03:41:32.061Z"},"0.2.6":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.6","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","lib"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.11.1","base-fs":"^0.3.5","base-generators":"^0.4.1","base-runtimes":"^0.1.11","extend-shallow":"^2.0.1","find-pkg":"^0.1.2","fs-exists-sync":"^0.1.0","global-modules":"^0.2.2","lazy-cache":"^2.0.1","log-utils":"^0.1.4","matched":"^0.4.1","resolve-file":"^0.2.0","yargs-parser":"^2.4.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^1.0.0","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.5.3"},"keywords":["api","app","application","base","baseplugin","building-blocks","create","framework","plugin","plugins","tool","toolkit","tools"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","base-task","composer","gulp","handlebars","lodash","swig","verb","verb-readme-generator"],"lint":{"reflinks":true}},"gitHead":"324648c9ab07fd95e1cf8f72bb33976787123ab9","_id":"base-app@0.2.6","_shasum":"b7feebea9c0dd503911dd8ed1d7db1c443ec5fd6","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"b7feebea9c0dd503911dd8ed1d7db1c443ec5fd6","size":4132,"noattachment":false,"key":"/base-app/-/base-app-0.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.6.tgz"},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/base-app-0.2.6.tgz_1466945528686_0.902539282804355"},"directories":{},"publish_time":1466945531381,"_hasShrinkwrap":false,"_cnpm_publish_time":1466945531381,"_cnpmcore_publish_time":"2021-12-17T03:41:32.482Z"},"0.2.5":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.5","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","lib"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.10.0","base-fs":"^0.3.5","base-generators":"^0.4.0","base-runtimes":"^0.1.11","extend-shallow":"^2.0.1","find-pkg":"^0.1.2","fs-exists-sync":"^0.1.0","global-modules":"^0.2.2","lazy-cache":"^2.0.1","log-utils":"^0.1.4","matched":"^0.4.1","resolve-file":"^0.2.0","yargs-parser":"^2.4.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.5.3"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","base-task","composer","gulp","handlebars","lodash","swig","verb"],"lint":{"reflinks":true}},"gitHead":"f25be07558664ab815abf363fbb5600f6466a661","_id":"base-app@0.2.5","_shasum":"7cedef9ebf392e801a0be352c53c256f6e801374","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"7cedef9ebf392e801a0be352c53c256f6e801374","size":4078,"noattachment":false,"key":"/base-app/-/base-app-0.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.5.tgz"},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/base-app-0.2.5.tgz_1465344897547_0.5892698233947158"},"directories":{},"publish_time":1465344899771,"_hasShrinkwrap":false,"_cnpm_publish_time":1465344899771,"_cnpmcore_publish_time":"2021-12-17T03:41:32.692Z"},"0.2.4":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.4","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","utils.js"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.10.0","base-fs":"^0.3.5","base-generators":"^0.4.0","base-runtimes":"^0.1.11","extend-shallow":"^2.0.1","find-pkg":"^0.1.2","fs-exists-sync":"^0.1.0","global-modules":"^0.2.2","lazy-cache":"^2.0.1","log-utils":"^0.1.4","matched":"^0.4.1","resolve-file":"^0.2.0","yargs-parser":"^2.4.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.5.3"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","gulp","handlebars","lodash","swig","verb","base-task","composer"],"lint":{"reflinks":true}},"gitHead":"f8627256ee7a35fecaf8186d06476c4748edbbe5","_id":"base-app@0.2.4","_shasum":"9ba33aab6982118b150f1778eff45d2cc8f6069c","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"9ba33aab6982118b150f1778eff45d2cc8f6069c","size":2168,"noattachment":false,"key":"/base-app/-/base-app-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.4.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/base-app-0.2.4.tgz_1465344766058_0.4306797075551003"},"directories":{},"publish_time":1465344768239,"_hasShrinkwrap":false,"_cnpm_publish_time":1465344768239,"_cnpmcore_publish_time":"2021-12-17T03:41:32.954Z"},"0.2.3":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.3","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","utils.js"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.8.1","base-fs":"^0.3.3","base-generators":"^0.3.0","base-runtimes":"^0.1.11","find-pkg":"^0.1.1","fs-exists-sync":"^0.1.0","lazy-cache":"^2.0.1","log-utils":"^0.1.4","minimist":"^1.2.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.4.5"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","gulp","handlebars","lodash","swig","verb","base-task","composer"],"lint":{"reflinks":true}},"gitHead":"eac9d86c5f94900fffe7598e2e665f7856edd378","_id":"base-app@0.2.3","_shasum":"b932f313ecfeb4cc667e488c350c6ba3880cf211","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.5.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"b932f313ecfeb4cc667e488c350c6ba3880cf211","size":8154,"noattachment":false,"key":"/base-app/-/base-app-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.3.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/base-app-0.2.3.tgz_1464072370819_0.9441387860570103"},"directories":{},"publish_time":1464072373020,"_hasShrinkwrap":false,"_cnpm_publish_time":1464072373020,"_cnpmcore_publish_time":"2021-12-17T03:41:33.175Z"},"0.2.2":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.2","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","utils.js"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.8.1","base-fs":"^0.3.1","base-generators":"^0.2.14","base-runtimes":"^0.1.10","find-pkg":"^0.1.1","fs-exists-sync":"^0.1.0","lazy-cache":"^2.0.1","log-utils":"^0.1.4","minimist":"^1.2.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.4.5"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","gulp","handlebars","lodash","swig","verb","base-task","composer"],"lint":{"reflinks":true}},"gitHead":"dc3dcbd91e77db1b04457dd569e3b0797d647239","_id":"base-app@0.2.2","_shasum":"76c548af8aa382fd7be41166b8b9af4e0c2ea0a6","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.5.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"76c548af8aa382fd7be41166b8b9af4e0c2ea0a6","size":7921,"noattachment":false,"key":"/base-app/-/base-app-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.2.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/base-app-0.2.2.tgz_1463255509476_0.07347727939486504"},"directories":{},"publish_time":1463255511658,"_hasShrinkwrap":false,"_cnpm_publish_time":1463255511658,"_cnpmcore_publish_time":"2021-12-17T03:41:33.389Z"},"0.2.1":{"name":"base-app","description":"Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.","version":"0.2.1","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","utils.js"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.8.1","base-cwd":"^0.1.6","base-fs":"^0.3.1","base-option":"^0.7.0","base-runtimes":"^0.1.10","base-task":"^0.4.4","find-pkg":"^0.1.1","fs-exists-sync":"^0.1.0","lazy-cache":"^2.0.1","log-utils":"^0.1.4","minimist":"^1.2.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.4.5"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","gulp","handlebars","lodash","swig","verb","base-task","composer"],"lint":{"reflinks":true}},"gitHead":"20c3b29b0fb9bb3ebcae906b0d872b5eb8c37fb2","_id":"base-app@0.2.1","_shasum":"bfb8dcc87c665754d36f72036863f38c501c1f10","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.5.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"bfb8dcc87c665754d36f72036863f38c501c1f10","size":7954,"noattachment":false,"key":"/base-app/-/base-app-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.1.tgz"},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/base-app-0.2.1.tgz_1462984427775_0.3584559471346438"},"directories":{},"publish_time":1462984429261,"_hasShrinkwrap":false,"_cnpm_publish_time":1462984429261,"_cnpmcore_publish_time":"2021-12-17T03:41:33.647Z"},"0.2.0":{"name":"base-app","description":"The most interesting project in the world > Verb","version":"0.2.0","homepage":"https://github.com/node-base/base-app","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/node-base/base-app.git"},"bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT","files":["bin","index.js","utils.js"],"main":"index.js","bin":{"base":"bin/cli.js"},"engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"base":"^0.8.1","base-cwd":"^0.1.6","base-fs":"^0.3.1","base-option":"^0.7.0","base-runtimes":"^0.1.10","base-task":"^0.4.4","find-pkg":"^0.1.1","fs-exists-sync":"^0.1.0","lazy-cache":"^2.0.1","log-utils":"^0.1.4","minimist":"^1.2.0"},"devDependencies":{"gulp":"^3.9.1","gulp-eslint":"^2.0.0","gulp-format-md":"^0.1.9","gulp-istanbul":"^0.10.4","gulp-mocha":"^2.2.0","gulp-unused":"^0.1.2","mocha":"^2.4.5"},"keywords":["app","base"],"verb":{"run":true,"toc":true,"layout":"default","tasks":["readme"],"plugins":["gulp-format-md"],"related":{"list":["base","base-config","base-pipeline"]},"reflinks":["assemble","base","base-generators","gulp","handlebars","lodash","swig","verb","base-task","composer"],"lint":{"reflinks":true}},"gitHead":"0c86a5844f250e84a2c8944070dfa046318957ab","_id":"base-app@0.2.0","_shasum":"c109a7be7a2337b301a3405fb72c85e6d5ca1771","_from":".","_npmVersion":"3.6.0","_nodeVersion":"5.5.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"c109a7be7a2337b301a3405fb72c85e6d5ca1771","size":7942,"noattachment":false,"key":"/base-app/-/base-app-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/base-app/download/base-app-0.2.0.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/base-app-0.2.0.tgz_1462984321663_0.08499762532301247"},"directories":{},"publish_time":1462984324180,"_hasShrinkwrap":false,"_cnpm_publish_time":1462984324180,"_cnpmcore_publish_time":"2021-12-17T03:41:33.915Z"}},"readme":"# base-app [![NPM version](https://img.shields.io/npm/v/base-app.svg?style=flat)](https://www.npmjs.com/package/base-app) [![NPM monthly downloads](https://img.shields.io/npm/dm/base-app.svg?style=flat)](https://npmjs.org/package/base-app) [![NPM total downloads](https://img.shields.io/npm/dt/base-app.svg?style=flat)](https://npmjs.org/package/base-app) [![Linux Build Status](https://img.shields.io/travis/node-base/base-app.svg?style=flat&label=Travis)](https://travis-ci.org/node-base/base-app)\n\n> Starting point for creating a base application, with a few light plugins for running tasks and writing to the file system, and a functional CLI.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n- [Install](#install)\n- [Quickstart](#quickstart)\n- [CLI](#cli)\n- [API Documentation](#api-documentation)\n- [.cwd](#cwd)\n- [File System API](#file-system-api)\n  * [.src](#src)\n  * [.symlink](#symlink)\n  * [.dest](#dest)\n  * [.copy](#copy)\n- [Task API](#task-api)\n  * [.task](#task)\n  * [.build](#build)\n  * [.series](#series)\n  * [.parallel](#parallel)\n- [Events](#events)\n  * [starting](#starting)\n  * [finished](#finished)\n  * [error](#error)\n  * [task:starting](#taskstarting)\n  * [task:finished](#taskfinished)\n  * [task:error](#taskerror)\n  * [.dataLoader](#dataloader)\n- [Plugin API](#plugin-api)\n  * [.use](#use)\n  * [.run](#run)\n- [Options API](#options-api)\n  * [.option](#option)\n  * [.hasOption](#hasoption)\n  * [.enable](#enable)\n  * [.disable](#disable)\n  * [.enabled](#enabled)\n  * [.disabled](#disabled)\n  * [.isTrue](#istrue)\n  * [.isFalse](#isfalse)\n  * [.isBoolean](#isboolean)\n  * [.option.set](#optionset)\n  * [.option.get](#optionget)\n  * [.option.create](#optioncreate)\n- [Data API](#data-api)\n  * [.data](#data)\n  * [.data.extend](#dataextend)\n  * [.data.merge](#datamerge)\n  * [.data.union](#dataunion)\n  * [.data.set](#dataset)\n  * [.data.get](#dataget)\n  * [Glob patterns](#glob-patterns)\n  * [Namespacing](#namespacing)\n- [About](#about)\n\n_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save base-app\n```\n\n## Quickstart\n\nBelow we provide a more detailed explanation of how to get started. But if you're familiar with node.js and prefer a fast-track:\n\n**Install**\n\n```sh\n$ npm i -g base-app\n```\n\n**Create an \"app\"**\n\nThen create a `basefile.js` with the following code:\n\n```js\nmodule.exports = function(app, base) {\n  app.task('default', function(cb) {\n    console.log('task >', this.name);\n    cb();\n  });\n};\n```\n\n**Run base**\n\nIn the command line, run:\n\n```sh\n$ base\n```\n\nIf everthing installed correctly, you should see `task > default` in the command line.\n\n## CLI\n\n**Installing the CLI**\n\nTo run base from the command line, you'll need to install `base-app` globally first. You can that now with the following command:\n\n```sh\n$ npm i -g base-app\n```\n\nThis adds the `base` command to your system path, allowing it to be run from any directory or sub-directory in a project.\n\n**How the CLI works**\n\nWhen the `base` command is run, the globally installed `base-app` looks for a locally installed [base](https://github.com/node-base/base) module using node's `require()` system.\n\nIf a locally installed [base](https://github.com/node-base/base) is found, the CLI loads the local installation of the [base](https://github.com/node-base/base) library. If a local [base](https://github.com/node-base/base) module is not found, the globally installed `base-app` will be used.\n\nOnce the module is resolved, base applies the configuration from your `basefile.js` then executes any [generators](https://github.com/node-base/base-generators) or tasks you've specified for base to run.\n\n## .cwd\n\nGetter/setter that ensures the current working directory is always a fully resolved absolute filepath.\n\n```js\napp.cwd = 'foo';\nconsole.log(app.cwd);\n//=> /User/dev/base-app/foo\n```\n\n## File System API\n\n### .src\n\nGlob patterns or filepaths to source files.\n\n**Params**\n\n* `glob` **{String|Array}**: Glob patterns or file paths to source files.\n* `options` **{Object}**: Options or locals to merge into the context and/or pass to `src` plugins\n\n**Example**\n\n```js\napp.src('src/*.hbs', {layout: 'default'});\n```\n\n### .symlink\n\nGlob patterns or paths for symlinks.\n\n**Params**\n\n* `glob` **{String|Array}**\n\n**Example**\n\n```js\napp.symlink('src/**');\n```\n\n### .dest\n\nSpecify a destination for processed files.\n\n**Params**\n\n* `dest` **{String|Function}**: File path or rename function.\n* `options` **{Object}**: Options and locals to pass to `dest` plugins\n\n**Example**\n\n```js\napp.dest('dist/');\n```\n\n### .copy\n\nCopy files with the given glob `patterns` to the specified `dest`.\n\n**Params**\n\n* `patterns` **{String|Array}**: Glob patterns of files to copy.\n* `dest` **{String|Function}**: Desination directory.\n* `returns` **{Stream}**: Stream, to continue processing if necessary.\n\n**Example**\n\n```js\napp.task('assets', function(cb) {\n  app.copy('assets/**', 'dist/')\n    .on('error', cb)\n    .on('finish', cb)\n});\n```\n\n## Task API\n\nMethods for running tasks are from the [base-task](https://github.com/base/base-task) plugin, which uses [composer](https://github.com/doowb/composer). Additional documentation can be found on those libaries.\n\n### .task\n\nRegister a task\n\n**Params**\n\n* `name` **{String}**: Task name to register (tasks are cached on `app.tasks`)\n* `dependencies` **{String|Array|Function}**: String, list or array of tasks.\n* `callback` **{Function}**: Function to be called when the task is executed. Task functions should either return a stream or call the callback to let [composer](https://github.com/doowb/composer) know when the task is finished.\n\n**Examples**\n\nRegister a task.\n\n```js\napp.task('default', function() {\n  // return the stream to signal \"done\"\n  return app.src('pages/*.hbs')\n    .pipe(app.dest('dist'));\n});\n```\n\nRegister a task with dependencies (other tasks to run before executing the task):\n\n```js\napp.task('site', ['styles'], function() {\n  return app.src('pages/*.hbs')\n    .pipe(app.dest('dist'));\n});\n\napp.task('default', ['site']);\n```\n\n**Get a task**\n\n```js\nvar task = app.task('site');\n```\n\n### .build\n\nRun a task or array of tasks.\n\n**Example**\n\n```js\napp.build('default', function(err, results) {\n  if (err) {\n    console.error(err);\n    return;\n  }\n  console.log(results);\n});\n```\n\n### .series\n\nCompose task or list of tasks into a single function that runs the tasks in series.\n\n**Params**\n\n* `tasks` **{String|Array|Function}**: List of tasks by name, function, or array of names/functions.\n* `returns` **{Function}**: Composed function that may take a callback function.\n\n**Example**\n\n```js\napp.task('foo', function(cb) {\n  console.log('this is foo');\n  cb();\n});\n\nvar fn = app.series('foo', function(cb) {\n  console.log('this is bar');\n  cb();\n});\n\nfn(function(err) {\n  if (err) return console.error(err);\n  console.log('finished');\n});\n//=> this is foo\n//=> this is bar\n//=> finished\n```\n\n### .parallel\n\nCompose task or list of tasks into a single function that runs the tasks in parallel.\n\n**Params**\n\n* `tasks` **{String|Array|Function}**: List of tasks by name, function, or array of names/functions.\n* `returns` **{Function}**: Composed function that may take a callback function.\n\n**Example**\n\n```js\napp.task('foo', function(cb) {\n  setTimeout(function() {\n    console.log('this is foo');\n    cb();\n  }, 500);\n});\n\nvar fn = app.parallel('foo', function(cb) {\n  console.log('this is bar');\n  cb();\n});\n\nfn(function(err) {\n  if (err) return console.error(err);\n  console.log('finished');\n});\n//=> this is bar\n//=> this is foo\n//=> finished\n```\n\n## Events\n\nThe following events are emitted by [composer](https://github.com/doowb/composer). See the composer docs for more details\n\n### starting\n\nEmitted when a `build` is starting.\n\n```js\napp.on('starting', function(app, build) {});\n```\n\nThe event emits 2 arguments:\n\n1. the current instance of [composer](https://github.com/doowb/composer) as the `app` and\n2. An object with `build` runtime information:\n\n* `.date`: an object with the `.start` time as a `Date` object.\n* `.hr`: an object with the `.start` time as an `hrtime` array.\n\n### finished\n\nEmitted when a `build` is finished.\n\n```js\napp.on('finished', function(app, build) {});\n```\n\nThe event emits 2 arguments:\n\n1. `app`: instance of [composer](https://github.com/doowb/composer)\n2. `build`: an object with build runtime information:\n\n* `.date`: object with `.start` and `.end` properties, with staring and ending times of the build as `Date` objects.\n* `.hr`: object with `.start`, `.end`, `.duration`, and `.diff` properties with timing information calculated using `process.hrtime`\n\n### error\n\nEmitted when an error occurrs during a `build`.\n\n```js\napp.on('error', function(err) {});\n```\n\n### task:starting\n\nEmitted when a task is starting.\n\n```js\napp.on('task:starting', function(task, run) {});\n```\n\n### task:finished\n\nEmitted when a task has finished.\n\n```js\napp.on('task:finished', function(task, run) {});\n```\n\n### task:error\n\nEmitted when an error occurrs while running a task.\n\n```js\napp.on('task:error', function(err) {});\n```\n\n### .dataLoader\n\nRegister a data loader for loading data onto `app.cache.data`.\n\n**Params**\n\n* `ext` **{String}**: The file extension for to match to the loader\n* `fn` **{Function}**: The loader function.\n\n**Example**\n\n```js\nvar yaml = require('js-yaml');\n\napp.dataLoader('yml', function(str, fp) {\n  return yaml.safeLoad(str);\n});\n\napp.data('foo.yml');\n//=> loads and parses `foo.yml` as yaml\n```\n\n## Plugin API\n\n### .use\n\nDefine a plugin function to be called immediately upon init. The only parameter exposed to the plugin is the application instance.\n\nAlso, if a plugin returns a function, the function will be pushed\nonto the `fns` array, allowing the plugin to be called at a\nlater point, elsewhere in the application.\n\n**Params**\n\n* `fn` **{Function}**: plugin function to call\n* `returns` **{Object}**: Returns the item instance for chaining.\n\n**Example**\n\n```js\n// define a plugin\nfunction foo(app) {\n  // do stuff\n}\n\n// register plugins\nvar app = new Base()\n  .use(foo)\n  .use(bar)\n  .use(baz)\n```\n\n### .run\n\nRun all plugins\n\n**Params**\n\n* `value` **{Object}**: Object to be modified by plugins.\n* `returns` **{Object}**: Returns the item instance for chaining.\n\n**Example**\n\n```js\nvar config = {};\napp.run(config);\n```\n\n## Options API\n\n### .option\n\nSet or get an option.\n\n**Params**\n\n* `key` **{String}**: The option name.\n* `value` **{any}**: The value to set.\n* `returns` **{any}**: Returns a `value` when only `key` is defined.\n\n**Example**\n\n```js\napp.option('a', true);\napp.option('a');\n//=> true\n```\n\n### .hasOption\n\nReturn true if `options.hasOwnProperty(key)`\n\n**Params**\n\n* `prop` **{String}**\n* `returns` **{Boolean}**: True if `prop` exists.\n\n**Example**\n\n```js\napp.hasOption('a');\n//=> false\napp.option('a', 'b');\napp.hasOption('a');\n//=> true\n```\n\n### .enable\n\nEnable `key`.\n\n**Params**\n\n* `key` **{String}**\n* `returns` **{Object}** `Options`: to enable chaining\n\n**Example**\n\n```js\napp.enable('a');\n```\n\n### .disable\n\nDisable `key`.\n\n**Params**\n\n* `key` **{String}**: The option to disable.\n* `returns` **{Object}** `Options`: to enable chaining\n\n**Example**\n\n```js\napp.disable('a');\n```\n\n### .enabled\n\nCheck if `prop` is enabled (truthy).\n\n**Params**\n\n* `prop` **{String}**\n* `returns` **{Boolean}**\n\n**Example**\n\n```js\napp.enabled('a');\n//=> false\n\napp.enable('a');\napp.enabled('a');\n//=> true\n```\n\n### .disabled\n\nCheck if `prop` is disabled (falsey).\n\n**Params**\n\n* `prop` **{String}**\n* `returns` **{Boolean}**: Returns true if `prop` is disabled.\n\n**Example**\n\n```js\napp.disabled('a');\n//=> true\n\napp.enable('a');\napp.disabled('a');\n//=> false\n```\n\n### .isTrue\n\nReturns true if the value of `prop` is strictly `true`.\n\n**Params**\n\n* `prop` **{String}**\n* `returns` **{Boolean}**: Uses strict equality for comparison.\n\n**Example**\n\n```js\napp.option('a', 'b');\napp.isTrue('a');\n//=> false\n\napp.option('c', true);\napp.isTrue('c');\n//=> true\n\napp.option({a: {b: {c: true}}});\napp.isTrue('a.b.c');\n//=> true\n```\n\n### .isFalse\n\nReturns true if the value of `key` is strictly `false`.\n\n**Params**\n\n* `prop` **{String}**\n* `returns` **{Boolean}**: Uses strict equality for comparison.\n\n**Example**\n\n```js\napp.option('a', null);\napp.isFalse('a');\n//=> false\n\napp.option('c', false);\napp.isFalse('c');\n//=> true\n\napp.option({a: {b: {c: false}}});\napp.isFalse('a.b.c');\n//=> true\n```\n\n### .isBoolean\n\nReturn true if the value of key is either `true` or `false`.\n\n**Params**\n\n* `key` **{String}**\n* `returns` **{Boolean}**: True if `true` or `false`.\n\n**Example**\n\n```js\napp.option('a', 'b');\napp.isBoolean('a');\n//=> false\n\napp.option('c', true);\napp.isBoolean('c');\n//=> true\n```\n\n### .option.set\n\nSet option `key` on `app.options` with the given `value`\n\n**Params**\n\n* `key` **{String}**: Option key, dot-notation may be used.\n* `value` **{any}**\n\n**Example**\n\n```js\napp.option.set('a', 'b');\nconsole.log(app.option.get('a'));\n//=> 'b'\n```\n\n### .option.get\n\nGet option `key` from `app.options`\n\n**Params**\n\n* `key` **{String}**: Option key, dot-notation may be used.\n* `returns` **{any}**\n\n**Example**\n\n```js\napp.option({a: 'b'});\nconsole.log(app.option.get('a'));\n//=> 'b'\n```\n\n### .option.create\n\nReturns a shallow clone of `app.options` with all of the options methods, as well as a `.merge` method for merging options onto the cloned object.\n\n**Params**\n\n* `options` **{Options}**: Object to merge onto the returned options object.\n* `returns` **{Object}**\n\n**Example**\n\n```js\nvar opts = app.option.create();\nopts.merge({foo: 'bar'});\n```\n\n## Data API\n\n### .data\n\nLoad data onto `app.cache.data`\n\n**Params**\n\n* `key` **{String|Object}**: Key of the value to set, or object to extend.\n* `val` **{any}**\n* `returns` **{Object}**: Returns the instance of `Template` for chaining\n\n**Example**\n\n```js\nconsole.log(app.cache.data);\n//=> {};\n\napp.data('a', 'b');\napp.data({c: 'd'});\nconsole.log(app.cache.data);\n//=> {a: 'b', c: 'd'}\n\n// set an array\napp.data('e', ['f']);\n\n// overwrite the array\napp.data('e', ['g']);\n\n// update the array\napp.data('e', ['h'], true);\nconsole.log(app.cache.data.e);\n//=> ['g', 'h']\n```\n\n### .data.extend\n\nShallow extend an object onto `app.cache.data`.\n\n**Params**\n\n* `key` **{String|Object}**: Property name or object to extend onto `app.cache.data`. Dot-notation may be used for extending nested properties.\n* `value` **{Object}**: The object to extend onto `app.cache.data`\n* `returns` **{Object}**: returns the instance for chaining\n\n**Example**\n\n```js\napp.data({a: {b: {c: 'd'}}});\napp.data.extend('a.b', {x: 'y'});\nconsole.log(app.get('a.b'));\n//=> {c: 'd', x: 'y'}\n```\n\n### .data.merge\n\nDeeply merge an object onto `app.cache.data`.\n\n**Params**\n\n* `key` **{String|Object}**: Property name or object to merge onto `app.cache.data`. Dot-notation may be used for merging nested properties.\n* `value` **{Object}**: The object to merge onto `app.cache.data`\n* `returns` **{Object}**: returns the instance for chaining\n\n**Example**\n\n```js\napp.data({a: {b: {c: {d: {e: 'f'}}}}});\napp.data.merge('a.b', {c: {d: {g: 'h'}}});\nconsole.log(app.get('a.b'));\n//=> {c: {d: {e: 'f', g: 'h'}}}\n```\n\n### .data.union\n\nUnion the given value onto a new or existing array value on `app.cache.data`.\n\n**Params**\n\n* `key` **{String}**: Property name. Dot-notation may be used for nested properties.\n* `array` **{Object}**: The array to add or union on `app.cache.data`\n* `returns` **{Object}**: returns the instance for chaining\n\n**Example**\n\n```js\napp.data({a: {b: ['c', 'd']}});\napp.data.union('a.b', ['e', 'f']}});\nconsole.log(app.get('a.b'));\n//=> ['c', 'd', 'e', 'f']\n```\n\n### .data.set\n\nSet the given value onto `app.cache.data`.\n\n**Params**\n\n* `key` **{String|Object}**: Property name or object to merge onto `app.cache.data`. Dot-notation may be used for nested properties.\n* `val` **{any}**: The value to set on `app.cache.data`\n* `returns` **{Object}**: returns the instance for chaining\n\n**Example**\n\n```js\napp.data.set('a.b', ['c', 'd']}});\nconsole.log(app.get('a'));\n//=> {b: ['c', 'd']}\n```\n\n### .data.get\n\nGet the value of `key` from `app.cache.data`. Dot-notation may be used for getting nested properties.\n\n**Params**\n\n* `key` **{String}**: The name of the property to get.\n* `returns` **{any}**: Returns the value of `key`\n\n**Example**\n\n```js\napp.data({a: {b: {c: 'd'}}});\nconsole.log(app.get('a.b'));\n//=> {c: 'd'}\n```\n\n### Glob patterns\n\nGlob patterns may be passed as a string or array. All of these work:\n\n```js\napp.data('foo.json');\napp.data('*.json');\napp.data(['*.json']);\n// pass options to node-glob\napp.data(['*.json'], {dot: true});\n```\n\n### Namespacing\n\nNamespacing allows you to load data onto a specific key, optionally using part of the file path as the key.\n\n**Example**\n\nGiven that `foo.json` contains `{a: 'b'}`:\n\n```js\napp.data('foo.json');\nconsole.log(app.cache.data);\n//=> {a: 'b'}\n\napp.data('foo.json', {namespace: true});\nconsole.log(app.cache.data);\n//=> {foo: {a: 'b'}}\n\napp.data('foo.json', {\n  namespace: function(fp) {\n    return path.basename(fp);\n  }\n});\nconsole.log(app.cache.data);\n//=> {'foo.json': {a: 'b'}}\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [base-fs](https://www.npmjs.com/package/base-fs): base-methods plugin that adds vinyl-fs methods to your 'base' application for working with the file… [more](https://github.com/node-base/base-fs) | [homepage](https://github.com/node-base/base-fs \"base-methods plugin that adds vinyl-fs methods to your 'base' application for working with the file system, like src, dest, copy and symlink.\")\n* [base-pipeline](https://www.npmjs.com/package/base-pipeline): base-methods plugin that adds pipeline and plugin methods for dynamically composing streaming plugin pipelines. | [homepage](https://github.com/node-base/base-pipeline \"base-methods plugin that adds pipeline and plugin methods for dynamically composing streaming plugin pipelines.\")\n* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base \"Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks\")\n\n### Author\n\n**Jon Schlinkert**\n\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 13, 2018._","_attachments":{},"homepage":"https://github.com/node-base/base-app","bugs":{"url":"https://github.com/node-base/base-app/issues"},"license":"MIT"}