{
  "_args": [
    [
      {
        "raw": "broccoli-plugin@^1.3.0",
        "scope": null,
        "escapedName": "broccoli-plugin",
        "name": "broccoli-plugin",
        "rawSpec": "^1.3.0",
        "spec": ">=1.3.0 <2.0.0",
        "type": "range"
      },
      "/home/travis/build/lukesargeant/ember-sparkline/node_modules/broccoli-funnel"
    ]
  ],
  "_from": "broccoli-plugin@>=1.3.0 <2.0.0",
  "_id": "broccoli-plugin@1.3.0",
  "_inCache": true,
  "_location": "/broccoli-plugin",
  "_nodeVersion": "7.1.0",
  "_npmOperationalInternal": {
    "host": "packages-12-west.internal.npmjs.com",
    "tmp": "tmp/broccoli-plugin-1.3.0.tgz_1480711055992_0.267283973749727"
  },
  "_npmUser": {
    "name": "rwjblue",
    "email": "me@rwjblue.com"
  },
  "_npmVersion": "3.10.9",
  "_phantomChildren": {},
  "_requested": {
    "raw": "broccoli-plugin@^1.3.0",
    "scope": null,
    "escapedName": "broccoli-plugin",
    "name": "broccoli-plugin",
    "rawSpec": "^1.3.0",
    "spec": ">=1.3.0 <2.0.0",
    "type": "range"
  },
  "_requiredBy": [
    "/@ember/test-helpers/broccoli-funnel",
    "/broccoli-caching-writer",
    "/broccoli-concat",
    "/broccoli-config-replace",
    "/broccoli-debug",
    "/broccoli-file-creator",
    "/broccoli-filter",
    "/broccoli-funnel",
    "/broccoli-merge-trees",
    "/broccoli-persistent-filter",
    "/broccoli-stew",
    "/broccoli-uglify-sourcemap",
    "/ember-cli-shims/broccoli-merge-trees",
    "/ember-cli/broccoli-funnel",
    "/ember-cli/broccoli-merge-trees",
    "/ember-qunit/broccoli-funnel",
    "/ember-qunit/broccoli-merge-trees",
    "/ember-resolver/broccoli-merge-trees",
    "/ember-source/broccoli-merge-trees"
  ],
  "_resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz",
  "_shasum": "bee704a8e42da08cb58e513aaa436efb7f0ef1ee",
  "_shrinkwrap": null,
  "_spec": "broccoli-plugin@^1.3.0",
  "_where": "/home/travis/build/lukesargeant/ember-sparkline/node_modules/broccoli-funnel",
  "author": {
    "name": "Jo Liss",
    "email": "joliss42@gmail.com"
  },
  "bugs": {
    "url": "https://github.com/broccolijs/broccoli-plugin/issues"
  },
  "dependencies": {
    "promise-map-series": "^0.2.1",
    "quick-temp": "^0.1.3",
    "rimraf": "^2.3.4",
    "symlink-or-copy": "^1.1.8"
  },
  "description": "Base class for all Broccoli plugins",
  "devDependencies": {
    "broccoli-fixturify": "^0.2.0",
    "chai": "^2.3.0",
    "chai-as-promised": "^5.0.0",
    "fixturify": "^0.2.0",
    "mocha": "^2.2.5",
    "mocha-jshint": "^2.2.3",
    "multidep": "^2.0.0",
    "rsvp": "^3.0.18"
  },
  "directories": {},
  "dist": {
    "shasum": "bee704a8e42da08cb58e513aaa436efb7f0ef1ee",
    "tarball": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz"
  },
  "gitHead": "d3ac65cd9ede043e1ec15c9abcfc7ac521fcbef3",
  "homepage": "https://github.com/broccolijs/broccoli-plugin#readme",
  "keywords": [
    "broccoli-plugin"
  ],
  "license": "MIT",
  "main": "index.js",
  "maintainers": [
    {
      "name": "joliss",
      "email": "joliss42@gmail.com"
    },
    {
      "name": "rwjblue",
      "email": "me@rwjblue.com"
    },
    {
      "name": "stefanpenner",
      "email": "stefan.penner@gmail.com"
    }
  ],
  "name": "broccoli-plugin",
  "optionalDependencies": {},
  "readme": "# The Broccoli Plugin Base Class\n\n[![Build Status](https://travis-ci.org/broccolijs/broccoli-plugin.svg?branch=master)](https://travis-ci.org/broccolijs/broccoli-plugin)\n[![Build status](https://ci.appveyor.com/api/projects/status/k4tk8b99m1e58ftd?svg=true)](https://ci.appveyor.com/project/joliss/broccoli-plugin)\n\n## Example Usage\n\n```js\nvar Plugin = require('broccoli-plugin');\nvar path = require('path');\n\n// Create a subclass MyPlugin derived from Plugin\nMyPlugin.prototype = Object.create(Plugin.prototype);\nMyPlugin.prototype.constructor = MyPlugin;\nfunction MyPlugin(inputNodes, options) {\n  options = options || {};\n  Plugin.call(this, inputNodes, {\n    annotation: options.annotation\n  });\n  this.options = options;\n}\n\nMyPlugin.prototype.build = function() {\n  // Read files from this.inputPaths, and write files to this.outputPath.\n  // Silly example:\n\n  // Read 'foo.txt' from the third input node\n  var inputBuffer = fs.readFileSync(path.join(this.inputPaths[2], 'foo.txt'));\n  var outputBuffer = someCompiler(inputBuffer);\n  // Write to 'bar.txt' in this node's output\n  fs.writeFileSync(path.join(this.outputPath, 'bar.txt'), outputBuffer);\n};\n```\n\n## Reference\n\n### `new Plugin(inputNodes, options)`\n\nCall this base class constructor from your subclass constructor.\n\n* `inputNodes`: An array of node objects that this plugin will read from.\n  Nodes are usually other plugin instances; they were formerly known as\n  \"trees\".\n\n* `options`\n\n    * `name`: The name of this plugin class. Defaults to `this.constructor.name`.\n    * `annotation`: A descriptive annotation. Useful for debugging, to tell\n      multiple instances of the same plugin apart.\n    * `persistentOutput`: If true, the output directory is not automatically\n      emptied between builds.\n    * `needsCache` : If `true`, a cache directory is created automatically\n      and the path is set at `cachePath`. If `false`, a cache directory is not created\n      and `this.cachePath` is `undefined`. Defaults to `true`.\n\n### `Plugin.prototype.build()`\n\nOverride this method in your subclass. It will be called on each (re-)build.\n\nThis function will typically access the following read-only properties:\n\n* `this.inputPaths`: An array of paths on disk corresponding to each node in\n  `inputNodes`. Your plugin will read files from these paths.\n\n* `this.outputPath`: The path on disk corresponding to this plugin instance\n  (this node). Your plugin will write files to this path. This directory is\n  emptied by Broccoli before each build, unless the `persistentOutput` options\n  is true.\n\n* `this.cachePath`: The path on disk to an auxiliary cache directory. Use this\n  to store files that you want preserved between builds. This directory will\n  only be deleted when Broccoli exits. If a cache directory is not needed, set\n  `needsCache` to `false` when calling `broccoli-plugin` constructor.\n\nAll paths stay the same between builds.\n\nTo perform asynchronous work, return a promise. The promise's eventual value\nis ignored (typically `null`).\n\nTo report a compile error, `throw` it or return a rejected promise. Also see\nsection \"Error Objects\" below.\n\n### `Plugin.prototype.getCallbackObject()`\n\nAdvanced usage only.\n\nReturn the object on which Broccoli will call `obj.build()`. Called once after\ninstantiation. By default, returns `this`. Plugins do not usually need to\noverride this, but it can be useful for base classes that other plugins in turn\nderive from, such as\n[broccoli-caching-writer](https://github.com/ember-cli/broccoli-caching-writer).\n\nFor example, to intercept `.build()` calls, you might\n`return { build: this.buildWrapper.bind(this) }`.\nOr, to hand off the plugin implementation to a completely separate object:\n`return new MyPluginWorker(this.inputPaths, this.outputPath, this.cachePath)`,\nwhere `MyPluginWorker` provides a `.build` method.\n\n### Error Objects\n\nTo help with displaying clear error messages for build errors, error objects\nmay have the following optional properties in addition to the standard\n`message` property:\n\n* `file`: Path of the file in which the error occurred, relative to one of the\n  `inputPaths` directories\n* `treeDir`: The path that `file` is relative to. Must be an element of\n  `this.inputPaths`. (The name `treeDir` is for historical reasons.)\n* `line`: Line in which the error occurred (one-indexed)\n* `column`: Column in which the error occurred (zero-indexed)\n",
  "readmeFilename": "README.md",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/broccolijs/broccoli-plugin.git"
  },
  "scripts": {
    "pretest": "multidep test/multidep.json",
    "test": "mocha"
  },
  "version": "1.3.0"
}
