// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements.  See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

{
  "name": "tap",
  "description": "Tap, The Software as a Sensor portal and visualization component",
  "version": "0.2.0",
  "private": true,
  "license": "Apache-2.0",
  "author": "Draper",
  "contributors": [
    "Clay Gimenez <cgimenez@draper.com>",
    "Steven York <syork@draper.com>",
    "Fei Sun <fsun@draper.com>",
    "Joshua Poore <jpoore@draper.com>",
    "Laura Mariano <lmariano@draper.com>",
    "Michelle Beard <mbeard@draper.com>",
    "Arthi Vezhavendan <avezhavendan@draper.com>"
  ],
  "homepage": "https://senssoft.incubator.apache.org",
  "repository": {
    "type": "git",
    "url": "https://git-wip-us.apache.org/repos/asf/incubator-senssoft.tap.git"
  },
  "bugs": {
    "url": "https://issues.apache.org/jira/browse/SENSSOFT"
  },
  "keywords": [
    "Tap"
  ],
  "engines": {
    "node": "^6.9.1"
  },
  "dependencies": {
    "d3": "^4.1.1",
    "isomorphic-fetch": "^2.2.1",
    "react": "^15.2.0",
    "react-dom": "^15.2.0",
    "react-redux": "^4.4.5",
    "react-router": "^2.5.2",
    "redux": "^3.5.2",
    "semantic-ui": "^2.2.6"
  },
  "devDependencies": {
    "babel-core": "^6.10.4",
    "babel-preset-es2015": "^6.9.0",
    "babel-preset-react": "^6.11.1",
    "babelify": "^7.3.0",
    "browser-sync": "^2.13.0",
    "browserify": "^13.0.1",
    "chai": "^3.5.0",
    "del": "^2.2.1",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^3.1.0",
    "gulp-concat": "^2.6.0",
    "gulp-cssnano": "^2.1.2",
    "gulp-eslint": "^3.0.1",
    "gulp-load-plugins": "^1.2.4",
    "gulp-mocha": "^2.2.0",
    "gulp-newer": "^1.2.0",
    "gulp-sass": "^2.3.2",
    "gulp-size": "^2.1.0",
    "gulp-sourcemaps": "^1.6.0",
    "gulp-uglify": "^1.5.4",
    "gulp-util": "^3.0.7",
    "lodash.assign": "^4.0.9",
    "redux-logger": "^2.6.1",
    "require-dir": "^0.3.0",
    "run-sequence": "^1.2.2",
    "vinyl-buffer": "^1.0.0",
    "vinyl-source-stream": "^1.1.0",
    "watchify": "^3.7.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  }
}
