{
  "name": "highland",
  "version": "1.16.2",
  "description": "The high-level streams library",
  "main": "lib/index.js",
  "files": [
    "lib"
  ],
  "homepage": "http://highlandjs.org/",
  "bugs": {
    "url": "https://github.com/caolan/highland/issues"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/caolan/highland.git"
  },
  "licenses": {
    "type": "Apache 2.0",
    "url": "https://github.com/caolan/highland/raw/master/LICENSE"
  },
  "devDependencies": {
    "nodeunit": "~0.8.6",
    "stream-array": "~0.1.3",
    "concat-stream": "~1.4.1",
    "scrawl": "0.0.5",
    "handlebars": "~1.3.0",
    "grunt": "~0.4.2",
    "grunt-gh-pages": "~0.9.0",
    "grunt-contrib-jshint": "~0.8.0",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-contrib-nodeunit": "~0.3.0",
    "es6-promise": "~0.1.1",
    "browserify": "~3.30.1",
    "grunt-browserify": "~1.3.1",
    "nodeunit-tape": "~0.2.0",
    "sinon": "~1.8.2"
  },
  "scripts": {
    "test": "nodeunit test/test.js"
  },
  "testling": {
    "files": "test/testling.js",
    "browsers": [
      "ie/8..latest",
      "chrome/latest",
      "firefox/latest",
      "safari/latest",
      "opera/latest",
      "iphone/latest",
      "ipad/latest",
      "android-browser/latest"
    ]
  },
  "readme": "# Highland\n\nThe high-level streams library for Node.js and the browser.\nView the [Highland website](http://highlandjs.org) for more in-depth\ndocumentation.\n\n[![build status](https://secure.travis-ci.org/caolan/highland.png)](http://travis-ci.org/caolan/highland)\n\n## Introduction\n\nRe-thinking the [JavaScript](http://underscorejs.org)\n[utility](http://lodash.com) [belt](https://github.com/caolan/async),\nHighland manages synchronous and asynchronous code easily, using nothing more than\nstandard JavaScript and Node-like Streams.\nYou may be familiar with Promises, EventEmitters and callbacks, but moving\nbetween them is far from seamless. Thankfully, there exists a deeper abstraction\nwhich can free our code. By updating the tools we use on Arrays, and applying them\nto values distributed in time instead of space, we can discard plumbing and\nfocus on the important things. With Highland, you can switch between\nsynchronous and asynchronous data sources at will, without having to\nre-write your code. Time to dive in!\n\nMade by <a href=\"http://twitter.com/caolan\">@caolan</a>, with help and patience from friends - <a href=\"http://gittip.com/caolan\">Leave a tip</a> or <a href=\"https://github.com/caolan/highland\">fork this</a> :)\n\n## Examples\n\nConverting to/from Highland Streams\n\n```javascript\n_([1,2,3,4]).toArray(function (xs) {\n    // xs is [1,2,3,4]\n});\n```\n\nMapping over a Stream\n\n```javascript\nvar doubled = _([1,2,3,4]).map(function (x) {\n    return x * 2;\n});\n```\n\nReading files in parallel (4 at once)\n\n```javascript\nvar data = _(filenames).map(readFile).parallel(4);\n```\n\nHandling errors\n\n```javascript\ndata.errors(function (err, rethrow) {\n    // handle or rethrow error\n});\n```\n\nPiping to a Node Stream\n\n```javascript\ndata.pipe(output);\n```\n\nPiping in data from Node Streams\n\n```javascript\nvar output = fs.createWriteStream('output');\nvar docs = db.createReadStream();\n\n// wrap a node stream and pipe to file\n_(docs).filter(isBlogpost).pipe(output);\n\n// or, pipe in a node stream directly:\ndocs.pipe(_().filter(isBlogpost)).pipe(output);\n```\n\nHandling events\n\n```javascript\nvar clicks = _('click', btn).map(1);\nvar counter = clicks.scan(0, _.add);\n\ncounter.each(function (n) {\n    $('#count').text(n);\n});\n```\n\nLearn more at [highlandjs.org](http://highlandjs.org)\n",
  "readmeFilename": "README.md",
  "_id": "highland@1.16.2",
  "_from": "highland@~1.16.2"
}
